Struct tor_rtmock::time::MockSleepProvider
source · pub struct MockSleepProvider { /* private fields */ }Expand description
A dummy SleepProvider instance for testing.
The MockSleepProvider ignores the current time, and instead keeps
its own view of the current Instant and SystemTime. You
can advance them in-step by calling advance(), and you can simulate
jumps in the system clock by calling jump().
This is not for production use.
Implementations§
source§impl MockSleepProvider
impl MockSleepProvider
sourcepub fn new(wallclock: SystemTime) -> Self
pub fn new(wallclock: SystemTime) -> Self
Create a new MockSleepProvider, starting at a given wall-clock time.
sourcepub async fn advance(&self, dur: Duration)
pub async fn advance(&self, dur: Duration)
Advance the simulated timeline forward by dur.
Calling this function will wake any pending futures as appropriate, and yield to the scheduler so they get a chance to run.
Limitations
This function advances time in one big step. We might instead want to advance in small steps and make sure that each step’s futures can get run before the ones scheduled to run after it.
sourcepub fn jump_to(&self, new_wallclock: SystemTime)
pub fn jump_to(&self, new_wallclock: SystemTime)
Simulate a discontinuity in the system clock, by jumping to
new_wallclock.
Panics
Panics if we have already panicked while holding the lock on the internal timer state, and the lock is poisoned.
Trait Implementations§
source§impl Clone for MockSleepProvider
impl Clone for MockSleepProvider
source§fn clone(&self) -> MockSleepProvider
fn clone(&self) -> MockSleepProvider
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl Debug for MockSleepProvider
impl Debug for MockSleepProvider
source§impl Default for MockSleepProvider
impl Default for MockSleepProvider
source§impl SleepProvider for MockSleepProvider
impl SleepProvider for MockSleepProvider
§type SleepFuture = Sleeping
type SleepFuture = Sleeping
SleepProvider::sleep()source§fn sleep(&self, duration: Duration) -> Self::SleepFuture
fn sleep(&self, duration: Duration) -> Self::SleepFuture
duration has
elapsed.source§fn block_advance<T: Into<String>>(&self, reason: T)
fn block_advance<T: Into<String>>(&self, reason: T)
source§fn release_advance<T: Into<String>>(&self, reason: T)
fn release_advance<T: Into<String>>(&self, reason: T)
block_advance no
longer exists, and it’s fine to move time forward if nothing else is blocking advances. Read moresource§fn allow_one_advance(&self, dur: Duration)
fn allow_one_advance(&self, dur: Duration)
block_advance API has been used. Read moresource§fn wallclock(&self) -> SystemTime
fn wallclock(&self) -> SystemTime
Auto Trait Implementations§
impl RefUnwindSafe for MockSleepProvider
impl Send for MockSleepProvider
impl Sync for MockSleepProvider
impl Unpin for MockSleepProvider
impl UnwindSafe for MockSleepProvider
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
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> SleepProviderExt for Twhere
T: SleepProvider,
impl<T> SleepProviderExt for Twhere
T: SleepProvider,
source§fn timeout<F>(
&self,
duration: Duration,
future: F
) -> Timeout<F, Self::SleepFuture>where
F: Future,
fn timeout<F>(
&self,
duration: Duration,
future: F
) -> Timeout<F, Self::SleepFuture>where
F: Future,
source§fn sleep_until_wallclock(
&self,
when: SystemTime
) -> SleepUntilWallclock<'_, Self>
fn sleep_until_wallclock( &self, when: SystemTime ) -> SleepUntilWallclock<'_, Self>
when or later, trying to
recover from clock jumps. Read more