Struct PetriVmBuilder

Source
pub struct PetriVmBuilder<T: PetriVmmBackend> { /* private fields */ }
Expand description

Petri VM builder

Implementations§

Source§

impl<T: PetriVmmBackend> PetriVmBuilder<T>

Source

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

Create a new VM configuration.

Source§

impl<T: PetriVmmBackend> PetriVmBuilder<T>

Source

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.

Source

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.

Source

pub fn with_expect_boot_failure(self) -> Self

Configure the test to expect a boot failure from the VM. Useful for negative tests.

Source

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.

Source

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.

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_processor_topology(self, topology: ProcessorTopology) -> Self

Set the VM to use the specified processor topology.

Source

pub fn with_memory(self, memory: MemoryConfig) -> Self

Set the VM to use the specified processor topology.

Source

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.

Source

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

Sets a custom OpenHCL IGVM file to use.

Source

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

Sets the command line for the paravisor.

Source

pub fn with_confidential_filtering(self) -> Self

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

Source

pub fn with_openhcl_log_levels(self, levels: OpenHclLogConfig) -> Self

Sets the command line parameters passed to OpenHCL related to logging.

Source

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

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

Source

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

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

Source

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

Sets whether UEFI frontpage is enabled.

Source

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

Sets whether UEFI should always attempt a default boot.

Source

pub fn with_vmbus_redirect(self, enable: bool) -> Self

Run the VM with Enable VMBus relay enabled

Source

pub fn with_guest_state_lifetime( self, guest_state_lifetime: PetriGuestStateLifetime, ) -> Self

Specify the guest state lifetime for the VM

Source

pub fn with_guest_state_encryption( self, policy: GuestStateEncryptionPolicy, ) -> Self

Specify the guest state encryption policy for the VM

Source

pub fn with_initial_vmgs(self, disk: ResolvedArtifact<impl IsTestVmgs>) -> Self

Use the specified backing VMGS file

Source

pub fn with_persistent_vmgs(self, disk: impl AsRef<Path>) -> Self

Use the specified backing VMGS file

Source

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.

Source

pub fn with_tpm_state_persistence(self, tpm_state_persistence: bool) -> Self

Enable or disable the TPM state persistence for the VM.

Source

pub fn os_flavor(&self) -> OsFlavor

Get VM’s guest OS flavor

Source

pub fn is_openhcl(&self) -> bool

Get whether the VM will use OpenHCL

Source

pub fn isolation(&self) -> Option<IsolationType>

Get the isolation type of the VM

Source

pub fn arch(&self) -> MachineArch

Get the machine architecture

Source

pub fn modify_backend( self, f: impl FnOnce(T::VmmConfig) -> T::VmmConfig + 'static + Send, ) -> Self

Get the backend-specific config builder

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> 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