Struct PetriVmConfigOpenVmm

Source
pub struct PetriVmConfigOpenVmm { /* private fields */ }
Expand description

Configuration state for a test VM.

Implementations§

Source§

impl PetriVmConfigOpenVmm

Source

pub fn new( params: &PetriTestParams<'_>, artifacts: PetriVmArtifactsOpenVmm, driver: &DefaultDriver, ) -> Result<Self>

Create a new VM configuration.

Source§

impl PetriVmConfigOpenVmm

Source

pub fn with_vmbus_redirect(self) -> Self

Enable VMBus redirection.

Source

pub fn with_vtl0_alias_map(self) -> Self

Enable the VTL0 alias map.

Source

pub fn with_tpm(self) -> Self

Enable the TPM with ephemeral storage.

Source

pub fn with_processor_topology(self, topology: ProcessorTopology) -> Self

Set the VM to use the specified number of virtual processors.

Using 1 CPU is useful for heavier OpenHCL tests, as our WHP emulation layer is rather slow when dealing with cross-cpu communication.

Source

pub fn with_secure_boot(self) -> Self

Set the VM to enable secure boot and inject the templates per OS flavor.

Source

pub fn with_windows_secure_boot_template(self) -> Self

Inject Windows secure boot templates into the VM’s UEFI.

Source

pub fn with_uefi_ca_secure_boot_template(self) -> Self

Inject UEFI CA secure boot templates into the VM’s UEFI.

Source

pub fn with_battery(self) -> Self

Enable the battery for the VM.

Source

pub fn with_tpm_state_persistence(self) -> Self

Enable TPM state persistence

Source

pub fn with_igvm_attest_test_config(self, config: IgvmAttestTestConfig) -> Self

Set test config for the GED’s IGVM attest request handler

Source

pub fn with_nic(self) -> Self

Enable a synthnic for the VM.

Uses a mana emulator and the paravisor if a paravisor is present.

Source

pub fn with_uefi_frontpage(self, enable_frontpage: bool) -> Self

Specifies whether the UEFI frontpage app is enabled.

If it is disabled, then the VM will shutdown if there are no configured boot apps.

Source

pub fn with_default_boot_always_attempt(self, val: bool) -> Self

Specifies whether the UEFI will always attempt a default boot

Source

pub fn with_vmgs<T: IsTestVmgs>(self, vmgs: PetriVmgsResource<T>) -> Self

Specifies an existing VMGS file to use

Source

pub fn with_openhcl_command_line(self, additional_cmdline: &str) -> Self

Add custom command line arguments to OpenHCL.

Source

pub fn with_confidential_filtering(self) -> Self

Enable confidential filtering, even if the VM is not confidential.

Source

pub fn with_custom_openhcl(self, artifact: ResolvedArtifact) -> Self

Load a custom OpenHCL firmware file.

Source

pub fn with_custom_vtl2_settings( self, f: impl FnOnce(&mut Vtl2Settings), ) -> Self

Add custom VTL 2 settings.

Source

pub fn with_vtl2_relocation_mode(self, mode: Vtl2BaseAddressType) -> Self

Load with the specified VTL2 relocation mode.

Source

pub fn with_custom_config(self, f: impl FnOnce(&mut Config)) -> Self

This is intended for special one-off use cases. As soon as something is needed in multiple tests we should consider making it a supported pattern.

Source

pub fn with_agent_file(self, name: &str, artifact: ResolvedArtifact) -> Self

Adds a file to the agent image.

Source

pub fn with_openhcl_agent_file( self, name: &str, artifact: ResolvedArtifact, ) -> Self

Adds a file to the OpenHCL agent image.

Source

pub fn with_allow_early_vtl0_access(self, allow: bool) -> Self

Specifies whether VTL2 should be allowed to access VTL0 memory before it sets any VTL protections.

This is needed just for the TMK VMM, and only until it gains support for setting VTL protections.

Source§

impl PetriVmConfigOpenVmm

Source

pub async fn run_without_agent(self) -> Result<PetriVmOpenVmm>

Build and boot the requested VM. Does not configure and start pipette. Should only be used for testing platforms that pipette does not support.

Source

pub async fn run(self) -> Result<(PetriVmOpenVmm, PipetteClient)>

Run the VM, launching pipette and returning a client to it.

Source

pub async fn run_with_lazy_pipette(self) -> Result<PetriVmOpenVmm>

Run the VM, configuring pipette to automatically start, but do not wait for it to connect. This is useful for tests where the first boot attempt is expected to not succeed, but pipette functionality is still desired.

Source§

impl PetriVmConfigOpenVmm

Source

pub fn os_flavor(&self) -> OsFlavor

Get the OS that the VM will boot into.

Trait Implementations§

Source§

impl PetriVmConfig for PetriVmConfigOpenVmm

Source§

fn run_without_agent<'async_trait>( self: Box<Self>, ) -> Pin<Box<dyn Future<Output = Result<Box<dyn PetriVm>>> + Send + 'async_trait>>
where Self: 'async_trait,

Build and boot the requested VM. Does not configure and start pipette. Should only be used for testing platforms that pipette does not support.
Source§

fn run_with_lazy_pipette<'async_trait>( self: Box<Self>, ) -> Pin<Box<dyn Future<Output = Result<Box<dyn PetriVm>>> + Send + 'async_trait>>
where Self: 'async_trait,

Run the VM, configuring pipette to automatically start, but do not wait for it to connect. This is useful for tests where the first boot attempt is expected to not succeed, but pipette functionality is still desired.
Source§

fn run<'async_trait>( self: Box<Self>, ) -> Pin<Box<dyn Future<Output = Result<(Box<dyn PetriVm>, PipetteClient)>> + Send + 'async_trait>>
where Self: 'async_trait,

Run the VM, launching pipette and returning a client to it.
Source§

fn with_secure_boot(self: Box<Self>) -> Box<dyn PetriVmConfig>

Set the VM to enable secure boot and inject the templates per OS flavor.
Source§

fn with_windows_secure_boot_template(self: Box<Self>) -> Box<dyn PetriVmConfig>

Inject Windows secure boot templates into the VM’s UEFI.
Source§

fn with_uefi_ca_secure_boot_template(self: Box<Self>) -> Box<dyn PetriVmConfig>

Inject UEFI CA secure boot templates into the VM’s UEFI.
Source§

fn with_processor_topology( self: Box<Self>, topology: ProcessorTopology, ) -> Box<dyn PetriVmConfig>

Set the VM to use the specified processor topology.
Source§

fn with_custom_openhcl( self: Box<Self>, artifact: ResolvedArtifact, ) -> Box<dyn PetriVmConfig>

Sets a custom OpenHCL IGVM file to use.
Source§

fn with_openhcl_command_line( self: Box<Self>, command_line: &str, ) -> Box<dyn PetriVmConfig>

Sets the command line for the paravisor.
Source§

fn with_agent_file( self: Box<Self>, name: &str, artifact: ResolvedArtifact, ) -> Box<dyn PetriVmConfig>

Adds a file to the VM’s pipette agent image.
Source§

fn with_openhcl_agent_file( self: Box<Self>, name: &str, artifact: ResolvedArtifact, ) -> Box<dyn PetriVmConfig>

Adds a file to the paravisor’s pipette agent image.
Source§

fn with_uefi_frontpage(self: Box<Self>, enable: bool) -> Box<dyn PetriVmConfig>

Sets whether UEFI frontpage is enabled.
Source§

fn with_vmbus_redirect(self: Box<Self>, _: bool) -> Box<dyn PetriVmConfig>

Run the VM with Enable VMBus relay enabled
Source§

fn os_flavor(&self) -> OsFlavor

Get the OS that the VM will boot into.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more