From a38de0fa98a0f688cf93f7cd822dea32f57902e5 Mon Sep 17 00:00:00 2001
From: Saylor Berman <s.berman@f5.com>
Date: Thu, 26 Sep 2024 11:08:37 -0600
Subject: [PATCH] Use go test as unit test runner

Problem: Switching to using ginkgo as the test runner caused some issues with verbose output and difficulty finding test failures. This could also be exacerbated by the fact that we mix standard go test style with ginkgo framework tests.

Solution: For now, switch back to using go test as the runner, since the output is cleaner and easier to find errors.
---
 .codecov.yml                 |  2 ++
 .github/workflows/ci.yml     |  2 +-
 Makefile                     |  9 +--------
 cmd/gateway/commands_test.go | 30 ------------------------------
 tests/Makefile               |  4 ++++
 5 files changed, 8 insertions(+), 39 deletions(-)

diff --git a/.codecov.yml b/.codecov.yml
index cec39aedfb..53321a4a27 100644
--- a/.codecov.yml
+++ b/.codecov.yml
@@ -5,3 +5,5 @@ coverage:
         informational: true
 comment:
   require_changes: true
+ignore:
+  - "**/fake_*.go"
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index beebdce2fa..a90fc9e81d 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -90,7 +90,7 @@ jobs:
             .github/.cache/buster-for-unit-tests
 
       - name: Run Tests
-        run: make unit-test CI=true
+        run: make unit-test
 
       - name: Upload coverage reports to Codecov
         uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0
diff --git a/Makefile b/Makefile
index 98db3f2d49..c85acfbe1e 100644
--- a/Makefile
+++ b/Makefile
@@ -55,10 +55,6 @@ ifneq (,$(findstring plus,$(MAKECMDGOALS)))
    PLUS_ENABLED = true
 endif
 
-ifeq ($(CI),true)
-	GITHUB_OUTPUT := --github-output
-endif
-
 .PHONY: help
 help: Makefile ## Display this help
 	@grep -hE '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "; printf "Usage:\n\n	make \033[36m<target>\033[0m [VARIABLE=value...]\n\nTargets:\n\n"}; {printf "	 \033[36m%-30s\033[0m %s\n", $$1, $$2}'
@@ -191,11 +187,8 @@ lint: ## Run golangci-lint against code
 
 .PHONY: unit-test
 unit-test: ## Run unit tests for the go code
-	# We have to run the tests in the cmd package using `go test` because of a bug with the CLI library cobra. See https://github.com/spf13/cobra/issues/2104.
-	go test -buildvcs ./cmd/... -race -shuffle=on -coverprofile=cmd-coverage.out -covermode=atomic
-	go run github.com/onsi/ginkgo/v2/ginkgo --randomize-all --randomize-suites --race --keep-going --fail-on-pending --fail-fast --trace --covermode=atomic --coverprofile=coverage.out --force-newlines $(GITHUB_OUTPUT) -p -v -r internal
+	go test ./cmd/... ./internal/... -buildvcs -race -shuffle=on -coverprofile=coverage.out -covermode=atomic
 	go tool cover -html=coverage.out -o cover.html
-	go tool cover -html=cmd-coverage.out -o cmd-cover.html
 
 .PHONY: njs-unit-test
 njs-unit-test: ## Run unit tests for the njs httpmatches module
diff --git a/cmd/gateway/commands_test.go b/cmd/gateway/commands_test.go
index 16ec9daa5a..03bc09e8be 100644
--- a/cmd/gateway/commands_test.go
+++ b/cmd/gateway/commands_test.go
@@ -40,21 +40,6 @@ func testFlag(t *testing.T, cmd *cobra.Command, test flagTestCase) {
 	}
 }
 
-/*
-This test cannot be run with ginkgo. Ginkgo reports the following error:
-* Unexpected error:
-*       <*errors.errorString | 0xc0004746b0>:
-*       unknown flag: --test.v
-*       {
-*           s: "unknown flag: --test.v",
-*       }
-*   occurred
-*
-* This is because cobra sets the args of the command to the OS args when args are nil, and adds the testing flags
-* that ginkgo passes to the testing binary as flags on the command. This does not happen with the `go test` flags
-* because those only have one dash (e.g. -test) and are ignored by cobra.
-* See https://github.com/spf13/cobra/issues/2104.
-*/
 func TestRootCmd(t *testing.T) {
 	t.Parallel()
 	testCase := flagTestCase{
@@ -410,21 +395,6 @@ func TestProvisionerModeCmdFlagValidation(t *testing.T) {
 	testFlag(t, createProvisionerModeCommand(), testCase)
 }
 
-/*
-This test cannot be run with ginkgo. Ginkgo reports the following error for the "omitted flag" case:
-* Unexpected error:
-*       <*errors.errorString | 0xc0004746b0>:
-*       unknown flag: --test.v
-*       {
-*           s: "unknown flag: --test.v",
-*       }
-*   occurred
-*
-* This is because cobra sets the args of the command to the OS args when args are nil, and adds the testing flags
-* that ginkgo passes to the testing binary as flags on the command. This does not happen with the `go test` flags
-* because those only have one dash (e.g. -test) and are ignored by cobra.
-* See https://github.com/spf13/cobra/issues/2104.
-*/
 func TestSleepCmdFlagValidation(t *testing.T) {
 	t.Parallel()
 	tests := []flagTestCase{
diff --git a/tests/Makefile b/tests/Makefile
index 21618725fb..2930ddd8b4 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -30,6 +30,10 @@ ifneq ($(GINKGO_LABEL),)
 	override GINKGO_FLAGS += --label-filter "$(GINKGO_LABEL)"
 endif
 
+ifeq ($(CI),true)
+	GITHUB_OUTPUT := --github-output
+endif
+
 .PHONY: update-go-modules
 update-go-modules: ## Update the gateway-api go modules to latest main version
 	go get -u sigs.k8s.io/gateway-api@main