| 71 |
71 |
| 72 RewriteRule rule; |
72 RewriteRule rule; |
| 73 memset(&rule, 0, sizeof(RewriteRule)); |
73 memset(&rule, 0, sizeof(RewriteRule)); |
| 74 rule.url = string_template_compile(a, cx_str("/static/")); |
74 rule.url = string_template_compile(a, cx_str("/static/")); |
| 75 |
75 |
| |
76 RewriteRule rule2; |
| |
77 memset(&rule2, 0, sizeof(RewriteRule)); |
| |
78 rule2.url = string_template_compile(a, cx_str("/dynamic/$0")); |
| |
79 |
| 76 CX_TEST_DO { |
80 CX_TEST_DO { |
| 77 char *new_url = NULL; |
81 char *new_url = NULL; |
| 78 int r = rewrite_url(&rule, NULL, 0, a, "/previous/url", &new_url); |
82 int r = rewrite_url(&rule, NULL, 0, a, "/previous/url", &new_url); |
| 79 |
83 |
| 80 CX_TEST_ASSERT(r == 0); |
84 CX_TEST_ASSERT(r == 0); |
| 81 CX_TEST_ASSERT(new_url != NULL); |
85 CX_TEST_ASSERT(new_url != NULL); |
| 82 CX_TEST_ASSERT(!strcmp(new_url, "/static/")); |
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")); |
| 83 } |
97 } |
| 84 |
98 |
| 85 server_config_destroy(&cfg); |
99 server_config_destroy(&cfg); |
| 86 cxMempoolFree(mp); |
100 cxMempoolFree(mp); |
| 87 } |
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 } |