From c06eb0d331ba025964bee3cda7e2ca4493708a14 Mon Sep 17 00:00:00 2001 From: RMT Date: Sun, 15 Mar 2026 20:32:21 +0800 Subject: [PATCH] WIP --- .gitignore | 2 +- tests/e2e/main_test.go | 20 ++++++++++++- tests/e2e/parallel_selector_test.go | 13 ++------ .../testdata/parallel_selector/server.yaml | 30 +++++++++++++++++++ tests/e2e/utils.go | 2 ++ 5 files changed, 54 insertions(+), 13 deletions(-) create mode 100644 tests/e2e/testdata/parallel_selector/server.yaml diff --git a/.gitignore b/.gitignore index 6a20101..f11dfe4 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,6 @@ cmd/gost/gost snap *.pem -*.yaml +/*.yaml *.txt dist/ diff --git a/tests/e2e/main_test.go b/tests/e2e/main_test.go index d3d2205..6c6a897 100644 --- a/tests/e2e/main_test.go +++ b/tests/e2e/main_test.go @@ -1,13 +1,20 @@ package e2e import ( + "context" "fmt" "os" "os/exec" "testing" + + "github.com/testcontainers/testcontainers-go/network" ) +var SharedNetworkName string + func TestMain(m *testing.M) { + ctx := context.Background() + // Compile the gost binary cmd := exec.Command("go", "build", "-o", "/tmp/gost-test-bin", "../../cmd/gost") cmd.Env = append(os.Environ(), "CGO_ENABLED=0") @@ -17,12 +24,23 @@ func TestMain(m *testing.M) { fmt.Printf("Failed to compile gost: %v\n", err) os.Exit(1) } + defer func() { + os.Remove("/tmp/gost-test-bin") + }() + + // Create a shared Docker network + net, err := network.New(ctx) + if err != nil { + fmt.Printf("Failed to create network: %v\n", err) + os.Exit(1) + } + SharedNetworkName = net.Name // Run tests code := m.Run() // Cleanup - os.Remove("/tmp/gost-test-bin") + net.Remove(ctx) os.Exit(code) } diff --git a/tests/e2e/parallel_selector_test.go b/tests/e2e/parallel_selector_test.go index acbb2bc..52c4ebd 100644 --- a/tests/e2e/parallel_selector_test.go +++ b/tests/e2e/parallel_selector_test.go @@ -8,13 +8,11 @@ import ( "github.com/stretchr/testify/suite" "github.com/testcontainers/testcontainers-go" - "github.com/testcontainers/testcontainers-go/network" ) type ParallelSelectorSuite struct { suite.Suite ctx context.Context - net *testcontainers.DockerNetwork echoC testcontainers.Container echoIP string } @@ -22,11 +20,7 @@ type ParallelSelectorSuite struct { func (s *ParallelSelectorSuite) SetupSuite() { s.ctx = context.Background() - net, err := network.New(s.ctx) - s.Require().NoError(err) - s.net = net - - echoC, err := RunEchoContainer(s.ctx, s.net.Name) + echoC, err := RunEchoContainer(s.ctx, SharedNetworkName) s.Require().NoError(err) s.echoC = echoC @@ -39,13 +33,10 @@ func (s *ParallelSelectorSuite) TearDownSuite() { if s.echoC != nil { s.echoC.Terminate(s.ctx) } - if s.net != nil { - s.net.Remove(s.ctx) - } } func (s *ParallelSelectorSuite) TestParallelSelector() { - gostC, err := RunGostContainer(s.ctx, s.net.Name, "testdata/parallel_selector/server.yaml") + gostC, err := RunGostContainer(s.ctx, SharedNetworkName, "testdata/parallel_selector/server.yaml") s.Require().NoError(err) defer gostC.Terminate(s.ctx) diff --git a/tests/e2e/testdata/parallel_selector/server.yaml b/tests/e2e/testdata/parallel_selector/server.yaml new file mode 100644 index 0000000..cbe45fe --- /dev/null +++ b/tests/e2e/testdata/parallel_selector/server.yaml @@ -0,0 +1,30 @@ +services: +- name: proxy + addr: :8080 + handler: + type: http + chain: my-chain + listener: + type: tcp + +- name: dummy-1 + addr: :18081 + handler: + type: http + +chains: +- name: my-chain + hops: + - name: hop-1 + selector: + strategy: parallel + nodes: + - name: node-1 + addr: 127.0.0.1:18081 + connector: + type: http + # non existed node + - name: node-2 + addr: 127.0.0.1:18082 + connector: + type: http diff --git a/tests/e2e/utils.go b/tests/e2e/utils.go index 4eb7ead..de6756a 100644 --- a/tests/e2e/utils.go +++ b/tests/e2e/utils.go @@ -26,6 +26,8 @@ func RunGostContainer(ctx context.Context, networkName, yamlPath string) (testco FromDockerfile: testcontainers.FromDockerfile{ Context: ".", Dockerfile: "Dockerfile", + Repo: "gost-e2e", + Tag: "latest", KeepImage: true, }, Networks: []string{networkName},