From 6c9d5dad2a201941e239f538f39a97a133cdbf5a Mon Sep 17 00:00:00 2001 From: schristoff <28318173+schristoff@users.noreply.github.com> Date: Thu, 23 May 2024 09:11:27 -0600 Subject: [PATCH 1/2] chore: fix codecov (#2538) Signed-off-by: schristoff <28318173+schristoff@users.noreply.github.com> Co-authored-by: razzle Co-authored-by: schristoff <167717759+schristoff-du@users.noreply.github.com> Co-authored-by: Lucas Rodriguez --- .github/workflows/test-unit.yml | 15 ++++++--------- .gitignore | 1 + Makefile | 4 +--- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test-unit.yml b/.github/workflows/test-unit.yml index f3425c1098..90429169f1 100644 --- a/.github/workflows/test-unit.yml +++ b/.github/workflows/test-unit.yml @@ -25,17 +25,14 @@ jobs: steps: - name: Checkout uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - - name: Run coverage - run: go test -race -coverprofile=coverage.out -covermode=atomic - - - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@125fc84a9a348dbcf27191600683ec096ec9021c # v4.4.1 - with: - token: ${{ secrets.CODECOV_TOKEN }} - name: Setup golang uses: ./.github/actions/golang - name: Run unit tests - run: make test-unit \ No newline at end of file + run: make test-unit + + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@125fc84a9a348dbcf27191600683ec096ec9021c # v4.4.1 + with: + token: ${{ secrets.CODECOV_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 493e7381c2..2a68c38107 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ zarf-sbom/ test-*.txt __debug_bin .netlify +coverage.out diff --git a/Makefile b/Makefile index 5683962afc..1924780d4c 100644 --- a/Makefile +++ b/Makefile @@ -208,9 +208,7 @@ test-upgrade: ## Run the Zarf CLI E2E tests for an external registry and cluster .PHONY: test-unit test-unit: ## Run unit tests - cd src/pkg && go test ./... -failfast -v -timeout 30m - cd src/internal && go test ./... -failfast -v timeout 30m - cd src/extensions/bigbang && go test ./. -failfast -v timeout 30m + go test -failfast -v -coverprofile=coverage.out -covermode=atomic $$(go list ./... | grep -v '^github.com/defenseunicorns/zarf/src/test' | grep -v 'github.com/defenseunicorns/zarf/src/extensions/bigbang/test') # INTERNAL: used to test that a dev has ran `make docs-and-schema` in their PR test-docs-and-schema: From 31d56e4fb4706dcf6c50a15fa030b7f934a4c372 Mon Sep 17 00:00:00 2001 From: Lucas Rodriguez Date: Thu, 23 May 2024 10:41:12 -0500 Subject: [PATCH 2/2] test: creator.ComposeComponents (#2537) Relates to #2512 --- src/pkg/packager/creator/compose_test.go | 175 +++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 src/pkg/packager/creator/compose_test.go diff --git a/src/pkg/packager/creator/compose_test.go b/src/pkg/packager/creator/compose_test.go new file mode 100644 index 0000000000..7d1310bf3e --- /dev/null +++ b/src/pkg/packager/creator/compose_test.go @@ -0,0 +1,175 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: 2021-Present The Zarf Authors + +// Package creator contains functions for creating Zarf packages. +package creator + +import ( + "testing" + + "github.com/defenseunicorns/zarf/src/types" + "github.com/stretchr/testify/require" +) + +func TestComposeComponents(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + pkg types.ZarfPackage + flavor string + expectedPkg types.ZarfPackage + expectedErr string + }{ + { + name: "filter by architecture match", + pkg: types.ZarfPackage{ + Metadata: types.ZarfMetadata{Architecture: "amd64"}, + Components: []types.ZarfComponent{ + { + Name: "component1", + Only: types.ZarfComponentOnlyTarget{ + Cluster: types.ZarfComponentOnlyCluster{ + Architecture: "amd64", + }, + }, + }, + { + Name: "component2", + Only: types.ZarfComponentOnlyTarget{ + Cluster: types.ZarfComponentOnlyCluster{ + Architecture: "amd64", + }, + }, + }, + }, + }, + expectedPkg: types.ZarfPackage{ + Components: []types.ZarfComponent{ + {Name: "component1"}, + {Name: "component2"}, + }, + }, + expectedErr: "", + }, + { + name: "filter by architecture mismatch", + pkg: types.ZarfPackage{ + Metadata: types.ZarfMetadata{Architecture: "amd64"}, + Components: []types.ZarfComponent{ + { + Name: "component1", + Only: types.ZarfComponentOnlyTarget{ + Cluster: types.ZarfComponentOnlyCluster{ + Architecture: "amd64", + }, + }, + }, + { + Name: "component2", + Only: types.ZarfComponentOnlyTarget{ + Cluster: types.ZarfComponentOnlyCluster{ + Architecture: "arm64", + }, + }, + }, + }, + }, + expectedPkg: types.ZarfPackage{ + Components: []types.ZarfComponent{ + {Name: "component1"}, + }, + }, + expectedErr: "", + }, + { + name: "filter by flavor match", + pkg: types.ZarfPackage{ + Metadata: types.ZarfMetadata{Architecture: "amd64"}, + Components: []types.ZarfComponent{ + { + Name: "component1", + Only: types.ZarfComponentOnlyTarget{ + Flavor: "default", + }, + }, + { + Name: "component2", + Only: types.ZarfComponentOnlyTarget{ + Flavor: "default", + }, + }, + }, + }, + flavor: "default", + expectedPkg: types.ZarfPackage{ + Components: []types.ZarfComponent{ + {Name: "component1"}, + {Name: "component2"}, + }, + }, + expectedErr: "", + }, + { + name: "filter by flavor mismatch", + pkg: types.ZarfPackage{ + Metadata: types.ZarfMetadata{Architecture: "amd64"}, + Components: []types.ZarfComponent{ + { + Name: "component1", + Only: types.ZarfComponentOnlyTarget{ + Flavor: "default", + }, + }, + { + Name: "component2", + Only: types.ZarfComponentOnlyTarget{ + Flavor: "special", + }, + }, + }, + }, + flavor: "default", + expectedPkg: types.ZarfPackage{ + Components: []types.ZarfComponent{ + {Name: "component1"}, + }, + }, + expectedErr: "", + }, + { + name: "no architecture set error", + pkg: types.ZarfPackage{ + Components: []types.ZarfComponent{ + { + Name: "component1", + Only: types.ZarfComponentOnlyTarget{ + Flavor: "default", + }, + }, + }, + }, + flavor: "default", + expectedPkg: types.ZarfPackage{}, + expectedErr: "cannot build import chain: architecture must be provided", + }, + } + + for _, tt := range tests { + tt := tt + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + pkg, _, err := ComposeComponents(tt.pkg, tt.flavor) + + if tt.expectedErr == "" { + require.NoError(t, err) + require.Equal(t, tt.expectedPkg.Components, pkg.Components) + return + } + + require.EqualError(t, err, tt.expectedErr) + require.Empty(t, tt.expectedPkg) + }) + } +}