Line | Branch | Exec | Source |
---|---|---|---|
1 | #include "gate/tests.hpp" | ||
2 | #include "gate/queues.hpp" | ||
3 | #include "gate/arrays.hpp" | ||
4 | #include "gate/atomics.hpp" | ||
5 | #include "gate/times.hpp" | ||
6 | #include "gate/threading.hpp" | ||
7 | |||
8 | using namespace gate; | ||
9 | |||
10 | |||
11 | class GATE_API_LOCAL MsqQueueReceiver : public MsgQueueSink | ||
12 | { | ||
13 | public: | ||
14 | ArrayList<uint32_t> receivedMessageTypes; | ||
15 | ArrayList<MemoryBlock> receivedMessages; | ||
16 | |||
17 | 2 | void onMessage(target_id_t targetID, uint32_t messageType, void const* data, gate::size_t dataLength) override | |
18 | { | ||
19 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
2 | receivedMessageTypes.add(messageType); |
20 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | MemoryBlock mem(data, dataLength); |
21 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
2 | receivedMessages.add(mem); |
22 | 2 | } | |
23 | |||
24 | }; | ||
25 | |||
26 |
2/7✓ Branch 2 taken 1 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
6 | GATEXX_TEST_UNIT(MsgQueue) |
27 | { | ||
28 | static char const* msg_content = "Hello World"; | ||
29 | static char const* msg_content2 = "Hell0 W0rld"; | ||
30 | static gate::size_t msg_length = 11; | ||
31 | |||
32 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | MsqQueueReceiver sink; |
33 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | MsgQueue queue = MemoryMsgQueue::create(); |
34 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | MsgQueue::target_id_t target = queue.addTarget("test"); |
35 | |||
36 |
4/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
2 | GATEXX_TEST_CHECK_NOTHROW(queue.subscribe(target, &sink)); |
37 | |||
38 |
5/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
2 | GATEXX_TEST_CHECK_EQUAL(queue.getStatus(), GATE_MSGQUEUE_STATUS_OFFLINE); |
39 |
5/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
4 | GATEXX_TEST_CHECK_THROW(queue.publish(target, 0, msg_content, msg_length)); |
40 | |||
41 |
4/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
2 | GATEXX_TEST_CHECK_NOTHROW(queue.start()); |
42 |
5/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
2 | GATEXX_TEST_CHECK_EQUAL(queue.getStatus(), GATE_MSGQUEUE_STATUS_ONLINE); |
43 | |||
44 |
4/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
2 | GATEXX_TEST_CHECK_NOTHROW(queue.publish(target, 0, msg_content, msg_length)); |
45 |
4/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
2 | GATEXX_TEST_CHECK_NOTHROW(queue.publish(target, 1, msg_content2, msg_length)); |
46 | |||
47 |
4/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
|
2 | GATEXX_TEST_CHECK_EQUAL(sink.receivedMessageTypes.length(), 2U); |
48 |
4/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
|
2 | GATEXX_TEST_CHECK_EQUAL(sink.receivedMessages.length(), 2U); |
49 |
4/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
|
2 | GATEXX_TEST_CHECK_EQUAL(sink.receivedMessageTypes[0], 0U); |
50 |
5/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
|
2 | GATEXX_TEST_CHECK(sink.receivedMessages[0].equals(msg_content, msg_length)); |
51 |
4/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
|
2 | GATEXX_TEST_CHECK_EQUAL(sink.receivedMessageTypes[1], 1U); |
52 |
5/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
|
2 | GATEXX_TEST_CHECK(sink.receivedMessages[1].equals(msg_content2, msg_length)); |
53 | |||
54 |
4/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
2 | GATEXX_TEST_CHECK_NOTHROW(queue.stop()); |
55 |
5/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
2 | GATEXX_TEST_CHECK_EQUAL(queue.getStatus(), GATE_MSGQUEUE_STATUS_OFFLINE); |
56 | |||
57 | 2 | } | |
58 | |||
59 | |||
60 | |||
61 | static bool_t volatile init_reached = false; | ||
62 | static bool_t volatile shutdown_reached = false; | ||
63 | |||
64 | 1 | static gate_result_t exe_init(void* param) | |
65 | { | ||
66 | 1 | init_reached = true; | |
67 | 1 | return GATE_RESULT_OK; | |
68 | } | ||
69 | 1 | static gate_result_t exe_shutdown(void* param) | |
70 | { | ||
71 | 1 | shutdown_reached = true; | |
72 | 1 | return GATE_RESULT_OK; | |
73 | } | ||
74 | 5 | static gate_result_t exe_task(void* param) | |
75 | { | ||
76 | 5 | AtomicInt* ptr_atom = static_cast<AtomicInt*>(param); | |
77 | 5 | ++(*ptr_atom); | |
78 | 5 | return GATE_RESULT_OK; | |
79 | } | ||
80 | |||
81 | |||
82 |
2/7✓ Branch 2 taken 1 times.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
6 | GATEXX_TEST_UNIT(ExeQueue) |
83 | { | ||
84 | 2 | init_reached = false; | |
85 | 2 | shutdown_reached = false; | |
86 | |||
87 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | static AtomicInt task_counter; |
88 | |||
89 | 2 | task_counter.set(0); | |
90 | |||
91 | { | ||
92 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | ExeQueue q(&exe_init, &exe_shutdown); |
93 | |||
94 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | q.push(&exe_task, &task_counter, NULL); |
95 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | q.push(&exe_task, &task_counter, NULL); |
96 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | q.push(&exe_task, &task_counter, NULL); |
97 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | q.push(&exe_task, &task_counter, NULL); |
98 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | q.push(&exe_task, &task_counter, NULL); |
99 | |||
100 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
6 | const TimeCounter timeout = TimeCounter::now() + time::Milliseconds(3000); |
101 | 2 | do | |
102 | { | ||
103 |
6/8✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✓ Branch 9 taken 1 times.
|
4 | if ((task_counter.get() >= 5) && (q.itemCount() == 0)) |
104 | { | ||
105 | 2 | break; | |
106 | } | ||
107 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Thread::sleep(50); |
108 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | } while (TimeCounter::now() < timeout); |
109 | } | ||
110 | |||
111 | { | ||
112 | // await shutdownm | ||
113 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
6 | const TimeCounter timeout = TimeCounter::now() + time::Milliseconds(3000); |
114 | 2 | do | |
115 | { | ||
116 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
|
4 | if (shutdown_reached == true) |
117 | { | ||
118 | 2 | break; | |
119 | } | ||
120 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Thread::sleep(50); |
121 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
2 | } while (TimeCounter::now() < timeout); |
122 | } | ||
123 | |||
124 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | GATEXX_TEST_CHECK(init_reached); |
125 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
2 | GATEXX_TEST_CHECK(task_counter.get() == 5); |
126 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | GATEXX_TEST_CHECK(shutdown_reached); |
127 | 2 | } | |
128 |