GCC Code Coverage Report


Directory: src/gate/
File: src/gate/tests/gatecore_cpp_platform_test/test_queue.cpp
Date: 2025-12-12 23:40:09
Exec Total Coverage
Lines: 63 63 100.0%
Functions: 10 10 100.0%
Branches: 105 280 37.5%

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
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");
36
37
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));
38
39
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);
40
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));
41
42
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());
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.getStatus(), GATE_MSGQUEUE_STATUS_ONLINE);
44
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, 0, msg_content, msg_length));
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(queue.publish(target, 1, msg_content2, msg_length));
47
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.receivedMessageTypes.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.receivedMessages.length(), 2U);
50
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);
51
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));
52
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);
53
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));
54
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.stop());
56
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);
57
58 2 }
59
60
61
62 static bool_t volatile init_reached = false;
63 static bool_t volatile shutdown_reached = false;
64
65 1 static gate_result_t exe_init(void* param)
66 {
67 1 init_reached = true;
68 1 return GATE_RESULT_OK;
69 }
70 1 static gate_result_t exe_shutdown(void* param)
71 {
72 1 shutdown_reached = true;
73 1 return GATE_RESULT_OK;
74 }
75 5 static gate_result_t exe_task(void* param)
76 {
77 5 AtomicInt* ptr_atom = static_cast<AtomicInt*>(param);
78 5 ++(*ptr_atom);
79 5 return GATE_RESULT_OK;
80 }
81
82
83
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)
84 {
85 2 init_reached = false;
86 2 shutdown_reached = false;
87
88
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;
89
90 2 task_counter.set(0);
91
92 {
93
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 ExeQueue q(&exe_init, &exe_shutdown);
94
95
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
4 Runnable exe_task_runnable = RunnableBuilder::create(&exe_task, &task_counter);
96
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
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 q.push(&exe_task, &task_counter, NULL);
100
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 q.push(&exe_task, &task_counter, NULL);
101
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 q.push(exe_task_runnable);
102
103
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
6 const TimeCounter timeout = TimeCounter::now() + time::Milliseconds(4000);
104 2 do
105 {
106
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))
107 {
108 2 break;
109 }
110
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Thread::sleep(50);
111
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);
112 }
113
114 {
115 // await shutdownm
116
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
6 const TimeCounter timeout = TimeCounter::now() + time::Milliseconds(3000);
117 2 do
118 {
119
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
4 if (shutdown_reached == true)
120 {
121 2 break;
122 }
123
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Thread::sleep(50);
124
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);
125 }
126
127
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 GATEXX_TEST_CHECK(init_reached);
128
1/2
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
2 GATEXX_TEST_CHECK(task_counter.get() == 5);
129
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 GATEXX_TEST_CHECK(shutdown_reached);
130 2 }
131