github.com/angenalZZZ/gofunc@v0.0.0-20210507121333-48ff1be3917b/rpc/nats/subscribers_test.go (about) 1 package nats_test 2 3 import ( 4 "context" 5 "sync/atomic" 6 "testing" 7 "time" 8 9 "github.com/angenalZZZ/gofunc/f" 10 nat "github.com/angenalZZZ/gofunc/rpc/nats" 11 "github.com/nats-io/nats.go" 12 ) 13 14 func TestSubscribers(t *testing.T) { 15 // New Client Connect. 16 nat.Conn, err = nat.New("nats.go", "", "", "HGJ766GR767FKJU0", "", "") 17 if err != nil { 18 t.Fatalf("[nats] failed to connect: %s\n", err.Error()) 19 } 20 21 ctx, wait := f.ContextWithWait(context.Background()) 22 var num int32 23 24 // Create subscriber list for Client Connect. 25 subjList := []string{"TestSubscriber-1", "TestSubscriber-2", "TestSubscriber-3"} 26 subjHand := func(msg *nats.Msg) { 27 if msg.Data[0] != '{' { 28 t.Logf("[nats] received test message on %q: %s", msg.Subject, string(msg.Data)) 29 } 30 if i := atomic.AddInt32(&num, 1); i == 3 { 31 f.DoneContext(ctx) 32 } 33 } 34 handList := make([]nats.MsgHandler, 3) 35 for i, _ := range subjList { 36 handList[i] = subjHand 37 } 38 sub := nat.NewSubscribers(nat.Conn, subjList, handList) 39 40 // Ping a message. 41 go func() { 42 time.Sleep(time.Millisecond) 43 for _, s := range subjList { 44 err = nat.Conn.Publish(s, []byte("ping")) 45 if err != nil { 46 t.Fatalf("[nats] failed publishing a %q message > %s", s, err.Error()) 47 } else { 48 t.Logf("[nats] successful publishing a %q message", s) 49 } 50 } 51 }() 52 53 sub.Run(wait) 54 }