1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include "rewrite.h"
30
31 #include "../daemon/rewrite.h"
32 #include "../daemon/config.h"
33 #include <cx/mempool.h>
34 #include <cx/linked_list.h>
35 #include <string.h>
36
37 CX_TEST(test_rewrite_rule_create) {
38 CxMempool *mp = cxMempoolCreate(
100,
CX_MEMPOOL_TYPE_ADVANCED);
39 const CxAllocator *a = mp->allocator;
40
41 ServerConfiguration cfg = {
NULL };
42 cfg.a = a;
43 cfg.destr = cxLinkedListCreate(a,
NULL,
sizeof(ScfgDestr));
44
45 CX_TEST_DO {
46 RewriteRule *rule = rewrite_rule_create(&cfg, cx_mutstr(
NULL), cx_mutstr(
"/rewrite"));
47 CX_TEST_ASSERT(rule !=
NULL);
48 CX_TEST_ASSERT(!rule->has_regex);
49 CX_TEST_ASSERT(rule->url !=
NULL);
50
51 cxmutstr newuri = string_template_build_string(rule->url, a,
NULL,
NULL);
52 CX_TEST_ASSERT(!cx_strcmp(newuri,
"/rewrite"));
53
54 RewriteRule *rule2 = rewrite_rule_create(&cfg, cx_mutstr(
"/path/(.*)/files/"), cx_mutstr(
"/rewrite/$1/"));
55 CX_TEST_ASSERT(rule2 !=
NULL);
56 CX_TEST_ASSERT(rule2->has_regex);
57 CX_TEST_ASSERT(rule2->url !=
NULL);
58 }
59
60 server_config_destroy(&cfg);
61 cxMempoolFree(mp);
62 }
63
64 CX_TEST(test_rewrite_url_no_regex) {
65 CxMempool *mp = cxMempoolCreate(
100,
CX_MEMPOOL_TYPE_ADVANCED);
66 const CxAllocator *a = mp->allocator;
67
68 ServerConfiguration cfg = {
NULL };
69 cfg.a = a;
70 cfg.destr = cxLinkedListCreate(a,
NULL,
sizeof(ScfgDestr));
71
72 RewriteRule rule;
73 memset(&rule,
0,
sizeof(RewriteRule));
74 rule.url = string_template_compile(a, cx_str(
"/static/"));
75
76 RewriteRule rule2;
77 memset(&rule2,
0,
sizeof(RewriteRule));
78 rule2.url = string_template_compile(a, cx_str(
"/dynamic/$0"));
79
80 CX_TEST_DO {
81 char *new_url =
NULL;
82 int r = rewrite_url(&rule,
NULL,
0, a,
"/previous/url", &new_url);
83
84 CX_TEST_ASSERT(r ==
0);
85 CX_TEST_ASSERT(new_url !=
NULL);
86 CX_TEST_ASSERT(!strcmp(new_url,
"/static/"));
87
88 new_url =
NULL;
89 regmatch_t m;
90 m.rm_so =
6;
91 m.rm_eo =
9;
92 r = rewrite_url(&rule2, &m,
1, a,
"/test/url", &new_url);
93
94 CX_TEST_ASSERT(r ==
0);
95 CX_TEST_ASSERT(new_url !=
NULL);
96 CX_TEST_ASSERT(!strcmp(new_url,
"/dynamic/url"));
97 }
98
99 server_config_destroy(&cfg);
100 cxMempoolFree(mp);
101 }
102
103 CX_TEST(test_rewrite_url) {
104 CxMempool *mp = cxMempoolCreate(
100,
CX_MEMPOOL_TYPE_ADVANCED);
105 const CxAllocator *a = mp->allocator;
106
107 ServerConfiguration cfg = {
NULL };
108 cfg.a = a;
109 cfg.destr = cxLinkedListCreate(a,
NULL,
sizeof(ScfgDestr));
110
111 RewriteRule *rule0 = rewrite_rule_create(&cfg, cx_mutstr(
"test.*"), cx_mutstr(
"/rewrite"));
112 RewriteRule *rule1 = rewrite_rule_create(&cfg, cx_mutstr(
"/abc/(.*)\\.html"), cx_mutstr(
"/newpath/$1.md"));
113 RewriteRule *rule2 = rewrite_rule_create(&cfg, cx_mutstr(
"/abc/(.*)/dir/(.*)"), cx_mutstr(
"/new/$1/files/$2"));
114
115 CX_TEST_DO {
116 char *new_url =
NULL;
117 int r = rewrite_url(rule0,
NULL,
0, a,
"nomatch", &new_url);
118
119 CX_TEST_ASSERT(r ==
0);
120 CX_TEST_ASSERT(new_url ==
NULL);
121
122 r = rewrite_url(rule0,
NULL,
0, a,
"test_match", &new_url);
123
124 CX_TEST_ASSERT(r ==
0);
125 CX_TEST_ASSERT(new_url !=
NULL);
126 CX_TEST_ASSERT(!strcmp(new_url,
"/rewrite"));
127
128 new_url =
NULL;
129 r = rewrite_url(rule1,
NULL,
0, a,
"/abc/index.html", &new_url);
130
131 CX_TEST_ASSERT(r ==
0);
132 CX_TEST_ASSERT(new_url !=
NULL);
133 CX_TEST_ASSERT(!strcmp(new_url,
"/newpath/index.md"));
134
135 new_url =
NULL;
136 r = rewrite_url(rule2,
NULL,
0, a,
"/abc/sub/dir/index.html", &new_url);
137
138 CX_TEST_ASSERT(r ==
0);
139 CX_TEST_ASSERT(new_url !=
NULL);
140 CX_TEST_ASSERT(!strcmp(new_url,
"/new/sub/files/index.html"));
141 }
142
143 server_config_destroy(&cfg);
144 cxMempoolFree(mp);
145 }
146