OpenDNSSEC-enforcer  1.4.1
test_ksm_policy.c
Go to the documentation of this file.
1 /*
2  * $Id: test_ksm_policy.c 6013 2012-01-04 15:57:01Z sion $
3  *
4  * Copyright (c) 2008-2009 Nominet UK. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
19  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
21  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
23  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
25  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  *
27  */
28 
29 /*+
30  * Filename: test_ksm_policy.c - Test Key Purge Module
31  *
32  * Description:
33  * This is a short test module to check the function in the Ksm Purge
34  * module.
35  *
36  * The test program makes use of the CUnit framework, as described in
37  * http://cunit.sourceforge.net
38 -*/
39 
40 #include <stdlib.h>
41 #include <stdio.h>
42 #include <string.h>
43 #include <time.h>
44 
45 #include "CUnit/Basic.h"
46 
47 #include "ksm/ksm.h"
48 #include "test_routines.h"
49 
50 
51 /*+
52  * TestKsmPolicyRead - Test
53  *
54  * Description:
55  * Tests that a polcy can be returned
56 -*/
57 
58 static void TestKsmPolicyRead(void)
59 {
60  int status; /* Status return */
61  KSM_POLICY* policy;
62  policy = (KSM_POLICY *)malloc(sizeof(KSM_POLICY));
63  policy->signer = (KSM_SIGNER_POLICY *)malloc(sizeof(KSM_SIGNER_POLICY));
64  policy->signature = (KSM_SIGNATURE_POLICY *)malloc(sizeof(KSM_SIGNATURE_POLICY));
65  policy->zone = (KSM_ZONE_POLICY *)malloc(sizeof(KSM_ZONE_POLICY));
66  policy->parent = (KSM_PARENT_POLICY *)malloc(sizeof(KSM_PARENT_POLICY));
67  policy->keys = (KSM_COMMON_KEY_POLICY *)malloc(sizeof(KSM_COMMON_KEY_POLICY));
68  policy->ksk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
69  policy->zsk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
70  policy->denial = (KSM_DENIAL_POLICY *)malloc(sizeof(KSM_DENIAL_POLICY));
71  policy->enforcer = (KSM_ENFORCER_POLICY *)malloc(sizeof(KSM_ENFORCER_POLICY));
72  policy->description = (char *)calloc(KSM_POLICY_DESC_LENGTH, sizeof(char));
73 
74  snprintf(policy->name, KSM_NAME_LENGTH, "default");
75 
76  /* Call KsmPolicyRead */
77 
78  status = KsmPolicyRead(policy);
79 
80  CU_ASSERT_EQUAL(status, 0);
81  CU_ASSERT_EQUAL(policy->id, 2);
82 
83  /* Call KsmPolicyRead again */
84 
85  status = KsmPolicyRead(policy);
86 
87  CU_ASSERT_EQUAL(status, 0);
88 
89  KsmPolicyFree(policy);
90 }
91 
92 static void TestKsmPolicyReadId(void)
93 {
94  int status; /* Status return */
95  KSM_POLICY* policy;
96  policy = (KSM_POLICY *)malloc(sizeof(KSM_POLICY));
97  policy->signer = (KSM_SIGNER_POLICY *)malloc(sizeof(KSM_SIGNER_POLICY));
98  policy->signature = (KSM_SIGNATURE_POLICY *)malloc(sizeof(KSM_SIGNATURE_POLICY));
99  policy->zone = (KSM_ZONE_POLICY *)malloc(sizeof(KSM_ZONE_POLICY));
100  policy->parent = (KSM_PARENT_POLICY *)malloc(sizeof(KSM_PARENT_POLICY));
101  policy->keys = (KSM_COMMON_KEY_POLICY *)malloc(sizeof(KSM_COMMON_KEY_POLICY));
102  policy->ksk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
103  policy->zsk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
104  policy->denial = (KSM_DENIAL_POLICY *)malloc(sizeof(KSM_DENIAL_POLICY));
105  policy->enforcer = (KSM_ENFORCER_POLICY *)malloc(sizeof(KSM_ENFORCER_POLICY));
106  policy->description = (char *)calloc(KSM_POLICY_DESC_LENGTH, sizeof(char));
107 
108 
109  policy->id = 2;
110 
111  /* Call KsmPolicyReadFromId */
112 
113  status = KsmPolicyReadFromId(policy);
114 
115  CU_ASSERT_EQUAL(status, 0);
116 
117  /* Call KsmPolicyRead again */
118 
119  status = KsmPolicyReadFromId(policy);
120 
121  CU_ASSERT_EQUAL(status, 0);
122 
123  KsmPolicyFree(policy);
124 }
125 
126 static void TestKsmPolicy2(void)
127 {
128  DB_RESULT result;
129  int status = 0;
130  int i;
131  KSM_POLICY *policy;
132  policy = (KSM_POLICY *)malloc(sizeof(KSM_POLICY));
133  policy->signer = (KSM_SIGNER_POLICY *)malloc(sizeof(KSM_SIGNER_POLICY));
134  policy->signature = (KSM_SIGNATURE_POLICY *)malloc(sizeof(KSM_SIGNATURE_POLICY));
135  policy->zone = (KSM_ZONE_POLICY *)malloc(sizeof(KSM_ZONE_POLICY));
136  policy->parent = (KSM_PARENT_POLICY *)malloc(sizeof(KSM_PARENT_POLICY));
137  policy->keys = (KSM_COMMON_KEY_POLICY *)malloc(sizeof(KSM_COMMON_KEY_POLICY));
138  policy->ksk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
139  policy->zsk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
140  policy->denial = (KSM_DENIAL_POLICY *)malloc(sizeof(KSM_DENIAL_POLICY));
141  policy->enforcer = (KSM_ENFORCER_POLICY *)malloc(sizeof(KSM_ENFORCER_POLICY));
142  policy->description = (char *)calloc(KSM_POLICY_DESC_LENGTH, sizeof(char));
143 
144 
145  for (i=1; i<5 ; i++) {
146  printf("Try: %i\n",i);
147  /* Read all policies */
148  status = KsmPolicyInit(&result, NULL);
149  if (status == 0) {
150  /* get the first policy */
151  status = KsmPolicy(result, policy);
152  while (status == 0) {
153 
154  /* get next policy */
155  status = KsmPolicy(result, policy);
156  }
157  }
158 
159  DbFreeResult(result);
160 
161  }
162 
163  KsmPolicyFree(policy);
164 }
165 
166 /*+
167  * TestKsmPolicySalt - Test
168  *
169  * Description:
170  * Tests that salt can be updated and returned
171 -*/
172 
173 static void TestKsmPolicySalt(void)
174 {
175  int status; /* Status return */
176  KSM_POLICY* policy;
177  policy = (KSM_POLICY *)malloc(sizeof(KSM_POLICY));
178  policy->signer = (KSM_SIGNER_POLICY *)malloc(sizeof(KSM_SIGNER_POLICY));
179  policy->signature = (KSM_SIGNATURE_POLICY *)malloc(sizeof(KSM_SIGNATURE_POLICY));
180  policy->zone = (KSM_ZONE_POLICY *)malloc(sizeof(KSM_ZONE_POLICY));
181  policy->parent = (KSM_PARENT_POLICY *)malloc(sizeof(KSM_PARENT_POLICY));
182  policy->keys = (KSM_COMMON_KEY_POLICY *)malloc(sizeof(KSM_COMMON_KEY_POLICY));
183  policy->ksk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
184  policy->zsk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
185  policy->denial = (KSM_DENIAL_POLICY *)malloc(sizeof(KSM_DENIAL_POLICY));
186  policy->enforcer = (KSM_ENFORCER_POLICY *)malloc(sizeof(KSM_ENFORCER_POLICY));
187  policy->description = (char *)calloc(KSM_POLICY_DESC_LENGTH, sizeof(char));
188 
189  snprintf(policy->name, KSM_NAME_LENGTH, "default");
190 
191  policy->id = 2;
192  policy->denial->resalt = 0;
193  policy->denial->saltlength = 30;
194 
195  /* Do the salt/resalt */
196 
197  status = KsmPolicyUpdateSalt(policy);
198 
199  CU_ASSERT_EQUAL(status, 0);
200 
201  KsmPolicyFree(policy);
202 
203  DbCommit();
204 }
205 
206 /*
207  * TestKsmPolicy - Create Test Suite
208  *
209  * Description:
210  * Adds the test suite to the CUnit test registry and adds all the tests
211  * to it.
212  *
213  * Arguments:
214  * None.
215  *
216  * Returns:
217  * int
218  * Return status. 0 => Success.
219  */
220 
221 int TestKsmPolicy(void); /* Declaration */
222 int TestKsmPolicy(void)
223 {
224  struct test_testdef tests[] = {
225  {"KsmPolicy", TestKsmPolicyRead},
226  {"KsmPolicyFromId", TestKsmPolicyReadId},
227  {"KsmPolicy2", TestKsmPolicy2},
228  {"KsmPolicySalt", TestKsmPolicySalt},
229  {NULL, NULL}
230  };
231 
232  /* TODO
233  * have been a bit lazy here and reuse TdbSetup etc...
234  * this has the consequence of all the setups running for each suite
235  * if this gets too slow then we will need to separate them out
236  * */
237  return TcuCreateSuite("KsmPolicy", TdbSetup, TdbTeardown, tests);
238 }