Struct SimpleMockTimeProvider

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

Simple provider of simulated time

Maintains a mocked view of the current Instant and SystemTime.

The simulated time advances only when explicitly instructed, by calling .advance().

The wallclock time can be warped with .jump_wallclock(), allowing simulation of wall clock non-monotonicity.

§Panics and aborts

Panics on time under/overflow.

May cause an abort if the SimpleMockTimeProvider implementation contains bugs.

Implementations§

Source§

impl SimpleMockTimeProvider

Source

pub fn new(now: Instant, wallclock: SystemTime) -> Self

Return a new mock time provider starting at a specified point in time

Source

pub fn from_real() -> Self

Return a new mock time provider starting at the current actual (non-mock) time

Like any SimpleMockTimeProvider, the time is frozen and only changes due to calls to advance.

Source

pub fn from_wallclock(wallclock: SystemTime) -> Self

Return a new mock time provider starting at a specified wallclock time

The monotonic time (Instant) starts at the current actual (non-mock) time. (Absolute values of the real monotonic time are not readily observable or distinguishable from Rust, nor can a fixed Instant be constructed, so this is usually sufficient for a reproducible test.)

Source

pub fn advance(&self, d: Duration)

Advance the simulated time by d

This advances both the Instant (monotonic time) and SystemTime (wallclock time) by the same amount.

Will wake sleeping SleepFutures, as appropriate.

Note that the tasks which were waiting on those now-expired SleepFutures will only actually execute when they are next polled. advance does not yield to the executor or poll any futures. The executor will (presumably) poll those woken tasks, when it regains control. But the order in which the tasks run will depend on its scheduling policy, and might be different to the order implied by the futures’ timeout values.

To simulate normal time advancement, wakeups, and task activations, use MockExecutor::advance_*().

Source

pub fn jump_wallclock(&self, new_wallclock: SystemTime)

Warp the wallclock time

This has no effect on any sleeping futures. It only affects the return value from .wallclock().

Source

pub fn time_until_next_timeout(&self) -> Option<Duration>

When will the next timeout occur?

Returns the duration until the next SleepFuture should wake up.

Advancing time by at least this amount will wake up that future, and any others with the same wakeup time.

Will never return Some(ZERO): any future that is supposed to wake up now (or earlier) has indeed already been woken, so it is no longer sleeping and isn’t included in the calculation.

Trait Implementations§

Source§

impl Clone for SimpleMockTimeProvider

Source§

fn clone(&self) -> SimpleMockTimeProvider

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl CoarseTimeProvider for SimpleMockTimeProvider

Source§

fn now_coarse(&self) -> CoarseInstant

Return the CoarseTimeProvider’s view of the current instant. Read more
Source§

impl Debug for SimpleMockTimeProvider

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for SimpleMockTimeProvider

Default makes a Provider which starts at whatever the current real time is

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl SleepProvider for SimpleMockTimeProvider

Source§

type SleepFuture = SleepFuture

A future returned by SleepProvider::sleep()
Source§

fn sleep(&self, d: Duration) -> SleepFuture

Return a future that will be ready after duration has elapsed.
Source§

fn now(&self) -> Instant

Return the SleepProvider’s view of the current instant. Read more
Source§

fn wallclock(&self) -> SystemTime

Return the SleepProvider’s view of the current wall-clock time. Read more
Source§

fn block_advance<T>(&self, _reason: T)
where T: Into<String>,

Signify that a test running under mock time shouldn’t advance time yet, with a given unique reason string. This is useful for making sure (mock) time doesn’t advance while things that might require some (real-world) time to complete do so, such as spawning a task on another thread. Read more
Source§

fn release_advance<T>(&self, _reason: T)
where T: Into<String>,

Signify that the reason to withhold time advancing provided in a call to block_advance no longer exists, and it’s fine to move time forward if nothing else is blocking advances. Read more
Source§

fn allow_one_advance(&self, _dur: Duration)

Allow a test running under mock time to advance time by the provided duration, even if the above block_advance API has been used. Read more

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

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

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.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> SleepProviderExt for T
where T: SleepProvider,

Source§

fn timeout<F>( &self, duration: Duration, future: F, ) -> Timeout<F, Self::SleepFuture>
where F: Future,

Wrap a Future with a timeout. Read more
Source§

fn sleep_until_wallclock( &self, when: SystemTime, ) -> SleepUntilWallclock<'_, Self>

Pause until the wall-clock is at when or later, trying to recover from clock jumps. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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
§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T