Struct PetriVm

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

A constructed Petri VM

Implementations§

Source§

impl<T: PetriVmmBackend> PetriVm<T>

Source

pub async fn teardown(self) -> Result<()>

Immediately tear down the VM.

Source

pub async fn wait_for_halt(&mut self) -> Result<PetriHaltReason>

Wait for the VM to halt, returning the reason for the halt.

Source

pub async fn wait_for_clean_shutdown(&mut self) -> Result<()>

Wait for the VM to cleanly shutdown.

Source

pub async fn wait_for_teardown(self) -> Result<PetriHaltReason>

Wait for the VM to halt, returning the reason for the halt, and tear down the VM.

Source

pub async fn wait_for_clean_teardown(self) -> Result<()>

Wait for the VM to cleanly shutdown and tear down the VM.

Source

pub async fn wait_for_reset_no_agent(&mut self) -> Result<()>

Wait for the VM to reset. Does not wait for pipette.

Source

pub async fn wait_for_reset(&mut self) -> Result<PipetteClient>

Wait for the VM to reset and pipette to connect.

Source

pub async fn inspect_openhcl( &self, path: impl Into<String>, depth: Option<usize>, timeout: Option<Duration>, ) -> Result<Node>

Invoke Inspect on the running OpenHCL instance.

IMPORTANT: As mentioned in the Guide, inspect output is not guaranteed to be stable. Use this to test that components in OpenHCL are working as you would expect. But, if you are adding a test simply to verify that the inspect output as some other tool depends on it, then that is incorrect.

  • timeout is enforced on the client side
  • path and depth are passed to the inspect::Inspect machinery.
Source

pub async fn test_inspect_openhcl(&mut self) -> Result<()>

Test that we are able to inspect OpenHCL.

Source

pub async fn wait_for_vtl2_ready(&mut self) -> Result<()>

Wait for VTL 2 to report that it is ready to respond to commands. Will fail if the VM is not running OpenHCL.

This should only be necessary if you’re doing something manual. All Petri-provided methods will wait for VTL 2 to be ready automatically.

Source

pub async fn kmsg(&self) -> Result<KmsgStream>

Get the kmsg stream from OpenHCL.

Source

pub async fn openhcl_core_dump(&self, name: &str, path: &Path) -> Result<()>

Gets a live core dump of the OpenHCL process specified by ‘name’ and writes it to ‘path’

Source

pub async fn openhcl_crash(&self, name: &str) -> Result<()>

Crashes the specified openhcl process

Source

pub async fn wait_for_vtl2_agent(&mut self) -> Result<PipetteClient>

Wait for a connection from a pipette agent running in VTL 2. Useful if you’ve reset VTL 2 or are otherwise expecting a fresh connection. Will fail if the VM is not running OpenHCL.

Source

pub async fn send_enlightened_shutdown( &mut self, kind: ShutdownKind, ) -> Result<()>

Wait for the Hyper-V shutdown IC to be ready and use it to instruct the guest to shutdown.

Source

pub async fn restart_openhcl( &mut self, new_openhcl: ResolvedArtifact<impl IsOpenhclIgvm>, flags: OpenHclServicingFlags, ) -> Result<()>

Instruct the OpenHCL to restart the VTL2 paravisor. Will fail if the VM is not running OpenHCL. Will also fail if the VM is not running.

Source

pub async fn save_openhcl( &mut self, new_openhcl: ResolvedArtifact<impl IsOpenhclIgvm>, flags: OpenHclServicingFlags, ) -> Result<()>

Instruct the OpenHCL to save the state of the VTL2 paravisor. Will fail if the VM is not running OpenHCL. Will also fail if the VM is not running or if this is called twice in succession

Source

pub async fn restore_openhcl(&mut self) -> Result<()>

Instruct the OpenHCL to restore the state of the VTL2 paravisor. Will fail if the VM is not running OpenHCL. Will also fail if the VM is running or if this is called without prior save

Source

pub fn arch(&self) -> MachineArch

Get VM’s guest OS flavor

Source

pub fn backend(&mut self) -> &mut T::VmRuntime

Get the inner runtime backend to make backend-specific calls

Source

pub async fn get_guest_state_file(&self) -> Result<Option<PathBuf>>

Get the path to the VM’s guest state file

Auto Trait Implementations§

§

impl<T> Freeze for PetriVm<T>

§

impl<T> !RefUnwindSafe for PetriVm<T>

§

impl<T> Send for PetriVm<T>

§

impl<T> Sync for PetriVm<T>

§

impl<T> Unpin for PetriVm<T>

§

impl<T> !UnwindSafe for PetriVm<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