4 #include <unity_fixture.h>
6 #include <memif_private.h>
9 #define TEST_APP_NAME "unit_test_app"
10 #define MEMIF_TEST_IF_NAME "unit_test_if"
11 #define MEMIF_TEST_SECRET "psst"
13 #define TEST_SOCKET_PATH "@memif.sock"
21 static memif_socket_handle_t memif_socket;
22 static memif_socket_args_t memif_socket_args;
23 static memif_control_channel_t *cc;
28 strncpy (memif_socket_args.app_name, MEMIF_DEFAULT_APP_NAME,
29 strlen (MEMIF_DEFAULT_APP_NAME));
30 sprintf (memif_socket_args.path, "%s", MEMIF_DEFAULT_SOCKET_PATH);
33 TEST_GROUP (MemifSocket);
35 TEST_SETUP (MemifSocket)
41 TEST_TEAR_DOWN (MemifSocket) {}
43 TEST (MemifSocket, CreateSocket)
46 memif_socket_args_t memif_socket_args = {
47 .app_name = TEST_APP_NAME,
48 .path = TEST_SOCKET_PATH,
50 err = memif_create_socket (&memif_socket, &memif_socket_args, NULL);
52 TEST_ASSERT_EQUAL_INT (0, err);
53 TEST_ASSERT_NOT_NULL (memif_socket);
55 memif_socket_t *ms = (memif_socket_t *) memif_socket;
57 TEST_ASSERT_EQUAL_STRING (ms->args.app_name, TEST_APP_NAME);
58 TEST_ASSERT_EQUAL_STRING (ms->args.path, TEST_SOCKET_PATH);
59 TEST_ASSERT_EQUAL_PTR (ms->args.on_control_fd_update,
60 memif_control_fd_update);
61 TEST_ASSERT_EQUAL_PTR (ms->args.alloc, malloc);
62 TEST_ASSERT_EQUAL_PTR (ms->args.realloc, realloc);
63 TEST_ASSERT_EQUAL_PTR (ms->args.free, free);
65 TEST_ASSERT_NOT_EQUAL_INT (ms->epfd, -1);
66 TEST_ASSERT_NOT_EQUAL_INT (ms->poll_cancel_fd, -1);
68 memif_delete_socket (&memif_socket);
71 TEST (MemifSocket, DeleteSocket)
74 memif_socket_args_t memif_socket_args = {
75 .app_name = TEST_APP_NAME,
76 .path = TEST_SOCKET_PATH,
78 memif_create_socket (&memif_socket, &memif_socket_args, NULL);
80 memif_socket_t *ms = (memif_socket_t *) memif_socket;
81 err = memif_delete_socket (&memif_socket);
82 TEST_ASSERT_EQUAL_INT (MEMIF_ERR_SUCCESS, err);
83 TEST_ASSERT_NULL (memif_socket);
86 TEST_GROUP (MemifControlChannel);
88 TEST_SETUP (MemifControlChannel)
93 memif_create_socket (&memif_socket, &memif_socket_args, NULL);
94 cc = (memif_control_channel_t *) malloc (sizeof (memif_control_channel_t));
97 TEST_TEAR_DOWN (MemifControlChannel) { free (cc); }
99 TEST (MemifControlChannel, EnqAck)
101 memif_connection_t conn;
102 memif_msg_queue_elt_t *e;
105 cc->sock = memif_socket;
107 TAILQ_INIT (&cc->msg_queue);
108 memif_msg_enq_ack (cc);
110 e = TAILQ_FIRST (&cc->msg_queue);
112 TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_ACK, e->msg.type);
113 TEST_ASSERT_EQUAL_INT (-1, e->fd);
116 TEST (MemifControlChannel, EnqHello)
118 memif_connection_t conn;
119 memif_msg_queue_elt_t *e;
122 cc->sock = memif_socket;
123 TAILQ_INIT (&cc->msg_queue);
125 memif_msg_enq_hello (cc);
127 e = TAILQ_FIRST (&cc->msg_queue);
129 TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_HELLO, e->msg.type);
130 TEST_ASSERT_EQUAL_INT (-1, e->fd);
131 memif_msg_hello_t h = e->msg.hello;
132 TEST_ASSERT_EQUAL_INT (MEMIF_MAX_LOG2_RING_SIZE, h.max_log2_ring_size);
133 TEST_ASSERT_EQUAL_INT (MEMIF_VERSION, h.min_version);
134 TEST_ASSERT_EQUAL_INT (MEMIF_VERSION, h.max_version);
135 TEST_ASSERT_EQUAL_INT (MEMIF_MAX_S2M_RING, h.max_s2m_ring);
136 TEST_ASSERT_EQUAL_INT (MEMIF_MAX_M2S_RING, h.max_m2s_ring);
137 TEST_ASSERT_EQUAL_INT (MEMIF_MAX_REGION, h.max_region);
140 TEST (MemifControlChannel, EnqInit)
142 memif_msg_queue_elt_t *e;
143 memif_connection_t conn;
146 cc->sock = memif_socket;
147 TAILQ_INIT (&cc->msg_queue);
149 conn.args.interface_id = 11;
151 strlcpy ((char *) conn.args.secret, MEMIF_TEST_SECRET,
152 sizeof (MEMIF_TEST_SECRET));
154 memif_socket_t *ms = (memif_socket_t *) memif_socket;
156 memif_msg_enq_init (cc);
158 e = TAILQ_FIRST (&cc->msg_queue);
160 TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_INIT, e->msg.type);
161 TEST_ASSERT_EQUAL_INT (-1, e->fd);
162 memif_msg_init_t h = e->msg.init;
164 TEST_ASSERT_EQUAL_INT (11, h.id);
165 TEST_ASSERT_EQUAL_INT (1, h.mode);
166 TEST_ASSERT_EQUAL_STRING (MEMIF_DEFAULT_APP_NAME, h.name);
167 TEST_ASSERT_EQUAL_STRING (MEMIF_TEST_SECRET, h.secret);
168 TEST_ASSERT_EQUAL_INT (MEMIF_VERSION, h.version);
171 TEST (MemifControlChannel, EnqAddRegion)
173 memif_msg_queue_elt_t *e;
174 memif_connection_t conn;
175 memset (cc, 0, sizeof (memif_msg_queue_elt_t));
176 memset (&conn, 0, sizeof (memif_connection_t));
180 cc->sock = memif_socket;
181 TAILQ_INIT (&cc->msg_queue);
183 conn.args.interface_id = 11;
185 conn.args.socket = memif_socket;
186 strlcpy ((char *) conn.args.secret, MEMIF_TEST_SECRET,
187 sizeof (MEMIF_TEST_SECRET));
189 memif_socket_t *ms = (memif_socket_t *) memif_socket;
191 conn.run_args.num_s2m_rings = 1;
192 conn.run_args.num_m2s_rings = 1;
193 conn.run_args.log2_ring_size = MEMIF_DEFAULT_LOG2_RING_SIZE;
194 conn.run_args.buffer_size = MEMIF_DEFAULT_BUFFER_SIZE;
196 memif_add_region (&conn, 1);
198 memif_msg_enq_add_region (cc, 0);
200 e = TAILQ_FIRST (&cc->msg_queue);
201 memif_msg_add_region_t h = e->msg.add_region;
203 TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_ADD_REGION, e->msg.type);
204 TEST_ASSERT_EQUAL_INT (conn.regions[0].fd, e->fd);
206 TEST_ASSERT_EQUAL_INT (0, h.index);
207 TEST_ASSERT_EQUAL_INT (conn.regions[0].region_size, h.size);
209 close (conn.regions[0].fd);
212 TEST (MemifControlChannel, EnqAddRing)
214 memif_msg_queue_elt_t *e;
215 memif_connection_t conn;
216 memset (cc, 0, sizeof (memif_msg_queue_elt_t));
217 memset (&conn, 0, sizeof (memif_connection_t));
221 cc->sock = memif_socket;
222 TAILQ_INIT (&cc->msg_queue);
224 conn.args.interface_id = 11;
226 conn.args.socket = memif_socket;
227 strlcpy ((char *) conn.args.secret, MEMIF_TEST_SECRET,
228 sizeof (MEMIF_TEST_SECRET));
230 memif_socket_t *ms = (memif_socket_t *) memif_socket;
232 conn.run_args.num_s2m_rings = 1;
233 conn.run_args.num_m2s_rings = 1;
234 conn.run_args.log2_ring_size = MEMIF_DEFAULT_LOG2_RING_SIZE;
235 conn.run_args.buffer_size = MEMIF_DEFAULT_BUFFER_SIZE;
237 memif_add_region (&conn, 1);
238 memif_init_queues (&conn);
239 memif_msg_enq_add_ring (cc, 0, MEMIF_RING_M2S);
241 e = TAILQ_FIRST (&cc->msg_queue);
242 memif_msg_add_ring_t h = e->msg.add_ring;
244 TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_ADD_RING, e->msg.type);
245 TEST_ASSERT_EQUAL_INT (conn.rx_queues[0].int_fd, e->fd);
247 TEST_ASSERT_EQUAL_INT (0, h.flags);
248 TEST_ASSERT_EQUAL_INT (0, h.index);
249 TEST_ASSERT_EQUAL_INT (conn.rx_queues[0].region, h.region);
250 TEST_ASSERT_EQUAL_INT (conn.rx_queues[0].offset, h.offset);
251 TEST_ASSERT_EQUAL_INT (conn.rx_queues[0].log2_ring_size, h.log2_ring_size);
252 TEST_ASSERT_EQUAL_INT (0, h.private_hdr_size);
254 close (conn.regions[0].fd);
256 TEST (MemifControlChannel, EnqConnect)
258 memif_msg_queue_elt_t *e;
259 memif_connection_t conn;
260 memset (cc, 0, sizeof (memif_msg_queue_elt_t));
261 memset (&conn, 0, sizeof (memif_connection_t));
265 cc->sock = memif_socket;
266 TAILQ_INIT (&cc->msg_queue);
268 conn.args.interface_id = 11;
270 conn.args.socket = memif_socket;
271 strlcpy ((char *) conn.args.secret, MEMIF_TEST_SECRET,
272 sizeof (MEMIF_TEST_SECRET));
273 strlcpy ((char *) conn.args.interface_name, MEMIF_TEST_IF_NAME,
274 sizeof (MEMIF_TEST_IF_NAME));
276 memif_socket_t *ms = (memif_socket_t *) memif_socket;
278 conn.run_args.num_s2m_rings = 1;
279 conn.run_args.num_m2s_rings = 1;
280 conn.run_args.log2_ring_size = MEMIF_DEFAULT_LOG2_RING_SIZE;
281 conn.run_args.buffer_size = MEMIF_DEFAULT_BUFFER_SIZE;
283 memif_add_region (&conn, 1);
284 memif_init_queues (&conn);
285 memif_msg_enq_connect (cc);
287 e = TAILQ_FIRST (&cc->msg_queue);
288 memif_msg_connect_t h = e->msg.connect;
290 TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_CONNECT, e->msg.type);
291 TEST_ASSERT_EQUAL_INT (-1, e->fd);
293 TEST_ASSERT_EQUAL_STRING (MEMIF_TEST_IF_NAME, h.if_name);
295 close (conn.regions[0].fd);
298 TEST (MemifControlChannel, EnqConnected)
300 memif_msg_queue_elt_t *e;
301 memif_connection_t conn;
302 memset (cc, 0, sizeof (memif_msg_queue_elt_t));
303 memset (&conn, 0, sizeof (memif_connection_t));
307 cc->sock = memif_socket;
308 TAILQ_INIT (&cc->msg_queue);
310 conn.args.interface_id = 11;
312 conn.args.socket = memif_socket;
313 strlcpy ((char *) conn.args.secret, MEMIF_TEST_SECRET,
314 sizeof (MEMIF_TEST_SECRET));
315 strlcpy ((char *) conn.args.interface_name, MEMIF_TEST_IF_NAME,
316 sizeof (MEMIF_TEST_IF_NAME));
318 memif_socket_t *ms = (memif_socket_t *) memif_socket;
320 conn.run_args.num_s2m_rings = 1;
321 conn.run_args.num_m2s_rings = 1;
322 conn.run_args.log2_ring_size = MEMIF_DEFAULT_LOG2_RING_SIZE;
323 conn.run_args.buffer_size = MEMIF_DEFAULT_BUFFER_SIZE;
325 memif_add_region (&conn, 1);
326 memif_init_queues (&conn);
327 memif_msg_enq_connect (cc);
329 e = TAILQ_FIRST (&cc->msg_queue);
330 memif_msg_connected_t h = e->msg.connected;
332 TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_CONNECT, e->msg.type);
333 TEST_ASSERT_EQUAL_INT (-1, e->fd);
335 TEST_ASSERT_EQUAL_STRING (MEMIF_TEST_IF_NAME, h.if_name);
337 close (conn.regions[0].fd);
340 TEST (MemifControlChannel, EnqDisconnect)
342 memif_msg_queue_elt_t *e;
343 memif_connection_t conn;
344 memset (cc, 0, sizeof (memif_msg_queue_elt_t));
345 memset (&conn, 0, sizeof (memif_connection_t));
349 cc->sock = memif_socket;
350 TAILQ_INIT (&cc->msg_queue);
352 conn.args.interface_id = 11;
354 conn.args.socket = memif_socket;
355 strlcpy ((char *) conn.args.secret, MEMIF_TEST_SECRET,
356 sizeof (MEMIF_TEST_SECRET));
357 strlcpy ((char *) conn.args.interface_name, MEMIF_TEST_IF_NAME,
358 sizeof (MEMIF_TEST_IF_NAME));
360 memif_socket_t *ms = (memif_socket_t *) memif_socket;
361 memif_msg_enq_disconnect (cc, "TEST", 5);
363 e = TAILQ_FIRST (&cc->msg_queue);
364 memif_msg_disconnect_t h = e->msg.disconnect;
366 TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_DISCONNECT, e->msg.type);
367 TEST_ASSERT_EQUAL_INT (-1, e->fd);
369 TEST_ASSERT_EQUAL_INT (5, h.code);
370 TEST_ASSERT_EQUAL_STRING ("TEST", h.string);
373 TEST_GROUP_RUNNER (MemifSocket){ RUN_TEST_CASE (MemifSocket, CreateSocket)
374 RUN_TEST_CASE (MemifSocket, DeleteSocket)
378 TEST_GROUP_RUNNER (MemifControlChannel)
380 RUN_TEST_CASE (MemifControlChannel, EnqAck)
381 RUN_TEST_CASE (MemifControlChannel, EnqHello)
382 RUN_TEST_CASE (MemifControlChannel, EnqInit)
383 RUN_TEST_CASE (MemifControlChannel, EnqAddRegion)
384 RUN_TEST_CASE (MemifControlChannel, EnqAddRing)
385 RUN_TEST_CASE (MemifControlChannel, EnqConnect)
386 RUN_TEST_CASE (MemifControlChannel, EnqConnected)
387 RUN_TEST_CASE (MemifControlChannel, EnqDisconnect)
393 RUN_TEST_GROUP (MemifSocket);
394 RUN_TEST_GROUP (MemifControlChannel);
398 main (int argc, const char *argv[])
400 return UnityMain (argc, argv, RunAllTests);