/ lib_tests / zmq4_test.go
zmq4_test.go
 1  package lib_tests
 2  
 3  import (
 4  	"context"
 5  	"log"
 6  	"testing"
 7  	"time"
 8  
 9  	"github.com/go-zeromq/zmq4"
10  )
11  
12  func zmq4Req() {
13  	logger := log.New(log.Writer(), "rrclient: ", log.LstdFlags)
14  
15  	req := zmq4.NewReq(context.Background())
16  	defer req.Close()
17  
18  	err := req.Dial("tcp://localhost:5559")
19  	if err != nil {
20  		logger.Fatalf("could not dial: %v", err)
21  	}
22  
23  	for i := 0; i < 10; i++ {
24  		err := req.Send(zmq4.NewMsgString("Hello"))
25  		if err != nil {
26  			logger.Fatalf("could not send greeting: %v", err)
27  		}
28  
29  		msg, err := req.Recv()
30  		if err != nil {
31  			logger.Fatalf("could not recv greeting: %v", err)
32  		}
33  		logger.Printf("received reply %d [%s]\n", i, msg.Frames[0])
34  	}
35  }
36  
37  func TestZMQ4Req(t *testing.T) {
38  	zmq4Req()
39  }
40  
41  func zmq4Rep() {
42  	logger := log.New(log.Writer(), "rrworker: ", log.LstdFlags)
43  
44  	//  Socket to talk to clients
45  	rep := zmq4.NewRep(context.Background())
46  	defer rep.Close()
47  
48  	err := rep.Listen("tcp://*:5559")
49  	if err != nil {
50  		logger.Fatalf("could not dial: %v", err)
51  	}
52  
53  	for {
54  		//  Wait for next request from client
55  		msg, err := rep.Recv()
56  		if err != nil {
57  			logger.Fatalf("could not recv request: %v", err)
58  		}
59  
60  		logger.Printf("received request: [%s]\n", msg.Frames[0])
61  
62  		//  Do some 'work'
63  		time.Sleep(time.Second)
64  
65  		//  Send reply back to client
66  		err = rep.Send(zmq4.NewMsgString("World"))
67  		if err != nil {
68  			logger.Fatalf("could not send reply: %v", err)
69  		}
70  	}
71  }
72  
73  func TestZMQ4Rep(t *testing.T) {
74  	zmq4Rep()
75  }
76  
77  func TestZMQ4ReqRep(t *testing.T){
78  	go zmq4Rep()
79  	go zmq4Req()
80  
81  	time.Sleep(15 * time.Second)
82  }