From 1f57bb8eb82cb3a5ecf3855621a99e4e9933534b Mon Sep 17 00:00:00 2001 From: shreddedbacon Date: Thu, 23 Jan 2025 15:31:51 +1100 Subject: [PATCH 1/3] test: add basic go test coverage --- .github/workflows/insights-handler.yaml | 34 ++++++++++++++ .gitignore | 1 + Makefile | 47 ++++++++++++++++++-- internal/handler/FactDataTransformer.go | 3 -- internal/handler/FactDataTransformer_test.go | 2 +- 5 files changed, 79 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/insights-handler.yaml diff --git a/.github/workflows/insights-handler.yaml b/.github/workflows/insights-handler.yaml new file mode 100644 index 0000000..1de855c --- /dev/null +++ b/.github/workflows/insights-handler.yaml @@ -0,0 +1,34 @@ +name: Lagoon Insights Handler Test + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + test-suite: + runs-on: ubuntu-latest + continue-on-error: false + strategy: + fail-fast: false + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: "0" + + - name: Set up testing dependencies + run: sudo apt-get update && sudo apt-get -y install build-essential && sudo apt-get clean + + - name: Setup correct Go version + uses: actions/setup-go@v2 + with: + go-version: '1.23' + + - name: Run test + run: | + make test \ No newline at end of file diff --git a/.gitignore b/.gitignore index 6a18878..1b3a139 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .env internal/handler/testassets/bin/* +local-dev/ diff --git a/Makefile b/Makefile index ee443ac..b640ab0 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,49 @@ -.PHONY: gettrivy -gettrivy: - mkdir -p internal/handler/testassets/bin/trivy/ && wget -O - https://github.com/aquasecurity/trivy/releases/download/v0.45.0/trivy_0.45.0_Linux-64bit.tar.gz | tar -zxvf - -C internal/handler/testassets/bin/trivy/ +SHELL := /bin/bash +TRIVY_VERSION=0.45.0 + +ARCH := $(shell uname | tr '[:upper:]' '[:lower:]') + +TRIVY = $(realpath ./local-dev/trivy) + +.PHONY: local-dev/trivy +local-dev/trivy: +ifeq ($(TRIVY_VERSION), $(shell trivy version 2>/dev/null | sed -nE 's/^Version: ([0-9.]+).*/\1/p')) + $(info linking local trivy version $(TRIVY_VERSION)) + ln -sf $(shell command -v trivy) ./local-dev/trivy +else +ifneq ($(TRIVY_VERSION), $(shell ./local-dev/trivy version 2>/dev/null | sed -nE 's/^Version: ([0-9.]+).*/\1/p')) + $(info downloading trivy version $(TRIVY_VERSION) for $(ARCH)) + mkdir -p local-dev + rm local-dev/trivy || true + TMPDIR=$$(mktemp -d) \ + && curl -sSL https://github.com/aquasecurity/trivy/releases/download/v$(TRIVY_VERSION)/trivy_$(TRIVY_VERSION)_$(ARCH)-64bit.tar.gz -o $$TMPDIR/trivy.tar.gz \ + && (cd $$TMPDIR && tar -zxf trivy.tar.gz) && cp $$TMPDIR/trivy ./local-dev/trivy && rm -rf $$TMPDIR + chmod a+x local-dev/trivy +endif +endif .PHONY: runlocal runlocal: - go run main.go --problems-from-sbom=true --rabbitmq-username=guest --rabbitmq-password=guest --lagoon-api-host=http://localhost:8888/graphql --jwt-token-signing-key=secret --access-key-id=minio --secret-access-key=minio123 --disable-s3-upload=true --debug=true + go run main.go --problems-from-sbom=true \ + --rabbitmq-username=guest \ + --rabbitmq-password=guest \ + --lagoon-api-host=http://localhost:8888/graphql \ + --jwt-token-signing-key=secret \ + --access-key-id=minio \ + --secret-access-key=minio123 \ + --disable-s3-upload=true \ + --debug=true + +.PHONY: fmt +fmt: ## Run go fmt against code. + go fmt ./... +.PHONY: vet +vet: ## Run go vet against code. + go vet ./... +.PHONY: test +test: fmt vet local-dev/trivy + PATH=$$PATH:$(PWD)/local-dev + go test -v ./... \ No newline at end of file diff --git a/internal/handler/FactDataTransformer.go b/internal/handler/FactDataTransformer.go index 2b9e7c9..5e169e4 100644 --- a/internal/handler/FactDataTransformer.go +++ b/internal/handler/FactDataTransformer.go @@ -112,13 +112,10 @@ func typeMap(alias string) string { switch alias { case "EnvironmentVariable": return "handler.EnvironmentVariable" - break case "Package": return "cyclonedx.Component" - break case "InspectLabel": return "handler.InsightsInspectLabel" - break } return alias } diff --git a/internal/handler/FactDataTransformer_test.go b/internal/handler/FactDataTransformer_test.go index 39aed77..8415142 100644 --- a/internal/handler/FactDataTransformer_test.go +++ b/internal/handler/FactDataTransformer_test.go @@ -56,7 +56,7 @@ func TestFactProcessor_TestMultipleFilters(t *testing.T) { } } -//ProcessLagoonFactAgainstRegisteredFilters +// ProcessLagoonFactAgainstRegisteredFilters func TestFactProcessor_ProcessLagoonFactAgainstRegisteredFilters(t *testing.T) { fact := LagoonFact{ From 764650772caee2a819cac2df92b3386a8fd3ad99 Mon Sep 17 00:00:00 2001 From: shreddedbacon Date: Thu, 23 Jan 2025 16:21:32 +1100 Subject: [PATCH 2/3] test: add core api for tests --- .env.example | 2 +- .gitignore | 1 + Makefile | 34 ++++++++++++++++++++++++++++++++-- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index 8aed492..610dcce 100644 --- a/.env.example +++ b/.env.example @@ -1 +1 @@ -TOKEN_SIGNING_KEY=abc123 \ No newline at end of file +TOKEN_SIGNING_KEY=super-secret-string \ No newline at end of file diff --git a/.gitignore b/.gitignore index 1b3a139..7c5be29 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ .env internal/handler/testassets/bin/* +lagoon-core.* local-dev/ diff --git a/Makefile b/Makefile index b640ab0..8c57882 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,12 @@ ARCH := $(shell uname | tr '[:upper:]' '[:lower:]') TRIVY = $(realpath ./local-dev/trivy) +CI_BUILD_TAG ?= insights +CORE_REPO=https://github.com/uselagoon/lagoon.git +CORE_TREEISH=main +LAGOON_CORE_IMAGE_REPO=testlagoon +LAGOON_CORE_IMAGE_TAG=main + .PHONY: local-dev/trivy local-dev/trivy: ifeq ($(TRIVY_VERSION), $(shell trivy version 2>/dev/null | sed -nE 's/^Version: ([0-9.]+).*/\1/p')) @@ -23,6 +29,29 @@ ifneq ($(TRIVY_VERSION), $(shell ./local-dev/trivy version 2>/dev/null | sed -nE endif endif +.PHONY: development-api +development-api: + export LAGOON_CORE=$$(mktemp -d ./lagoon-core.XXX) \ + && export GRAPHQL_API=http://localhost:3000/graphql \ + && export KEYCLOAK_API=http://localhost:8088/auth \ + && git clone $(CORE_REPO) "$$LAGOON_CORE" \ + && cd "$$LAGOON_CORE" \ + && git checkout $(CORE_TREEISH) \ + && IMAGE_REPO=$(LAGOON_CORE_IMAGE_REPO) IMAGE_REPO_TAG=$(LAGOON_CORE_IMAGE_TAG) COMPOSE_STACK_NAME=core-$(CI_BUILD_TAG) docker compose -p core-$(CI_BUILD_TAG) pull \ + && IMAGE_REPO=$(LAGOON_CORE_IMAGE_REPO) IMAGE_REPO_TAG=$(LAGOON_CORE_IMAGE_TAG) COMPOSE_STACK_NAME=core-$(CI_BUILD_TAG) $(MAKE) compose-api-logs-development + +.PHONY: development-api-down +development-api-down: + docker compose -p core-$(CI_BUILD_TAG) --compatibility down -v --remove-orphans + +# clean up any old charts to prevent bloating of old charts from running k3d stacks regularly +.PHONY: clean-core +clean-core: development-api-down + @for core in $$(ls -1 | grep -o "lagoon-core.*") ; do \ + echo removing core directory $$core ; \ + rm -rf $$core ; \ + done + .PHONY: runlocal runlocal: go run main.go --problems-from-sbom=true \ @@ -43,7 +72,8 @@ fmt: ## Run go fmt against code. vet: ## Run go vet against code. go vet ./... +PATH := $(PATH):$(PWD)/local-dev + .PHONY: test -test: fmt vet local-dev/trivy - PATH=$$PATH:$(PWD)/local-dev +test: fmt vet local-dev/trivy development-api go test -v ./... \ No newline at end of file From 729a5dce52679ec58d68e919005a48496429bd3a Mon Sep 17 00:00:00 2001 From: Blaize Kaye Date: Wed, 29 Jan 2025 14:34:34 +1300 Subject: [PATCH 3/3] Pops parser filters during testing --- internal/handler/FactDataTransformer_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/handler/FactDataTransformer_test.go b/internal/handler/FactDataTransformer_test.go index 8415142..ddb1036 100644 --- a/internal/handler/FactDataTransformer_test.go +++ b/internal/handler/FactDataTransformer_test.go @@ -71,6 +71,9 @@ func TestFactProcessor_ProcessLagoonFactAgainstRegisteredFilters(t *testing.T) { Category: "", } + poppedFactFilters := KeyFactFilters + defer func() { KeyFactFilters = poppedFactFilters }() + KeyFactFilters = []func(filter parserFilter) parserFilter{ func(filter parserFilter) parserFilter { return filter.