Skip to content

Enhanced MTA-831 test to validate crane validate report in YAML format#543

Open
nachandr wants to merge 6 commits into
migtools:mainfrom
nachandr:offline_yaml
Open

Enhanced MTA-831 test to validate crane validate report in YAML format#543
nachandr wants to merge 6 commits into
migtools:mainfrom
nachandr:offline_yaml

Conversation

@nachandr

@nachandr nachandr commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Fixes #544

  • Refactored the test to validate both JSON and YAML outputs and parse reports with shared helpers; This also automates MTA-848. Hence, the It block has a reference to both tests.
  • Also, verified that the data in both reports match

@coderabbitai

coderabbitai Bot commented Jun 17, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The MTA-831 e2e test is refactored to support both JSON and YAML crane validate outputs. Validation type definitions are extended with YAML serialization tags. Two new test helpers—runValidateAndParseReport and verifyCompatibleResources—extract reusable validation logic. The existing inline JSON validation is replaced with a table-driven loop that validates both formats into separate directories and verifies cross-format equivalence.

Changes

YAML Serialization and Offline Validate Test Refactor

Layer / File(s) Summary
Validation types: YAML serialization support
internal/validate/types.go
ValidationResult and ValidationReport struct tags are extended with yaml:"..." equivalents alongside existing json:"..." tags, preserving omitempty semantics and enabling consistent JSON/YAML unmarshaling.
Test refactoring: helpers and dual-format validation
e2e-tests/tests/tier0/mta_831_validate_compatible_resources_offline_test.go
Adds YAML import and two helpers: runValidateAndParseReport (runs crane validate, reads report.<ext>, unmarshals as JSON or YAML) and verifyCompatibleResources (asserts offline mode, APIResourcesSource, 5 scanned/5 compatible/0 incompatible counts, expected resource kinds including RoleBinding, no failures/ directory). Replaces inline JSON-only validation with table-driven execution that validates both JSON and YAML into separate directories, verifies each via helpers, and checks cross-format equivalence by matching mode, APIResourcesSource, scan counters, and per-result fields (Kind/Namespace/APIVersion/Status/ResourcePlural).

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

  • migtools/crane#302: Implements the crane validate report writer's JSON/YAML output which the refactored helpers unmarshal into ValidationReport.
  • migtools/crane#321: Implements offline validation mode (--api-resources flag and report metadata) which the refactored test helpers assert against.
  • migtools/crane#439: Contains the original inline MTA-831 offline validate test that this PR refactors into reusable helpers and extends with YAML output parsing.

Suggested reviewers

  • msajidmansoori12

Poem

🐇 Hop hop, the helpers hop near,
No more inline code to fear!
JSON checked, then YAML too,
Five resources—all pass through.
The rabbit refactored the test—
Offline validation at its best! ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: enhancing the MTA-831 test to validate crane validate reports in YAML format alongside JSON.
Linked Issues check ✅ Passed The PR fully addresses issue #544 by implementing comprehensive YAML format validation for offline mode crane validate reports, with both JSON and YAML output testing.
Out of Scope Changes check ✅ Passed All changes are directly related to the PR objective: test file refactoring for YAML validation and struct tag updates to enable YAML serialization.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ 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 and usage tips.

@github-actions

github-actions Bot commented Jun 17, 2026

Copy link
Copy Markdown

Test Coverage Report

Total: 46.0%

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 — 9.2%
  • 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 — 62.7%
  • github.com/konveyor/crane/cmd/version — 20.0%
  • github.com/konveyor/crane/internal/apply — 33.6%
  • github.com/konveyor/crane/internal/buildinfo — 100.0%
  • github.com/konveyor/crane/internal/file — 72.8%
  • 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.9%
  • github.com/konveyor/crane/internal/validate — 58.6%
Full function-level details
github.com/konveyor/crane/cmd/apply/apply.go:42:			Complete					100.0%
github.com/konveyor/crane/cmd/apply/apply.go:48:			Validate					87.5%
github.com/konveyor/crane/cmd/apply/apply.go:62:			Run						0.0%
github.com/konveyor/crane/cmd/apply/apply.go:66:			NewApplyCommand					0.0%
github.com/konveyor/crane/cmd/apply/apply.go:107:			getStageNames					100.0%
github.com/konveyor/crane/cmd/apply/apply.go:115:			addFlagsForOptions				0.0%
github.com/konveyor/crane/cmd/apply/apply.go:129:			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:17:				normalizeGroupSet				85.7%
github.com/konveyor/crane/cmd/export/crd.go:29:				shouldSkipCRDGroup				100.0%
github.com/konveyor/crane/cmd/export/crd.go:50:				crdFailureAPIResourceName			100.0%
github.com/konveyor/crane/cmd/export/crd.go:56:				getOperatorManager				92.9%
github.com/konveyor/crane/cmd/export/crd.go:88:				collectRelatedCRDs				90.6%
github.com/konveyor/crane/cmd/export/discover.go:40:			hasClusterScopedManifests			100.0%
github.com/konveyor/crane/cmd/export/discover.go:58:			prepareClusterResourceDir			100.0%
github.com/konveyor/crane/cmd/export/discover.go:74:			prepareFailuresDir				100.0%
github.com/konveyor/crane/cmd/export/discover.go:86:			writeResources					85.7%
github.com/konveyor/crane/cmd/export/discover.go:134:			writeErrors					83.3%
github.com/konveyor/crane/cmd/export/discover.go:176:			getFilePath					95.2%
github.com/konveyor/crane/cmd/export/discover.go:214:			discoverPreferredResources			100.0%
github.com/konveyor/crane/cmd/export/discover.go:243:			resourceToExtract				100.0%
github.com/konveyor/crane/cmd/export/discover.go:312:			isAdmittedResource				100.0%
github.com/konveyor/crane/cmd/export/discover.go:321:			getObjects					100.0%
github.com/konveyor/crane/cmd/export/discover.go:355:			iterateItemsByGet				93.8%
github.com/konveyor/crane/cmd/export/discover.go:381:			iterateItemsInList				92.3%
github.com/konveyor/crane/cmd/export/export.go:53:			Complete					90.0%
github.com/konveyor/crane/cmd/export/export.go:92:			Validate					100.0%
github.com/konveyor/crane/cmd/export/export.go:122:			validateExportNamespace				87.5%
github.com/konveyor/crane/cmd/export/export.go:139:			allResourceListsForbidden			87.5%
github.com/konveyor/crane/cmd/export/export.go:157:			Run						0.0%
github.com/konveyor/crane/cmd/export/export.go:270:			NewExportCommand				54.2%
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:138:		writeProgressToFile				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:148:		Close						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:154:		Streams						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:190:		addDataSize					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:215:		String						100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:219:		MarshalJSON					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:223:		AsString					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:271:		NewProgress					100.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:291:		Completed					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:296:		Status						38.5%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:321:		Merge						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:376:		newDataSize					72.7%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:399:		parseRsyncLogs					76.1%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:479:		waitForPodRunning				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/progress.go:513:		getFinalPodStatus				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:89:		Validate					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:117:		Validate					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:133:		NewTransferPVCCommand				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:169:		addFlagsToTransferPVCCommand			0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:189:		Complete					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:220:		Validate					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:246:		Run						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:250:		getClientFromContext				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:271:		getRestConfigFromContext			0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:278:		run						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:485:		getValidatedResourceName			0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:495:		getNodeNameForPVC				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:515:		getIDsForNamespace				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:541:		getRsyncClientPodSecurityContext		0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:553:		getRsyncServerPodSecurityContext		0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:565:		garbageCollect					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:602:		deleteResourcesIteratively			0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:628:		deleteResourcesForGVK				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:649:		followClientLogs				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:678:		waitForEndpoint					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:690:		createEndpoint					0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:735:		getRouteHostName				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:752:		buildDestinationPVC				0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:773:		ApplyTo						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:793:		ApplyTo						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:805:		ApplyTo						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:821:		String						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:825:		Set						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:835:		Type						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:841:		parseSourceDestinationMapping			100.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:863:		String						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:867:		Set						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:876:		Type						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:880:		String						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:884:		Set						0.0%
github.com/konveyor/crane/cmd/transfer-pvc/transfer-pvc.go:894:		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:154:		addFlagsForOptions				0.0%
github.com/konveyor/crane/cmd/transform/transform.go:176:		run						11.8%
github.com/konveyor/crane/cmd/transform/transform.go:327:		optionalFlagsToLower				100.0%
github.com/konveyor/crane/cmd/transform/transform.go:337:		runStageWithCleanup				0.0%
github.com/konveyor/crane/cmd/transform/transform.go:353:		reconcileInstructionStages			81.0%
github.com/konveyor/crane/cmd/transform/transform.go:396:		ensurePreviousStagesRun				83.3%
github.com/konveyor/crane/cmd/transform/transform.go:413:		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					83.3%
github.com/konveyor/crane/cmd/validate/validate.go:49:			Validate					100.0%
github.com/konveyor/crane/cmd/validate/validate.go:91:			Run						17.5%
github.com/konveyor/crane/cmd/validate/validate.go:194:			NewValidateCommand				50.0%
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:144:			CompareDirectoryFileSets			78.9%
github.com/konveyor/crane/e2e-tests/utils/utils.go:179:			CompareDirectoryYAMLSemantics			82.4%
github.com/konveyor/crane/e2e-tests/utils/utils.go:213:			CompareDirectoryYAMLSemanticsExport		89.3%
github.com/konveyor/crane/e2e-tests/utils/utils.go:265:			buildNormalizedExportIndex			81.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:305:			canonicalizeDocs				87.5%
github.com/konveyor/crane/e2e-tests/utils/utils.go:319:			extractResourceIdentity				77.8%
github.com/konveyor/crane/e2e-tests/utils/utils.go:382:			parseYAMLDocuments				100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:401:			compareYAMLFileBytes				100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:421:			AssertNoKindsInOutput				0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:477:			AssertKindsInOutput				0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:529:			LooksLikeYAMLFile				100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:543:			normalizeUnstableFields				100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:580:			normalizePodServiceAccountVolumeNames		90.9%
github.com/konveyor/crane/e2e-tests/utils/utils.go:639:			normalizeWithPath				92.9%
github.com/konveyor/crane/e2e-tests/utils/utils.go:669:			shouldDropField					100.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:720:			AssertWhiteoutResourceFilesExist		0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:760:			AssertWhiteoutResourceFileCount			0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:792:			AssertWhiteoutCommentsInKustomization		0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:847:			AssertKindsNotInActiveKustomizeResources	0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:889:			CaptureAPISurfaceScriptPath			75.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:908:			ToInt64						0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:925:			ExtractCPUAverageUtilization			0.0%
github.com/konveyor/crane/e2e-tests/utils/utils.go:961:			ParseValidationReport				0.0%
github.com/konveyor/crane/e2e-tests/utils/utils_validate.go:69:		VerifyValidateResults				0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:30:		ApplySingleStage				0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:79:		ApplyMultiStage					0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:133:		runKustomizeBuild				0.0%
github.com/konveyor/crane/internal/apply/kustomize.go:142:		filterClusterScopedResources			82.4%
github.com/konveyor/crane/internal/apply/kustomize.go:198:		splitMultiDocYAMLToFiles			85.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				0.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					72.7%
github.com/konveyor/crane/internal/transform/orchestrator.go:194:	transformResources				68.4%
github.com/konveyor/crane/internal/transform/orchestrator.go:245:	formatResourceID				0.0%
github.com/konveyor/crane/internal/transform/orchestrator.go:252:	getPluginForStage				90.9%
github.com/konveyor/crane/internal/transform/orchestrator.go:279:	getAvailablePluginNames				0.0%
github.com/konveyor/crane/internal/transform/orchestrator.go:292:	applyStageTransforms				82.1%
github.com/konveyor/crane/internal/transform/orchestrator.go:359:	loadResourcesFromDirectory			85.7%
github.com/konveyor/crane/internal/transform/orchestrator.go:374:	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					92.3%
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:21:					main						0.0%
total:									(statements)					46.0%

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

🤖 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_831_validate_compatible_resources_offline_test.go`:
- Line 246: In the YAML success block logging statement around line 246, change
the field reference from report.APIResourcesSource to
reportYAML.APIResourcesSource to ensure consistency when logging the YAML report
details. The reportYAML.Mode field is being logged in the same statement, so the
APIResourcesSource field should also come from the reportYAML object to
accurately reflect the YAML report source information.
- Line 231: The YAML validation phase in the runValidateAndParseReport call is
using a different input directory parameter (validateDirYAML) than the JSON
validation phase, which defeats the parity check between the two formats. To fix
this, identify what input directory parameter was used in the JSON validation
call and use that same parameter in the YAML validation call on line 231 instead
of validateDirYAML, ensuring both validation phases operate on identical inputs
for proper format comparison.
🪄 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: dc10f8eb-5a3e-486a-a7bc-391e2e04c36f

📥 Commits

Reviewing files that changed from the base of the PR and between 652e9f2 and 9421b3d.

📒 Files selected for processing (1)
  • e2e-tests/tests/tier0/mta_831_validate_compatible_resources_offline_test.go

Comment thread e2e-tests/tests/tier0/mta_831_validate_compatible_resources_offline_test.go Outdated
Comment thread e2e-tests/tests/tier0/mta_831_validate_compatible_resources_offline_test.go Outdated
Comment thread e2e-tests/tests/tier0/mta_831_validate_compatible_resources_offline_test.go Outdated

@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

🧹 Nitpick comments (1)
e2e-tests/tests/tier0/mta_831_validate_compatible_resources_offline_test.go (1)

203-247: ⚡ Quick win

Prefer table-driven subcases for JSON/YAML validation paths.

These two format phases are nearly identical; table-driving them will reduce duplication and keep assertions in sync as coverage grows.

Refactor sketch
-		By("Run crane validate in offline mode with output in JSON format")
-		validateDir := filepath.Join(paths.TempDir, "validate")
-		report, err := runValidateAndParseReport(runner, paths.OutputDir, validateDir, apiSurfaceFile, "json")
-		...
-		By("Run crane validate in offline mode with output in YAML format")
-		validateDirYAML := filepath.Join(paths.TempDir, "validate-yaml")
-		reportYAML, err := runValidateAndParseReport(runner, paths.OutputDir, validateDirYAML, apiSurfaceFile, "yaml")
-		...
+		cases := []struct {
+			format      string
+			label       string
+			validateDir string
+		}{
+			{format: "json", label: "JSON", validateDir: filepath.Join(paths.TempDir, "validate")},
+			{format: "yaml", label: "YAML", validateDir: filepath.Join(paths.TempDir, "validate-yaml")},
+		}
+		for _, tc := range cases {
+			tc := tc
+			By("Run crane validate in offline mode with output in " + tc.label + " format")
+			report, err := runValidateAndParseReport(runner, paths.OutputDir, tc.validateDir, apiSurfaceFile, tc.format)
+			Expect(err).NotTo(HaveOccurred())
+			Expect(report.APIResourcesSource).To(Equal(apiSurfaceFile))
+			verifyCompatibleResources(report, namespace, tc.validateDir, tc.label)
+		}

As per coding guidelines, "Use table-driven tests for multiple scenarios in Go test code."

🤖 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/tier0/mta_831_validate_compatible_resources_offline_test.go`
around lines 203 - 247, The JSON and YAML validation blocks in this test are
nearly identical with only the format parameter, directory names, and report
variable names differing. Refactor this code to use a table-driven approach by
creating a slice of structs containing the format type (json/yaml), directory
path, and expected output label, then iterate through this table to execute the
common validation logic once for each format instead of duplicating the
runValidateAndParseReport, verifyCompatibleResources, and log.Printf calls. This
will eliminate duplication and ensure both JSON and YAML validation paths remain
in sync as the test coverage evolves.

Source: Coding guidelines

🤖 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_831_validate_compatible_resources_offline_test.go`:
- Around line 230-235: The YAML validation test case in this section is missing
a parity assertion for the APIResourcesSource field. After the reportYAML is
parsed from the runValidateAndParseReport call, add an assertion to verify that
the APIResourcesSource in the YAML report matches the apiSurfaceFile variable,
similar to what is being done for JSON validation elsewhere in the test suite.
This ensures that YAML-specific regressions in offline source propagation are
caught and maintains test parity between JSON and YAML output formats.

---

Nitpick comments:
In `@e2e-tests/tests/tier0/mta_831_validate_compatible_resources_offline_test.go`:
- Around line 203-247: The JSON and YAML validation blocks in this test are
nearly identical with only the format parameter, directory names, and report
variable names differing. Refactor this code to use a table-driven approach by
creating a slice of structs containing the format type (json/yaml), directory
path, and expected output label, then iterate through this table to execute the
common validation logic once for each format instead of duplicating the
runValidateAndParseReport, verifyCompatibleResources, and log.Printf calls. This
will eliminate duplication and ensure both JSON and YAML validation paths remain
in sync as the test coverage evolves.
🪄 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: 00dc8eff-a0ff-43f9-a86f-3ee38008979b

📥 Commits

Reviewing files that changed from the base of the PR and between 9421b3d and e2abd50.

📒 Files selected for processing (1)
  • e2e-tests/tests/tier0/mta_831_validate_compatible_resources_offline_test.go

Comment thread e2e-tests/tests/tier0/mta_831_validate_compatible_resources_offline_test.go Outdated
@nachandr nachandr force-pushed the offline_yaml branch 2 times, most recently from 3d13b1b to cb2d9d2 Compare June 18, 2026 03:32
@nachandr nachandr requested a review from stillalearner June 18, 2026 04:31
@nachandr

Copy link
Copy Markdown
Contributor Author

Actionable comments posted: 1
🧹 Nitpick comments (1)

e2e-tests/tests/tier0/mta_831_validate_compatible_resources_offline_test.go (1)> 203-247: ⚡ Quick win

Prefer table-driven subcases for JSON/YAML validation paths.
These two format phases are nearly identical; table-driving them will reduce duplication and keep assertions in sync as coverage grows.

Refactor sketch

-		By("Run crane validate in offline mode with output in JSON format")
-		validateDir := filepath.Join(paths.TempDir, "validate")
-		report, err := runValidateAndParseReport(runner, paths.OutputDir, validateDir, apiSurfaceFile, "json")
-		...
-		By("Run crane validate in offline mode with output in YAML format")
-		validateDirYAML := filepath.Join(paths.TempDir, "validate-yaml")
-		reportYAML, err := runValidateAndParseReport(runner, paths.OutputDir, validateDirYAML, apiSurfaceFile, "yaml")
-		...
+		cases := []struct {
+			format      string
+			label       string
+			validateDir string
+		}{
+			{format: "json", label: "JSON", validateDir: filepath.Join(paths.TempDir, "validate")},
+			{format: "yaml", label: "YAML", validateDir: filepath.Join(paths.TempDir, "validate-yaml")},
+		}
+		for _, tc := range cases {
+			tc := tc
+			By("Run crane validate in offline mode with output in " + tc.label + " format")
+			report, err := runValidateAndParseReport(runner, paths.OutputDir, tc.validateDir, apiSurfaceFile, tc.format)
+			Expect(err).NotTo(HaveOccurred())
+			Expect(report.APIResourcesSource).To(Equal(apiSurfaceFile))
+			verifyCompatibleResources(report, namespace, tc.validateDir, tc.label)
+		}

As per coding guidelines, "Use table-driven tests for multiple scenarios in Go test code."

🤖 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/tier0/mta_831_validate_compatible_resources_offline_test.go`
around lines 203 - 247, The JSON and YAML validation blocks in this test are
nearly identical with only the format parameter, directory names, and report
variable names differing. Refactor this code to use a table-driven approach by
creating a slice of structs containing the format type (json/yaml), directory
path, and expected output label, then iterate through this table to execute the
common validation logic once for each format instead of duplicating the
runValidateAndParseReport, verifyCompatibleResources, and log.Printf calls. This
will eliminate duplication and ensure both JSON and YAML validation paths remain
in sync as the test coverage evolves.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents

🪄 Autofix (Beta)

ℹ️ Review info

Added table-driven subcases for JSON/YAML validation paths.

Comment thread e2e-tests/tests/tier0/mta_831_validate_compatible_resources_offline_test.go Outdated
@RanWurmbrand

Copy link
Copy Markdown

just a thought, maybe it will be good to move the helper functions into the test_helpers.go file? it will require some changes, but maybe it will be worth it if its likely that those helpers will be helpful in future tests?

@nachandr

Copy link
Copy Markdown
Contributor Author

just a thought, maybe it will be good to move the helper functions into the test_helpers.go file? it will require some changes, but maybe it will be worth it if its likely that those helpers will be helpful in future tests?

I may need the helper functions in another test. So, I will make the changes and move the functions out to the test_helpers.go file in a follow up PR.

@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 QE eyes from @stillalearner or @msajidmansoori12 could be better, so just providing what I've seen or got from claude review.

  1. Namespace change seems unrelated (line 121)
  -             namespace := appName
  +             namespace := "multi-resource-831-offline"

Question: Why change the namespace from appName (which would be "multi-resource-app") to a hardcoded "multi-resource-831-offline"? This seems unrelated to adding YAML support.

Potential issue: If this namespace change is intentional, it should be documented in the PR description. If it's accidental, it should be reverted to maintain consistency.

  1. Missing import cleanup

The new code adds "gopkg.in/yaml.v3" but I don't see any removed imports. This is fine, but worth verifying that no unused imports remain.

  1. Test description could be more accurate (line 118)

It("[MTA-831] Generate and validate crane validate report in JSON format",

This description says "JSON format" but the test actually validates both JSON and YAML formats now. Should be:
It("[MTA-831] Generate and validate crane validate report in JSON and YAML formats",

@nachandr nachandr force-pushed the offline_yaml branch 2 times, most recently from 10706c2 to cd472ab Compare June 19, 2026 04:36
@nachandr nachandr requested a review from stillalearner June 19, 2026 04:37
@nachandr

Copy link
Copy Markdown
Contributor Author
2. Missing import cleanup

The new code adds "gopkg.in/yaml.v3" but I don't see any removed imports. This is fine, but worth verifying that no unused imports remain.

Verified again that there are no unused imports.

nachandr added 5 commits June 19, 2026 12:01
Signed-off-by: Nandini Chandra <nachandr@redhat.com>
Signed-off-by: Nandini Chandra <nachandr@redhat.com>
Signed-off-by: Nandini Chandra <nachandr@redhat.com>
Signed-off-by: Nandini Chandra <nachandr@redhat.com>
Signed-off-by: Nandini Chandra <nachandr@redhat.com>
Signed-off-by: Nandini Chandra <nachandr@redhat.com>
@@ -0,0 +1,134 @@
// Package utils provides utilities for e2e tests.

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.

i dont think utils_validate.go is needed here, can we please use the same utils.go file..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[tier1] Test and automate the validation of YAML output reports for offline mode

5 participants