diff --git a/testlibs/src/testing-wrappers.go b/testlibs/src/testing-wrappers.go index 3eb988b..8f91078 100644 --- a/testlibs/src/testing-wrappers.go +++ b/testlibs/src/testing-wrappers.go @@ -1,42 +1,92 @@ package testlibs import ( + "errors" + utilities "github.com/waku-org/waku-go-bindings/testlibs/utilities" "github.com/waku-org/waku-go-bindings/waku" - "go.uber.org/zap" ) -func Wrappers_CreateWakuNode(customConfig *waku.WakuConfig, logger *zap.Logger) (*waku.WakuNode, error) { +type WakuNodeWrapper struct { + *waku.WakuNode +} - config := *DefaultWakuConfig - config.Discv5UdpPort = GenerateUniquePort() - config.TcpPort = GenerateUniquePort() +func Wrappers_CreateWakuNode(customCfg *waku.WakuConfig, logger *zap.Logger) (*waku.WakuNode, error) { - 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 - } + var nodeCfg waku.WakuConfig + + + if customCfg == nil { + nodeCfg = *utilities.DefaultWakuConfig + } else { + nodeCfg = *customCfg } - node, err := waku.NewWakuNode(&config, logger) + nodeCfg.Discv5UdpPort = utilities.GenerateUniquePort() + nodeCfg.TcpPort = utilities.GenerateUniquePort() + + utilities.Debug("Create node with default config") + node, err := waku.NewWakuNode(&nodeCfg, logger) if err != nil { + utilities.Error("Can't create node") return nil, err } return node, nil } + +func (node *WakuNodeWrapper) Wrappers_Start() error { + if node== nil || node.WakuNode == nil { + err := errors.New("WakuNode instance is nil") + utilities.Error("Failed to start WakuNode", zap.Error(err)) + return err + } + + utilities.Debug("Attempting to start WakuNode") + err := node.WakuNode.Start() + if err != nil { + utilities.Error("Failed to start WakuNode", zap.Error(err)) + return err + } + + utilities.Debug("Successfully started WakuNode") + return nil +} + +// Stops the WakuNode instance. +func (node*WakuNodeWrapper) Wrappers_Stop() error { + if node== nil || node.WakuNode == nil { + err := errors.New("WakuNode instance is nil") + utilities.Error("Failed to stop WakuNode", zap.Error(err)) + return err + } + + utilities.Debug("Attempting to stop WakuNode") + err := node.WakuNode.Stop() + if err != nil { + utilities.Error("Failed to stop WakuNode", zap.Error(err)) + return err + } + + utilities.Debug("Successfully stopped WakuNode") + return nil +} + +// Destroys the WakuNode instance. +func (node*WakuNodeWrapper) Wrappers_Destroy() error { + if node== nil || node.WakuNode == nil { + err := errors.New("WakuNode instance is nil") + utilities.Error("Failed to destroy WakuNode", zap.Error(err)) + return err + } + + utilities.Debug("Attempting to destroy WakuNode") + err := node.WakuNode.Destroy() + if err != nil { + utilities.Error("Failed to destroy WakuNode", zap.Error(err)) + return err + } + + utilities.Debug("Successfully destroyed WakuNode") + return nil +} diff --git a/testlibs/utilities/logging.go b/testlibs/utilities/logging.go new file mode 100644 index 0000000..8d47dcf --- /dev/null +++ b/testlibs/utilities/logging.go @@ -0,0 +1,48 @@ +package utilities + +import ( + "go.uber.org/zap" + +) + +var devLogger *zap.Logger + +func init() { + var err error + devLogger, err = zap.NewDevelopment() + if err != nil { + panic("Failed to create development logger: " + err.Error()) + } +} + +func Debug(msg string, fields ...zap.Field) { + devLogger.Debug(msg, fields...) +} + +func Info(msg string, fields ...zap.Field) { + devLogger.Info(msg, fields...) +} + +func Warn(msg string, fields ...zap.Field) { + devLogger.Warn(msg, fields...) +} + +func Error(msg string, fields ...zap.Field) { + devLogger.Error(msg, fields...) +} + +func DPanic(msg string, fields ...zap.Field) { + devLogger.DPanic(msg, fields...) +} + +func Panic(msg string, fields ...zap.Field) { + devLogger.Panic(msg, fields...) +} + +func Fatal(msg string, fields ...zap.Field) { + devLogger.Fatal(msg, fields...) +} + +func Sync() { + _ = devLogger.Sync() +} diff --git a/testlibs/src/utils.go b/testlibs/utilities/utils.go similarity index 81% rename from testlibs/src/utils.go rename to testlibs/utilities/utils.go index 195783a..4a1c62f 100644 --- a/testlibs/src/utils.go +++ b/testlibs/utilities/utils.go @@ -1,4 +1,4 @@ -package testlibs +package utilities import ( "math/rand" @@ -23,8 +23,14 @@ var DefaultWakuConfig = &waku.WakuConfig{ ClusterID: 16, Shards: []uint16{64}, PeerExchange: false, + Store: false, + Filter: false, + Lightpush: false, } +// WakuConfigOption is a function that applies a change to a WakuConfig. +type WakuConfigOption func(*waku.WakuConfig) + func GenerateUniquePort() int { rng := rand.New(rand.NewSource(time.Now().UnixNano())) // Local RNG instance diff --git a/testlibs/waku-go-tests/Nodes_basic_test.go b/testlibs/waku-go-tests/Nodes_basic_test.go index 43e232d..4879ef4 100644 --- a/testlibs/waku-go-tests/Nodes_basic_test.go +++ b/testlibs/waku-go-tests/Nodes_basic_test.go @@ -2,31 +2,63 @@ package waku_go_tests import ( "testing" - + utilities "github.com/waku-org/waku-go-bindings/testlibs/utilities" testlibs "github.com/waku-org/waku-go-bindings/testlibs/src" "go.uber.org/zap" + "github.com/stretchr/testify/require" ) -func TestCreateTwoWakuNodes(t *testing.T) { - logger, _ := zap.NewDevelopment() +func TestBasicWakuNodes(t *testing.T) { + + utilities.Debug("Create logger isntance") + logger, err := zap.NewDevelopment() + defaultConfig := *utilities.DefaultWakuConfig - node1, err := testlibs.Wrappers_CreateWakuNode(nil, logger) - if err != nil { - t.Fatalf("Failed to create node1: %v", err) - } + + utilities.Debug("Creating the first WakuNodeWrapper") + node1, err := testlibs.Wrappers_CreateWakuNode(&defaultConfig, logger) + require.NoError(t, err, "Failed to create the first WakuNodeWrapper") + utilities.Debug("Successfully created the first WakuNodeWrapper") - 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) - } + utilities.Debug("Creating the second WakuNodeWrapper") + node2, err := testlibs.Wrappers_CreateWakuNode(&defaultConfig, logger) + require.NoError(t, err, "Failed to create the second WakuNodeWrapper") + utilities.Debug("Successfully created the second WakuNodeWrapper") - node1.Stop() - node2.Stop() + + utilities.Debug("Starting the first WakuNodeWrapper") + err = + require.NoError(t, err, "Failed to start the first WakuNodeWrapper") + utilities.Debug("Successfully started the first WakuNodeWrapper") + + + utilities.Debug("Starting the second WakuNodeWrapper") + err = node2.Wrappers_Start() + require.NoError(t, err, "Failed to start the second WakuNodeWrapper") + utilities.Debug("Successfully started the second WakuNodeWrapper") + + + utilities.Debug("Stopping the first WakuNodeWrapper") + err = node1.Wrappers_Stop() + require.NoError(t, err, "Failed to stop the first WakuNodeWrapper") + utilities.Debug("Successfully stopped the first WakuNodeWrapper") + + + utilities.Debug("Stopping the second WakuNodeWrapper") + err = node2.Wrappers_Stop() + require.NoError(t, err, "Failed to stop the second WakuNodeWrapper") + utilities.Debug("Successfully stopped the second WakuNodeWrapper") + + + utilities.Debug("Destroying the first WakuNodeWrapper") + err = node1.Wrappers_Destroy() + require.NoError(t, err, "Failed to destroy the first WakuNodeWrapper") + utilities.Debug("Successfully destroyed the first WakuNodeWrapper") + + + utilities.Debug("Destroying the second WakuNodeWrapper") + err = node2.Wrappers_Destroy() + require.NoError(t, err, "Failed to destroy the second WakuNodeWrapper") + utilities.Debug("Successfully destroyed the second WakuNodeWrapper") }