/ lib_tests / zyre_test.go
zyre_test.go
 1  package lib_tests
 2  
 3  import (
 4  	"context"
 5  	"sync"
 6  	"testing"
 7  	"time"
 8  
 9  	"github.com/davecgh/go-spew/spew"
10  	"github.com/go-zeromq/zyre"
11  )
12  
13  func TestZyre(t *testing.T) {
14  	z1, cncl1 := makeNode()
15  	defer cncl1()
16  
17  	z2, cncl2 := makeNode()
18  	defer cncl2()
19  
20  	z1.SetVerbose()
21  	z2.SetVerbose()
22  
23  	err := z1.Start()
24  	if err != nil {
25  		spew.Dump(err)
26  	}
27  
28  	defer z1.Stop()
29  
30  	err = z2.Start()
31  	if err != nil {
32  		spew.Dump(err)
33  	}
34  
35  	defer z2.Stop()
36  
37  	wg := new(sync.WaitGroup)
38  	//wg.Add(1)
39  	go watchEvents(t, wg, z1)
40  	//wg.Add(1)
41  	go watchEvents(t, wg, z2)
42  
43  	z1.Join("TALK")
44  	z2.Join("TALK")
45  
46  	time.Sleep(time.Second)
47  	z1.Shout("TALK", []byte("I am here"))
48  	time.Sleep(time.Second)
49  	z1.Shout("TALK", []byte("Hi world"))
50  
51  	//wg.Wait()
52  	time.Sleep(5 * time.Second)
53  
54  	spew.Dump(z1.Peers(), z2.Peers())
55  }
56  
57  func makeNode() (*zyre.Zyre, context.CancelFunc) {
58  	ctx, cncl := context.WithCancel(context.Background())
59  	z := zyre.NewZyre(ctx)
60  
61  	return z, cncl
62  }
63  
64  func watchEvents(t *testing.T, wg *sync.WaitGroup, z *zyre.Zyre) {
65  	select {
66  	case e := <- z.Events():
67  		t.Log(spew.Sdump(e))
68  		if string(e.Msg) == "Hi world" {
69  			//wg.Done()
70  			return
71  		}
72  	}
73  }