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  }