OpenDNSSEC-enforcer  1.3.4
/build/buildd/opendnssec-1.3.4/enforcer/test/cunit/test_ksm_policy.c
Go to the documentation of this file.
00001 /*
00002  * $Id: test_ksm_policy.c 3943 2010-09-17 08:49:22Z sion $
00003  *
00004  * Copyright (c) 2008-2009 Nominet UK. All rights reserved.
00005  *
00006  * Redistribution and use in source and binary forms, with or without
00007  * modification, are permitted provided that the following conditions
00008  * are met:
00009  * 1. Redistributions of source code must retain the above copyright
00010  *    notice, this list of conditions and the following disclaimer.
00011  * 2. Redistributions in binary form must reproduce the above copyright
00012  *    notice, this list of conditions and the following disclaimer in the
00013  *    documentation and/or other materials provided with the distribution.
00014  *
00015  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
00016  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00017  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00018  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
00019  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00020  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
00021  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00022  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
00023  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
00024  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
00025  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00026  *
00027  */
00028 
00029 /*+
00030  * Filename: test_ksm_policy.c - Test Key Purge Module
00031  *
00032  * Description:
00033  *      This is a short test module to check the function in the Ksm Purge
00034  *      module.
00035  *
00036  *      The test program makes use of the CUnit framework, as described in
00037  *      http://cunit.sourceforge.net
00038 -*/
00039 
00040 #include <stdlib.h>
00041 #include <stdio.h>
00042 #include <string.h>
00043 #include <time.h>
00044 
00045 #include "CUnit/Basic.h"
00046 
00047 #include "ksm/ksm.h"
00048 #include "test_routines.h"
00049 
00050 
00051 /*+
00052  * TestKsmPolicyRead - Test
00053  *
00054  * Description:
00055  *      Tests that a polcy can be returned
00056 -*/
00057 
00058 static void TestKsmPolicyRead(void)
00059 {
00060         int                     status;         /* Status return */
00061         KSM_POLICY*             policy;
00062         policy = (KSM_POLICY *)malloc(sizeof(KSM_POLICY));
00063         policy->signer = (KSM_SIGNER_POLICY *)malloc(sizeof(KSM_SIGNER_POLICY));
00064         policy->signature = (KSM_SIGNATURE_POLICY *)malloc(sizeof(KSM_SIGNATURE_POLICY));
00065     policy->zone = (KSM_ZONE_POLICY *)malloc(sizeof(KSM_ZONE_POLICY));
00066     policy->parent = (KSM_PARENT_POLICY *)malloc(sizeof(KSM_PARENT_POLICY));
00067     policy->keys = (KSM_COMMON_KEY_POLICY *)malloc(sizeof(KSM_COMMON_KEY_POLICY));
00068         policy->ksk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
00069         policy->zsk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
00070         policy->denial = (KSM_DENIAL_POLICY *)malloc(sizeof(KSM_DENIAL_POLICY));
00071         policy->enforcer = (KSM_ENFORCER_POLICY *)malloc(sizeof(KSM_ENFORCER_POLICY));
00072 /*    policy->audit = (KSM_AUDIT_POLICY *)malloc(sizeof(KSM_AUDIT_POLICY)); */
00073     policy->audit = (char *)calloc(KSM_POLICY_AUDIT_LENGTH, sizeof(char));
00074     policy->description = (char *)calloc(KSM_POLICY_DESC_LENGTH, sizeof(char));
00075 
00076     snprintf(policy->name, KSM_NAME_LENGTH, "default");
00077 
00078         /* Call KsmPolicyRead */
00079 
00080         status = KsmPolicyRead(policy);
00081 
00082         CU_ASSERT_EQUAL(status, 0);
00083         CU_ASSERT_EQUAL(policy->id, 2);
00084 
00085         /* Call KsmPolicyRead again */
00086 
00087         status = KsmPolicyRead(policy);
00088 
00089         CU_ASSERT_EQUAL(status, 0);
00090 
00091     KsmPolicyFree(policy);
00092 }
00093 
00094 static void TestKsmPolicyReadId(void)
00095 {
00096         int                     status;         /* Status return */
00097         KSM_POLICY*             policy;
00098         policy = (KSM_POLICY *)malloc(sizeof(KSM_POLICY));
00099         policy->signer = (KSM_SIGNER_POLICY *)malloc(sizeof(KSM_SIGNER_POLICY));
00100         policy->signature = (KSM_SIGNATURE_POLICY *)malloc(sizeof(KSM_SIGNATURE_POLICY));
00101     policy->zone = (KSM_ZONE_POLICY *)malloc(sizeof(KSM_ZONE_POLICY));
00102     policy->parent = (KSM_PARENT_POLICY *)malloc(sizeof(KSM_PARENT_POLICY));
00103     policy->keys = (KSM_COMMON_KEY_POLICY *)malloc(sizeof(KSM_COMMON_KEY_POLICY));
00104         policy->ksk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
00105         policy->zsk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
00106         policy->denial = (KSM_DENIAL_POLICY *)malloc(sizeof(KSM_DENIAL_POLICY));
00107         policy->enforcer = (KSM_ENFORCER_POLICY *)malloc(sizeof(KSM_ENFORCER_POLICY));
00108 /*    policy->audit = (KSM_AUDIT_POLICY *)malloc(sizeof(KSM_AUDIT_POLICY)); */
00109     policy->audit = (char *)calloc(KSM_POLICY_AUDIT_LENGTH, sizeof(char));
00110     policy->description = (char *)calloc(KSM_POLICY_DESC_LENGTH, sizeof(char));
00111 
00112 
00113         policy->id = 2;
00114 
00115         /* Call KsmPolicyReadFromId */
00116 
00117         status = KsmPolicyReadFromId(policy);
00118 
00119         CU_ASSERT_EQUAL(status, 0);
00120 
00121         /* Call KsmPolicyRead again */
00122 
00123         status = KsmPolicyReadFromId(policy);
00124 
00125         CU_ASSERT_EQUAL(status, 0);
00126 
00127     KsmPolicyFree(policy);
00128 }
00129 
00130 static void TestKsmPolicy2(void)
00131 {
00132         DB_RESULT result;
00133         int status = 0;
00134         int i;
00135         KSM_POLICY *policy;
00136         policy = (KSM_POLICY *)malloc(sizeof(KSM_POLICY));
00137         policy->signer = (KSM_SIGNER_POLICY *)malloc(sizeof(KSM_SIGNER_POLICY));
00138         policy->signature = (KSM_SIGNATURE_POLICY *)malloc(sizeof(KSM_SIGNATURE_POLICY));
00139     policy->zone = (KSM_ZONE_POLICY *)malloc(sizeof(KSM_ZONE_POLICY));
00140     policy->parent = (KSM_PARENT_POLICY *)malloc(sizeof(KSM_PARENT_POLICY));
00141     policy->keys = (KSM_COMMON_KEY_POLICY *)malloc(sizeof(KSM_COMMON_KEY_POLICY));
00142         policy->ksk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
00143         policy->zsk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
00144         policy->denial = (KSM_DENIAL_POLICY *)malloc(sizeof(KSM_DENIAL_POLICY));
00145         policy->enforcer = (KSM_ENFORCER_POLICY *)malloc(sizeof(KSM_ENFORCER_POLICY));
00146 /*    policy->audit = (KSM_AUDIT_POLICY *)malloc(sizeof(KSM_AUDIT_POLICY)); */
00147     policy->audit = (char *)calloc(KSM_POLICY_AUDIT_LENGTH, sizeof(char));
00148     policy->description = (char *)calloc(KSM_POLICY_DESC_LENGTH, sizeof(char));
00149 
00150 
00151         for (i=1; i<5 ; i++) {
00152                 printf("Try: %i\n",i);
00153                 /* Read all policies */
00154                 status = KsmPolicyInit(&result, NULL);
00155                 if (status == 0) {
00156                         /* get the first policy */
00157                         status = KsmPolicy(result, policy);
00158                         while (status == 0) {
00159 
00160                                 /* get next policy */
00161                                 status = KsmPolicy(result, policy);
00162                         }
00163                 }
00164 
00165                 DbFreeResult(result);
00166 
00167         }
00168         
00169         KsmPolicyFree(policy);
00170 }
00171 
00172 /*+
00173  * TestKsmPolicySalt - Test
00174  *
00175  * Description:
00176  *      Tests that salt can be updated and returned
00177 -*/
00178 
00179 static void TestKsmPolicySalt(void)
00180 {
00181         int                     status;         /* Status return */
00182         KSM_POLICY*             policy;
00183         policy = (KSM_POLICY *)malloc(sizeof(KSM_POLICY));
00184         policy->signer = (KSM_SIGNER_POLICY *)malloc(sizeof(KSM_SIGNER_POLICY));
00185         policy->signature = (KSM_SIGNATURE_POLICY *)malloc(sizeof(KSM_SIGNATURE_POLICY));
00186     policy->zone = (KSM_ZONE_POLICY *)malloc(sizeof(KSM_ZONE_POLICY));
00187     policy->parent = (KSM_PARENT_POLICY *)malloc(sizeof(KSM_PARENT_POLICY));
00188     policy->keys = (KSM_COMMON_KEY_POLICY *)malloc(sizeof(KSM_COMMON_KEY_POLICY));
00189         policy->ksk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
00190         policy->zsk = (KSM_KEY_POLICY *)malloc(sizeof(KSM_KEY_POLICY));
00191         policy->denial = (KSM_DENIAL_POLICY *)malloc(sizeof(KSM_DENIAL_POLICY));
00192         policy->enforcer = (KSM_ENFORCER_POLICY *)malloc(sizeof(KSM_ENFORCER_POLICY));
00193 /*    policy->audit = (KSM_AUDIT_POLICY *)malloc(sizeof(KSM_AUDIT_POLICY)); */
00194     policy->audit = (char *)calloc(KSM_POLICY_AUDIT_LENGTH, sizeof(char));
00195     policy->description = (char *)calloc(KSM_POLICY_DESC_LENGTH, sizeof(char));
00196 
00197     snprintf(policy->name, KSM_NAME_LENGTH, "default");
00198 
00199         policy->id = 2;
00200     policy->denial->resalt = 0;
00201     policy->denial->saltlength = 30;
00202 
00203         /* Do the salt/resalt */
00204 
00205         status = KsmPolicyUpdateSalt(policy);
00206 
00207         CU_ASSERT_EQUAL(status, 0);
00208 
00209     KsmPolicyFree(policy);
00210 
00211     DbCommit();
00212 }
00213 
00214 /*
00215  * TestKsmPolicy - Create Test Suite
00216  *
00217  * Description:
00218  *      Adds the test suite to the CUnit test registry and adds all the tests
00219  *      to it.
00220  *
00221  * Arguments:
00222  *      None.
00223  *
00224  * Returns:
00225  *      int
00226  *          Return status.  0 => Success.
00227  */
00228 
00229 int TestKsmPolicy(void);        /* Declaration */
00230 int TestKsmPolicy(void)
00231 {
00232     struct test_testdef tests[] = {
00233         {"KsmPolicy", TestKsmPolicyRead},
00234         {"KsmPolicyFromId", TestKsmPolicyReadId}, 
00235         {"KsmPolicy2", TestKsmPolicy2},
00236         {"KsmPolicySalt", TestKsmPolicySalt},
00237         {NULL,                      NULL}
00238     };
00239 
00240     /* TODO 
00241      * have been a bit lazy here and reuse TdbSetup etc...
00242      * this has the consequence of all the setups running for each suite
00243      * if this gets too slow then we will need to separate them out
00244      * */
00245     return TcuCreateSuite("KsmPolicy", TdbSetup, TdbTeardown, tests);
00246 }