2 test_cases_get_node.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_get_node.h"
22 #include "../common/containers.h"
23 #include "../common/test_step.h"
24 #include "../common/common_handlers.h"
32 /* Modify this to change the logging level of Meshlink */
33 #define TEST_MESHLINK_LOG_LEVEL MESHLINK_DEBUG
35 static void test_case_mesh_get_node_01(void **state);
36 static bool test_steps_mesh_get_node_01(void);
37 static void test_case_mesh_get_node_02(void **state);
38 static bool test_steps_mesh_get_node_02(void);
39 static void test_case_mesh_get_node_03(void **state);
40 static bool test_steps_mesh_get_node_03(void);
41 static void test_case_mesh_get_node_04(void **state);
42 static bool test_steps_mesh_get_node_04(void);
44 /* State structure for meshlink_get_node Test Case #1 */
45 static black_box_state_t test_mesh_get_node_01_state = {
46 .test_case_name = "test_case_mesh_get_node_01",
49 /* State structure for meshlink_get_node Test Case #2 */
50 static black_box_state_t test_mesh_get_node_02_state = {
51 .test_case_name = "test_case_mesh_get_node_02",
54 /* State structure for meshlink_get_node Test Case #3 */
55 static black_box_state_t test_mesh_get_node_03_state = {
56 .test_case_name = "test_case_mesh_get_node_03",
59 /* State structure for meshlink_get_node Test Case #4 */
60 static black_box_state_t test_mesh_get_node_04_state = {
61 .test_case_name = "test_case_mesh_get_node_04",
64 /* Execute meshlink_get_node Test Case # 1 */
65 static void test_case_mesh_get_node_01(void **state) {
66 execute_test(test_steps_mesh_get_node_01, state);
69 /* Test Steps for meshlink_get_node Test Case # 1
72 1. Open nodes instance
76 node handle of it's own is obtained
78 static bool test_steps_mesh_get_node_01(void) {
79 meshlink_set_log_cb(NULL, TEST_MESHLINK_LOG_LEVEL, meshlink_callback_logger);
80 meshlink_destroy("getnode1");
81 meshlink_destroy("getnode2");
83 // Opening NUT and bar nodes
84 meshlink_handle_t *mesh1 = meshlink_open("getnode1", "nut", "test", DEV_CLASS_STATIONARY);
85 assert(mesh1 != NULL);
86 meshlink_set_log_cb(mesh1, TEST_MESHLINK_LOG_LEVEL, meshlink_callback_logger);
87 meshlink_handle_t *mesh2 = meshlink_open("getnode2", "bar", "test", DEV_CLASS_STATIONARY);
88 assert(mesh2 != NULL);
89 meshlink_set_log_cb(mesh2, TEST_MESHLINK_LOG_LEVEL, meshlink_callback_logger);
91 // Exporting and Importing mutually
92 char *exp1 = meshlink_export(mesh1);
94 char *exp2 = meshlink_export(mesh2);
96 bool imp1 = meshlink_import(mesh1, exp2);
98 bool imp2 = meshlink_import(mesh2, exp1);
102 meshlink_node_t *get_node = meshlink_get_node(mesh1, "bar");
103 assert_int_not_equal(get_node, NULL);
104 get_node = meshlink_get_node(mesh1, "nut");
105 assert_int_not_equal(get_node, NULL);
108 meshlink_close(mesh1);
109 meshlink_close(mesh2);
110 meshlink_destroy("getnode1");
111 meshlink_destroy("getnode2");
115 /* Execute meshlink_get_node Test Case # 2 */
116 static void test_case_mesh_get_node_02(void **state) {
117 execute_test(test_steps_mesh_get_node_02, state);
120 /* Test Steps for meshlink_get_node Test Case # 2
123 1. Get node handles by passing NULL as mesh handle argument
126 Reports error successfully by returning NULL
128 static bool test_steps_mesh_get_node_02(void) {
129 meshlink_node_t *get_node = meshlink_get_node(NULL, "foo");
130 assert_int_equal(get_node, NULL);
135 /* Execute meshlink_get_node Test Case # 3 */
136 static void test_case_mesh_get_node_03(void **state) {
137 execute_test(test_steps_mesh_get_node_03, state);
140 /* Test Steps for meshlink_get_node Test Case # 3
143 1. Get node handles by passing NULL as node name argument
146 Reports error successfully by returning NULL
148 static bool test_steps_mesh_get_node_03(void) {
149 meshlink_handle_t *mesh = meshlink_open("node_conf.3", "foo", "test", DEV_CLASS_STATIONARY);
151 assert(meshlink_start(mesh));
153 meshlink_node_t *get_node = meshlink_get_node(mesh, NULL);
154 assert_int_equal(get_node, NULL);
156 meshlink_close(mesh);
157 meshlink_destroy("node_conf.3");
161 /* Execute meshlink_get_node Test Case # 4 */
162 static void test_case_mesh_get_node_04(void **state) {
163 execute_test(test_steps_mesh_get_node_04, state);
166 /* Test Steps for meshlink_get_node Test Case # 4
169 1. Open node instance
170 2. Get node handle with the name of the node
171 that's not in the mesh
174 Reports error successfully by returning NULL
176 static bool test_steps_mesh_get_node_04(void) {
177 meshlink_handle_t *mesh = meshlink_open("node_conf", "foo", "test", DEV_CLASS_STATIONARY);
179 assert(meshlink_start(mesh));
181 const char *nonexisting_node = "bar";
182 meshlink_node_t *get_node = meshlink_get_node(mesh, nonexisting_node);
183 assert_int_equal(get_node, NULL);
185 meshlink_close(mesh);
186 meshlink_destroy("node_conf");
190 int test_meshlink_get_node(void) {
191 const struct CMUnitTest blackbox_get_node_tests[] = {
192 cmocka_unit_test_prestate_setup_teardown(test_case_mesh_get_node_01, NULL, NULL,
193 (void *)&test_mesh_get_node_01_state),
194 cmocka_unit_test_prestate_setup_teardown(test_case_mesh_get_node_02, NULL, NULL,
195 (void *)&test_mesh_get_node_02_state),
196 cmocka_unit_test_prestate_setup_teardown(test_case_mesh_get_node_03, NULL, NULL,
197 (void *)&test_mesh_get_node_03_state),
198 cmocka_unit_test_prestate_setup_teardown(test_case_mesh_get_node_04, NULL, NULL,
199 (void *)&test_mesh_get_node_04_state)
202 total_tests += sizeof(blackbox_get_node_tests) / sizeof(blackbox_get_node_tests[0]);
204 return cmocka_run_group_tests(blackbox_get_node_tests, NULL, NULL);