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},