diff options
author | Tudor Sidea <tudor.sidea@gmail.com> | 2020-03-24 07:20:07 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-23 22:20:07 -0700 |
commit | 57ba37c97854d32e691ea68006c8d69d58c79b23 (patch) | |
tree | 4aa882464266a2f763f7401407b12d4bf6613283 /tokio/tests/test_clock.rs | |
parent | acf8a7da7a64bf08d578db9a9836a8e061765314 (diff) |
time: fix repeated pause/resume of time (#2253)
The resume function was breaking the guarantee that Instants should
never be less than any previously measured Instants when created.
Altered the pause and resume function such that they will not break this
guarantee. After resume, the time should continue from where it left
off.
Created test to prove that the advanced function still works as
expected.
Added additional tests for the pause/advance/resume functions.
Diffstat (limited to 'tokio/tests/test_clock.rs')
-rw-r--r-- | tokio/tests/test_clock.rs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/tokio/tests/test_clock.rs b/tokio/tests/test_clock.rs new file mode 100644 index 00000000..891636fd --- /dev/null +++ b/tokio/tests/test_clock.rs @@ -0,0 +1,50 @@ +#![warn(rust_2018_idioms)] +#![cfg(feature = "full")] + +use tokio::time::{self, Duration, Instant}; + +#[tokio::test] +async fn resume_lets_time_move_forward_instead_of_resetting_it() { + let start = Instant::now(); + time::pause(); + time::advance(Duration::from_secs(10)).await; + let advanced_by_ten_secs = Instant::now(); + assert!(advanced_by_ten_secs - start > Duration::from_secs(10)); + assert!(advanced_by_ten_secs - start < Duration::from_secs(11)); + time::resume(); + assert!(advanced_by_ten_secs < Instant::now()); + assert!(Instant::now() - advanced_by_ten_secs < Duration::from_secs(1)); +} + +#[tokio::test] +async fn can_pause_after_resume() { + let start = Instant::now(); + time::pause(); + time::advance(Duration::from_secs(10)).await; + time::resume(); + time::pause(); + time::advance(Duration::from_secs(10)).await; + assert!(Instant::now() - start > Duration::from_secs(20)); + assert!(Instant::now() - start < Duration::from_secs(21)); +} + +#[tokio::test] +#[should_panic] +async fn freezing_time_while_frozen_panics() { + time::pause(); + time::pause(); +} + +#[tokio::test] +#[should_panic] +async fn advancing_time_when_time_is_not_frozen_panics() { + time::advance(Duration::from_secs(1)).await; +} + +#[tokio::test] +#[should_panic] +async fn resuming_time_when_not_frozen_panics() { + time::pause(); + time::resume(); + time::resume(); +} |