GCC Code Coverage Report


Directory: src/gate/
File: src/gate/tests/gatecore_cpp_test/test_queue.cpp
Date: 2025-09-14 13:10:38
Exec Total Coverage
Lines: 62 62 100.0%
Functions: 10 10 100.0%
Branches: 104 278 37.4%

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