Skip to content

[BUG] Incorrect kubernetes context of resource-manager during testing #31

@bkomraz1

Description

@bkomraz1

Describe the bug
make test does not work as expected
During testing resource manager controller can't remove namespace that should be removed according label selector of resource manager object

To Reproduce
make test

• Failure [0.018 seconds]
Inside of a ResourceManager
/XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller_test.go:16
  when no existing resources exist
  /XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller_test.go:20
    this namespace obj should no long be Active [It]
    /XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller_test.go:76

    Expected
        <string>: Active
    not to equal
        <string>: Active

    /XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller_test.go:80

Expected behavior
All tests are pass

Additional context
The problem become eliminated if test is changed by the way that it should delete all namespaces in dry-run mode.

				Spec: resourcemanagmentv1alpha1.ResourceManagerSpec{
					Disabled:     false,
					DryRun:       true,
					ResourceKind: "Namespace",
					Selector: &metav1.LabelSelector{
						MatchExpressions: []metav1.LabelSelectorRequirement(nil),
						//MatchLabels: map[string]string{
						//	"managed-namespace": "true",
						//},
					},
					Action: "delete",
					Condition: resourcemanagmentv1alpha1.Expiration{
						ExpireAfter: "1s",
					},
				},

If current context is active, test prints list of all namespaces of current context but not context of test. See logs bellow.

If no active context

make test
test -s /XXXXXXXX/tikal/resource-manager/bin/controller-gen || GOBIN=/XXXXXXXX/tikal/resource-manager/bin go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.9.2
/XXXXXXXX/tikal/resource-manager/bin/controller-gen rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases
/XXXXXXXX/tikal/resource-manager/bin/controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
go fmt ./...
go vet ./...
test -s /XXXXXXXX/tikal/resource-manager/bin/setup-envtest || GOBIN=/XXXXXXXX/tikal/resource-manager/bin go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest
ACK_GINKGO_DEPRECATIONS=1.16.5 KUBEBUILDER_ASSETS="/XXXXXXXX/Library/Application Support/io.kubebuilder.envtest/k8s/1.24.2-darwin-amd64" go test -v ./... -coverprofile cover.out
?   	github.com/tikalk/resource-manager	[no test files]
?   	github.com/tikalk/resource-manager/api/v1alpha1	[no test files]
=== RUN   TestAPIs
Running Suite: Controller Suite
===============================
Random Seed: 1668969845
Will run 2 of 2 specs

ts=2022-11-20T18:44:12.028199Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller.go:103 github.com/tikalk/resource-manager/controllers.(*ResourceManagerReconciler).Reconcile | ResourceManager object <default/test-resource-manager> reconciled. Reconciling..."
ts=2022-11-20T18:44:12.028236Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller.go:132 github.com/tikalk/resource-manager/controllers.(*ResourceManagerReconciler).Reconcile | ResourceManager object added <default/test-resource-manager>. Handler creating..."
ts=2022-11-20T18:44:12.028311Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller.go:140 github.com/tikalk/resource-manager/controllers.(*ResourceManagerReconciler).Reconcile | ResourceManagerHandler for <default/test-resource-manager> registering..."
•
------------------------------
• Failure [0.011 seconds]
Inside of a ResourceManager
/XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller_test.go:16
  when no existing resources exist
  /XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller_test.go:20
    this namespace obj should no long be Active [It]
    /XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller_test.go:76

    Expected
        <string>: Active
    not to equal
        <string>: Active

    /XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller_test.go:80
------------------------------
ts=2022-11-20T18:44:12.036425Z level=info msg="Stopping and waiting for non leader election runnables"
ts=2022-11-20T18:44:12.036452Z level=info msg="Stopping and waiting for leader election runnables"
ts=2022-11-20T18:44:12.036461Z level=info msg="Shutdown signal received, waiting for all workers to finish" controller=resourcemanager controllerGroup=resource-management.tikalk.com controllerKind=ResourceManager
ts=2022-11-20T18:44:12.036506Z level=info msg="All workers finished" controller=resourcemanager controllerGroup=resource-management.tikalk.com controllerKind=ResourceManager
ts=2022-11-20T18:44:12.036519Z level=info msg="Stopping and waiting for caches"
ts=2022-11-20T18:44:12.036557Z level=info msg="Stopping and waiting for webhooks"
ts=2022-11-20T18:44:12.036568Z level=info msg="Wait completed, proceeding to shutdown the manager"
ts=2022-11-20T18:44:12.043701Z level=info logger=controller-runtime.metrics msg="Metrics server is starting to listen" addr=:8080
ts=2022-11-20T18:44:12.046025Z level=info msg="Stopping and waiting for non leader election runnables"
ts=2022-11-20T18:44:12.046037Z level=info msg="Stopping and waiting for leader election runnables"
ts=2022-11-20T18:44:12.046059Z level=info msg="Starting server" path=/metrics kind=metrics addr=[::]:8080
ts=2022-11-20T18:44:12.046118Z level=info msg="Starting EventSource" controller=resourcemanager controllerGroup=resource-management.tikalk.com controllerKind=ResourceManager source="kind source: *v1alpha1.ResourceManager"
ts=2022-11-20T18:44:12.046139Z level=info msg="Starting Controller" controller=resourcemanager controllerGroup=resource-management.tikalk.com controllerKind=ResourceManager
ts=2022-11-20T18:44:12.046168Z level=info msg="Starting workers" controller=resourcemanager controllerGroup=resource-management.tikalk.com controllerKind=ResourceManager workercount=1
ts=2022-11-20T18:44:12.046176Z level=info msg="Shutdown signal received, waiting for all workers to finish" controller=resourcemanager controllerGroup=resource-management.tikalk.com controllerKind=ResourceManager
ts=2022-11-20T18:44:12.046185Z level=info msg="All workers finished" controller=resourcemanager controllerGroup=resource-management.tikalk.com controllerKind=ResourceManager
ts=2022-11-20T18:44:12.046229Z level=info msg="Stopping and waiting for caches"
ts=2022-11-20T18:44:12.046264Z level=info msg="Stopping and waiting for webhooks"
ts=2022-11-20T18:44:12.04627Z level=info msg="Wait completed, proceeding to shutdown the manager"
ts=2022-11-20T18:44:12.046248Z level=error logger=controller-runtime.source msg="failed to get informer from cache" error="Timeout: failed waiting for *v1alpha1.ResourceManager Informer to sync" stacktrace="sigs.k8s.io/controller-runtime/pkg/source.(*Kind).Start.func1.1\n\t/XXXXXXXX/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.12.2/pkg/source/source.go:144\nk8s.io/apimachinery/pkg/util/wait.runConditionWithCrashProtectionWithContext\n\t/XXXXXXXX/go/pkg/mod/k8s.io/apimachinery@v0.24.2/pkg/util/wait/wait.go:233\nk8s.io/apimachinery/pkg/util/wait.poll\n\t/XXXXXXXX/go/pkg/mod/k8s.io/apimachinery@v0.24.2/pkg/util/wait/wait.go:580\nk8s.io/apimachinery/pkg/util/wait.PollImmediateUntilWithContext\n\t/XXXXXXXX/go/pkg/mod/k8s.io/apimachinery@v0.24.2/pkg/util/wait/wait.go:545\nsigs.k8s.io/controller-runtime/pkg/source.(*Kind).Start.func1\n\t/XXXXXXXX/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.12.2/pkg/source/source.go:132"



Summarizing 1 Failure:

[Fail] Inside of a ResourceManager when no existing resources exist [It] this namespace obj should no long be Active
/XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller_test.go:80

Ran 2 of 2 Specs in 7.160 seconds
FAIL! -- 1 Passed | 1 Failed | 0 Pending | 0 Skipped
--- FAIL: TestAPIs (7.16s)
FAIL
coverage: 26.8% of statements
FAIL	github.com/tikalk/resource-manager/controllers	7.645s
?   	github.com/tikalk/resource-manager/controllers/handlers	[no test files]
=== RUN   TestUtils
Running Suite: Utils Suite
==========================
Random Seed: 1668969844
Will run 2 of 2 specs

••

Ran 2 of 2 Specs in 0.000 seconds
SUCCESS! -- 2 Passed | 0 Failed | 0 Pending | 0 Skipped
--- PASS: TestUtils (0.00s)
PASS
coverage: 75.0% of statements
ok  	github.com/tikalk/resource-manager/controllers/utils	0.315s	coverage: 75.0% of statements
?   	github.com/tikalk/resource-manager/tilt/tilt_modules/restart_process	[no test files]
FAIL
make: *** [test] Error 1

If docker-desktop context is active

(⎈ |docker-desktop:default)$ make test
test -s /XXXXXXXX/tikal/resource-manager/bin/controller-gen || GOBIN=/XXXXXXXX/tikal/resource-manager/bin go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.9.2
/XXXXXXXX/tikal/resource-manager/bin/controller-gen rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases
/XXXXXXXX/tikal/resource-manager/bin/controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
go fmt ./...
go vet ./...
test -s /XXXXXXXX/tikal/resource-manager/bin/setup-envtest || GOBIN=/XXXXXXXX/tikal/resource-manager/bin go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest
ACK_GINKGO_DEPRECATIONS=1.16.5 KUBEBUILDER_ASSETS="/XXXXXXXX/Library/Application Support/io.kubebuilder.envtest/k8s/1.24.2-darwin-amd64" go test -v ./... -coverprofile cover.out
?   	github.com/tikalk/resource-manager	[no test files]
?   	github.com/tikalk/resource-manager/api/v1alpha1	[no test files]
=== RUN   TestAPIs
Running Suite: Controller Suite
===============================
Random Seed: 1668971485
Will run 2 of 2 specs

ts=2022-11-20T19:11:32.678847Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller.go:103 github.com/tikalk/resource-manager/controllers.(*ResourceManagerReconciler).Reconcile | ResourceManager object <default/test-resource-manager> reconciled. Reconciling..."
ts=2022-11-20T19:11:32.678897Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller.go:132 github.com/tikalk/resource-manager/controllers.(*ResourceManagerReconciler).Reconcile | ResourceManager object added <default/test-resource-manager>. Handler creating..."
ts=2022-11-20T19:11:32.678945Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller.go:140 github.com/tikalk/resource-manager/controllers.(*ResourceManagerReconciler).Reconcile | ResourceManagerHandler for <default/test-resource-manager> registering..."
•
------------------------------
• Failure [0.018 seconds]
Inside of a ResourceManager
/XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller_test.go:16
  when no existing resources exist
  /XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller_test.go:20
    this namespace obj should no long be Active [It]
    /XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller_test.go:76

    Expected
        <string>: Active
    not to equal
        <string>: Active

    /XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller_test.go:80
------------------------------
1.668971492688082e+09	INFO	Stopping and waiting for non leader election runnables
1.668971492688115e+09	INFO	Stopping and waiting for leader election runnables
1.668971492688137e+09	INFO	Shutdown signal received, waiting for all workers to finish	{"controller": "resourcemanager", "controllerGroup": "resource-management.tikalk.com", "controllerKind": "ResourceManager"}
1.668971492688174e+09	INFO	All workers finished	{"controller": "resourcemanager", "controllerGroup": "resource-management.tikalk.com", "controllerKind": "ResourceManager"}
1.668971492688179e+09	INFO	Stopping and waiting for caches
1.668971492688246e+09	INFO	Stopping and waiting for webhooks
1.668971492688253e+09	INFO	Wait completed, proceeding to shutdown the manager
1.668971492698383e+09	INFO	controller-runtime.metrics	Metrics server is starting to listen	{"addr": ":8080"}
1.6689714927035992e+09	INFO	Starting server	{"path": "/metrics", "kind": "metrics", "addr": "[::]:8080"}
1.6689714927037702e+09	INFO	Stopping and waiting for non leader election runnables
1.668971492703778e+09	INFO	Stopping and waiting for leader election runnables
1.668971492703826e+09	INFO	Starting EventSource	{"controller": "resourcemanager", "controllerGroup": "resource-management.tikalk.com", "controllerKind": "ResourceManager", "source": "kind source: *v1alpha1.ResourceManager"}
1.668971492703847e+09	INFO	Starting Controller	{"controller": "resourcemanager", "controllerGroup": "resource-management.tikalk.com", "controllerKind": "ResourceManager"}
1.668971492703852e+09	INFO	Starting workers	{"controller": "resourcemanager", "controllerGroup": "resource-management.tikalk.com", "controllerKind": "ResourceManager", "worker count": 1}
1.668971492703857e+09	INFO	Shutdown signal received, waiting for all workers to finish	{"controller": "resourcemanager", "controllerGroup": "resource-management.tikalk.com", "controllerKind": "ResourceManager"}
1.668971492703948e+09	INFO	All workers finished	{"controller": "resourcemanager", "controllerGroup": "resource-management.tikalk.com", "controllerKind": "ResourceManager"}
1.6689714927039528e+09	INFO	Stopping and waiting for caches
1.66897149270399e+09	ERROR	controller-runtime.source	failed to get informer from cache	{"error": "Timeout: failed waiting for *v1alpha1.ResourceManager Informer to sync"}
sigs.k8s.io/controller-runtime/pkg/source.(*Kind).Start.func1.1
	/XXXXXXXX/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.12.2/pkg/source/source.go:144
k8s.io/apimachinery/pkg/util/wait.runConditionWithCrashProtectionWithContext
	/XXXXXXXX/go/pkg/mod/k8s.io/apimachinery@v0.24.2/pkg/util/wait/wait.go:233
k8s.io/apimachinery/pkg/util/wait.poll
	/XXXXXXXX/go/pkg/mod/k8s.io/apimachinery@v0.24.2/pkg/util/wait/wait.go:580
k8s.io/apimachinery/pkg/util/wait.PollImmediateUntilWithContext
	/XXXXXXXX/go/pkg/mod/k8s.io/apimachinery@v0.24.2/pkg/util/wait/wait.go:545
sigs.k8s.io/controller-runtime/pkg/source.(*Kind).Start.func1
	/XXXXXXXX/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.12.2/pkg/source/source.go:132
1.668971492704063e+09	INFO	Stopping and waiting for webhooks
1.6689714927040682e+09	INFO	Wait completed, proceeding to shutdown the manager
ts=2022-11-20T19:11:32.716018Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/resource_manager_handler.go:95 github.com/tikalk/resource-manager/controllers.(*ResourceManagerHandler).Run.func1 | Adding object handler: </argocd>"
ts=2022-11-20T19:11:32.716143Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/resource_manager_handler.go:95 github.com/tikalk/resource-manager/controllers.(*ResourceManagerHandler).Run.func1 | Adding object handler: </default>"
ts=2022-11-20T19:11:32.716186Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:145 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | object age expiration </default> after <1s> age <510h0m19.716157s> wait <-510h0m18.716157s>"
ts=2022-11-20T19:11:32.716215Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:179 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | object already expired </default>"
ts=2022-11-20T19:11:32.716208Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:145 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | object age expiration </argocd> after <1s> age <509h47m1.716177s> wait <-509h47m0.716177s>"
ts=2022-11-20T19:11:32.716227Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:192 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | dry-run performing object </default> action <delete> "
ts=2022-11-20T19:11:32.716235Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:179 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | object already expired </argocd>"
ts=2022-11-20T19:11:32.71625Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:192 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | dry-run performing object </argocd> action <delete> "
ts=2022-11-20T19:11:32.716217Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/resource_manager_handler.go:95 github.com/tikalk/resource-manager/controllers.(*ResourceManagerHandler).Run.func1 | Adding object handler: </kube-node-lease>"
ts=2022-11-20T19:11:32.716264Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/resource_manager_handler.go:95 github.com/tikalk/resource-manager/controllers.(*ResourceManagerHandler).Run.func1 | Adding object handler: </kube-public>"
ts=2022-11-20T19:11:32.716282Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:145 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | object age expiration </kube-public> after <1s> age <510h0m20.716271s> wait <-510h0m19.716271s>"
ts=2022-11-20T19:11:32.716299Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:179 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | object already expired </kube-public>"
ts=2022-11-20T19:11:32.716312Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:192 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | dry-run performing object </kube-public> action <delete> "
ts=2022-11-20T19:11:32.716298Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:145 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | object age expiration </kube-node-lease> after <1s> age <510h0m20.716267s> wait <-510h0m19.716267s>"
ts=2022-11-20T19:11:32.716347Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/resource_manager_handler.go:95 github.com/tikalk/resource-manager/controllers.(*ResourceManagerHandler).Run.func1 | Adding object handler: </kube-system>"
ts=2022-11-20T19:11:32.716337Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:179 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | object already expired </kube-node-lease>"
ts=2022-11-20T19:11:32.716358Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/resource_manager_handler.go:95 github.com/tikalk/resource-manager/controllers.(*ResourceManagerHandler).Run.func1 | Adding object handler: </xxx>"
ts=2022-11-20T19:11:32.716376Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:145 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | object age expiration </xxx> after <1s> age <99h55m30.716365s> wait <-99h55m29.716365s>"
ts=2022-11-20T19:11:32.716393Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:179 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | object already expired </xxx>"
ts=2022-11-20T19:11:32.716414Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:192 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | dry-run performing object </xxx> action <delete> "
ts=2022-11-20T19:11:32.716424Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:192 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | dry-run performing object </kube-node-lease> action <delete> "
ts=2022-11-20T19:11:32.71642Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:145 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | object age expiration </kube-system> after <1s> age <510h0m20.716378s> wait <-510h0m19.716378s>"
ts=2022-11-20T19:11:32.7165Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:179 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | object already expired </kube-system>"
ts=2022-11-20T19:11:32.716518Z level=info msg="/XXXXXXXX/tikal/resource-manager/controllers/object_handler.go:192 github.com/tikalk/resource-manager/controllers.(*ObjectHandler).Run | dry-run performing object </kube-system> action <delete> "



Summarizing 1 Failure:

[Fail] Inside of a ResourceManager when no existing resources exist [It] this namespace obj should no long be Active
/XXXXXXXX/tikal/resource-manager/controllers/resourcemanager_controller_test.go:80

Ran 2 of 2 Specs in 8.710 seconds
FAIL! -- 1 Passed | 1 Failed | 0 Pending | 0 Skipped
--- FAIL: TestAPIs (8.71s)
FAIL
coverage: 44.5% of statements
FAIL	github.com/tikalk/resource-manager/controllers	9.257s
?   	github.com/tikalk/resource-manager/controllers/handlers	[no test files]
=== RUN   TestUtils
Running Suite: Utils Suite
==========================
Random Seed: 1668971477
Will run 2 of 2 specs

••

Ran 2 of 2 Specs in 0.001 seconds
SUCCESS! -- 2 Passed | 0 Failed | 0 Pending | 0 Skipped
--- PASS: TestUtils (0.00s)
PASS
coverage: 75.0% of statements
ok  	github.com/tikalk/resource-manager/controllers/utils	0.673s	coverage: 75.0% of statements
?   	github.com/tikalk/resource-manager/tilt/tilt_modules/restart_process	[no test files]
FAIL
make: *** [test] Error 1
k get ns
NAME              STATUS   AGE
argocd            Active   21d
default           Active   21d
kube-node-lease   Active   21d
kube-public       Active   21d
kube-system       Active   21d
xxx               Active   4d4h

@daniel-ro

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions