Parse RP clients from new-style configuration files.
[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   for (ii=1; ii<TR_MAX_GSS_NAMES; ii++)
78     assert(cfg->rp_clients->gss_names[ii]==NULL);
79   assert(cfg->rp_clients->gss_names[0]!=NULL);
80   name=tr_new_name("gss@example.com");
81   assert(tr_name_cmp(name, cfg->rp_clients->gss_names[0])==0);
82   return 0;
83 }
84
85 int main(void)
86 {
87   TALLOC_CTX *mem_ctx=talloc_new(NULL);
88   TR_CFG *cfg=NULL;
89   TR_CFG_RC rc=TR_CFG_ERROR;
90
91   tr_log_open();
92
93   talloc_set_log_fn(tr_talloc_log);
94   cfg=tr_cfg_new(mem_ctx);
95
96   printf("Parsing idp.cfg.\n");
97   rc=tr_cfg_parse_one_config_file(cfg, "idp.cfg");
98   switch(rc) {
99   case TR_CFG_SUCCESS:
100     tr_debug("main: TR_CFG_SUCCESS");
101     break;
102   case TR_CFG_ERROR:
103     tr_debug("main: TR_CFG_ERROR");
104     break;
105   case TR_CFG_BAD_PARAMS:
106     tr_debug("main: TR_CFG_BAD_PARAMS");
107     break;
108   case TR_CFG_NOPARSE:
109     tr_debug("main: TR_CFG_NOPARSE");
110     break;
111   case TR_CFG_NOMEM:
112     tr_debug("main: TR_CFG_NOMEM");
113     break;
114   }
115
116   printf("Verifying IDP parse results... ");
117   if (verify_idp_cfg(cfg)!=0) {
118     printf("Error!\n");
119     exit(-1);
120   }
121   printf("success!\n");
122
123   printf("Verifying RP parse results... ");
124   if (verify_rp_cfg(cfg)!=0) {
125     printf("Error!\n");
126     exit(-1);
127   }
128   printf("success!\n");
129
130   talloc_report_full(mem_ctx, stderr);
131   tr_cfg_free(cfg);
132
133   printf("Cleared configuration for next test.\n\n");
134
135   cfg=tr_cfg_new(mem_ctx);
136   
137   printf("Parsing rp.cfg.\n");
138   rc=tr_cfg_parse_one_config_file(cfg, "rp.cfg");
139   switch(rc) {
140   case TR_CFG_SUCCESS:
141     tr_debug("main: TR_CFG_SUCCESS");
142     break;
143   case TR_CFG_ERROR:
144     tr_debug("main: TR_CFG_ERROR");
145     break;
146   case TR_CFG_BAD_PARAMS:
147     tr_debug("main: TR_CFG_BAD_PARAMS");
148     break;
149   case TR_CFG_NOPARSE:
150     tr_debug("main: TR_CFG_NOPARSE");
151     break;
152   case TR_CFG_NOMEM:
153     tr_debug("main: TR_CFG_NOMEM");
154     break;
155   }
156
157 #if 0
158   printf("Verifying RP parse results... ");
159   if (verify_rp_cfg(cfg)!=0) {
160     printf("Error!\n");
161     exit(-1);
162   }
163   printf("success!\n");
164 #endif
165
166   talloc_free(mem_ctx);
167   return 0;
168 }