OpenDNSSEC-enforcer 2.1.13
test_key_dependency.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2014 Jerry Lundström <lundstrom.jerry@gmail.com>
3 * Copyright (c) 2014 .SE (The Internet Infrastructure Foundation).
4 * Copyright (c) 2014 OpenDNSSEC AB (svb)
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
24 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 */
29
30#include "CUnit/Basic.h"
31
32#include "../db_configuration.h"
33#include "../db_connection.h"
34#include "../key_dependency.h"
35
36#include <string.h>
37
38static db_configuration_list_t* configuration_list = NULL;
39static db_configuration_t* configuration = NULL;
40static db_connection_t* connection = NULL;
41
42static key_dependency_t* object = NULL;
43static key_dependency_list_t* object_list = NULL;
44static db_value_t id = DB_VALUE_EMPTY;
45static db_clause_list_t* clause_list = NULL;
46
47static int db_sqlite = 0;
48static int db_mysql = 0;
49
50#if defined(ENFORCER_DATABASE_SQLITE3)
51int test_key_dependency_init_suite_sqlite(void) {
52 if (configuration_list) {
53 return 1;
54 }
55 if (configuration) {
56 return 1;
57 }
58 if (connection) {
59 return 1;
60 }
61
62 /*
63 * Setup the configuration for the connection
64 */
65 if (!(configuration_list = db_configuration_list_new())) {
66 return 1;
67 }
68 if (!(configuration = db_configuration_new())
69 || db_configuration_set_name(configuration, "backend")
70 || db_configuration_set_value(configuration, "sqlite")
71 || db_configuration_list_add(configuration_list, configuration))
72 {
73 db_configuration_free(configuration);
74 configuration = NULL;
75 db_configuration_list_free(configuration_list);
76 configuration_list = NULL;
77 return 1;
78 }
79 configuration = NULL;
80 if (!(configuration = db_configuration_new())
81 || db_configuration_set_name(configuration, "file")
82 || db_configuration_set_value(configuration, "test.db")
83 || db_configuration_list_add(configuration_list, configuration))
84 {
85 db_configuration_free(configuration);
86 configuration = NULL;
87 db_configuration_list_free(configuration_list);
88 configuration_list = NULL;
89 return 1;
90 }
91 configuration = NULL;
92
93 /*
94 * Connect to the database
95 */
96 if (!(connection = db_connection_new())
97 || db_connection_set_configuration_list(connection, configuration_list))
98 {
99 db_connection_free(connection);
100 connection = NULL;
101 db_configuration_list_free(configuration_list);
102 configuration_list = NULL;
103 return 1;
104 }
105 configuration_list = NULL;
106
107 if (db_connection_setup(connection)
108 || db_connection_connect(connection))
109 {
110 db_connection_free(connection);
111 connection = NULL;
112 return 1;
113 }
114
115 db_sqlite = 1;
116 db_mysql = 0;
117
118 return 0;
119}
120#endif
121
122#if defined(ENFORCER_DATABASE_MYSQL)
123int test_key_dependency_init_suite_mysql(void) {
124 if (configuration_list) {
125 return 1;
126 }
127 if (configuration) {
128 return 1;
129 }
130 if (connection) {
131 return 1;
132 }
133
134 /*
135 * Setup the configuration for the connection
136 */
137 if (!(configuration_list = db_configuration_list_new())) {
138 return 1;
139 }
140 if (!(configuration = db_configuration_new())
141 || db_configuration_set_name(configuration, "backend")
142 || db_configuration_set_value(configuration, "mysql")
143 || db_configuration_list_add(configuration_list, configuration))
144 {
145 db_configuration_free(configuration);
146 configuration = NULL;
147 db_configuration_list_free(configuration_list);
148 configuration_list = NULL;
149 return 1;
150 }
151 configuration = NULL;
152 if (!(configuration = db_configuration_new())
153 || db_configuration_set_name(configuration, "host")
154 || db_configuration_set_value(configuration, ENFORCER_DB_HOST)
155 || db_configuration_list_add(configuration_list, configuration))
156 {
157 db_configuration_free(configuration);
158 configuration = NULL;
159 db_configuration_list_free(configuration_list);
160 configuration_list = NULL;
161 return 1;
162 }
163 configuration = NULL;
164 if (!(configuration = db_configuration_new())
165 || db_configuration_set_name(configuration, "port")
166 || db_configuration_set_value(configuration, ENFORCER_DB_PORT_TEXT)
167 || db_configuration_list_add(configuration_list, configuration))
168 {
169 db_configuration_free(configuration);
170 configuration = NULL;
171 db_configuration_list_free(configuration_list);
172 configuration_list = NULL;
173 return 1;
174 }
175 configuration = NULL;
176 if (!(configuration = db_configuration_new())
177 || db_configuration_set_name(configuration, "user")
178 || db_configuration_set_value(configuration, ENFORCER_DB_USERNAME)
179 || db_configuration_list_add(configuration_list, configuration))
180 {
181 db_configuration_free(configuration);
182 configuration = NULL;
183 db_configuration_list_free(configuration_list);
184 configuration_list = NULL;
185 return 1;
186 }
187 configuration = NULL;
188 if (!(configuration = db_configuration_new())
189 || db_configuration_set_name(configuration, "pass")
190 || db_configuration_set_value(configuration, ENFORCER_DB_PASSWORD)
191 || db_configuration_list_add(configuration_list, configuration))
192 {
193 db_configuration_free(configuration);
194 configuration = NULL;
195 db_configuration_list_free(configuration_list);
196 configuration_list = NULL;
197 return 1;
198 }
199 configuration = NULL;
200 if (!(configuration = db_configuration_new())
201 || db_configuration_set_name(configuration, "db")
202 || db_configuration_set_value(configuration, ENFORCER_DB_DATABASE)
203 || db_configuration_list_add(configuration_list, configuration))
204 {
205 db_configuration_free(configuration);
206 configuration = NULL;
207 db_configuration_list_free(configuration_list);
208 configuration_list = NULL;
209 return 1;
210 }
211 configuration = NULL;
212
213 /*
214 * Connect to the database
215 */
216 if (!(connection = db_connection_new())
217 || db_connection_set_configuration_list(connection, configuration_list))
218 {
219 db_connection_free(connection);
220 connection = NULL;
221 db_configuration_list_free(configuration_list);
222 configuration_list = NULL;
223 return 1;
224 }
225 configuration_list = NULL;
226
227 if (db_connection_setup(connection)
228 || db_connection_connect(connection))
229 {
230 db_connection_free(connection);
231 connection = NULL;
232 return 1;
233 }
234
235 db_sqlite = 0;
236 db_mysql = 1;
237
238 return 0;
239}
240#endif
241
242static int test_key_dependency_clean_suite(void) {
243 db_connection_free(connection);
244 connection = NULL;
245 db_configuration_free(configuration);
246 configuration = NULL;
247 db_configuration_list_free(configuration_list);
248 configuration_list = NULL;
249 db_value_reset(&id);
250 db_clause_list_free(clause_list);
251 clause_list = NULL;
252 return 0;
253}
254
255static void test_key_dependency_new(void) {
256 CU_ASSERT_PTR_NOT_NULL_FATAL((object = key_dependency_new(connection)));
257 CU_ASSERT_PTR_NOT_NULL_FATAL((object_list = key_dependency_list_new(connection)));
258}
259
260static void test_key_dependency_set(void) {
261 db_value_t zone_id = DB_VALUE_EMPTY;
262 db_value_t from_key_data_id = DB_VALUE_EMPTY;
263 db_value_t to_key_data_id = DB_VALUE_EMPTY;
264 if (db_sqlite) {
265 CU_ASSERT(!db_value_from_int32(&zone_id, 1));
266 }
267 if (db_mysql) {
268 CU_ASSERT(!db_value_from_uint64(&zone_id, 1));
269 }
270 if (db_sqlite) {
271 CU_ASSERT(!db_value_from_int32(&from_key_data_id, 1));
272 }
273 if (db_mysql) {
274 CU_ASSERT(!db_value_from_uint64(&from_key_data_id, 1));
275 }
276 if (db_sqlite) {
277 CU_ASSERT(!db_value_from_int32(&to_key_data_id, 1));
278 }
279 if (db_mysql) {
280 CU_ASSERT(!db_value_from_uint64(&to_key_data_id, 1));
281 }
282 CU_ASSERT(!key_dependency_set_zone_id(object, &zone_id));
283 CU_ASSERT(!key_dependency_set_from_key_data_id(object, &from_key_data_id));
284 CU_ASSERT(!key_dependency_set_to_key_data_id(object, &to_key_data_id));
289 db_value_reset(&zone_id);
290 db_value_reset(&from_key_data_id);
291 db_value_reset(&to_key_data_id);
292}
293
294static void test_key_dependency_get(void) {
295 int ret;
296 db_value_t zone_id = DB_VALUE_EMPTY;
297 db_value_t from_key_data_id = DB_VALUE_EMPTY;
298 db_value_t to_key_data_id = DB_VALUE_EMPTY;
299 if (db_sqlite) {
300 CU_ASSERT(!db_value_from_int32(&zone_id, 1));
301 }
302 if (db_mysql) {
303 CU_ASSERT(!db_value_from_uint64(&zone_id, 1));
304 }
305 if (db_sqlite) {
306 CU_ASSERT(!db_value_from_int32(&from_key_data_id, 1));
307 }
308 if (db_mysql) {
309 CU_ASSERT(!db_value_from_uint64(&from_key_data_id, 1));
310 }
311 if (db_sqlite) {
312 CU_ASSERT(!db_value_from_int32(&to_key_data_id, 1));
313 }
314 if (db_mysql) {
315 CU_ASSERT(!db_value_from_uint64(&to_key_data_id, 1));
316 }
317 CU_ASSERT(!db_value_cmp(key_dependency_zone_id(object), &zone_id, &ret));
318 CU_ASSERT(!ret);
319 CU_ASSERT(!db_value_cmp(key_dependency_from_key_data_id(object), &from_key_data_id, &ret));
320 CU_ASSERT(!ret);
321 CU_ASSERT(!db_value_cmp(key_dependency_to_key_data_id(object), &to_key_data_id, &ret));
322 CU_ASSERT(!ret);
324 db_value_reset(&zone_id);
325 db_value_reset(&from_key_data_id);
326 db_value_reset(&to_key_data_id);
327}
328
329static void test_key_dependency_create(void) {
330 CU_ASSERT_FATAL(!key_dependency_create(object));
331}
332
333static void test_key_dependency_clauses(void) {
334 CU_ASSERT_PTR_NOT_NULL_FATAL((clause_list = db_clause_list_new()));
335 CU_ASSERT(!key_dependency_list_get_by_clauses(object_list, clause_list));
336 CU_ASSERT_PTR_NOT_NULL(key_dependency_list_next(object_list));
337 db_clause_list_free(clause_list);
338 clause_list = NULL;
339
340 CU_ASSERT_PTR_NOT_NULL_FATAL((clause_list = db_clause_list_new()));
341 CU_ASSERT(!key_dependency_list_get_by_clauses(object_list, clause_list));
342 CU_ASSERT_PTR_NOT_NULL(key_dependency_list_next(object_list));
343 db_clause_list_free(clause_list);
344 clause_list = NULL;
345
346 CU_ASSERT_PTR_NOT_NULL_FATAL((clause_list = db_clause_list_new()));
347 CU_ASSERT(!key_dependency_list_get_by_clauses(object_list, clause_list));
348 CU_ASSERT_PTR_NOT_NULL(key_dependency_list_next(object_list));
349 db_clause_list_free(clause_list);
350 clause_list = NULL;
351
352 CU_ASSERT_PTR_NOT_NULL_FATAL((clause_list = db_clause_list_new()));
353 CU_ASSERT(!key_dependency_list_get_by_clauses(object_list, clause_list));
354 CU_ASSERT_PTR_NOT_NULL(key_dependency_list_next(object_list));
355 db_clause_list_free(clause_list);
356 clause_list = NULL;
357}
358
359static void test_key_dependency_verify(void) {
360 int ret;
361 db_value_t zone_id = DB_VALUE_EMPTY;
362 db_value_t from_key_data_id = DB_VALUE_EMPTY;
363 db_value_t to_key_data_id = DB_VALUE_EMPTY;
364 if (db_sqlite) {
365 CU_ASSERT(!db_value_from_int32(&zone_id, 1));
366 }
367 if (db_mysql) {
368 CU_ASSERT(!db_value_from_uint64(&zone_id, 1));
369 }
370 if (db_sqlite) {
371 CU_ASSERT(!db_value_from_int32(&from_key_data_id, 1));
372 }
373 if (db_mysql) {
374 CU_ASSERT(!db_value_from_uint64(&from_key_data_id, 1));
375 }
376 if (db_sqlite) {
377 CU_ASSERT(!db_value_from_int32(&to_key_data_id, 1));
378 }
379 if (db_mysql) {
380 CU_ASSERT(!db_value_from_uint64(&to_key_data_id, 1));
381 }
382 CU_ASSERT(!db_value_cmp(key_dependency_zone_id(object), &zone_id, &ret));
383 CU_ASSERT(!ret);
384 CU_ASSERT(!db_value_cmp(key_dependency_from_key_data_id(object), &from_key_data_id, &ret));
385 CU_ASSERT(!ret);
386 CU_ASSERT(!db_value_cmp(key_dependency_to_key_data_id(object), &to_key_data_id, &ret));
387 CU_ASSERT(!ret);
389 db_value_reset(&zone_id);
390 db_value_reset(&to_key_data_id);
391}
392
393static void test_key_dependency_change(void) {
394 db_value_t zone_id = DB_VALUE_EMPTY;
395 db_value_t from_key_data_id = DB_VALUE_EMPTY;
396 db_value_t to_key_data_id = DB_VALUE_EMPTY;
397 if (db_sqlite) {
398 CU_ASSERT(!db_value_from_int32(&zone_id, 1));
399 }
400 if (db_mysql) {
401 CU_ASSERT(!db_value_from_uint64(&zone_id, 1));
402 }
403 if (db_sqlite) {
404 CU_ASSERT(!db_value_from_int32(&from_key_data_id, 1));
405 }
406 if (db_mysql) {
407 CU_ASSERT(!db_value_from_uint64(&from_key_data_id, 1));
408 }
409 if (db_sqlite) {
410 CU_ASSERT(!db_value_from_int32(&to_key_data_id, 1));
411 }
412 if (db_mysql) {
413 CU_ASSERT(!db_value_from_uint64(&to_key_data_id, 1));
414 }
415 CU_ASSERT(!key_dependency_set_zone_id(object, &zone_id));
416 CU_ASSERT(!key_dependency_set_from_key_data_id(object, &from_key_data_id));
417 CU_ASSERT(!key_dependency_set_to_key_data_id(object, &to_key_data_id));
419 db_value_reset(&zone_id);
420 db_value_reset(&from_key_data_id);
421 db_value_reset(&to_key_data_id);
422}
423
424static void test_key_dependency_read(void) {
426 if (db_sqlite) {
427 CU_ASSERT(!db_value_from_int32(&id, 1));
428 }
429 if (db_mysql) {
430 CU_ASSERT(!db_value_from_uint64(&id, 1));
431 }
432
433 CU_ASSERT_FATAL(!key_dependency_get_by_id(object, &id));
434}
435
436static void test_key_dependency_verify2(void) {
437 int ret;
438 db_value_t zone_id = DB_VALUE_EMPTY;
439 db_value_t from_key_data_id = DB_VALUE_EMPTY;
440 db_value_t to_key_data_id = DB_VALUE_EMPTY;
441 if (db_sqlite) {
442 CU_ASSERT(!db_value_from_int32(&zone_id, 1));
443 }
444 if (db_mysql) {
445 CU_ASSERT(!db_value_from_uint64(&zone_id, 1));
446 }
447 if (db_sqlite) {
448 CU_ASSERT(!db_value_from_int32(&from_key_data_id, 1));
449 }
450 if (db_mysql) {
451 CU_ASSERT(!db_value_from_uint64(&from_key_data_id, 1));
452 }
453 if (db_sqlite) {
454 CU_ASSERT(!db_value_from_int32(&to_key_data_id, 1));
455 }
456 if (db_mysql) {
457 CU_ASSERT(!db_value_from_uint64(&to_key_data_id, 1));
458 }
459 CU_ASSERT(!db_value_cmp(key_dependency_zone_id(object), &zone_id, &ret));
460 CU_ASSERT(!ret);
461 CU_ASSERT(!db_value_cmp(key_dependency_from_key_data_id(object), &from_key_data_id, &ret));
462 CU_ASSERT(!ret);
463 CU_ASSERT(!db_value_cmp(key_dependency_to_key_data_id(object), &to_key_data_id, &ret));
464 CU_ASSERT(!ret);
465 CU_ASSERT(key_dependency_type(object) == KEY_DEPENDENCY_TYPE_DS);
466 db_value_reset(&zone_id);
467 db_value_reset(&from_key_data_id);
468 db_value_reset(&to_key_data_id);
469}
470
471static void test_key_dependency_cmp(void) {
472 key_dependency_t* local_object;
473
474 CU_ASSERT_PTR_NOT_NULL_FATAL((local_object = key_dependency_new(connection)));
475}
476
477static void test_key_dependency_delete(void) {
478 CU_ASSERT_FATAL(!key_dependency_delete(object));
479}
480
481static void test_key_dependency_list2(void) {
482 CU_ASSERT_PTR_NULL(key_dependency_list_next(object_list));
483}
484
485static void test_key_dependency_end(void) {
486 if (object) {
487 key_dependency_free(object);
488 CU_PASS("key_dependency_free");
489 }
490 if (object_list) {
491 key_dependency_list_free(object_list);
492 CU_PASS("key_dependency_list_free");
493 }
494}
495
496static int test_key_dependency_add_tests(CU_pSuite pSuite) {
497 if (!CU_add_test(pSuite, "new object", test_key_dependency_new)
498 || !CU_add_test(pSuite, "set fields", test_key_dependency_set)
499 || !CU_add_test(pSuite, "get fields", test_key_dependency_get)
500 || !CU_add_test(pSuite, "create object", test_key_dependency_create)
501 || !CU_add_test(pSuite, "object clauses", test_key_dependency_clauses)
502 || !CU_add_test(pSuite, "verify fields", test_key_dependency_verify)
503 || !CU_add_test(pSuite, "change object", test_key_dependency_change)
504 || !CU_add_test(pSuite, "verify fields after update", test_key_dependency_verify2)
505 || !CU_add_test(pSuite, "compare objects", test_key_dependency_cmp)
506 || !CU_add_test(pSuite, "read object by id", test_key_dependency_read)
507 || !CU_add_test(pSuite, "delete object", test_key_dependency_delete)
508 || !CU_add_test(pSuite, "list objects to verify delete", test_key_dependency_list2)
509 || !CU_add_test(pSuite, "end test", test_key_dependency_end))
510 {
511 return CU_get_error();
512 }
513 return 0;
514}
515
517 CU_pSuite pSuite = NULL;
518 int ret;
519
520#if defined(ENFORCER_DATABASE_SQLITE3)
521 pSuite = CU_add_suite("Test of key dependency (SQLite)", test_key_dependency_init_suite_sqlite, test_key_dependency_clean_suite);
522 if (!pSuite) {
523 return CU_get_error();
524 }
525 ret = test_key_dependency_add_tests(pSuite);
526 if (ret) {
527 return ret;
528 }
529#endif
530#if defined(ENFORCER_DATABASE_MYSQL)
531 pSuite = CU_add_suite("Test of key dependency (MySQL)", test_key_dependency_init_suite_mysql, test_key_dependency_clean_suite);
532 if (!pSuite) {
533 return CU_get_error();
534 }
535 ret = test_key_dependency_add_tests(pSuite);
536 if (ret) {
537 return ret;
538 }
539#endif
540 return 0;
541}
db_clause_list_t * db_clause_list_new(void)
Definition: db_clause.c:202
void db_clause_list_free(db_clause_list_t *clause_list)
Definition: db_clause.c:209
db_configuration_t * db_configuration_new(void)
db_configuration_list_t * db_configuration_list_new(void)
void db_configuration_free(db_configuration_t *configuration)
int db_configuration_set_name(db_configuration_t *configuration, const char *name)
int db_configuration_list_add(db_configuration_list_t *configuration_list, db_configuration_t *configuration)
int db_configuration_set_value(db_configuration_t *configuration, const char *value)
void db_configuration_list_free(db_configuration_list_t *configuration_list)
int db_connection_connect(const db_connection_t *connection)
Definition: db_connection.c:88
db_connection_t * db_connection_new(void)
Definition: db_connection.c:38
int db_connection_setup(db_connection_t *connection)
Definition: db_connection.c:66
void db_connection_free(db_connection_t *connection)
Definition: db_connection.c:45
int db_connection_set_configuration_list(db_connection_t *connection, const db_configuration_list_t *configuration_list)
Definition: db_connection.c:54
int db_value_from_int32(db_value_t *value, db_type_int32_t from_int32)
Definition: db_value.c:479
int db_value_cmp(const db_value_t *value_a, const db_value_t *value_b, int *result)
Definition: db_value.c:102
void db_value_reset(db_value_t *value)
Definition: db_value.c:60
int db_value_from_uint64(db_value_t *value, db_type_uint64_t from_uint64)
Definition: db_value.c:518
#define DB_VALUE_EMPTY
Definition: db_value.h:60
int key_dependency_get_by_id(key_dependency_t *key_dependency, const db_value_t *id)
void key_dependency_free(key_dependency_t *key_dependency)
int key_dependency_set_zone_id(key_dependency_t *key_dependency, const db_value_t *zone_id)
key_dependency_t * key_dependency_new(const db_connection_t *connection)
const db_value_t * key_dependency_zone_id(const key_dependency_t *key_dependency)
const key_dependency_t * key_dependency_list_next(key_dependency_list_t *key_dependency_list)
int key_dependency_set_type(key_dependency_t *key_dependency, key_dependency_type_t type)
const db_value_t * key_dependency_to_key_data_id(const key_dependency_t *key_dependency)
int key_dependency_list_get_by_clauses(key_dependency_list_t *key_dependency_list, const db_clause_list_t *clause_list)
void key_dependency_list_free(key_dependency_list_t *key_dependency_list)
const db_value_t * key_dependency_from_key_data_id(const key_dependency_t *key_dependency)
int key_dependency_set_from_key_data_id(key_dependency_t *key_dependency, const db_value_t *from_key_data_id)
int key_dependency_delete(key_dependency_t *key_dependency)
int key_dependency_create(key_dependency_t *key_dependency)
key_dependency_list_t * key_dependency_list_new(const db_connection_t *connection)
int key_dependency_set_to_key_data_id(key_dependency_t *key_dependency, const db_value_t *to_key_data_id)
key_dependency_type
@ KEY_DEPENDENCY_TYPE_DNSKEY
@ KEY_DEPENDENCY_TYPE_RRSIGDNSKEY
@ KEY_DEPENDENCY_TYPE_DS
@ KEY_DEPENDENCY_TYPE_RRSIG
int test_key_dependency_add_suite(void)