diff --git a/testlibs/src/testing-wrappers.go b/testlibs/src/testing-wrappers.go new file mode 100644 index 0000000..3eb988b --- /dev/null +++ b/testlibs/src/testing-wrappers.go @@ -0,0 +1,42 @@ +package testlibs + +import ( + "github.com/waku-org/waku-go-bindings/waku" + + "go.uber.org/zap" +) + +func Wrappers_CreateWakuNode(customConfig *waku.WakuConfig, logger *zap.Logger) (*waku.WakuNode, error) { + + config := *DefaultWakuConfig + config.Discv5UdpPort = GenerateUniquePort() + config.TcpPort = GenerateUniquePort() + + if customConfig != nil { + if customConfig.Relay { + config.Relay = customConfig.Relay + } + if customConfig.LogLevel != "" { + config.LogLevel = customConfig.LogLevel + } + if customConfig.Discv5Discovery { + config.Discv5Discovery = customConfig.Discv5Discovery + } + if customConfig.ClusterID != 0 { + config.ClusterID = customConfig.ClusterID + } + if len(customConfig.Shards) > 0 { + config.Shards = customConfig.Shards + } + if customConfig.PeerExchange { + config.PeerExchange = customConfig.PeerExchange + } + } + + node, err := waku.NewWakuNode(&config, logger) + if err != nil { + return nil, err + } + + return node, nil +} diff --git a/testlibs/src/utils.go b/testlibs/src/utils.go new file mode 100644 index 0000000..195783a --- /dev/null +++ b/testlibs/src/utils.go @@ -0,0 +1,42 @@ +package testlibs + +import ( + "math/rand" + "sync" + "time" + + "github.com/waku-org/waku-go-bindings/waku" +) + +var ( + MinPort = 1024 // Minimum allowable port (exported) + MaxPort = 65535 // Maximum allowable port (exported) + usedPorts = make(map[int]bool) // Tracks used ports (internal to package) + portsMutex sync.Mutex // Ensures thread-safe access to usedPorts +) + +// Default configuration values +var DefaultWakuConfig = &waku.WakuConfig{ + Relay: false, + LogLevel: "DEBUG", + Discv5Discovery: true, + ClusterID: 16, + Shards: []uint16{64}, + PeerExchange: false, +} + +func GenerateUniquePort() int { + rng := rand.New(rand.NewSource(time.Now().UnixNano())) // Local RNG instance + + for { + port := rng.Intn(MaxPort-MinPort+1) + MinPort + + portsMutex.Lock() + if !usedPorts[port] { + usedPorts[port] = true + portsMutex.Unlock() + return port + } + portsMutex.Unlock() + } +} diff --git a/testlibs/waku-go-tests/Nodes_basic_test.go b/testlibs/waku-go-tests/Nodes_basic_test.go new file mode 100644 index 0000000..43e232d --- /dev/null +++ b/testlibs/waku-go-tests/Nodes_basic_test.go @@ -0,0 +1,32 @@ +package waku_go_tests + +import ( + "testing" + + testlibs "github.com/waku-org/waku-go-bindings/testlibs/src" + "go.uber.org/zap" +) + +func TestCreateTwoWakuNodes(t *testing.T) { + logger, _ := zap.NewDevelopment() + + node1, err := testlibs.Wrappers_CreateWakuNode(nil, logger) + if err != nil { + t.Fatalf("Failed to create node1: %v", err) + } + + node2, err := testlibs.Wrappers_CreateWakuNode(nil, logger) + if err != nil { + t.Fatalf("Failed to create node2: %v", err) + } + + if err := node1.Start(); err != nil { + t.Fatalf("Failed to start node1: %v", err) + } + if err := node2.Start(); err != nil { + t.Fatalf("Failed to start node2: %v", err) + } + + node1.Stop() + node2.Stop() +}