git.gammaspectra.live/P2Pool/consensus@v0.0.0-20240403173234-a039820b20c9/monero/client/zmq/zmq_test.go (about) 1 package zmq_test 2 3 import ( 4 "context" 5 "errors" 6 "git.gammaspectra.live/P2Pool/consensus/monero/client/zmq" 7 "os" 8 "testing" 9 "time" 10 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestJSONFromFrame(t *testing.T) { 16 t.Parallel() 17 18 for _, tc := range []struct { 19 name string 20 input []byte 21 expectedJSON []byte 22 expectedTopic zmq.Topic 23 err string 24 }{ 25 { 26 name: "nil", 27 input: nil, 28 err: "malformed", 29 }, 30 31 { 32 name: "empty", 33 input: []byte{}, 34 err: "malformed", 35 }, 36 37 { 38 name: "unknown-topic", 39 input: []byte(`foobar:[{"foo":"bar"}]`), 40 err: "unknown topic", 41 }, 42 43 { 44 name: "proper w/ known-topic", 45 input: []byte(`json-minimal-txpool_add:[{"foo":"bar"}]`), 46 expectedTopic: zmq.TopicMinimalTxPoolAdd, 47 expectedJSON: []byte(`[{"foo":"bar"}]`), 48 }, 49 } { 50 tc := tc 51 52 t.Run(tc.name, func(t *testing.T) { 53 t.Parallel() 54 55 aTopic, aJSON, err := zmq.JSONFromFrame(tc.input) 56 if tc.err != "" { 57 require.Error(t, err) 58 assert.Contains(t, err.Error(), tc.err) 59 return 60 } 61 62 assert.NoError(t, err) 63 assert.Equal(t, tc.expectedTopic, aTopic) 64 assert.Equal(t, tc.expectedJSON, aJSON) 65 }) 66 } 67 } 68 69 func TestClient(t *testing.T) { 70 client := zmq.NewClient(os.Getenv("MONEROD_ZMQ_URL"), zmq.TopicFullChainMain, zmq.TopicFullTxPoolAdd, zmq.TopicFullMinerData, zmq.TopicMinimalChainMain, zmq.TopicMinimalTxPoolAdd) 71 ctx, ctxFunc := context.WithTimeout(context.Background(), time.Second*10) 72 defer ctxFunc() 73 err := client.Listen(ctx, func(chainMain *zmq.FullChainMain) { 74 t.Log(chainMain) 75 }, func(txs []zmq.FullTxPoolAdd) { 76 t.Log(txs) 77 }, func(main *zmq.FullMinerData) { 78 t.Log(main) 79 }, func(chainMain *zmq.MinimalChainMain) { 80 t.Log(chainMain) 81 }, func(txs []zmq.TxMempoolData) { 82 83 t.Log(txs) 84 }) 85 if !errors.Is(err, context.DeadlineExceeded) { 86 t.Fatal(err) 87 } 88 }