-
Notifications
You must be signed in to change notification settings - Fork 11
/
test_ioproc.cc
63 lines (52 loc) · 1.27 KB
/
test_ioproc.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#define BOOST_TEST_MODULE ioproc test
#include <boost/test/unit_test.hpp>
#include "ioproc.hh"
#include "descriptors.hh"
using namespace ten;
const size_t default_stacksize=256*1024;
static void ioproc_sleeper() {
ioproc io;
int ret = iocall<int>(io, std::bind(usleep, 100));
BOOST_CHECK_EQUAL(ret, 0);
}
BOOST_AUTO_TEST_CASE(ioproc_sleep_test) {
procmain p;
taskspawn(ioproc_sleeper);
p.main();
}
static void test_pool() {
ioproc io(default_stacksize, 4);
iochannel reply_chan;
for (int i=0; i<4; ++i) {
iocallasync<int>(io, std::bind(usleep, 100), reply_chan);
}
for (int i=0; i<4; ++i) {
int r = iowait<int>(reply_chan);
// usleep should return 0
BOOST_CHECK_EQUAL(0, r);
}
}
BOOST_AUTO_TEST_CASE(ioproc_thread_pool) {
procmain p;
taskspawn(test_pool);
p.main();
}
static void fail() {
throw std::runtime_error("fail has failed");
}
static void ioproc_failure() {
ioproc io;
std::string errmsg;
try {
iocall(io, fail);
BOOST_CHECK(false);
} catch (std::runtime_error &e) {
errmsg = e.what();
}
BOOST_CHECK_EQUAL(errmsg, "fail has failed");
}
BOOST_AUTO_TEST_CASE(ioproc_error_test) {
procmain p;
taskspawn(ioproc_failure);
p.main();
}