Skip to content

🧪 Add tier0/tier1 RBAC e2e tests (MTA-856, MTA-866, MTA-867)#633

Open
RanWurmbrand wants to merge 3 commits into
migtools:mainfrom
RanWurmbrand:mta-856-866-867-rbac-e2e-tests
Open

🧪 Add tier0/tier1 RBAC e2e tests (MTA-856, MTA-866, MTA-867)#633
RanWurmbrand wants to merge 3 commits into
migtools:mainfrom
RanWurmbrand:mta-856-866-867-rbac-e2e-tests

Conversation

@RanWurmbrand

@RanWurmbrand RanWurmbrand commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

closes: #581
closes: #634

Summary

Add e2e test coverage for RBAC-related cluster-level export scenarios:

  • MTA-856 (tier1): Verifies that ClusterRole and multiple ClusterRoleBindings linked to ServiceAccounts in the exported namespace are correctly migrated
  • MTA-866 (tier0): Verifies that namespace-admin users can migrate namespace-only workloads without split apply, and no cluster resources are exported
  • MTA-867 (tier1): Verifies that orphan ClusterRoles (not linked via CRB to any exported ServiceAccount) are correctly filtered out and not migrated

Verified

those test was tested both on Minikube and ocp

Test plan

  • Run tier0 tests: ginkgo --label-filter="tier0" ./e2e-tests/...
  • Run tier1 tests: ginkgo --label-filter="tier1" ./e2e-tests/...

Summary by CodeRabbit

Summary by CodeRabbit

  • Tests
    • Added end-to-end coverage for namespace-admin migrations, ensuring cluster-level resources are not produced.
    • Added validation that cluster-level RBAC exports/imports correctly preserve multiple ClusterRoleBindings and their ServiceAccount subjects.
    • Added coverage verifying orphaned ClusterRoles are excluded from migration output.
    • Expanded end-to-end assertions for successful deployment and application functionality after migration on the target cluster.

Signed-off-by: Ran Wurmbrand <rwurmbra@redhat.com>
@RanWurmbrand RanWurmbrand self-assigned this Jul 12, 2026
@RanWurmbrand RanWurmbrand added the test Testing related label Jul 12, 2026
@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds three end-to-end tests covering namespace-admin migration, linked cluster-level RBAC export, and filtering of orphan ClusterRoles from migration output.

Changes

Cluster resource migration E2E coverage

Layer / File(s) Summary
Namespace-admin cluster resource filtering
e2e-tests/tests/tier0/mta_866_na_no_cluster_resources_test.go
Adds a namespace-admin migration scenario, verifies no _cluster output is produced, and applies and validates the namespace workload on the target.
Cluster RBAC export filtering
e2e-tests/tests/tier1/mta_856_multiple_crbs_minimal_rbac_test.go, e2e-tests/tests/tier1/mta_867_orphan_clusterrole_test.go
Adds coverage for preserving multiple ClusterRoleBinding subject mappings and excluding an unbound orphan ClusterRole from exported cluster resources.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

  • migtools/crane#182: Provides shared E2E scenario path, cleanup, and file-traversal utilities used by these tests.
  • migtools/crane#222: Provides non-admin runner and namespace-admin RBAC support used by the migration scenarios.
  • migtools/crane#229: Adds related cluster-level RBAC export filtering coverage for orphan ClusterRoles.

Suggested reviewers: stillalearner, aufi, istein1, msajidmansoori12

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The new tests cover CA-2, CA-6, and NA-4 as requested in issues #581 and #634.
Out of Scope Changes check ✅ Passed The changes stay focused on the requested RBAC e2e tests and add no unrelated behavior.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: adding tier0/tier1 RBAC end-to-end tests for the listed MTA issues.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

Test Coverage Report

Total: 49.2%

Per-package coverage

  • github.com/konveyor/crane — 0.0%
  • github.com/konveyor/crane/cmd/apply — 52.7%
  • github.com/konveyor/crane/cmd/convert — 0.0%
  • github.com/konveyor/crane/cmd/export — 92.9%
  • github.com/konveyor/crane/cmd/plugin-manager — 0.0%
  • github.com/konveyor/crane/cmd/plugin-manager/add — 0.0%
  • github.com/konveyor/crane/cmd/plugin-manager/list — 0.0%
  • github.com/konveyor/crane/cmd/plugin-manager/remove — 0.0%
  • github.com/konveyor/crane/cmd/skopeo-sync-gen — 0.0%
  • github.com/konveyor/crane/cmd/transfer-pvc — 18.7%
  • github.com/konveyor/crane/cmd/transform — 59.7%
  • github.com/konveyor/crane/cmd/transform/listplugins — 23.0%
  • github.com/konveyor/crane/cmd/transform/optionals — 0.0%
  • github.com/konveyor/crane/cmd/tunnel-api — 0.0%
  • github.com/konveyor/crane/cmd/validate — 69.2%
  • github.com/konveyor/crane/cmd/version — 20.0%
  • github.com/konveyor/crane/internal/apply — 33.8%
  • github.com/konveyor/crane/internal/buildinfo — 100.0%
  • github.com/konveyor/crane/internal/file — 79.0%
  • github.com/konveyor/crane/internal/flags — 0.0%
  • github.com/konveyor/crane/internal/kustomize — 85.7%
  • github.com/konveyor/crane/internal/plugin — 32.9%
  • github.com/konveyor/crane/internal/transform — 80.8%
  • github.com/konveyor/crane/internal/validate — 58.6%
Full function-level details
github.com/konveyor/crane/cmd/apply/apply.go:44:			Complete								100.0%
github.com/konveyor/crane/cmd/apply/apply.go:50:			Validate								87.5%
github.com/konveyor/crane/cmd/apply/apply.go:64:			Run									0.0%
github.com/konveyor/crane/cmd/apply/apply.go:68:			NewApplyCommand								0.0%
github.com/konveyor/crane/cmd/apply/apply.go:110:			getStageNames								100.0%
github.com/konveyor/crane/cmd/apply/apply.go:118:			addFlagsForOptions							0.0%
github.com/konveyor/crane/cmd/apply/apply.go:134:			run									81.4%
github.com/konveyor/crane/cmd/convert/convert.go:30:			NewConvertOptions							0.0%
github.com/konveyor/crane/cmd/convert/convert.go:63:			addFlagsForConvertOptions						0.0%
github.com/konveyor/crane/cmd/convert/convert.go:74:			Complete								0.0%
github.com/konveyor/crane/cmd/convert/convert.go:83:			Run									0.0%
github.com/konveyor/crane/cmd/convert/convert.go:87:			run									0.0%
github.com/konveyor/crane/cmd/convert/convert.go:112:			getClientFromContext							0.0%
github.com/konveyor/crane/cmd/convert/convert.go:134:			getRestConfigFromContext						0.0%
github.com/konveyor/crane/cmd/export/cluster.go:29:			NewClusterScopeHandler							100.0%
github.com/konveyor/crane/cmd/export/cluster.go:35:			isClusterScopedResource							100.0%
github.com/konveyor/crane/cmd/export/cluster.go:44:			filterRbacResources							100.0%
github.com/konveyor/crane/cmd/export/cluster.go:102:			NewClusterScopedRbacHandler						100.0%
github.com/konveyor/crane/cmd/export/cluster.go:113:			exportedSANamespaces							100.0%
github.com/konveyor/crane/cmd/export/cluster.go:126:			groupMatchesExportedSANamespaces					100.0%
github.com/konveyor/crane/cmd/export/cluster.go:143:			parseServiceAccountUserSubject						100.0%
github.com/konveyor/crane/cmd/export/cluster.go:154:			prepareForFiltering							100.0%
github.com/konveyor/crane/cmd/export/cluster.go:187:			filteredResourcesOfKind							100.0%
github.com/konveyor/crane/cmd/export/cluster.go:213:			accept									100.0%
github.com/konveyor/crane/cmd/export/cluster.go:223:			acceptClusterRoleBinding						100.0%
github.com/konveyor/crane/cmd/export/cluster.go:260:			acceptClusterRole							100.0%
github.com/konveyor/crane/cmd/export/cluster.go:284:			acceptSecurityContextConstraints					100.0%
github.com/konveyor/crane/cmd/export/cluster.go:336:			anyServiceAccountInNamespace						100.0%
github.com/konveyor/crane/cmd/export/crd.go:18:				normalizeGroupSet							85.7%
github.com/konveyor/crane/cmd/export/crd.go:30:				shouldSkipCRDGroup							100.0%
github.com/konveyor/crane/cmd/export/crd.go:51:				crdFailureAPIResourceName						100.0%
github.com/konveyor/crane/cmd/export/crd.go:57:				getOperatorManager							92.9%
github.com/konveyor/crane/cmd/export/crd.go:89:				collectRelatedCRDs							94.7%
github.com/konveyor/crane/cmd/export/discover.go:41:			hasClusterScopedManifests						100.0%
github.com/konveyor/crane/cmd/export/discover.go:59:			prepareClusterResourceDir						100.0%
github.com/konveyor/crane/cmd/export/discover.go:75:			prepareFailuresDir							100.0%
github.com/konveyor/crane/cmd/export/discover.go:87:			writeResources								85.7%
github.com/konveyor/crane/cmd/export/discover.go:135:			writeErrors								83.3%
github.com/konveyor/crane/cmd/export/discover.go:177:			getFilePath								95.2%
github.com/konveyor/crane/cmd/export/discover.go:215:			discoverPreferredResources						100.0%
github.com/konveyor/crane/cmd/export/discover.go:244:			resourceToExtract							100.0%
github.com/konveyor/crane/cmd/export/discover.go:318:			isAdmittedResource							100.0%
github.com/konveyor/crane/cmd/export/discover.go:327:			getObjects								96.3%
github.com/konveyor/crane/cmd/export/discover.go:378:			iterateItemsByGet							90.5%
github.com/konveyor/crane/cmd/export/discover.go:413:			iterateItemsInList							92.3%
github.com/konveyor/crane/cmd/export/export.go:54:			Complete								92.0%
github.com/konveyor/crane/cmd/export/export.go:101:			Validate								100.0%
github.com/konveyor/crane/cmd/export/export.go:142:			validateExportNamespace							87.5%
github.com/konveyor/crane/cmd/export/export.go:159:			allResourceListsForbidden						87.5%
github.com/konveyor/crane/cmd/export/export.go:177:			mergeImpersonationExtras						100.0%
github.com/konveyor/crane/cmd/export/export.go:192:			Run									0.0%
github.com/konveyor/crane/cmd/export/export.go:316:			NewExportCommand							48.1%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:43:		Complete								0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:48:		Validate								0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:91:		Run									0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:95:		NewAddCommand								0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:127:		addFlagsForOptions							0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:132:		run									0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:204:		downloadBinary								0.0%
github.com/konveyor/crane/cmd/plugin-manager/add/add.go:253:		binaryURIForPlatform							0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:46:		Complete								0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:51:		Validate								0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:56:		Run									0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:60:		NewListCommand								0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:90:		addFlagsForOptions							0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:98:		run									0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:167:		printInstalledInformation						0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:177:		groupInformationForPlugins						0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:196:		printInformation							0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:208:		printParamsInformation							0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:222:		getOptionalFields							0.0%
github.com/konveyor/crane/cmd/plugin-manager/list/list.go:247:		printTable								0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:33:	Complete								0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:38:	Validate								0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:43:	Run									0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:47:	NewPluginManagerCommand							0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:78:	addFlagsForOptions							0.0%
github.com/konveyor/crane/cmd/plugin-manager/plugin-manager.go:86:	run									0.0%
github.com/konveyor/crane/cmd/plugin-manager/remove/remove.go:33:	Complete								0.0%
github.com/konveyor/crane/cmd/plugin-manager/remove/remove.go:38:	Validate								0.0%
github.com/konveyor/crane/cmd/plugin-manager/remove/remove.go:43:	Run									0.0%
github.com/konveyor/crane/cmd/plugin-manager/remove/remove.go:47:	NewRemoveCommand							0.0%
github.com/konveyor/crane/cmd/plugin-manager/remove/remove.go:77:	run									0.0%
github.com/konveyor/crane/cmd/skopeo-sync-gen/skopeo-sync-gen.go:61:	Complete								0.0%
github.com/konveyor/crane/cmd/skopeo-sync-gen/skopeo-sync-gen.go:65:	Validate								0.0%
github.com/konveyor/crane/cmd/skopeo-sync-gen/skopeo-sync-gen.go:69:	NewSkopeoSyncGenCommand							0.0%
github.com/konveyor/crane/cmd/skopeo-sync-gen/skopeo-sync-gen.go:103:	shouldAddImageStream							0.0%
github.com/konveyor/crane/cmd/skopeo-sync-gen/skopeo-sync-gen.go:114:	Run									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:37:		NewRsyncLogStream							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:50:		Init									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:143:		writeProgressToFile							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:153:		Close									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:159:		Streams									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:195:		addDataSize								0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:220:		String									100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:224:		MarshalJSON								0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:228:		AsString								97.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:276:		NewProgress								100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:296:		Completed								100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:301:		Status									100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:326:		Merge									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:381:		newDataSize								72.7%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:404:		parseRsyncLogs								76.1%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:484:		waitForPodRunning							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:518:		getFinalPodStatus							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:93:		Validate								0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:121:		Validate								0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:137:		NewTransferPVCCommand							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:173:		addFlagsToTransferPVCCommand						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:193:		Complete								0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:224:		Validate								0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:250:		Run									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:254:		getClientFromContext							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:275:		getRestConfigFromContext						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:282:		run									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:500:		getValidatedResourceName						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:510:		getNodeNameForPVC							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:530:		getIDsForNamespace							58.3%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:593:		getSecurityContextFromWorkload						74.5%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:693:		podSpecReferencesPVC							100.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:702:		extractPodSecurityContext						90.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:752:		inspectPVCFileOwnership							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:856:		getRsyncClientPodSecurityContext					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:860:		getRsyncServerPodSecurityContext					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:864:		garbageCollect								0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:901:		deleteResourcesIteratively						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:927:		deleteResourcesForGVK							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:948:		followClientLogs							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:977:		waitForEndpoint								0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:989:		createEndpoint								0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1034:	getRouteHostName							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1051:	buildDestinationPVC							0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1072:	ApplyTo									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1092:	ApplyTo									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1104:	ApplyTo									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1120:	String									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1124:	Set									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1134:	Type									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1140:	parseSourceDestinationMapping						100.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1162:	String									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1166:	Set									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1175:	Type									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1179:	String									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1183:	Set									0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:1193:	Type									0.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:33:	Complete								0.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:38:	Validate								0.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:43:	Run									0.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:47:	NewListPluginsCommand							0.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:80:	GetPluginNames								85.7%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:95:	getFilteredPlugins							75.0%
github.com/konveyor/crane/cmd/transform/listplugins/listplugins.go:104:	run									0.0%
github.com/konveyor/crane/cmd/transform/optionals/optionals.go:31:	Complete								0.0%
github.com/konveyor/crane/cmd/transform/optionals/optionals.go:36:	Validate								0.0%
github.com/konveyor/crane/cmd/transform/optionals/optionals.go:41:	Run									0.0%
github.com/konveyor/crane/cmd/transform/optionals/optionals.go:45:	NewOptionalsCommand							0.0%
github.com/konveyor/crane/cmd/transform/optionals/optionals.go:78:	run									0.0%
github.com/konveyor/crane/cmd/transform/transform.go:56:		Complete								0.0%
github.com/konveyor/crane/cmd/transform/transform.go:62:		Validate								83.3%
github.com/konveyor/crane/cmd/transform/transform.go:81:		Run									0.0%
github.com/konveyor/crane/cmd/transform/transform.go:86:		getPluginCompletions							100.0%
github.com/konveyor/crane/cmd/transform/transform.go:111:		NewTransformCommand							0.0%
github.com/konveyor/crane/cmd/transform/transform.go:155:		addFlagsForOptions							0.0%
github.com/konveyor/crane/cmd/transform/transform.go:177:		run									11.8%
github.com/konveyor/crane/cmd/transform/transform.go:328:		optionalFlagsToLower							100.0%
github.com/konveyor/crane/cmd/transform/transform.go:338:		runStageWithCleanup							0.0%
github.com/konveyor/crane/cmd/transform/transform.go:354:		reconcileInstructionStages						81.0%
github.com/konveyor/crane/cmd/transform/transform.go:397:		ensurePreviousStagesRun							83.3%
github.com/konveyor/crane/cmd/transform/transform.go:414:		ensureStagesHaveOutput							92.9%
github.com/konveyor/crane/cmd/transform/transform.go:452:		createDefaultStagesForAllPlugins					94.7%
github.com/konveyor/crane/cmd/transform/transform.go:504:		validateStageNameToken							100.0%
github.com/konveyor/crane/cmd/transform/transform.go:519:		findStageByDirName							100.0%
github.com/konveyor/crane/cmd/transform/transform.go:531:		findStagesByName							100.0%
github.com/konveyor/crane/cmd/transform/transform.go:543:		createStageDirectory							77.8%
github.com/konveyor/crane/cmd/transform/transform.go:564:		createCustomStageWithExplicitName					100.0%
github.com/konveyor/crane/cmd/transform/transform.go:580:		createCustomStageWithAutoPriority					71.4%
github.com/konveyor/crane/cmd/transform/transform.go:602:		createPluginStage							0.0%
github.com/konveyor/crane/cmd/transform/transform.go:635:		resolveAndValidateStages						58.5%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:35:		NewTunnelAPIOptions							0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:65:		addFlagsForTunnelAPIOptions						0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:77:		Complete								0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:100:		Validate								0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:116:		Run									0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:120:		getClientFromContext							0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:129:		getRestConfigFromContext						0.0%
github.com/konveyor/crane/cmd/tunnel-api/tunnel-api.go:136:		run									0.0%
github.com/konveyor/crane/cmd/validate/validate.go:37:			Complete								90.0%
github.com/konveyor/crane/cmd/validate/validate.go:56:			determineClusterContext							91.7%
github.com/konveyor/crane/cmd/validate/validate.go:84:			Validate								100.0%
github.com/konveyor/crane/cmd/validate/validate.go:129:			Run									16.7%
github.com/konveyor/crane/cmd/validate/validate.go:235:			NewValidateCommand							47.6%
github.com/konveyor/crane/cmd/version/version.go:20:			Complete								0.0%
github.com/konveyor/crane/cmd/version/version.go:25:			Validate								0.0%
github.com/konveyor/crane/cmd/version/version.go:30:			Run									0.0%
github.com/konveyor/crane/cmd/version/version.go:34:			NewVersionCommand							0.0%
github.com/konveyor/crane/cmd/version/version.go:60:			run									100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:21:			CreateTempDir								100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:28:			ListFilesRecursively							91.7%
github.com/konveyor/crane/e2e-tests/utils/utils.go:51:			ListFilesRecursivelyAsList						80.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:75:			HasFilesRecursively							80.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:86:			ReadTestdataFile							88.9%
github.com/konveyor/crane/e2e-tests/utils/utils.go:105:			TestdataFilePath							0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:125:			GoldenManifestsDir							90.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:147:			GoldenManifestsDirForPlatform						0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:170:			CompareDirectoryFileSets						78.9%
github.com/konveyor/crane/e2e-tests/utils/utils.go:205:			CompareDirectoryYAMLSemantics						82.4%
github.com/konveyor/crane/e2e-tests/utils/utils.go:239:			CompareDirectoryYAMLSemanticsExport					100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:247:			CompareDirectoryYAMLSemanticsExportAllowOptionalOCPOutputDefaults	100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:251:			compareDirectoryYAMLSemanticsExport					92.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:330:			isOptionalOCPOutputIdentity						100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:357:			buildNormalizedExportIndex						81.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:397:			canonicalizeDocs							87.5%
github.com/konveyor/crane/e2e-tests/utils/utils.go:411:			extractResourceIdentity							79.5%
github.com/konveyor/crane/e2e-tests/utils/utils.go:482:			parseYAMLDocuments							100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:498:			canonicalOpenShiftDockercfgSecretName					80.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:514:			compareYAMLFileBytes							100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:541:			AssertNoKindsInOutput							0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:597:			AssertKindsInOutput							0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:649:			LooksLikeYAMLFile							100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:663:			normalizeUnstableFields							77.8%
github.com/konveyor/crane/e2e-tests/utils/utils.go:741:			stripPodTemplateHash							0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:749:			normalizePodServiceAccountVolumeNames					90.9%
github.com/konveyor/crane/e2e-tests/utils/utils.go:806:			normalizeServiceAccountDockercfgReferences				94.1%
github.com/konveyor/crane/e2e-tests/utils/utils.go:840:			normalizeWithPath							83.3%
github.com/konveyor/crane/e2e-tests/utils/utils.go:878:			shouldDropField								100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:934:			AssertWhiteoutResourceFilesExist					0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:974:			AssertWhiteoutResourceFileCount						0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1006:		AssertWhiteoutCommentsInKustomization					0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1061:		AssertKindsNotInActiveKustomizeResources				0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1103:		CaptureAPISurfaceScriptPath						75.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1122:		ToInt64									0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1139:		ExtractCPUAverageUtilization						0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1172:		AssertFilesExist							0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:1198:		RemapNamespaceInYAML							0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:31:		ApplySingleStage							0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:80:		ApplyMultiStage								0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:134:		runKustomizeBuild							0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:143:		filterClusterScopedResources						82.4%
github.com/konveyor/crane/internal/apply/kustomize.go:199:		splitMultiDocYAMLToFiles						86.7%
github.com/konveyor/crane/internal/buildinfo/buildinfo.go:25:		readKustomizeVersion							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:22:		ReadFiles								100.0%
github.com/konveyor/crane/internal/file/file_helper.go:32:		readFiles								84.0%
github.com/konveyor/crane/internal/file/file_helper.go:91:		GetWhiteOutFilePath							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:95:		GetTransformPath							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:99:		GetIgnoredPatchesPath							0.0%
github.com/konveyor/crane/internal/file/file_helper.go:103:		updateTransformDirPath							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:107:		updateIgnoredPatchesDirPath						0.0%
github.com/konveyor/crane/internal/file/file_helper.go:114:		updatePath								100.0%
github.com/konveyor/crane/internal/file/file_helper.go:121:		GetOutputFilePath							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:131:		GetStageDir								100.0%
github.com/konveyor/crane/internal/file/file_helper.go:137:		GetInputDir								100.0%
github.com/konveyor/crane/internal/file/file_helper.go:143:		GetPatchesDir								100.0%
github.com/konveyor/crane/internal/file/file_helper.go:149:		GetKustomizationPath							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:155:		GetMetadataPath								100.0%
github.com/konveyor/crane/internal/file/file_helper.go:161:		GetResourceTypeFilePath							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:167:		GetPatchFilePath							100.0%
github.com/konveyor/crane/internal/file/file_helper.go:174:		GetStageTransformDir							0.0%
github.com/konveyor/crane/internal/file/file_helper.go:180:		GetStageOutputDir							0.0%
github.com/konveyor/crane/internal/file/file_helper.go:187:		GetResourceFilename							75.0%
github.com/konveyor/crane/internal/file/ordering.go:82:			GetResourceOrder							100.0%
github.com/konveyor/crane/internal/file/ordering.go:92:			GetOrderedResourceFilename						100.0%
github.com/konveyor/crane/internal/flags/global_flags.go:14:		ApplyFlags								0.0%
github.com/konveyor/crane/internal/flags/global_flags.go:21:		GetLogger								0.0%
github.com/konveyor/crane/internal/flags/global_flags.go:29:		initConfig								0.0%
github.com/konveyor/crane/internal/flags/help_groups.go:12:		KubernetesClientInheritedFlagNames					0.0%
github.com/konveyor/crane/internal/flags/help_groups.go:40:		SetGroupedHelp								0.0%
github.com/konveyor/crane/internal/kustomize/args.go:20:		ParseAndValidateArgs							100.0%
github.com/konveyor/crane/internal/kustomize/args.go:92:		splitArgs								100.0%
github.com/konveyor/crane/internal/kustomize/runner.go:21:		Build									82.4%
github.com/konveyor/crane/internal/kustomize/runner.go:55:		buildOptions								100.0%
github.com/konveyor/crane/internal/kustomize/runner.go:105:		setEnvVars								46.2%
github.com/konveyor/crane/internal/plugin/plugin_helper.go:21:		GetPlugins								0.0%
github.com/konveyor/crane/internal/plugin/plugin_helper.go:38:		getBinaryPlugins							0.0%
github.com/konveyor/crane/internal/plugin/plugin_helper.go:63:		IsExecAny								0.0%
github.com/konveyor/crane/internal/plugin/plugin_helper.go:67:		GetFilteredPlugins							0.0%
github.com/konveyor/crane/internal/plugin/plugin_helper.go:109:		isPluginInList								0.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:24:	BuildManifestMap							0.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:68:	GetYamlFromUrl								75.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:82:	YamlToManifest								72.7%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:104:	FilterPluginForOsArch							100.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:119:	GetDefaultSource							0.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:128:	LocateBinaryInPluginDir							0.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:140:	IsUrl									100.0%
github.com/konveyor/crane/internal/plugin/plugin_manager_helper.go:146:	getData									80.0%
github.com/konveyor/crane/internal/transform/instructions.go:31:	LoadInstructions							61.1%
github.com/konveyor/crane/internal/transform/instructions.go:63:	friendlyInstructionsDecodeError						87.5%
github.com/konveyor/crane/internal/transform/instructions.go:78:	ValidateInstructions							100.0%
github.com/konveyor/crane/internal/transform/instructions.go:112:	GenerateStageDirNames							100.0%
github.com/konveyor/crane/internal/transform/orchestrator.go:41:	RunMultiStage								75.6%
github.com/konveyor/crane/internal/transform/orchestrator.go:142:	executeStage								68.4%
github.com/konveyor/crane/internal/transform/orchestrator.go:189:	transformResources							68.4%
github.com/konveyor/crane/internal/transform/orchestrator.go:240:	formatResourceID							0.0%
github.com/konveyor/crane/internal/transform/orchestrator.go:247:	getPluginForStage							90.9%
github.com/konveyor/crane/internal/transform/orchestrator.go:274:	getAvailablePluginNames							0.0%
github.com/konveyor/crane/internal/transform/orchestrator.go:287:	applyStageTransforms							82.1%
github.com/konveyor/crane/internal/transform/orchestrator.go:354:	loadResourcesFromDirectory						85.7%
github.com/konveyor/crane/internal/transform/orchestrator.go:369:	writeResourcesToDirectory						73.1%
github.com/konveyor/crane/internal/transform/stages.go:22:		DiscoverStages								90.5%
github.com/konveyor/crane/internal/transform/stages.go:83:		FilterStages								100.0%
github.com/konveyor/crane/internal/transform/stages.go:112:		GetFirstStage								100.0%
github.com/konveyor/crane/internal/transform/stages.go:122:		GetLastStage								66.7%
github.com/konveyor/crane/internal/transform/stages.go:132:		GetPreviousStage							100.0%
github.com/konveyor/crane/internal/transform/stages.go:142:		GetNextStage								100.0%
github.com/konveyor/crane/internal/transform/stages.go:152:		ValidateStageName							100.0%
github.com/konveyor/crane/internal/transform/stages.go:161:		GenerateStageName							100.0%
github.com/konveyor/crane/internal/transform/test_helpers.go:8:		hasKustomizeCommand							100.0%
github.com/konveyor/crane/internal/transform/test_helpers.go:14:	contains								100.0%
github.com/konveyor/crane/internal/transform/test_helpers.go:23:	findInString								100.0%
github.com/konveyor/crane/internal/transform/writer.go:28:		NewKustomizeWriter							100.0%
github.com/konveyor/crane/internal/transform/writer.go:37:		WriteStage								68.4%
github.com/konveyor/crane/internal/transform/writer.go:218:		getResourceID								100.0%
github.com/konveyor/crane/internal/transform/writer.go:231:		filterValidRemoveOps							76.2%
github.com/konveyor/crane/internal/transform/writer.go:275:		pathExists								93.5%
github.com/konveyor/crane/internal/transform/writer.go:352:		generateKustomizationWithComments					93.8%
github.com/konveyor/crane/internal/transform/writer.go:383:		checkStageDirectory							23.1%
github.com/konveyor/crane/internal/validate/api_resources.go:24:	ParseAPIResourcesJSON							89.7%
github.com/konveyor/crane/internal/validate/matcher.go:25:		MatchResults								75.0%
github.com/konveyor/crane/internal/validate/matcher.go:36:		MatchResultsFromIndex							100.0%
github.com/konveyor/crane/internal/validate/matcher.go:76:		buildDiscoveryIndex							71.4%
github.com/konveyor/crane/internal/validate/matcher.go:110:		matchEntry								100.0%
github.com/konveyor/crane/internal/validate/matcher.go:139:		buildKindIndex								100.0%
github.com/konveyor/crane/internal/validate/matcher.go:151:		addSuggestion								91.7%
github.com/konveyor/crane/internal/validate/report.go:17:		FormatTable								91.3%
github.com/konveyor/crane/internal/validate/report.go:60:		FormatJSON								100.0%
github.com/konveyor/crane/internal/validate/report.go:67:		FormatYAML								0.0%
github.com/konveyor/crane/internal/validate/report.go:79:		WriteFailures								0.0%
github.com/konveyor/crane/internal/validate/report.go:115:		failureFileName								0.0%
github.com/konveyor/crane/internal/validate/report.go:129:		safeFilePart								0.0%
github.com/konveyor/crane/internal/validate/report.go:145:		parseAPIVersion								0.0%
github.com/konveyor/crane/internal/validate/scanner.go:34:		ScanManifests								76.5%
github.com/konveyor/crane/internal/validate/types.go:46:		HasIncompatible								100.0%
github.com/konveyor/crane/internal/validate/types.go:49:		IncompatibleResults							0.0%
github.com/konveyor/crane/main.go:22:					main									0.0%
total:									(statements)								49.2%

Posted by CI

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
e2e-tests/tests/tier1/mta_867_orphan_clusterrole_test.go (1)

50-69: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

No target-apply/validation step; test only checks export-side filtering.

Unlike the sibling tests in this cohort, this test never applies output to the target cluster nor validates the app comes up. That's likely intentional given the narrow focus (orphan ClusterRole filtering), but it means the test gives no signal on whether namespace-scoped resources still migrate correctly in this scenario.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@e2e-tests/tests/tier1/mta_867_orphan_clusterrole_test.go` around lines 50 -
69, Extend the test after RunCranePipelineWithChecks to apply the generated
output to the target cluster and validate the migrated application becomes
ready, following the sibling tier1 tests’ target-apply and app-validation flow.
Keep the existing _cluster export-directory assertion for orphan ClusterRole
filtering, and use the existing target/app validation helpers rather than adding
new test infrastructure.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@e2e-tests/tests/tier0/mta_866_na_no_cluster_resources_test.go`:
- Around line 77-88: Update the apply step following the “Applying namespace
resources to target as namespace-admin” marker to call ApplyDir on
kubectlTgtNonAdmin instead of kubectlTgt, preserving the existing output
directory and error assertion so the test exercises namespace-admin RBAC.
- Around line 27-32: Update the test setup in
mta_866_na_no_cluster_resources_test.go to use SetupActiveKubectlRunners,
allowing RUN_AS_ADMIN to select admin runners without requiring non-admin
contexts. Remove the standalone DeferCleanup(rbacCleanup) registration and
retain the existing cleanup invocation inside its closure so RBAC cleanup runs
only once.

---

Nitpick comments:
In `@e2e-tests/tests/tier1/mta_867_orphan_clusterrole_test.go`:
- Around line 50-69: Extend the test after RunCranePipelineWithChecks to apply
the generated output to the target cluster and validate the migrated application
becomes ready, following the sibling tier1 tests’ target-apply and
app-validation flow. Keep the existing _cluster export-directory assertion for
orphan ClusterRole filtering, and use the existing target/app validation helpers
rather than adding new test infrastructure.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6bfeb328-d4a8-463b-a567-ef5adfa085dc

📥 Commits

Reviewing files that changed from the base of the PR and between b4bc950 and bc9f3fb.

📒 Files selected for processing (3)
  • e2e-tests/tests/tier0/mta_866_na_no_cluster_resources_test.go
  • e2e-tests/tests/tier1/mta_856_multiple_crbs_minimal_rbac_test.go
  • e2e-tests/tests/tier1/mta_867_orphan_clusterrole_test.go

Comment thread e2e-tests/tests/tier0/mta_866_na_no_cluster_resources_test.go Outdated
Comment thread e2e-tests/tests/tier0/mta_866_na_no_cluster_resources_test.go
@RanWurmbrand
RanWurmbrand force-pushed the mta-856-866-867-rbac-e2e-tests branch from 335ed90 to 60e81c5 Compare July 12, 2026 11:56
Signed-off-by: Ran Wurmbrand <rwurmbra@redhat.com>
@RanWurmbrand
RanWurmbrand force-pushed the mta-856-866-867-rbac-e2e-tests branch from 60e81c5 to 20392b0 Compare July 12, 2026 13:50

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@e2e-tests/tests/tier0/mta_866_na_no_cluster_resources_test.go`:
- Around line 70-72: Strengthen the assertion around HasFilesRecursively so it
verifies the error is specifically a missing-directory condition, using
errors.Is with fs.ErrNotExist rather than only checking that an error occurred.
Preserve the existing no-cluster-resources scenario while preventing unrelated
filepath.Walk failures from passing the test.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 86633712-de23-43b1-8a61-b87669430863

📥 Commits

Reviewing files that changed from the base of the PR and between bc9f3fb and 20392b0.

📒 Files selected for processing (3)
  • e2e-tests/tests/tier0/mta_866_na_no_cluster_resources_test.go
  • e2e-tests/tests/tier1/mta_856_multiple_crbs_minimal_rbac_test.go
  • e2e-tests/tests/tier1/mta_867_orphan_clusterrole_test.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • e2e-tests/tests/tier1/mta_867_orphan_clusterrole_test.go
  • e2e-tests/tests/tier1/mta_856_multiple_crbs_minimal_rbac_test.go

Comment thread e2e-tests/tests/tier0/mta_866_na_no_cluster_resources_test.go Outdated
Signed-off-by: Ran Wurmbrand <rwurmbra@redhat.com>
@RanWurmbrand

Copy link
Copy Markdown
Contributor Author

those test was tested both on Minikube and ocp

@RanWurmbrand

Copy link
Copy Markdown
Contributor Author

/rfr

Expect(clusterDir).NotTo(BeADirectory())

By("Applying namespace resources to target as namespace-admin")
Expect(kubectlTgtNonAdmin.ApplyDir(filepath.Join(paths.OutputDir))).NotTo(HaveOccurred())

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can be Replaced with Expect(ApplyOutputToTargetNonAdmin(kubectlTgtNonAdmin, paths.OutputDir)).NotTo(HaveOccurred()) ??


By("Verifying orphan ClusterRole Did not migrate")
clusterDir := filepath.Join(paths.OutputDir, "resources", "_cluster")
_, _, err = utils.HasFilesRecursively(clusterDir)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

better to use Expect(clusterDir).NotTo(BeADirectory())

@aufi aufi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall looks good 👍 , but deffering to colleagues with better background on E2E test suite with approval.

@istein1

istein1 commented Jul 19, 2026

Copy link
Copy Markdown
Member

Medium severity

  1. MTA-866: Missing namespace cleanup on source and target. The established pattern (MTA-853, MTA-811) explicitly deletes namespaces on both clusters via DeferCleanup.
    MTA-866 omits this — rbacCleanup only revokes the RoleBinding, and CleanupScenario may not reliably clean the target namespace. Risks namespace leaks between runs.

  2. MTA-866: Cleanup should use separate DeferCleanup calls. The established pattern registers cleanup in 3 separate calls for LIFO ordering. MTA-866 bundles
    rbacCleanup() and CleanupScenario into one closure, losing ordered cleanup.

Low severity

  1. MTA-867: Fragile assertion for missing _cluster directory. Uses Expect(err).To(HaveOccurred()) which would also pass on permission errors or I/O errors. MTA-866 in the same PR correctly uses Expect(clusterDir).NotTo(BeADirectory()) — MTA-867 should match.
  2. MTA-867: Missing export failure check. MTA-856 checks no export failures occurred; MTA-867 skips this. Without it, an export failure that prevented the orphan
    ClusterRole from appearing would cause the test to pass for the wrong reason.

Trivial

  1. Typos — "resurces" → "resources", "dont expct" → "don't expect"

@istein1
istein1 self-requested a review July 19, 2026 08:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

4 participants