OpenDNSSEC-enforcer  1.3.9
test_ksm_policy.c
Go to the documentation of this file.
1 /*
2  * $Id: test_ksm_policy.c 3943 2010-09-17 08:49:22Z 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->audit = (KSM_AUDIT_POLICY *)malloc(sizeof(KSM_AUDIT_POLICY)); */
73  policy->audit = (char *)calloc(KSM_POLICY_AUDIT_LENGTH, sizeof(char));
74  policy->description = (char *)calloc(KSM_POLICY_DESC_LENGTH, sizeof(char));
75 
76  snprintf(policy->name, KSM_NAME_LENGTH, "default");
77 
78  /* Call KsmPolicyRead */
79 
80  status = KsmPolicyRead(policy);
81 
82  CU_ASSERT_EQUAL(status, 0);
83  CU_ASSERT_EQUAL(policy->id, 2);
84 
85  /* Call KsmPolicyRead again */
86 
87  status = KsmPolicyRead(policy);
88 
89  CU_ASSERT_EQUAL(status, 0);
90 
91  KsmPolicyFree(policy);
92 }
93 
94 static void TestKsmPolicyReadId(void)
95 {
96  int status; /* Status return */
97  KSM_POLICY* policy;
98  policy = (KSM_POLICY *)malloc(sizeof(KSM_POLICY));
99  policy->signer = (KSM_SIGNER_POLICY *)malloc(sizeof(KSM_SIGNER_POLICY));
100  policy->signature = (KSM_SIGNATURE_POLICY *)malloc(sizeof(KSM_SIGNATURE_POLICY));
101  policy->zone = (KSM_ZONE_POLICY *)malloc(sizeof(KSM_ZONE_POLICY));
102  policy->parent = (KSM_PARENT_POLICY *)malloc(sizeof(KSM_PARENT_POLICY));
103  policy->keys = (KSM_COMMON_KEY_POLICY *)malloc(sizeof(KSM_COMMON_KEY_POLICY));
104  policy->ksk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
105  policy->zsk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
106  policy->denial = (KSM_DENIAL_POLICY *)malloc(sizeof(KSM_DENIAL_POLICY));
107  policy->enforcer = (KSM_ENFORCER_POLICY *)malloc(sizeof(KSM_ENFORCER_POLICY));
108 /* policy->audit = (KSM_AUDIT_POLICY *)malloc(sizeof(KSM_AUDIT_POLICY)); */
109  policy->audit = (char *)calloc(KSM_POLICY_AUDIT_LENGTH, sizeof(char));
110  policy->description = (char *)calloc(KSM_POLICY_DESC_LENGTH, sizeof(char));
111 
112 
113  policy->id = 2;
114 
115  /* Call KsmPolicyReadFromId */
116 
117  status = KsmPolicyReadFromId(policy);
118 
119  CU_ASSERT_EQUAL(status, 0);
120 
121  /* Call KsmPolicyRead again */
122 
123  status = KsmPolicyReadFromId(policy);
124 
125  CU_ASSERT_EQUAL(status, 0);
126 
127  KsmPolicyFree(policy);
128 }
129 
130 static void TestKsmPolicy2(void)
131 {
132  DB_RESULT result;
133  int status = 0;
134  int i;
135  KSM_POLICY *policy;
136  policy = (KSM_POLICY *)malloc(sizeof(KSM_POLICY));
137  policy->signer = (KSM_SIGNER_POLICY *)malloc(sizeof(KSM_SIGNER_POLICY));
138  policy->signature = (KSM_SIGNATURE_POLICY *)malloc(sizeof(KSM_SIGNATURE_POLICY));
139  policy->zone = (KSM_ZONE_POLICY *)malloc(sizeof(KSM_ZONE_POLICY));
140  policy->parent = (KSM_PARENT_POLICY *)malloc(sizeof(KSM_PARENT_POLICY));
141  policy->keys = (KSM_COMMON_KEY_POLICY *)malloc(sizeof(KSM_COMMON_KEY_POLICY));
142  policy->ksk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
143  policy->zsk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
144  policy->denial = (KSM_DENIAL_POLICY *)malloc(sizeof(KSM_DENIAL_POLICY));
145  policy->enforcer = (KSM_ENFORCER_POLICY *)malloc(sizeof(KSM_ENFORCER_POLICY));
146 /* policy->audit = (KSM_AUDIT_POLICY *)malloc(sizeof(KSM_AUDIT_POLICY)); */
147  policy->audit = (char *)calloc(KSM_POLICY_AUDIT_LENGTH, sizeof(char));
148  policy->description = (char *)calloc(KSM_POLICY_DESC_LENGTH, sizeof(char));
149 
150 
151  for (i=1; i<5 ; i++) {
152  printf("Try: %i\n",i);
153  /* Read all policies */
154  status = KsmPolicyInit(&result, NULL);
155  if (status == 0) {
156  /* get the first policy */
157  status = KsmPolicy(result, policy);
158  while (status == 0) {
159 
160  /* get next policy */
161  status = KsmPolicy(result, policy);
162  }
163  }
164 
165  DbFreeResult(result);
166 
167  }
168 
169  KsmPolicyFree(policy);
170 }
171 
172 /*+
173  * TestKsmPolicySalt - Test
174  *
175  * Description:
176  * Tests that salt can be updated and returned
177 -*/
178 
179 static void TestKsmPolicySalt(void)
180 {
181  int status; /* Status return */
182  KSM_POLICY* policy;
183  policy = (KSM_POLICY *)malloc(sizeof(KSM_POLICY));
184  policy->signer = (KSM_SIGNER_POLICY *)malloc(sizeof(KSM_SIGNER_POLICY));
185  policy->signature = (KSM_SIGNATURE_POLICY *)malloc(sizeof(KSM_SIGNATURE_POLICY));
186  policy->zone = (KSM_ZONE_POLICY *)malloc(sizeof(KSM_ZONE_POLICY));
187  policy->parent = (KSM_PARENT_POLICY *)malloc(sizeof(KSM_PARENT_POLICY));
188  policy->keys = (KSM_COMMON_KEY_POLICY *)malloc(sizeof(KSM_COMMON_KEY_POLICY));
189  policy->ksk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
190  policy->zsk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
191  policy->denial = (KSM_DENIAL_POLICY *)malloc(sizeof(KSM_DENIAL_POLICY));
192  policy->enforcer = (KSM_ENFORCER_POLICY *)malloc(sizeof(KSM_ENFORCER_POLICY));
193 /* policy->audit = (KSM_AUDIT_POLICY *)malloc(sizeof(KSM_AUDIT_POLICY)); */
194  policy->audit = (char *)calloc(KSM_POLICY_AUDIT_LENGTH, sizeof(char));
195  policy->description = (char *)calloc(KSM_POLICY_DESC_LENGTH, sizeof(char));
196 
197  snprintf(policy->name, KSM_NAME_LENGTH, "default");
198 
199  policy->id = 2;
200  policy->denial->resalt = 0;
201  policy->denial->saltlength = 30;
202 
203  /* Do the salt/resalt */
204 
205  status = KsmPolicyUpdateSalt(policy);
206 
207  CU_ASSERT_EQUAL(status, 0);
208 
209  KsmPolicyFree(policy);
210 
211  DbCommit();
212 }
213 
214 /*
215  * TestKsmPolicy - Create Test Suite
216  *
217  * Description:
218  * Adds the test suite to the CUnit test registry and adds all the tests
219  * to it.
220  *
221  * Arguments:
222  * None.
223  *
224  * Returns:
225  * int
226  * Return status. 0 => Success.
227  */
228 
229 int TestKsmPolicy(void); /* Declaration */
230 int TestKsmPolicy(void)
231 {
232  struct test_testdef tests[] = {
233  {"KsmPolicy", TestKsmPolicyRead},
234  {"KsmPolicyFromId", TestKsmPolicyReadId},
235  {"KsmPolicy2", TestKsmPolicy2},
236  {"KsmPolicySalt", TestKsmPolicySalt},
237  {NULL, NULL}
238  };
239 
240  /* TODO
241  * have been a bit lazy here and reuse TdbSetup etc...
242  * this has the consequence of all the setups running for each suite
243  * if this gets too slow then we will need to separate them out
244  * */
245  return TcuCreateSuite("KsmPolicy", TdbSetup, TdbTeardown, tests);
246 }