* merge in much of the dav_rework branch: (the drift was becoming to big, no function...
[citadel.git] / webcit / tests / test_tools.c
1 #include <CUnit/CUnit.h>
2 #include <CUnit/Basic.h>
3 #include <CUnit/TestDB.h>
4
5
6 #include "webcit.h"
7 #include "webserver.h"
8 #include "modules_init.h"
9 #include <stdio.h>
10
11
12 wcsession *TestSessionList = NULL;
13
14
15 ParsedHttpHdrs Hdr;
16 wcsession *TheSession;
17
18 extern StrBuf *Username;
19 extern StrBuf *Passvoid;
20
21
22 extern int ReadHttpSubject(ParsedHttpHdrs *Hdr, StrBuf *Line, StrBuf *Buf);
23 extern wcsession *CreateSession(int Lockable, wcsession **wclist, ParsedHttpHdrs *Hdr, pthread_mutex_t *ListMutex);
24
25
26
27 void SetUpContext(void)
28 {
29         memset(&Hdr, 0, sizeof(ParsedHttpHdrs));
30         Hdr.HR.eReqType = eGET;
31         http_new_modules(&Hdr); 
32
33
34         Hdr.http_sock = 1; /* STDOUT */
35 /* Context loop */
36         Hdr.HR.dav_depth = 32767; /* TODO: find a general way to have non-0 defaults */
37         TheSession = CreateSession(1, &TestSessionList, &Hdr, NULL);
38         TheSession->lastreq = time(NULL);                       /* log */
39         TheSession->Hdr = &Hdr;
40         Hdr.HTTPHeaders = NewHash(1, NULL);
41         session_attach_modules(TheSession);
42 }
43
44 int SetUpConnection(void)
45 {
46         StrBuf *Response;
47         if (!GetConnected ())
48         {
49                 Response = NewStrBuf();
50                 become_logged_in(Username, Passvoid, Response);
51                 return 1;
52                 
53         }
54         else {
55                 CU_FAIL("Establishing session failed!");
56                 return 0;
57         }
58 }
59
60 void SetHttpURL(ParsedHttpHdrs *Hdr, const char *Title, long tlen, StrBuf *Buf)
61 {
62         StrBuf *Line = NewStrBufPlain (Title, tlen);
63         FreeStrBuf(&Line);
64 }
65
66 /* from context_loop.c: */
67 extern void DestroyHttpHeaderHandler(void *V);
68 extern int ReadHttpSubject(ParsedHttpHdrs *Hdr, StrBuf *Line, StrBuf *Buf);
69 void SetUpRequest(const char *UrlPath)
70 {
71         OneHttpHeader *pHdr;
72         wcsession *WCC = WC;
73         StrBuf *Buf;
74         StrBuf *Line, *HeaderName;
75
76         HeaderName = NewStrBuf();
77         Buf = NewStrBuf();
78         Line = NewStrBuf();
79         StrBufPrintf(Line, "GET %s HTTP/1.0\r\n", UrlPath);
80
81         WCC->Hdr->HTTPHeaders = NewHash(1, NULL);
82         pHdr = (OneHttpHeader*) malloc(sizeof(OneHttpHeader));
83         memset(pHdr, 0, sizeof(OneHttpHeader));
84         pHdr->Val = Line;
85         Put(Hdr.HTTPHeaders, HKEY("GET /"), pHdr, DestroyHttpHeaderHandler);
86         lprintf(9, "%s\n", ChrPtr(Line));
87
88         if (ReadHttpSubject(&Hdr, Line, HeaderName))
89                 CU_FAIL("Failed to parse Request line / me is bogus!");
90
91         FreeStrBuf(&Buf);
92 }
93
94
95
96 void TearDownRequest(void)
97 {
98 /* End Context loop */
99         http_detach_modules(&Hdr);
100 }
101
102 void TearDownContext(void)
103 {
104         http_destroy_modules(&Hdr);
105 /* End Session Loop */
106         session_detach_modules(TheSession);
107         session_destroy_modules(&TheSession);
108
109 /* End Session loop */
110 /* now shut it down clean. */
111 //      shutdown_sessions();
112         do_housekeeping();
113 }
114
115 void test_worker_entry(StrBuf *UrlPath)
116 {
117
118
119 }
120
121
122 void SetGroupdavHeaders(int DavDepth)
123 {
124         Hdr.HR.dav_depth = DavDepth;
125 }
126
127 void FlushHeaders(void)
128 {
129
130 }
131
132 void test_groupdav_directorycommands(void)
133 {
134         SetUpContext();
135         if (SetUpConnection())
136         {
137                 SetUpRequest("/");
138                 SetGroupdavHeaders(0);
139                 groupdav_main();
140                 FlushHeaders();
141                 TearDownRequest();
142
143                 SetUpRequest("/");
144                 SetGroupdavHeaders(1);
145                 groupdav_main();
146                 FlushHeaders();
147                 TearDownRequest();
148
149
150                 SetUpRequest("/groupdav");
151                 SetGroupdavHeaders(0);
152                 groupdav_main();
153                 FlushHeaders();
154                 TearDownRequest();
155
156                 SetUpRequest("/groupdav");
157                 SetGroupdavHeaders(1);
158                 groupdav_main();
159                 FlushHeaders();
160                 TearDownRequest();
161
162                 SetUpRequest("/groupdav/");
163                 SetGroupdavHeaders(0);
164                 groupdav_main();
165                 FlushHeaders();
166                 TearDownRequest();
167
168                 SetUpRequest("/groupdav/");
169                 SetGroupdavHeaders(1);
170                 groupdav_main();
171                 FlushHeaders();
172                 TearDownRequest();
173
174
175                 SetUpRequest("/groupdav/My%20Folders");
176                 SetGroupdavHeaders(0);
177                 groupdav_main();
178                 FlushHeaders();
179                 TearDownRequest();
180
181                 SetUpRequest("/groupdav/My%20Folders");
182                 SetGroupdavHeaders(1);
183                 groupdav_main();
184                 FlushHeaders();
185                 TearDownRequest();
186
187                 SetUpRequest("/groupdav/My%20Folders/");
188                 SetGroupdavHeaders(0);
189                 groupdav_main();
190                 FlushHeaders();
191                 TearDownRequest();
192
193                 SetUpRequest("/groupdav/My%20Folders/");
194                 SetGroupdavHeaders(1);
195                 groupdav_main();
196                 FlushHeaders();
197                 TearDownRequest();
198
199                 SetUpRequest("/groupdav/My%20Folders/Calendar");
200                 SetGroupdavHeaders(0);
201                 groupdav_main();
202                 FlushHeaders();
203                 TearDownRequest();
204
205                 SetUpRequest("/groupdav/My%20Folders/Calendar");
206                 SetGroupdavHeaders(1);
207                 groupdav_main();
208                 FlushHeaders();
209                 TearDownRequest();
210
211                 SetUpRequest("/groupdav/My%20Folders/Calendar/");
212                 SetGroupdavHeaders(0);
213                 groupdav_main();
214                 FlushHeaders();
215                 TearDownRequest();
216
217                 SetUpRequest("/groupdav/My%20Folders/Calendar/");
218                 SetGroupdavHeaders(1);
219                 groupdav_main();
220                 FlushHeaders();
221                 TearDownRequest();
222
223
224                 SetUpRequest("/");
225                 SetGroupdavHeaders(0);
226                 groupdav_main();
227                 FlushHeaders();
228                 TearDownRequest();
229
230                 SetUpRequest("/");
231                 SetGroupdavHeaders(1);
232                 groupdav_main();
233                 FlushHeaders();
234                 TearDownRequest();
235         }
236
237
238         TearDownContext();
239 }
240
241 extern void httplang_to_locale(StrBuf *LocaleString, wcsession *sess);
242
243 static void test_gettext(const char *str, long len)
244 {
245         StrBuf *Test = NewStrBufPlain(str, len);
246
247         SetUpContext();
248         httplang_to_locale(Test, TheSession);
249         TearDownContext();
250
251         FreeStrBuf(&Test);
252 }
253
254 void test_gettext_headerevaluation_Opera(void)
255 {
256         test_gettext(HKEY("sq;q=1.0,de;q=0.9,as;q=0.8,ar;q=0.7,bn;q=0.6,zh-cn;q=0.5,kn;q=0.4,ch;q=0.3,fo;q=0.2,gn;q=0.1,ce;q=0.1,ie;q=0.1"));
257 }
258
259 void test_gettext_headerevaluation_firefox1(void)
260 {
261         test_gettext(HKEY("de-de,en-us;q=0.7,en;q=0.3"));
262 }
263
264 void test_gettext_headerevaluation_firefox2(void)
265 {
266         test_gettext(HKEY("de,en-ph;q=0.8,en-us;q=0.5,de-at;q=0.3"));
267 }
268
269 void test_gettext_headerevaluation_firefox3(void)
270 {
271         test_gettext(HKEY("de,en-us;q=0.9,it;q=0.9,de-de;q=0.8,en-ph;q=0.7,de-at;q=0.7,zh-cn;q=0.6,cy;q=0.5,ar-om;q=0.5,en-tt;q=0.4,xh;q=0.3,nl-be;q=0.3,cs;q=0.2,sv;q=0.1,tk;q=0.1"));
272 }
273
274 void test_gettext_headerevaluation_ie7(void)
275 {
276 // ie7????
277 // User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; FunWebProducts; FBSMTWB; GTB6.3; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; Seekmo 10.3.86.0)
278
279         test_gettext(HKEY("en-us,x-ns1MvoLpRxbNhu,x-ns2F0f0NnyPOPN"));
280 }
281
282 static void AddTests(void)
283 {
284         CU_pSuite pGroup = NULL;
285         CU_pTest pTest = NULL;
286 /*
287         pGroup = CU_add_suite("TestLocaleEvaluator", NULL, NULL);
288         pTest = CU_add_test(pGroup, "Test ie7", test_gettext_headerevaluation_ie7);
289         pTest = CU_add_test(pGroup, "Test Opera", test_gettext_headerevaluation_Opera);
290         pTest = CU_add_test(pGroup, "Test firefox1", test_gettext_headerevaluation_firefox1);
291         pTest = CU_add_test(pGroup, "Test firefox2", test_gettext_headerevaluation_firefox2);
292         pTest = CU_add_test(pGroup, "Test firefox3", test_gettext_headerevaluation_firefox3);
293 */
294         pGroup = CU_add_suite("TestUrlPatterns", NULL, NULL);
295         pTest = CU_add_test(pGroup, "Test", test_groupdav_directorycommands);
296
297
298 }
299
300
301
302
303
304
305
306 void run_tests(void)
307 {
308         setvbuf(stdout, NULL, _IONBF, 0);
309
310         CU_set_output_filename("TestAutomated");
311         if (CU_initialize_registry()) {
312                 printf("\nInitialize of test Registry failed.");
313         }
314
315         AddTests();
316
317         printf("\nTests completed with return value %d.\n", CU_basic_run_tests());
318         CU_cleanup_registry();
319
320 }