dfc6b23ab7587b369c97987a1d4342c896813952
[trust_router.git] / common / cfg_test / cfg_test.c
1 /* test suite for tr_config.c */
2 #include <stdio.h>
3 #include <talloc.h>
4 #include <assert.h>
5
6 #include <trust_router/tr_name.h>
7 #include <tr_comm.h>
8 #include <tr_idp.h>
9 #include <tr_config.h>
10 #include <tr_debug.h>
11
12 static void tr_talloc_log(const char *msg)
13 {
14   tr_debug("talloc: %s", msg);
15 }
16
17 static int verify_idp_cfg(TR_CFG *cfg)
18 {
19   TR_COMM *comm=NULL;
20   TR_NAME *name=NULL;
21   TR_APC *apc=NULL;
22   TR_IDP_REALM *idp_realm=NULL;
23   TR_AAA_SERVER *aaa=NULL;
24
25   assert(cfg!=NULL);
26
27   /* test the comms attribute */
28   assert(cfg->comms!=NULL);
29   name=tr_new_name("apc.example.com");
30   comm=tr_comm_lookup(cfg->comms, name);
31   tr_free_name(name);
32   assert(comm!=NULL);
33
34   assert(comm->type==TR_COMM_APC);
35   assert(comm->expiration_interval==TR_DEFAULT_APC_EXPIRATION_INTERVAL);
36   assert(comm->apcs==NULL);
37
38   name=tr_new_name("A.idp.cfg");
39   for (idp_realm=comm->idp_realms;
40        (idp_realm!=NULL) && (tr_name_cmp(name, idp_realm->realm_id)!=0);
41        idp_realm=idp_realm->comm_next) { }
42   assert(idp_realm!=NULL);
43   assert(idp_realm->shared_config==0);
44   assert(idp_realm->origin==TR_REALM_LOCAL);
45   tr_free_name(name);
46   name=tr_new_name("apc.example.com");
47   assert(tr_name_cmp(idp_realm->apcs->id, name)==0);
48   tr_free_name(name);
49   
50   assert(idp_realm->aaa_servers!=NULL);
51   name=tr_new_name("rad1.A.idp.cfg");
52   for (aaa=idp_realm->aaa_servers;
53        (aaa!=NULL) && (tr_name_cmp(name, aaa->hostname)!=0);
54        aaa=aaa->next) { }
55   assert(aaa!=NULL);
56   tr_free_name(name);
57
58   name=tr_new_name("rad2.A.idp.cfg");
59   for (aaa=idp_realm->aaa_servers;
60        (aaa!=NULL) && (tr_name_cmp(name, aaa->hostname)!=0);
61        aaa=aaa->next) { }
62   assert(aaa!=NULL);
63   tr_free_name(name);
64
65   return 0;
66 }
67
68 static int verify_rp_cfg(TR_CFG *cfg)
69 {
70   int ii=0;
71   TR_NAME *name=NULL;
72
73   assert(cfg!=NULL);
74   assert(cfg->rp_clients!=NULL);
75   assert(cfg->rp_clients->next==NULL);
76   assert(cfg->rp_clients->comm_next==NULL);
77   /* need to update next test to use TR_GSS_NAMES structure */
78 #if 0
79   for (ii=1; ii<TR_MAX_GSS_NAMES; ii++)
80     assert(cfg->rp_clients->gss_names[ii]==NULL);
81   assert(cfg->rp_clients->gss_names[0]!=NULL);
82   name=tr_new_name("gss@example.com");
83   assert(tr_name_cmp(name, cfg->rp_clients->gss_names[0])==0);
84 #endif
85   return 0;
86 }
87
88 int main(void)
89 {
90   TALLOC_CTX *mem_ctx=talloc_new(NULL);
91   TR_CFG *cfg=NULL;
92   TR_CFG_RC rc=TR_CFG_ERROR;
93
94   tr_log_open();
95
96   talloc_set_log_fn(tr_talloc_log);
97   cfg=tr_cfg_new(mem_ctx);
98
99   printf("Parsing idp.cfg.\n");
100   rc=tr_cfg_parse_one_config_file(cfg, "idp.cfg");
101   switch(rc) {
102   case TR_CFG_SUCCESS:
103     tr_debug("main: TR_CFG_SUCCESS");
104     break;
105   case TR_CFG_ERROR:
106     tr_debug("main: TR_CFG_ERROR");
107     break;
108   case TR_CFG_BAD_PARAMS:
109     tr_debug("main: TR_CFG_BAD_PARAMS");
110     break;
111   case TR_CFG_NOPARSE:
112     tr_debug("main: TR_CFG_NOPARSE");
113     break;
114   case TR_CFG_NOMEM:
115     tr_debug("main: TR_CFG_NOMEM");
116     break;
117   }
118
119   printf("Verifying IDP parse results... ");
120   if (verify_idp_cfg(cfg)!=0) {
121     printf("Error!\n");
122     exit(-1);
123   }
124   printf("success!\n");
125
126   printf("Verifying RP parse results... ");
127   if (verify_rp_cfg(cfg)!=0) {
128     printf("Error!\n");
129     exit(-1);
130   }
131   printf("success!\n");
132
133   talloc_report_full(mem_ctx, stderr);
134   tr_cfg_free(cfg);
135
136   printf("Cleared configuration for next test.\n\n");
137
138   cfg=tr_cfg_new(mem_ctx);
139   
140   printf("Parsing rp.cfg.\n");
141   rc=tr_cfg_parse_one_config_file(cfg, "rp.cfg");
142   switch(rc) {
143   case TR_CFG_SUCCESS:
144     tr_debug("main: TR_CFG_SUCCESS");
145     break;
146   case TR_CFG_ERROR:
147     tr_debug("main: TR_CFG_ERROR");
148     break;
149   case TR_CFG_BAD_PARAMS:
150     tr_debug("main: TR_CFG_BAD_PARAMS");
151     break;
152   case TR_CFG_NOPARSE:
153     tr_debug("main: TR_CFG_NOPARSE");
154     break;
155   case TR_CFG_NOMEM:
156     tr_debug("main: TR_CFG_NOMEM");
157     break;
158   }
159
160 #if 0
161   printf("Verifying RP parse results... ");
162   if (verify_rp_cfg(cfg)!=0) {
163     printf("Error!\n");
164     exit(-1);
165   }
166   printf("success!\n");
167 #endif
168
169   talloc_free(mem_ctx);
170   return 0;
171 }