github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/p2p/pubsub_test.go (about) 1 package p2p 2 3 import ( 4 "context" 5 "fmt" 6 "sync" 7 "testing" 8 "time" 9 10 "github.com/golang/snappy" 11 pubsubpb "github.com/libp2p/go-libp2p-pubsub/pb" 12 mock "github.com/prysmaticlabs/prysm/beacon-chain/blockchain/testing" 13 "github.com/prysmaticlabs/prysm/beacon-chain/p2p/encoder" 14 testp2p "github.com/prysmaticlabs/prysm/beacon-chain/p2p/testing" 15 "github.com/prysmaticlabs/prysm/shared/hashutil" 16 "github.com/prysmaticlabs/prysm/shared/params" 17 "github.com/prysmaticlabs/prysm/shared/testutil/assert" 18 "github.com/prysmaticlabs/prysm/shared/testutil/require" 19 ) 20 21 func TestService_PublishToTopicConcurrentMapWrite(t *testing.T) { 22 s, err := NewService(context.Background(), &Config{ 23 StateNotifier: &mock.MockStateNotifier{}, 24 }) 25 require.NoError(t, err) 26 ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) 27 defer cancel() 28 29 go s.awaitStateInitialized() 30 fd := initializeStateWithForkDigest(ctx, t, s.stateNotifier.StateFeed()) 31 32 if !s.isInitialized() { 33 t.Fatal("service was not initialized") 34 } 35 36 // Set up two connected test hosts. 37 p0 := testp2p.NewTestP2P(t) 38 p1 := testp2p.NewTestP2P(t) 39 p0.Connect(p1) 40 s.host = p0.BHost 41 s.pubsub = p0.PubSub() 42 43 topic := fmt.Sprintf(BlockSubnetTopicFormat, fd) + "/" + encoder.ProtocolSuffixSSZSnappy 44 45 // Establish the remote peer to be subscribed to the outgoing topic. 46 _, err = p1.SubscribeToTopic(topic) 47 require.NoError(t, err) 48 49 wg := sync.WaitGroup{} 50 wg.Add(10) 51 for i := 0; i < 10; i++ { 52 go func(i int) { 53 assert.NoError(t, s.PublishToTopic(ctx, topic, []byte{})) 54 wg.Done() 55 }(i) 56 } 57 wg.Wait() 58 } 59 60 func TestMessageIDFunction_HashesCorrectly(t *testing.T) { 61 invalidSnappy := [32]byte{'J', 'U', 'N', 'K'} 62 pMsg := &pubsubpb.Message{Data: invalidSnappy[:]} 63 hashedData := hashutil.Hash(append(params.BeaconNetworkConfig().MessageDomainInvalidSnappy[:], pMsg.Data...)) 64 msgID := string(hashedData[:20]) 65 assert.Equal(t, msgID, msgIDFunction(pMsg), "Got incorrect msg id") 66 67 validObj := [32]byte{'v', 'a', 'l', 'i', 'd'} 68 enc := snappy.Encode(nil, validObj[:]) 69 nMsg := &pubsubpb.Message{Data: enc} 70 hashedData = hashutil.Hash(append(params.BeaconNetworkConfig().MessageDomainValidSnappy[:], validObj[:]...)) 71 msgID = string(hashedData[:20]) 72 assert.Equal(t, msgID, msgIDFunction(nMsg), "Got incorrect msg id") 73 }