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  }