Skip to content

Conversation

@tjones60
Copy link
Contributor

@tjones60 tjones60 commented Jan 23, 2026

Enable UEFI and PCAT Hyper-V x64 OpenHCL servicing tests using the CVM runners. This should hopefully resolve #1652, since they have a newer host OS. Also enables downgrade and upgrade servicing for Hyper-V by cold patching the OpenHCL binary.

@tjones60 tjones60 requested a review from a team as a code owner January 23, 2026 01:01
Copilot AI review requested due to automatic review settings January 23, 2026 01:01
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR enables UEFI and PCAT Hyper-V x64 OpenHCL servicing tests that were previously failing in CI. The tests are now configured to run on CVM runners which have a newer host OS that should resolve issue #1652.

Changes:

  • Enabled hyperv_openhcl_pcat_x64 and hyperv_openhcl_uefi_x64 test configurations for the basic_servicing test
  • Moved servicing test execution from standard runners to CVM runners (except for ADO backend where they remain disabled due to GitHub authentication limitations)
  • Consolidated filter logic to unconditionally exclude servicing tests from standard runners

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
vmm_tests/vmm_tests/tests/tests/multiarch/openhcl_servicing.rs Uncommented two previously disabled Hyper-V x64 test configurations (PCAT and UEFI) for the basic_servicing test
flowey/flowey_hvlite/src/pipelines/checkin_gates.rs Refactored test filters to exclude servicing tests from standard runners and conditionally include them in CVM runners (except ADO backend)

enable_nvme_keepalive: false, // TODO: Support NVMe KA in the Hyper-V Petri Backend
enable_mana_keepalive: false,
override_version_checks: false,
override_version_checks: true, // TODO: figure out why our tests don't pass the version check
Copy link
Contributor

Choose a reason for hiding this comment

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

Does the HyperV variant of the servicing test actually change the underlying firmware? IIRC I had to remove that when I brought these online (meaning that these are just "null payload" tests). Maybe that's why?

PS ... huzzaaahhh!! Thanks for turning these on :)

Copy link
Contributor

Choose a reason for hiding this comment

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

Oops, I see you fixed that as well. Bummer. Do we have an issue to track this?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Copy link
Contributor

@mattkur mattkur left a comment

Choose a reason for hiding this comment

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

Minor process question, but overall I think this LGTM.

enable_nvme_keepalive: false, // TODO: Support NVMe KA in the Hyper-V Petri Backend
enable_mana_keepalive: false,
override_version_checks: false,
override_version_checks: true, // TODO: figure out why our tests don't pass the version check
Copy link
Contributor

Choose a reason for hiding this comment

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

Oops, I see you fixed that as well. Bummer. Do we have an issue to track this?

Comment on lines 1055 to 1058
// Currently, we don't have a good way for ADO runners to authenticate in GitHub
// (that don't involve PATs) which is a requirement to download GH Workflow Artifacts
// required by the servicing tests. For now, we will exclude servicing tests from running
// in the internal mirror.
Copy link
Contributor

Choose a reason for hiding this comment

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

I recognize this is not a new restriction, but this seems overly restrictive. Presumably we only need these artifacts for the tests that do servicing to/from published revisions. A "null payload" servicing test should just need the pipeline build .bin file artifact, right?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Hmm yeah can probably change that

Copy link
Contributor Author

Choose a reason for hiding this comment

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

These filters are getting a bit out of hand. More motivation for doing better automatic dependency detection and updating the runners, but we should get these tests running first.

Comment on lines 690 to 692
// overwrite the igvm file
fs_err::copy(new_openhcl.get(), self.temp_dir.path().join(IGVM_FILE_NAME))
.context("failed to replace igvm file")?;
Copy link
Contributor

Choose a reason for hiding this comment

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

Could you please leave a comment indicating why a cold patch is sufficient, as opposed to calling the WMI to update the firmware path?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Mike said this is how it works in Azure. We cold patch the vmfirmwareigvm.dll and then when you restart openhcl it picks up the new version. Here we have configured the vm to pick up the new version from a custom bin, but it works the same. I can expand on the comment a bit.

@github-actions
Copy link

@github-actions
Copy link

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

vmm_tests: hyperv: openhcl servicing fails on intel x64

2 participants