GCC Code Coverage Report


Directory: src/gate/
File: src/gate/tests/gatecore_cpp_platform_test/test_queue.cpp
Date: 2026-08-06 22:46:24
Exec Total Coverage
Lines: 70 70 100.0%
Functions: 10 10 100.0%
Branches: 123 330 37.3%

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 #include "gate/runnables.hpp"
8
9 using namespace gate;
10
11
12 class GATE_API_LOCAL MsqQueueReceiver : public MsgQueueSink
13 {
14 public:
15 ArrayList<uint32_t> receivedMessageTypes;
16 ArrayList<MemoryBlock> receivedMessages;
17
18 2 void onMessage(target_id_t targetID, uint32_t messageType, void const* data, gate::size_t dataLength) override
19 {
20
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 receivedMessageTypes.add(messageType);
21
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
4 MemoryBlock mem(data, dataLength);
22
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 receivedMessages.add(mem);
23 2 }
24
25 };
26
27
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)
28 {
29 static char const* msg_content = "Hello World";
30 static char const* msg_content2 = "Hell0 W0rld";
31 static gate::size_t msg_length = 11;
32
33
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 MsqQueueReceiver sink;
34
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 MsgQueue queue = MemoryMsgQueue::create();
35 {
36
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 MsgQueue queue2(queue);
37
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 MsgQueue queue3 = MemoryMsgQueue::create();
38
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 queue3 = queue;
39 }
40
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
2 static const StaticString targetName = "test";
41
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 const MsgQueue::target_id_t target = queue.addTarget(targetName);
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 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
2 GATEXX_TEST_CHECK_EQUAL(queue.getTarget(target), targetName);
43
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.resolveTarget(targetName), target);
44
45 MsgQueue::subscription_id_t subscriptionId;
46
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(subscriptionId = queue.subscribe(target, &sink));
47
48
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);
49
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));
50
51
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());
52
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);
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.publish(target, 0, msg_content, msg_length));
55
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));
56
57
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);
58
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);
59
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);
60
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));
61
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);
62
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));
63
64
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.unsubscribe(subscriptionId));
65
66
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());
67
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);
68
69 2 }
70
71
72
73 static bool_t volatile init_reached = false;
74 static bool_t volatile shutdown_reached = false;
75
76 1 static gate_result_t GATE_CALL exe_init(void* param)
77 {
78 1 init_reached = true;
79 1 return GATE_RESULT_OK;
80 }
81 1 static gate_result_t GATE_CALL exe_shutdown(void* param)
82 {
83 1 shutdown_reached = true;
84 1 return GATE_RESULT_OK;
85 }
86 5 static gate_result_t GATE_CALL exe_task(void* param)
87 {
88 5 AtomicInt* ptr_atom = static_cast<AtomicInt*>(param);
89 5 ++(*ptr_atom);
90 5 return GATE_RESULT_OK;
91 }
92
93
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)
94 {
95 2 init_reached = false;
96 2 shutdown_reached = false;
97
98
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;
99
100 2 task_counter.set(0);
101
102 {
103
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 ExeQueue q(&exe_init, &exe_shutdown);
104
105
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Runnable exe_task_runnable = RunnableBuilder::create(&exe_task, &task_counter);
106
107
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 q.push(&exe_task, &task_counter, NULL);
108
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 q.push(&exe_task, &task_counter, NULL);
109
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 q.push(&exe_task, &task_counter, NULL);
110
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 q.push(&exe_task, &task_counter, NULL);
111
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 q.push(exe_task_runnable);
112
113
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
6 const TimeCounter timeout = TimeCounter::now() + time::Milliseconds(4000);
114 2 do
115 {
116
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))
117 {
118 2 break;
119 }
120
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ThisThread::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 {
125 // await shutdownm
126
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
6 const TimeCounter timeout = TimeCounter::now() + time::Milliseconds(3000);
127 2 do
128 {
129
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
4 if (shutdown_reached == true)
130 {
131 2 break;
132 }
133
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ThisThread::sleep(50);
134
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);
135 }
136
137
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 GATEXX_TEST_CHECK(init_reached);
138
1/2
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
2 GATEXX_TEST_CHECK(task_counter.get() == 5);
139
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 GATEXX_TEST_CHECK(shutdown_reached);
140 2 }
141