From a6113066ff97e8a83bdbfdf01d5891b05aee02a7 Mon Sep 17 00:00:00 2001 From: Juan Font Alonso Date: Fri, 5 Aug 2022 17:35:28 +0200 Subject: [PATCH 1/9] Improved logs in integration tests --- integration_cli_test.go | 9 +++++---- integration_embedded_derp_test.go | 11 ++++++----- integration_test.go | 13 +++++++------ 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/integration_cli_test.go b/integration_cli_test.go index 2f58e71d..2149cbfe 100644 --- a/integration_cli_test.go +++ b/integration_cli_test.go @@ -73,21 +73,22 @@ func (s *IntegrationCLITestSuite) SetupTest() { s.FailNow(fmt.Sprintf("Could not remove existing container before building test: %s", err), "") } - fmt.Println("Creating headscale container") + fmt.Println("Creating headscale container for CLI tests") if pheadscale, err := s.pool.BuildAndRunWithBuildOptions(headscaleBuildOptions, headscaleOptions, DockerRestartPolicy); err == nil { s.headscale = *pheadscale } else { s.FailNow(fmt.Sprintf("Could not start headscale container: %s", err), "") } - fmt.Println("Created headscale container") + fmt.Println("Created headscale container for CLI tests") - fmt.Println("Waiting for headscale to be ready") + fmt.Println("Waiting for headscale to be ready for CLI tests") hostEndpoint := fmt.Sprintf("localhost:%s", s.headscale.GetPort("8080/tcp")) if err := s.pool.Retry(func() error { url := fmt.Sprintf("http://%s/health", hostEndpoint) resp, err := http.Get(url) if err != nil { + fmt.Printf("headscale for CLI test is not ready: %s\n", err) return err } if resp.StatusCode != http.StatusOK { @@ -102,7 +103,7 @@ func (s *IntegrationCLITestSuite) SetupTest() { // https://github.com/stretchr/testify/issues/849 return // fmt.Errorf("Could not connect to headscale: %s", err) } - fmt.Println("headscale container is ready") + fmt.Println("headscale container is ready for CLI tests") } func (s *IntegrationCLITestSuite) TearDownTest() { diff --git a/integration_embedded_derp_test.go b/integration_embedded_derp_test.go index ecca8ba5..3f694433 100644 --- a/integration_embedded_derp_test.go +++ b/integration_embedded_derp_test.go @@ -134,15 +134,15 @@ func (s *IntegrationDERPTestSuite) SetupSuite() { s.FailNow(fmt.Sprintf("Could not remove existing container before building test: %s", err), "") } - log.Println("Creating headscale container") + log.Println("Creating headscale container for DERP integration tests") if pheadscale, err := s.pool.BuildAndRunWithBuildOptions(headscaleBuildOptions, headscaleOptions, DockerRestartPolicy); err == nil { s.headscale = *pheadscale } else { s.FailNow(fmt.Sprintf("Could not start headscale container: %s", err), "") } - log.Println("Created headscale container to test DERP") + log.Println("Created headscale container for embedded DERP tests") - log.Println("Creating tailscale containers") + log.Println("Creating tailscale containers for embedded DERP tests") for i := 0; i < totalContainers; i++ { version := tailscaleVersions[i%len(tailscaleVersions)] @@ -154,7 +154,7 @@ func (s *IntegrationDERPTestSuite) SetupSuite() { s.tailscales[hostname] = *container } - log.Println("Waiting for headscale to be ready") + log.Println("Waiting for headscale to be ready for embedded DERP tests") hostEndpoint := fmt.Sprintf("localhost:%s", s.headscale.GetPort("8443/tcp")) if err := s.pool.Retry(func() error { @@ -164,6 +164,7 @@ func (s *IntegrationDERPTestSuite) SetupSuite() { client := &http.Client{Transport: insecureTransport} resp, err := client.Get(url) if err != nil { + fmt.Printf("headscale for embedded DERP tests is not ready: %s\n", err) return err } @@ -179,7 +180,7 @@ func (s *IntegrationDERPTestSuite) SetupSuite() { // https://github.com/stretchr/testify/issues/849 return // fmt.Errorf("Could not connect to headscale: %s", err) } - log.Println("headscale container is ready") + log.Println("headscale container is ready for embedded DERP tests") log.Printf("Creating headscale namespace: %s\n", namespaceName) result, err := ExecuteCommand( diff --git a/integration_test.go b/integration_test.go index 2214b893..54f61e1c 100644 --- a/integration_test.go +++ b/integration_test.go @@ -251,15 +251,15 @@ func (s *IntegrationTestSuite) SetupSuite() { s.FailNow(fmt.Sprintf("Could not remove existing container before building test: %s", err), "") } - log.Println("Creating headscale container") + log.Println("Creating headscale container for core integration tests") if pheadscale, err := s.pool.BuildAndRunWithBuildOptions(headscaleBuildOptions, headscaleOptions, DockerRestartPolicy); err == nil { s.headscale = *pheadscale } else { - s.FailNow(fmt.Sprintf("Could not start headscale container: %s", err), "") + s.FailNow(fmt.Sprintf("Could not start headscale container for core integration tests: %s", err), "") } - log.Println("Created headscale container") + log.Println("Created headscale container for core integration tests") - log.Println("Creating tailscale containers") + log.Println("Creating tailscale containers for core integration tests") for namespace, scales := range s.namespaces { for i := 0; i < scales.count; i++ { version := tailscaleVersions[i%len(tailscaleVersions)] @@ -273,7 +273,7 @@ func (s *IntegrationTestSuite) SetupSuite() { } } - log.Println("Waiting for headscale to be ready") + log.Println("Waiting for headscale to be ready for core integration tests") hostEndpoint := fmt.Sprintf("localhost:%s", s.headscale.GetPort("8080/tcp")) if err := s.pool.Retry(func() error { @@ -281,6 +281,7 @@ func (s *IntegrationTestSuite) SetupSuite() { resp, err := http.Get(url) if err != nil { + fmt.Printf("headscale for core integration test is not ready: %s\n", err) return err } @@ -296,7 +297,7 @@ func (s *IntegrationTestSuite) SetupSuite() { // https://github.com/stretchr/testify/issues/849 return // fmt.Errorf("Could not connect to headscale: %s", err) } - log.Println("headscale container is ready") + log.Println("headscale container is ready for core integration tests") for namespace, scales := range s.namespaces { log.Printf("Creating headscale namespace: %s\n", namespace) From 21ae31e77d8ab24adc4bd9521bbc113d23cee9f7 Mon Sep 17 00:00:00 2001 From: Juan Font Alonso Date: Fri, 5 Aug 2022 18:57:08 +0200 Subject: [PATCH 2/9] Reduce number of containers in integration tests (for testing) --- integration_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_test.go b/integration_test.go index 54f61e1c..dca015d0 100644 --- a/integration_test.go +++ b/integration_test.go @@ -53,7 +53,7 @@ func TestIntegrationTestSuite(t *testing.T) { s.namespaces = map[string]TestNamespace{ "thisspace": { - count: 10, + count: 5, tailscales: make(map[string]dockertest.Resource), }, "otherspace": { From 0a29492fc5834b515ef876b0f5e0cc43e09357c8 Mon Sep 17 00:00:00 2001 From: Juan Font Alonso Date: Mon, 8 Aug 2022 23:20:29 +0200 Subject: [PATCH 3/9] Increase swap size in integration tests --- .github/workflows/test-integration.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index 70b36b1c..5ffe390f 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -11,6 +11,11 @@ jobs: with: fetch-depth: 2 + - name: Set Swap Space + uses: pierotofy/set-swap-space@master + with: + swap-size-gb: 10 + - name: Get changed files id: changed-files uses: tj-actions/changed-files@v14.1 From e7148b8080060d7bee020e829194f54a7ec84a8d Mon Sep 17 00:00:00 2001 From: Juan Font Alonso Date: Tue, 9 Aug 2022 09:58:45 +0200 Subject: [PATCH 4/9] Temporarily disable unstable branch --- integration_common_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_common_test.go b/integration_common_test.go index 4ee2d3b3..db2aa17a 100644 --- a/integration_common_test.go +++ b/integration_common_test.go @@ -31,7 +31,7 @@ var ( tailscaleVersions = []string{ "head", - "unstable", + // "unstable", "1.26.0", "1.24.2", "1.22.2", From f8986132d4bb24b716a3c673ce9b1a25da0cfaeb Mon Sep 17 00:00:00 2001 From: Juan Font Alonso Date: Tue, 9 Aug 2022 12:26:12 +0200 Subject: [PATCH 5/9] Use tags to split the integration tests --- integration_cli_test.go | 3 +-- integration_common_test.go | 2 +- integration_embedded_derp_test.go | 7 +++---- integration_test.go => integration_general_test.go | 3 +-- 4 files changed, 6 insertions(+), 9 deletions(-) rename integration_test.go => integration_general_test.go (99%) diff --git a/integration_cli_test.go b/integration_cli_test.go index 2149cbfe..bc7d1c1e 100644 --- a/integration_cli_test.go +++ b/integration_cli_test.go @@ -1,5 +1,4 @@ -//go:build integration -// +build integration +//go:build integration_cli package headscale diff --git a/integration_common_test.go b/integration_common_test.go index db2aa17a..14359612 100644 --- a/integration_common_test.go +++ b/integration_common_test.go @@ -1,5 +1,4 @@ //go:build integration -// +build integration package headscale @@ -20,6 +19,7 @@ import ( ) const ( + headscaleHostname = "headscale-derp" DOCKER_EXECUTE_TIMEOUT = 10 * time.Second ) diff --git a/integration_embedded_derp_test.go b/integration_embedded_derp_test.go index 3f694433..da323d88 100644 --- a/integration_embedded_derp_test.go +++ b/integration_embedded_derp_test.go @@ -1,4 +1,4 @@ -//go:build integration +//go:build integration_derp package headscale @@ -28,9 +28,8 @@ import ( ) const ( - headscaleHostname = "headscale-derp" - namespaceName = "derpnamespace" - totalContainers = 3 + namespaceName = "derpnamespace" + totalContainers = 3 ) type IntegrationDERPTestSuite struct { diff --git a/integration_test.go b/integration_general_test.go similarity index 99% rename from integration_test.go rename to integration_general_test.go index dca015d0..864b2230 100644 --- a/integration_test.go +++ b/integration_general_test.go @@ -1,5 +1,4 @@ -//go:build integration -// +build integration +//go:build integration_general package headscale From d548f5de3f9e059bce8e0d2ab88d846b63c75d15 Mon Sep 17 00:00:00 2001 From: Juan Font Alonso Date: Tue, 9 Aug 2022 12:26:29 +0200 Subject: [PATCH 6/9] Splitted integration tests in Makefile --- Makefile | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 404c3c01..651ff5c3 100644 --- a/Makefile +++ b/Makefile @@ -24,14 +24,16 @@ dev: lint test build test: @go test -coverprofile=coverage.out ./... -test_integration: - go test -failfast -tags integration -timeout 30m -count=1 ./... +test_integration: test_integration_cli test_integration_derp test_integration_general test_integration_cli: - go test -tags integration -v integration_cli_test.go integration_common_test.go + go test -failfast -tags integration_cli,integration -timeout 30m -count=1 ./... test_integration_derp: - go test -tags integration -v integration_embedded_derp_test.go integration_common_test.go + go test -failfast -tags integration_derp,integration -timeout 30m -count=1 ./... + +test_integration_general: + go test -failfast -tags integration_general,integration -timeout 30m -count=1 ./... coverprofile_func: go tool cover -func=coverage.out From b01d392f9e92ecae868391bb71f0fc9bc546d6a3 Mon Sep 17 00:00:00 2001 From: Juan Font Alonso Date: Tue, 9 Aug 2022 12:26:58 +0200 Subject: [PATCH 7/9] Run integrtation tests in different steps in Github Actions --- .github/workflows/test-integration.yml | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index 5ffe390f..de896cb0 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -30,11 +30,29 @@ jobs: - uses: cachix/install-nix-action@v16 if: steps.changed-files.outputs.any_changed == 'true' - - name: Run Integration tests + - name: Run CLI integration tests if: steps.changed-files.outputs.any_changed == 'true' uses: nick-fields/retry@v2 with: timeout_minutes: 240 max_attempts: 5 retry_on: error - command: nix develop --command -- make test_integration + command: nix develop --command -- make test_integration_cli + + - name: Run Embedded DERP server integration tests + if: steps.changed-files.outputs.any_changed == 'true' + uses: nick-fields/retry@v2 + with: + timeout_minutes: 240 + max_attempts: 5 + retry_on: error + command: nix develop --command -- make test_integration_derp + + - name: Run general integration tests + if: steps.changed-files.outputs.any_changed == 'true' + uses: nick-fields/retry@v2 + with: + timeout_minutes: 240 + max_attempts: 5 + retry_on: error + command: nix develop --command -- make test_integration_general From 27855880b25b336f05c4c4112a7952bbcb22593f Mon Sep 17 00:00:00 2001 From: Juan Font Alonso Date: Tue, 9 Aug 2022 13:53:02 +0200 Subject: [PATCH 8/9] Updated versions for taiscale --- integration_common_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/integration_common_test.go b/integration_common_test.go index 14359612..b0c3dbb8 100644 --- a/integration_common_test.go +++ b/integration_common_test.go @@ -30,9 +30,10 @@ var ( IpPrefix6 = netaddr.MustParseIPPrefix("fd7a:115c:a1e0::/48") tailscaleVersions = []string{ - "head", + // "head", // "unstable", - "1.26.0", + "1.28.0", + "1.26.2", "1.24.2", "1.22.2", "1.20.4", From 577eedef117438dacb6999665c0396fd4f558c87 Mon Sep 17 00:00:00 2001 From: Juan Font Alonso Date: Tue, 9 Aug 2022 13:53:25 +0200 Subject: [PATCH 9/9] Restore the number of containers --- integration_general_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_general_test.go b/integration_general_test.go index 864b2230..4bbdf275 100644 --- a/integration_general_test.go +++ b/integration_general_test.go @@ -52,7 +52,7 @@ func TestIntegrationTestSuite(t *testing.T) { s.namespaces = map[string]TestNamespace{ "thisspace": { - count: 5, + count: 10, tailscales: make(map[string]dockertest.Resource), }, "otherspace": {