Software /
code /
prosody
Comparison
spec/util_async_spec.lua @ 11961:542a9a503073
util.async: Add sleep() method with configurable scheduling backend
No scheduler set by default, so it will error (we plan to initialize it in
util.startup).
We wanted to avoid a hard dependency on util.timer (which in turn depends on
network backends, etc.), and we didn't add timer.sleep() because we didn't
want to add a hard dependency on util.async for things that don't need it.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 29 Nov 2021 14:11:24 +0000 |
parent | 10541:6c6ff4509082 |
child | 11962:9a70a543c727 |
comparison
equal
deleted
inserted
replaced
11960:12a3c05aa12d | 11961:542a9a503073 |
---|---|
613 r:run(true); | 613 r:run(true); |
614 assert.spy(r.func).was.called(); | 614 assert.spy(r.func).was.called(); |
615 assert.spy(r.watchers.error).was_not.called(); | 615 assert.spy(r.watchers.error).was_not.called(); |
616 end); | 616 end); |
617 end); | 617 end); |
618 | |
619 describe("#sleep()", function () | |
620 after_each(function () | |
621 -- Restore to default | |
622 async.set_schedule_function(nil); | |
623 end); | |
624 | |
625 it("should fail if no scheduler configured", function () | |
626 local r = new(function () | |
627 async.sleep(5); | |
628 end); | |
629 r:run(true); | |
630 assert.spy(r.watchers.error).was.called(); | |
631 | |
632 -- Set dummy scheduler | |
633 async.set_schedule_function(function () end); | |
634 | |
635 local r2 = new(function () | |
636 async.sleep(5); | |
637 end); | |
638 r2:run(true); | |
639 assert.spy(r2.watchers.error).was_not.called(); | |
640 end); | |
641 it("should work", function () | |
642 local queue = {}; | |
643 local add_task = spy.new(function (t, f) | |
644 table.insert(queue, { t, f }); | |
645 end); | |
646 async.set_schedule_function(add_task); | |
647 | |
648 local processed_item; | |
649 local r = new(function (item) | |
650 async.sleep(5); | |
651 processed_item = item; | |
652 end); | |
653 r:run("test"); | |
654 | |
655 -- Nothing happened, because the runner is sleeping | |
656 assert.is_nil(processed_item); | |
657 assert.equal(r.state, "waiting"); | |
658 assert.spy(add_task).was_called(1); | |
659 assert.spy(add_task).was_called_with(match.is_number(), match.is_function()); | |
660 assert.spy(r.watchers.waiting).was.called(); | |
661 assert.spy(r.watchers.ready).was_not.called(); | |
662 | |
663 -- Pretend the timer has triggered, call the handler | |
664 queue[1][2](); | |
665 | |
666 assert.equal(processed_item, "test"); | |
667 assert.equal(r.state, "ready"); | |
668 | |
669 assert.spy(r.watchers.ready).was.called(); | |
670 end); | |
671 end); | |
618 end); | 672 end); |