From d4900955b68598e97527862d742ac523b10c17bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antti=20Kivim=C3=A4ki?= Date: Fri, 15 Nov 2024 12:24:58 +0200 Subject: [PATCH] test: skip feature tests using Docker on Windows --- .github/workflows/test.yml | 5 ++++ test/features/check-recipes.feature | 11 ++++++++- test/features/execute-manifest.feature | 1 + test/features/execute-recipes.feature | 1 + .../features/recipes-as-oci-artifacts.feature | 13 ++++++++-- test/features/upgrade-recipe.feature | 1 + test/main_test.go | 24 ++++++++++++------- 7 files changed, 45 insertions(+), 11 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 775a96d9..980a2fc6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -23,4 +23,9 @@ jobs: go-version: "1.23" - name: Run tests + if: matrix.os == 'ubuntu-latest' run: go test ./... + + - name: Run tests (skip tests using Docker) + if: matrix.os == 'windows-latest' + run: go test ./... --godog.tags=~@docker diff --git a/test/features/check-recipes.feature b/test/features/check-recipes.feature index e5ad3444..a0a9908a 100644 --- a/test/features/check-recipes.feature +++ b/test/features/check-recipes.feature @@ -1,5 +1,5 @@ Feature: Check for new recipe versions - + @registry Scenario: Find newer version for a recipe Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" @@ -16,6 +16,7 @@ Feature: Check for new recipe versions Then CLI produced an output "new versions found: v0\.0\.2" Then CLI produced an output "To upgrade recipes to the latest version run:\n (.*) upgrade oci://localhost:\d+/foo:v0.0.2\n" + @registry Scenario: Find multiple newer version for a recipe Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" @@ -33,6 +34,7 @@ Feature: Check for new recipe versions Then CLI produced an output "new versions found: v0\.0\.2, v0\.0\.3" Then CLI produced an output "To upgrade recipes to the latest version run:\n (.*) upgrade oci://localhost:\d+/foo:v0\.0\.3\n" + @registry Scenario: Find newer version for multiple recipes Given a recipe "foo" And recipe "foo" generates file "foo.md" with content "initial" @@ -59,6 +61,7 @@ Feature: Check for new recipe versions Then CLI produced an output "foo: new versions found: v0\.0\.2" And CLI produced an output "bar: new versions found: v0\.0\.2" + @registry Scenario: Unable to find newer recipe versions Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" @@ -73,6 +76,7 @@ Feature: Check for new recipe versions And I check new versions for recipe "foo" Then CLI produced an output "no new versions found" + @registry Scenario: Unable to find newer recipe versions for all recipes Given a recipe "foo" And recipe "foo" generates file "foo.md" with content "initial" @@ -95,6 +99,7 @@ Feature: Check for new recipe versions Then CLI produced an output "foo: new versions found: v0\.0\.2" And CLI produced an output "bar: no new versions found" + @registry Scenario: Executing remote recipe automatically adds the repo as source for the sauce Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" @@ -108,6 +113,7 @@ Feature: Check for new recipe versions And I check new versions for recipe "foo" Then CLI produced an output "new versions found: v0\.0\.2" + @registry Scenario: Manually override the check from URL for locally executed recipe Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" @@ -121,6 +127,7 @@ Feature: Check for new recipe versions Then CLI produced an output "new versions found: v0\.0\.2" And the sauce in index 0 which should have property "CheckFrom" with value "^oci://localhost:\d+/foo$" + @registry Scenario: Find and upgrade newer version for recipes Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" @@ -136,6 +143,7 @@ Feature: Check for new recipe versions Then CLI produced an output "new versions found: v0\.0\.2" Then CLI produced an output "Upgrade completed" + @registry Scenario: Find and upgrade newer version for a specific recipe Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" @@ -157,6 +165,7 @@ Feature: Check for new recipe versions Then CLI produced an output "new versions found: v0\.0\.2" Then CLI produced an output "Upgrade completed" + @registry Scenario: Find and upgrade newer versions for multiple recipes Given a recipe "foo" And recipe "foo" generates file "foo.md" with content "initial" diff --git a/test/features/execute-manifest.feature b/test/features/execute-manifest.feature index 8de203fb..22e94bc8 100644 --- a/test/features/execute-manifest.feature +++ b/test/features/execute-manifest.feature @@ -17,6 +17,7 @@ Feature: Execute manifests And the project directory should contain file "foo.md" And the project directory should contain file "bar.md" + @registry Scenario: Execute a manifest with remote recipes Given a local OCI registry And a recipe "foo" diff --git a/test/features/execute-recipes.feature b/test/features/execute-recipes.feature index 2242b248..d6afa443 100644 --- a/test/features/execute-recipes.feature +++ b/test/features/execute-recipes.feature @@ -10,6 +10,7 @@ Feature: Execute recipes And the sauce in index 0 which should have property "Recipe.Name" with value "^foo$" And the sauce in index 0 which has a valid ID + @registry Scenario: Execute single recipe from remote registry Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" diff --git a/test/features/recipes-as-oci-artifacts.feature b/test/features/recipes-as-oci-artifacts.feature index b020854c..f00c17a2 100644 --- a/test/features/recipes-as-oci-artifacts.feature +++ b/test/features/recipes-as-oci-artifacts.feature @@ -2,13 +2,14 @@ Feature: Recipes as OCI artifacts By pushing and pulling recipes as artifacts to OCI compatible repositories, we can improve recipe availability and discoverability + @registry Scenario: Push a recipe to OCI repository Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" And a local OCI registry When I push the recipe "foo" to the local OCI repository Then no errors were printed - + @registry Scenario: Pull a recipe from OCI repository Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" @@ -18,6 +19,7 @@ Feature: Recipes as OCI artifacts Then no errors were printed And the project directory should contain file "foo/recipe.yml" + @registry Scenario: Push a recipe to OCI repository using the 'latest' tag Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" @@ -28,6 +30,7 @@ Feature: Recipes as OCI artifacts Then no errors were printed And the project directory should contain file "foo/recipe.yml" with "version: v0.0.1" + @registry Scenario: Pushing a recipe to OCI repository using the 'latest' tag pushes the version tag also Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" @@ -38,6 +41,7 @@ Feature: Recipes as OCI artifacts Then no errors were printed And the project directory should contain file "foo/recipe.yml" with "version: v0.0.1" + @registry Scenario: Pushing a recipe to OCI repository using the 'latest' tag replaces the previous tag Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" @@ -51,6 +55,7 @@ Feature: Recipes as OCI artifacts Then no errors were printed And the project directory should contain file "foo/recipe.yml" with "version: v0.0.2" + @registry Scenario: Push a recipe to OCI repository with authentication Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" @@ -58,6 +63,7 @@ Feature: Recipes as OCI artifacts When I push the recipe "foo" to the local OCI repository Then no errors were printed + @registry Scenario: Pull a recipe from OCI repository with authentication Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" @@ -66,7 +72,8 @@ Feature: Recipes as OCI artifacts When I pull recipe from the local OCI repository "foo:v0.0.1" Then no errors were printed And the project directory should contain file "foo/recipe.yml" - + + @registry Scenario: Try to push a recipe to OCI repository without authentication Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" @@ -75,11 +82,13 @@ Feature: Recipes as OCI artifacts When I push the recipe "foo" to the local OCI repository Then CLI produced an error "basic credential not found" + @registry Scenario: Try to pull a recipe from OCI repository which not exist Given a local OCI registry with authentication When I pull recipe from the local OCI repository "foo:v0.0.1" Then CLI produced an error "recipe not found" + @registry Scenario: Push a recipe from OCI repository using credentials from config file Given a recipe "foo" And recipe "foo" generates file "README.md" with content "initial" diff --git a/test/features/upgrade-recipe.feature b/test/features/upgrade-recipe.feature index 526a558d..5d59908b 100644 --- a/test/features/upgrade-recipe.feature +++ b/test/features/upgrade-recipe.feature @@ -95,6 +95,7 @@ Feature: Upgrade sauce And the project directory should contain file "./foo/README.md" with "New version" And the project directory should contain file "./bar/README.md" with "initial" + @registry Scenario: Upgrade sauce from remote recipe Given a local OCI registry And a recipe "foo" diff --git a/test/main_test.go b/test/main_test.go index c9db8362..5907f5be 100644 --- a/test/main_test.go +++ b/test/main_test.go @@ -67,14 +67,21 @@ const ( */ func TestFeatures(t *testing.T) { + opts := &godog.Options{ + Format: "pretty", + Strict: true, + Concurrency: runtime.NumCPU(), + Paths: []string{"features"}, + TestingT: t, + } + + // Skip tests needing OCI registry on Windows because there is no windows/amd64 image available + if runtime.GOOS == "windows" { + opts.Tags = "~@registry" + } + suite := godog.TestSuite{ - Options: &godog.Options{ - Format: "pretty", - Strict: true, - Concurrency: runtime.NumCPU(), - Paths: []string{"features"}, - TestingT: t, - }, + Options: opts, ScenarioInitializer: func(s *godog.ScenarioContext) { AddCommonSteps(s) @@ -335,7 +342,7 @@ func iRemoveFileFromTheRecipe(ctx context.Context, filename, recipeName string) } func aLocalOCIRegistry(ctx context.Context) (context.Context, error) { - resource, err := createLocalRegistry(&dockertest.RunOptions{Repository: "registry", Tag: "2"}) + resource, err := createLocalRegistry(&dockertest.RunOptions{Repository: "registry", Tag: "2", Platform: "linux/amd64"}) if err != nil { return ctx, err } @@ -360,6 +367,7 @@ func aLocalOCIRegistryWithAuth(ctx context.Context) (context.Context, error) { resource, err := createLocalRegistry(&dockertest.RunOptions{ Repository: "registry", Tag: "2", + Platform: "linux/amd64", Env: []string{ "REGISTRY_AUTH_HTPASSWD_REALM=jalapeno-test-realm", fmt.Sprintf("REGISTRY_AUTH_HTPASSWD_PATH=/auth/%s", HTPASSWD_FILENAME),