pub struct PetriVmBuilder<T: PetriVmmBackend> { /* private fields */ }
Expand description
Petri VM builder
Implementations§
Source§impl<T: PetriVmmBackend> PetriVmBuilder<T>
impl<T: PetriVmmBackend> PetriVmBuilder<T>
Sourcepub fn new(
params: &PetriTestParams<'_>,
artifacts: PetriVmArtifacts<T>,
driver: &DefaultDriver,
) -> Result<Self>
pub fn new( params: &PetriTestParams<'_>, artifacts: PetriVmArtifacts<T>, driver: &DefaultDriver, ) -> Result<Self>
Create a new VM configuration.
Source§impl<T: PetriVmmBackend> PetriVmBuilder<T>
impl<T: PetriVmmBackend> PetriVmBuilder<T>
Sourcepub async fn run_without_agent(self) -> Result<PetriVm<T>>
pub async fn run_without_agent(self) -> Result<PetriVm<T>>
Build and run the VM, then wait for the VM to emit the expected boot event (if configured). Does not configure and start pipette. Should only be used for testing platforms that pipette does not support.
Sourcepub async fn run(self) -> Result<(PetriVm<T>, PipetteClient)>
pub async fn run(self) -> Result<(PetriVm<T>, PipetteClient)>
Build and run the VM, then wait for the VM to emit the expected boot event (if configured). Launches pipette and returns a client to it.
Sourcepub fn with_expect_boot_failure(self) -> Self
pub fn with_expect_boot_failure(self) -> Self
Configure the test to expect a boot failure from the VM. Useful for negative tests.
Sourcepub fn with_expect_no_boot_event(self) -> Self
pub fn with_expect_no_boot_event(self) -> Self
Configure the test to not expect any boot event. Useful for tests that do not boot a VTL0 guest.
Sourcepub fn with_expect_reset(self) -> Self
pub fn with_expect_reset(self) -> Self
Allow the VM to reset once at the beginning of the test. Should only be used if you are using a special VM configuration that causes the guest to reboot when it usually wouldn’t.
Sourcepub fn with_secure_boot(self) -> Self
pub fn with_secure_boot(self) -> Self
Set the VM to enable secure boot and inject the templates per OS flavor.
Sourcepub fn with_windows_secure_boot_template(self) -> Self
pub fn with_windows_secure_boot_template(self) -> Self
Inject Windows secure boot templates into the VM’s UEFI.
Sourcepub fn with_uefi_ca_secure_boot_template(self) -> Self
pub fn with_uefi_ca_secure_boot_template(self) -> Self
Inject UEFI CA secure boot templates into the VM’s UEFI.
Sourcepub fn with_processor_topology(self, topology: ProcessorTopology) -> Self
pub fn with_processor_topology(self, topology: ProcessorTopology) -> Self
Set the VM to use the specified processor topology.
Sourcepub fn with_memory(self, memory: MemoryConfig) -> Self
pub fn with_memory(self, memory: MemoryConfig) -> Self
Set the VM to use the specified processor topology.
Sourcepub fn with_vtl2_base_address_type(
self,
address_type: Vtl2BaseAddressType,
) -> Self
pub fn with_vtl2_base_address_type( self, address_type: Vtl2BaseAddressType, ) -> Self
Sets a custom OpenHCL IGVM VTL2 address type. This controls the behavior
of where VTL2 is placed in address space, and also the total size of memory
allocated for VTL2. VTL2 start will fail if address_type
is specified
and leads to the loader allocating less memory than what is in the IGVM file.
Sourcepub fn with_custom_openhcl(
self,
artifact: ResolvedArtifact<impl IsOpenhclIgvm>,
) -> Self
pub fn with_custom_openhcl( self, artifact: ResolvedArtifact<impl IsOpenhclIgvm>, ) -> Self
Sets a custom OpenHCL IGVM file to use.
Sourcepub fn with_openhcl_command_line(self, additional_command_line: &str) -> Self
pub fn with_openhcl_command_line(self, additional_command_line: &str) -> Self
Sets the command line for the paravisor.
Sourcepub fn with_confidential_filtering(self) -> Self
pub fn with_confidential_filtering(self) -> Self
Enable confidential filtering, even if the VM is not confidential.
Sourcepub fn with_openhcl_log_levels(self, levels: OpenHclLogConfig) -> Self
pub fn with_openhcl_log_levels(self, levels: OpenHclLogConfig) -> Self
Sets the command line parameters passed to OpenHCL related to logging.
Sourcepub fn with_agent_file(self, name: &str, artifact: ResolvedArtifact) -> Self
pub fn with_agent_file(self, name: &str, artifact: ResolvedArtifact) -> Self
Adds a file to the VM’s pipette agent image.
Sourcepub fn with_openhcl_agent_file(
self,
name: &str,
artifact: ResolvedArtifact,
) -> Self
pub fn with_openhcl_agent_file( self, name: &str, artifact: ResolvedArtifact, ) -> Self
Adds a file to the paravisor’s pipette agent image.
Sourcepub fn with_uefi_frontpage(self, enable: bool) -> Self
pub fn with_uefi_frontpage(self, enable: bool) -> Self
Sets whether UEFI frontpage is enabled.
Sourcepub fn with_default_boot_always_attempt(self, enable: bool) -> Self
pub fn with_default_boot_always_attempt(self, enable: bool) -> Self
Sets whether UEFI should always attempt a default boot.
Sourcepub fn with_vmbus_redirect(self, enable: bool) -> Self
pub fn with_vmbus_redirect(self, enable: bool) -> Self
Run the VM with Enable VMBus relay enabled
Sourcepub fn with_guest_state_lifetime(
self,
guest_state_lifetime: PetriGuestStateLifetime,
) -> Self
pub fn with_guest_state_lifetime( self, guest_state_lifetime: PetriGuestStateLifetime, ) -> Self
Specify the guest state lifetime for the VM
Sourcepub fn with_guest_state_encryption(
self,
policy: GuestStateEncryptionPolicy,
) -> Self
pub fn with_guest_state_encryption( self, policy: GuestStateEncryptionPolicy, ) -> Self
Specify the guest state encryption policy for the VM
Sourcepub fn with_initial_vmgs(self, disk: ResolvedArtifact<impl IsTestVmgs>) -> Self
pub fn with_initial_vmgs(self, disk: ResolvedArtifact<impl IsTestVmgs>) -> Self
Use the specified backing VMGS file
Sourcepub fn with_persistent_vmgs(self, disk: impl AsRef<Path>) -> Self
pub fn with_persistent_vmgs(self, disk: impl AsRef<Path>) -> Self
Use the specified backing VMGS file
Sourcepub fn with_boot_device_type(self, boot: BootDeviceType) -> Self
pub fn with_boot_device_type(self, boot: BootDeviceType) -> Self
Set the boot device type for the VM.
This overrides the default, which is determined by the firmware type.
Sourcepub fn with_tpm_state_persistence(self, tpm_state_persistence: bool) -> Self
pub fn with_tpm_state_persistence(self, tpm_state_persistence: bool) -> Self
Enable or disable the TPM state persistence for the VM.
Sourcepub fn is_openhcl(&self) -> bool
pub fn is_openhcl(&self) -> bool
Get whether the VM will use OpenHCL
Sourcepub fn isolation(&self) -> Option<IsolationType>
pub fn isolation(&self) -> Option<IsolationType>
Get the isolation type of the VM
Sourcepub fn arch(&self) -> MachineArch
pub fn arch(&self) -> MachineArch
Get the machine architecture
Auto Trait Implementations§
impl<T> Freeze for PetriVmBuilder<T>where
T: Freeze,
impl<T> !RefUnwindSafe for PetriVmBuilder<T>
impl<T> Send for PetriVmBuilder<T>where
T: Send,
impl<T> !Sync for PetriVmBuilder<T>
impl<T> Unpin for PetriVmBuilder<T>where
T: Unpin,
impl<T> !UnwindSafe for PetriVmBuilder<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
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) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
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
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.