From 1a34209344bcfa0558442a2deee942d7e828ec0a Mon Sep 17 00:00:00 2001 From: Mostafa Moradian Date: Thu, 5 Jan 2023 14:24:39 +0100 Subject: [PATCH 1/3] Use an error channel for extracting errors from goroutines to avoid calling t.Fatal inside them Tweak server options (for gnet) Remove use of t.Helper Remove use of sync.WaitGroup Close the client connection at the end --- network/server_test.go | 63 ++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/network/server_test.go b/network/server_test.go index 353e7299..cd51a672 100644 --- a/network/server_test.go +++ b/network/server_test.go @@ -3,7 +3,7 @@ package network import ( "context" "encoding/base64" - "sync" + "errors" "testing" embeddedpostgres "github.com/fergusstrange/embedded-postgres" @@ -21,9 +21,11 @@ import ( // //nolint:funlen func TestRunServer(t *testing.T) { + errs := make(chan error) + postgres := embeddedpostgres.NewDatabase() if err := postgres.Start(); err != nil { - t.Fatal(err) + errs <- err } // Create a logger. @@ -45,7 +47,7 @@ func TestRunServer(t *testing.T) { ) (*structpb.Struct, error) { paramsMap := params.AsMap() if paramsMap["request"] == nil { - t.Fatal("request is nil") + errs <- errors.New("request is nil") } logger.Info().Msg("Ingress traffic") @@ -56,10 +58,10 @@ func TestRunServer(t *testing.T) { if request, err := base64.StdEncoding.DecodeString(req); err == nil { assert.Equal(t, CreatePgStartupPacket(), request) } else { - t.Fatal(err) + errs <- err } } else { - t.Fatal("request is not a []byte") + errs <- errors.New("request is not a []byte") } assert.Empty(t, paramsMap["error"]) return params, nil @@ -73,7 +75,7 @@ func TestRunServer(t *testing.T) { ) (*structpb.Struct, error) { paramsMap := params.AsMap() if paramsMap["response"] == nil { - t.Fatal("response is nil") + errs <- errors.New("response is nil") } logger.Info().Msg("Egress traffic") @@ -81,10 +83,10 @@ func TestRunServer(t *testing.T) { if response, err := base64.StdEncoding.DecodeString(resp); err == nil { assert.Equal(t, CreatePostgreSQLPacket('R', []byte{0x0, 0x0, 0x0, 0x3}), response) } else { - t.Fatal(err) + errs <- err } } else { - t.Fatal("response is not a []byte") + errs <- errors.New("response is not a []byte") } assert.Empty(t, paramsMap["error"]) return params, nil @@ -133,7 +135,9 @@ func TestRunServer(t *testing.T) { 0, DefaultTickInterval, []gnet.Option{ - gnet.WithMulticore(true), + gnet.WithMulticore(false), + gnet.WithReuseAddr(true), + gnet.WithReusePort(true), }, proxy, logger, @@ -141,26 +145,14 @@ func TestRunServer(t *testing.T) { ) assert.NotNil(t, server) - var waitGroup sync.WaitGroup - waitGroup.Add(2) - - go func(t *testing.T, waitGroup *sync.WaitGroup, server *Server) { - t.Helper() - defer waitGroup.Done() - - err := server.Run() - assert.Nil(t, err) - }(t, &waitGroup, server) - - go func(t *testing.T, - waitGroup *sync.WaitGroup, - server *Server, - logger zerolog.Logger, - postgres *embeddedpostgres.EmbeddedPostgres, - ) { - t.Helper() - defer waitGroup.Done() + go func(t *testing.T, server *Server, errs chan error) { + if err := server.Run(); err != nil { + errs <- err + } + close(errs) + }(t, server, errs) + go func(t *testing.T, server *Server, errs chan error) { for { if server.IsRunning() { client := NewClient( @@ -173,7 +165,6 @@ func TestRunServer(t *testing.T) { false, DefaultTCPKeepAlivePeriod, logger) - defer client.Close() assert.NotNil(t, client) sent, err := client.Send(CreatePgStartupPacket()) @@ -196,11 +187,17 @@ func TestRunServer(t *testing.T) { // Clean up. server.Shutdown() - assert.NoError(t, postgres.Stop()) - return + client.Close() + if pgErr := postgres.Stop(); pgErr != nil { + errs <- err + } } } - }(t, &waitGroup, server, logger, postgres) + }(t, server, errs) - waitGroup.Wait() + for err := range errs { + if err != nil { + t.Fatal(err) + } + } } From 063c42dc3e299192a17a59a35099eeaabc659564 Mon Sep 17 00:00:00 2001 From: Mostafa Moradian Date: Thu, 5 Jan 2023 14:30:09 +0100 Subject: [PATCH 2/3] Ignore and fix linter errors --- network/server_test.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/network/server_test.go b/network/server_test.go index cd51a672..54207283 100644 --- a/network/server_test.go +++ b/network/server_test.go @@ -47,7 +47,7 @@ func TestRunServer(t *testing.T) { ) (*structpb.Struct, error) { paramsMap := params.AsMap() if paramsMap["request"] == nil { - errs <- errors.New("request is nil") + errs <- errors.New("request is nil") //nolint:goerr113 } logger.Info().Msg("Ingress traffic") @@ -61,7 +61,7 @@ func TestRunServer(t *testing.T) { errs <- err } } else { - errs <- errors.New("request is not a []byte") + errs <- errors.New("request is not a []byte") //nolint:goerr113 } assert.Empty(t, paramsMap["error"]) return params, nil @@ -75,7 +75,7 @@ func TestRunServer(t *testing.T) { ) (*structpb.Struct, error) { paramsMap := params.AsMap() if paramsMap["response"] == nil { - errs <- errors.New("response is nil") + errs <- errors.New("response is nil") //nolint:goerr113 } logger.Info().Msg("Egress traffic") @@ -86,7 +86,7 @@ func TestRunServer(t *testing.T) { errs <- err } } else { - errs <- errors.New("response is not a []byte") + errs <- errors.New("response is not a []byte") //nolint:goerr113 } assert.Empty(t, paramsMap["error"]) return params, nil @@ -145,13 +145,14 @@ func TestRunServer(t *testing.T) { ) assert.NotNil(t, server) - go func(t *testing.T, server *Server, errs chan error) { + go func(server *Server, errs chan error) { if err := server.Run(); err != nil { errs <- err } close(errs) - }(t, server, errs) + }(server, errs) + //nolint:thelper go func(t *testing.T, server *Server, errs chan error) { for { if server.IsRunning() { From f37b7f400c7320186d4d6fe11203808ed45c95d8 Mon Sep 17 00:00:00 2001 From: Mostafa Moradian Date: Thu, 5 Jan 2023 14:36:09 +0100 Subject: [PATCH 3/3] Update test workflow to include full options for the plugin config file --- .github/workflows/test.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index caab21f4..c0a912b5 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -78,9 +78,16 @@ jobs: cd gatewayd-plugin-test && make build && cp gatewayd-plugin-test ../gdp-test && cd .. export SHA256SUM=$(sha256sum gdp-test | awk '{print $1}') cat < gatewayd_plugins.yaml + plugins: + verificationPolicy: "passdown" + compatibilityPolicy: "strict" gatewayd-plugin-test: enabled: True localPath: ./gdp-test + args: ["--log-level", "info"] + env: + - MAGIC_COOKIE_KEY=GATEWAYD_PLUGIN + - MAGIC_COOKIE_VALUE=5712b87aa5d7e9f9e9ab643e6603181c5b796015cb1c09d6f5ada882bf2a1872 checksum: ${SHA256SUM} EOF