Skip to content

Commit efaaa26

Browse files
rosikgmoshkin
authored andcommitted
Simplify fiber yield testing
1 parent bea368e commit efaaa26

File tree

1 file changed

+34
-28
lines changed

1 file changed

+34
-28
lines changed

tests/src/test_fiber.rs

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ 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}};
10+
use tarantool::hlua::{
11+
Lua,
12+
LuaFunction
13+
};
1114

1215
pub fn test_fiber_new() {
1316
let mut fiber = Fiber::new("test_fiber", &mut |_| 0);
@@ -329,40 +332,43 @@ pub fn test_multiple_unit_deferred() {
329332
assert_eq!(res, vec![1, 2, 3, 4, 5, 6, 7, 8]);
330333
}
331334

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;
335+
fn fiber_csw() -> i32 {
336+
static mut FLAG: bool = false;
337+
let mut lua: Lua = crate::hlua::global();
338+
339+
if unsafe { !FLAG } {
340+
lua.execute::<()>(r#"
341+
function fiber_csw()
342+
local fiber = require('fiber')
343+
return fiber.info()[fiber.id()].csw
344+
end
345+
"#).unwrap();
346+
unsafe { FLAG = true; }
347+
}
337348

338-
let result = transaction::start_transaction(|| -> Result<(), Error> {
339-
space.insert(&(1, "test".to_string()))?;
340-
fib = Some(fiber::start(|| 69));
341-
Ok(())
342-
});
349+
return lua.get::<LuaFunction<_>, _>("fiber_csw").unwrap().call().unwrap();
350+
}
343351

344-
assert!(matches!(
345-
result,
346-
Err(Error::Transaction(TransactionError::FailedToCommit)),
347-
));
352+
pub fn immediate_yields() {
353+
let mut upvalue = 0;
354+
let csw1 = fiber_csw();
355+
fiber::start(|| upvalue = 69);
356+
let csw2 = fiber_csw();
348357

349-
assert_eq!(fib.map(|f| f.join()), Some(69))
358+
assert_eq!(upvalue, 69);
359+
assert_eq!(csw2, csw1+1);
350360
}
351361

352362
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+
let mut upvalue = 0;
364+
let csw1 = fiber_csw();
365+
fiber::defer(|| upvalue = 96);
366+
let csw2 = fiber_csw();
363367

364-
assert!(result.is_ok());
368+
assert_eq!(upvalue, 0);
369+
assert_eq!(csw2, csw1);
365370

366-
assert!(matches!(fib.map(|f| f.join()), Some(Ok(69))))
371+
fiber::sleep(0.);
372+
assert_eq!(upvalue, 96);
367373
}
368374

0 commit comments

Comments
 (0)