2 test_cases_get_all_nodes.c -- Execution of specific meshlink black box test cases
3 Copyright (C) 2018 Guus Sliepen <guus@meshlink.io>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #include "execute_tests.h"
21 #include "test_cases.h"
22 #include "../common/containers.h"
23 #include "../common/test_step.h"
24 #include "../common/common_handlers.h"
25 #include "test_cases_get_all_nodes.h"
34 /* Modify this to change the logging level of Meshlink */
35 #define TEST_MESHLINK_LOG_LEVEL MESHLINK_DEBUG
37 static void test_case_get_all_nodes_01(void **state);
38 static bool test_get_all_nodes_01(void);
39 static void test_case_get_all_nodes_02(void **state);
40 static bool test_get_all_nodes_02(void);
41 static void test_case_get_all_nodes_03(void **state);
42 static bool test_get_all_nodes_03(void);
43 static void test_case_get_all_nodes_04(void **state);
44 static bool test_get_all_nodes_04(void);
46 /* State structure for get_all_nodes Test Case #1 */
47 static black_box_state_t test_case_get_all_nodes_01_state = {
48 .test_case_name = "test_case_get_all_nodes_01",
51 /* State structure for get_all_nodes Test Case #2 */
52 static black_box_state_t test_case_get_all_nodes_02_state = {
53 .test_case_name = "test_case_get_all_nodes_02",
56 /* State structure for get_all_nodes Test Case #3 */
57 static black_box_state_t test_case_get_all_nodes_03_state = {
58 .test_case_name = "test_case_get_all_nodes_03",
61 /* Execute get_all_nodes Test Case # 1 - Valid case - get all nodes in the mesh */
62 static void test_case_get_all_nodes_01(void **state) {
63 execute_test(test_get_all_nodes_01, state);
65 /* Test Steps for get_all_nodes Test Case # 1 - Valid case
68 1. Open NUT and get list of nodes
69 2. Open bar and join with NUT
70 3. get list of nodes together
73 Obtaining list of nodes in the mesh at the given instance
75 static bool test_get_all_nodes_01(void) {
76 meshlink_destroy("getnodeconf1");
77 meshlink_destroy("getnodeconf2");
78 meshlink_set_log_cb(NULL, TEST_MESHLINK_LOG_LEVEL, meshlink_callback_logger);
80 /* Create meshlink instance for NUT */
81 meshlink_handle_t *mesh1 = meshlink_open("getnodeconf1", "nut", "node_sim", DEV_CLASS_STATIONARY);
83 meshlink_set_log_cb(mesh1, TEST_MESHLINK_LOG_LEVEL, meshlink_callback_logger);
86 meshlink_node_t **nodes = NULL;
87 nodes = meshlink_get_all_nodes(mesh1, nodes, &nnodes);
88 assert_int_not_equal(nodes, NULL);
89 assert_int_equal(nnodes, 1);
91 /* Create meshlink instance for bar */
92 meshlink_handle_t *mesh2 = meshlink_open("getnodeconf2", "bar", "node_sim", DEV_CLASS_STATIONARY);
95 /* importing and exporting mesh meta data */
96 char *exp1 = meshlink_export(mesh1);
98 char *exp2 = meshlink_export(mesh2);
100 assert(meshlink_import(mesh1, exp2));
101 assert(meshlink_import(mesh2, exp1));
103 nodes = meshlink_get_all_nodes(mesh1, nodes, &nnodes);
104 assert_int_not_equal(nodes, NULL);
105 assert_int_equal(nnodes, 2);
107 meshlink_close(mesh1);
108 meshlink_close(mesh2);
109 meshlink_destroy("getnodeconf1");
110 meshlink_destroy("getnodeconf2");
117 /* Execute get_all_nodes Test Case # 2 - Invalid case - get all nodes in the mesh passing NULL */
118 static void test_case_get_all_nodes_02(void **state) {
119 execute_test(test_get_all_nodes_02, state);
122 /* Test Steps for get_all_nodes Test Case # 2 - Invalid case
125 1. Passing NULL as mesh handle argument for meshlink_get_all_nodes
128 Error reported correctly by returning NULL
130 static bool test_get_all_nodes_02(void) {
131 meshlink_node_t **nodes = NULL;
134 meshlink_node_t **node = meshlink_get_all_nodes(NULL, nodes, &nmemb);
135 assert_int_equal(nodes, NULL);
140 /* Execute get_all_nodes Test Case # 3 - Invalid case - get all nodes in the mesh passing NULL as nmeb arg */
141 static void test_case_get_all_nodes_03(void **state) {
142 execute_test(test_get_all_nodes_03, state);
144 /* Test Steps for get_all_nodes Test Case # 3 - Invalid case
147 1. Passing NULL as pointer to node members argument for meshlink_get_all_nodes
150 Error reported correctly by returning NULL
152 static bool test_get_all_nodes_03(void) {
153 /* Create meshlink instance */
154 meshlink_handle_t *mesh_handle = meshlink_open("getallnodesconf", "nut", "node_sim", 1);
156 assert(meshlink_start(mesh_handle));
158 meshlink_node_t **nodes = NULL;
159 nodes = meshlink_get_all_nodes(mesh_handle, nodes, NULL);
160 assert_int_equal(nodes, NULL);
162 meshlink_close(mesh_handle);
163 meshlink_destroy("getallnodesconf");
168 int test_meshlink_get_all_nodes(void) {
169 const struct CMUnitTest blackbox_get_all_nodes[] = {
170 cmocka_unit_test_prestate_setup_teardown(test_case_get_all_nodes_01, NULL, NULL,
171 (void *)&test_case_get_all_nodes_01_state),
172 cmocka_unit_test_prestate_setup_teardown(test_case_get_all_nodes_02, NULL, NULL,
173 (void *)&test_case_get_all_nodes_02_state),
174 cmocka_unit_test_prestate_setup_teardown(test_case_get_all_nodes_03, NULL, NULL,
175 (void *)&test_case_get_all_nodes_03_state)
177 total_tests += sizeof(blackbox_get_all_nodes) / sizeof(blackbox_get_all_nodes[0]);
179 return cmocka_run_group_tests(blackbox_get_all_nodes, NULL, NULL);