github.com/status-im/status-go@v1.1.0/protocol/waku_builder_test.go (about) 1 package protocol 2 3 import ( 4 "crypto/ecdsa" 5 "database/sql" 6 7 "github.com/stretchr/testify/suite" 8 "go.uber.org/zap" 9 10 "github.com/ethereum/go-ethereum/crypto" 11 12 "github.com/status-im/status-go/appdatabase" 13 gethbridge "github.com/status-im/status-go/eth-node/bridge/geth" 14 "github.com/status-im/status-go/eth-node/types" 15 "github.com/status-im/status-go/protocol/common/shard" 16 "github.com/status-im/status-go/t/helpers" 17 waku2 "github.com/status-im/status-go/wakuv2" 18 ) 19 20 type testWakuV2Config struct { 21 logger *zap.Logger 22 enableStore bool 23 clusterID uint16 24 nodekey []byte 25 } 26 27 func NewTestWakuV2(s *suite.Suite, cfg testWakuV2Config) *waku2.Waku { 28 wakuConfig := &waku2.Config{ 29 ClusterID: cfg.clusterID, 30 LightClient: false, 31 EnablePeerExchangeServer: true, 32 EnablePeerExchangeClient: false, 33 EnableDiscV5: false, 34 } 35 36 var nodeKey *ecdsa.PrivateKey 37 if len(cfg.nodekey) != 0 { 38 nodeKey, _ = crypto.ToECDSA(cfg.nodekey) 39 } 40 41 var db *sql.DB 42 db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{}) 43 s.Require().NoError(err) 44 45 if cfg.enableStore { 46 wakuConfig.EnableStore = true 47 wakuConfig.StoreCapacity = 200 48 wakuConfig.StoreSeconds = 200 49 } 50 51 wakuNode, err := waku2.New( 52 nodeKey, 53 "", 54 wakuConfig, 55 cfg.logger, 56 db, 57 nil, 58 nil, 59 nil) 60 61 s.Require().NoError(err) 62 63 err = wakuNode.Start() 64 if cfg.enableStore { 65 err := wakuNode.SubscribeToPubsubTopic(shard.DefaultNonProtectedPubsubTopic(), nil) 66 s.Require().NoError(err) 67 } 68 s.Require().NoError(err) 69 70 return wakuNode 71 } 72 73 func CreateWakuV2Network(s *suite.Suite, parentLogger *zap.Logger, nodeNames []string) []types.Waku { 74 nodes := make([]*waku2.Waku, len(nodeNames)) 75 wrappers := make([]types.Waku, len(nodes)) 76 77 for i, name := range nodeNames { 78 nodes[i] = NewTestWakuV2(s, testWakuV2Config{ 79 logger: parentLogger.Named("waku-" + name), 80 enableStore: false, 81 clusterID: shard.MainStatusShardCluster, 82 }) 83 } 84 85 // Setup local network graph 86 for i := 0; i < len(nodes); i++ { 87 for j := 0; j < len(nodes); j++ { 88 if i == j { 89 continue 90 } 91 92 addrs := nodes[j].ListenAddresses() 93 s.Require().Greater(len(addrs), 0) 94 _, err := nodes[i].AddRelayPeer(addrs[0]) 95 s.Require().NoError(err) 96 err = nodes[i].DialPeer(addrs[0]) 97 s.Require().NoError(err) 98 } 99 } 100 for i, n := range nodes { 101 wrappers[i] = gethbridge.NewGethWakuV2Wrapper(n) 102 } 103 return wrappers 104 }