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  }