Skip to content

Commit bea368e

Browse files
committed
chore(fiber): add tests checking which fibers yield
1 parent cb239bb commit bea368e

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

tests/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,9 @@ fn run_tests(cfg: TestConfig) -> Result<bool, io::Error> {
284284
test_fiber::test_unit_deferred,
285285
test_fiber::test_unit_deferred_with_attrs,
286286
test_fiber::test_multiple_unit_deferred,
287+
test_fiber::deferred_doesnt_yield,
288+
test_fiber::immediate_yields,
289+
287290
test_box::test_space_get_by_name,
288291
test_box::test_space_get_system,
289292
test_box::test_index_get_by_name,

tests/src/test_fiber.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use std::{
77
use tarantool::fiber::{
88
self, fiber_yield, is_cancelled, sleep, Cond, Fiber, FiberAttr
99
};
10+
use tarantool::{space, transaction, error::{Error, TransactionError}};
1011

1112
pub fn test_fiber_new() {
1213
let mut fiber = Fiber::new("test_fiber", &mut |_| 0);
@@ -327,3 +328,41 @@ pub fn test_multiple_unit_deferred() {
327328
let res = res.borrow().iter().copied().collect::<Vec<_>>();
328329
assert_eq!(res, vec![1, 2, 3, 4, 5, 6, 7, 8]);
329330
}
331+
332+
pub fn immediate_yields() {
333+
let mut space = space::Space::find("test_s1").unwrap();
334+
space.truncate().unwrap();
335+
336+
let mut fib = None;
337+
338+
let result = transaction::start_transaction(|| -> Result<(), Error> {
339+
space.insert(&(1, "test".to_string()))?;
340+
fib = Some(fiber::start(|| 69));
341+
Ok(())
342+
});
343+
344+
assert!(matches!(
345+
result,
346+
Err(Error::Transaction(TransactionError::FailedToCommit)),
347+
));
348+
349+
assert_eq!(fib.map(|f| f.join()), Some(69))
350+
}
351+
352+
pub fn deferred_doesnt_yield() {
353+
let mut space = space::Space::find("test_s1").unwrap();
354+
space.truncate().unwrap();
355+
356+
let mut fib = None;
357+
358+
let result = transaction::start_transaction(|| -> Result<(), Error> {
359+
space.insert(&(1, "test".to_string()))?;
360+
fib = Some(fiber::defer(|| 69));
361+
Ok(())
362+
});
363+
364+
assert!(result.is_ok());
365+
366+
assert!(matches!(fib.map(|f| f.join()), Some(Ok(69))))
367+
}
368+

0 commit comments

Comments
 (0)