OpenDNSSEC-enforcer  2.1.9
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 
38 static db_configuration_list_t* configuration_list = NULL;
39 static db_configuration_t* configuration = NULL;
40 static db_connection_t* connection = NULL;
41 
42 static key_dependency_t* object = NULL;
43 static key_dependency_list_t* object_list = NULL;
44 static db_value_t id = DB_VALUE_EMPTY;
45 static db_clause_list_t* clause_list = NULL;
46 
47 static int db_sqlite = 0;
48 static int db_mysql = 0;
49 
50 #if defined(ENFORCER_DATABASE_SQLITE3)
51 int 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)
123 int 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 
242 static 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 
255 static 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 
260 static 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));
285  CU_ASSERT(!key_dependency_set_type(object, KEY_DEPENDENCY_TYPE_DS));
289  db_value_reset(&zone_id);
290  db_value_reset(&from_key_data_id);
291  db_value_reset(&to_key_data_id);
292 }
293 
294 static 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 
329 static void test_key_dependency_create(void) {
330  CU_ASSERT_FATAL(!key_dependency_create(object));
331 }
332 
333 static 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 
359 static 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 
393 static 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));
418  CU_ASSERT(!key_dependency_set_type(object, KEY_DEPENDENCY_TYPE_DS));
419  db_value_reset(&zone_id);
420  db_value_reset(&from_key_data_id);
421  db_value_reset(&to_key_data_id);
422 }
423 
424 static 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 
436 static 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 
471 static 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 
477 static void test_key_dependency_delete(void) {
478  CU_ASSERT_FATAL(!key_dependency_delete(object));
479 }
480 
481 static void test_key_dependency_list2(void) {
482  CU_ASSERT_PTR_NULL(key_dependency_list_next(object_list));
483 }
484 
485 static 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 
496 static 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)
const key_dependency_t * key_dependency_list_next(key_dependency_list_t *key_dependency_list)
const db_value_t * key_dependency_from_key_data_id(const key_dependency_t *key_dependency)
const db_value_t * key_dependency_zone_id(const key_dependency_t *key_dependency)
key_dependency_list_t * key_dependency_list_new(const db_connection_t *connection)
int key_dependency_set_type(key_dependency_t *key_dependency, key_dependency_type_t type)
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)
int key_dependency_set_from_key_data_id(key_dependency_t *key_dependency, const db_value_t *from_key_data_id)
const db_value_t * key_dependency_to_key_data_id(const key_dependency_t *key_dependency)
int key_dependency_delete(key_dependency_t *key_dependency)
int key_dependency_create(key_dependency_t *key_dependency)
int key_dependency_set_to_key_data_id(key_dependency_t *key_dependency, const db_value_t *to_key_data_id)
key_dependency_t * key_dependency_new(const db_connection_t *connection)
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)