File: yaws_api_SUITE.erl

package info (click to toggle)
yaws 2.0.8%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 8,084 kB
  • sloc: erlang: 42,190; sh: 2,543; javascript: 1,459; ansic: 890; makefile: 878; lisp: 79; python: 34; xml: 12; php: 1
file content (236 lines) | stat: -rw-r--r-- 8,594 bytes parent folder | download | duplicates (2)
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
-module(yaws_api_SUITE).

-include("testsuite.hrl").

-compile(export_all).

all() ->
    [
     url_encode_decode,
     url_decode_with_encoding,
     parse_query,
     request_url
    ].

groups() ->
    [
    ].

%%====================================================================
init_per_suite(Config) ->
    Config.

end_per_suite(_Config) ->
    ok.

init_per_group(_Group, Config) ->
    Config.

end_per_group(_Group, _Config) ->
    ok.

init_per_testcase(_Test, Config) ->
    Config.

end_per_testcase(_Test, _Config) ->
    ok.

%%====================================================================
url_encode_decode(_Config) ->
    Tests = [
             {"file", "file"},
             {"\r\n", "%0D%0A"},
             {"one & two", "one%20%26%20two"},
             {list_to_binary("one & two"), "one%20%26%20two"},

             %% Reserved characters
             {"!*'();:@&=+$,/?%#[]", "%21%2A%27%28%29%3B%3A%40%26%3D%2B%24%2C%2F%3F%25%23%5B%5D"},

             %% UTF-8 characters ("/d/你好")
             {[47,100,47,20320,22909], "%2Fd%2F%E4%BD%A0%E5%A5%BD"},
             {unicode:characters_to_binary([47,100,47,20320,22909]), "%2Fd%2F%E4%BD%A0%E5%A5%BD"}
            ],
    [begin
         From1 = case From of
                     _ when is_list(From) ->
                         case io_lib:latin1_char_list(From) of
                             true  -> binary_to_list(unicode:characters_to_binary(From));
                             false -> From
                         end;
                     _  -> From
                 end,
         ?assertEqual(To,    yaws_api:url_encode(From1)),
         ?assertEqual(From1, case yaws_api:url_decode(To) of
                                 Decoded when is_binary(From1) ->
                                     unicode:characters_to_binary(Decoded);
                                 Decoded -> Decoded
                             end)
     end || {From, To} <- Tests],
    ok.

url_decode_with_encoding(_Config) ->
    %% USTF-8 characters "디지털기기"
    Input = [46356,51648,53560,44592,44592],
    Result = yaws_api:url_decode_with_encoding(Input, utf8),
    ?assertEqual(Input, Result).

parse_query(_Config) ->
    Arg1 = #arg{querydata = "",
                req = #http_request{method = 'GET',
                                    path = {abs_path, "/foo"},
                                    version = {1,1}}},
    ?assertEqual(yaws_api:parse_query(Arg1), []),
    ParamName = "param",
    ParamVal = "42",
    Param = ParamName ++ "=" ++ ParamVal,
    Arg2 = #arg{querydata = Param,
                req = #http_request{method = 'GET',
                                    path = {abs_path,
                                            "/foo?" ++ Param},
                                    version = {1,1}}},
    ?assertEqual(yaws_api:parse_query(Arg2), [{ParamName,ParamVal}]),
    ok.

%% ----
request_url(_Config) ->
    ?assertEqual(request_url1(), ok),
    ?assertEqual(request_url2(), ok),
    ?assertEqual(request_url3(), ok),
    ?assertEqual(request_url4(), ok),
    ?assertEqual(request_url5(), ok),
    ?assertEqual(request_url6(), ok),
    ?assertEqual(request_url7(), ok),
    ?assertEqual(request_url8(), ok),
    ?assertEqual(request_url9(), ok),
    ?assertEqual(request_url10(), ok),
    ok.

request_url1() ->
    SC = #sconf{servername="example.com", ssl=undefined},
    Arg = #arg{req     = #http_request{path={abs_patch, "/page.yaws?query-string=1"}},
               headers = #headers{}},
    put(sc, SC),
    Req = yaws_api:request_url(Arg),
    ?assertEqual(Req#url.scheme,   "http"),
    ?assertEqual(Req#url.host,     "example.com"),
    ?assertEqual(Req#url.port,     undefined),
    ?assertEqual(Req#url.path,     "/page.yaws"),
    ?assertEqual(Req#url.querypart, "query-string=1"),
    ok.

request_url2() ->
    SC = #sconf{servername="example.com:8000", ssl=undefined},
    Arg = #arg{req     = #http_request{path={abs_patch, "/page.yaws?query-string=1"}},
               headers = #headers{}},
    put(sc, SC),
    Req = yaws_api:request_url(Arg),
    ?assertEqual(Req#url.scheme,   "http"),
    ?assertEqual(Req#url.host,     "example.com"),
    ?assertEqual(Req#url.port,     8000),
    ?assertEqual(Req#url.path,     "/page.yaws"),
    ?assertEqual(Req#url.querypart, "query-string=1"),
    ok.

request_url3() ->
    SC = #sconf{servername="example.com", ssl=placeholder},
    Arg = #arg{req     = #http_request{path={abs_patch, "/page.yaws?query-string=1"}},
               headers = #headers{}},
    put(sc, SC),
    Req = yaws_api:request_url(Arg),
    ?assertEqual(Req#url.scheme,   "https"),
    ?assertEqual(Req#url.host,     "example.com"),
    ?assertEqual(Req#url.port,     undefined),
    ?assertEqual(Req#url.path,     "/page.yaws"),
    ?assertEqual(Req#url.querypart, "query-string=1"),
    ok.

request_url4() ->
    SC = #sconf{servername="example.com:4443", ssl=placeholder},
    Arg = #arg{req     = #http_request{path={abs_patch, "/page.yaws?query-string=1"}},
               headers = #headers{}},
    put(sc, SC),
    Req = yaws_api:request_url(Arg),
    ?assertEqual(Req#url.scheme,   "https"),
    ?assertEqual(Req#url.host,     "example.com"),
    ?assertEqual(Req#url.port,     4443),
    ?assertEqual(Req#url.path,     "/page.yaws"),
    ?assertEqual(Req#url.querypart, "query-string=1"),
    ok.

request_url5() ->
    SC = #sconf{servername="example.com", ssl=undefined},
    Arg = #arg{req     = #http_request{path={abs_patch, "/page.yaws?query-string=1"}},
               headers = #headers{host="www.example.com"}},
    put(sc, SC),
    Req = yaws_api:request_url(Arg),
    ?assertEqual(Req#url.scheme,   "http"),
    ?assertEqual(Req#url.host,     "www.example.com"),
    ?assertEqual(Req#url.port,     undefined),
    ?assertEqual(Req#url.path,     "/page.yaws"),
    ?assertEqual(Req#url.querypart, "query-string=1"),
    ok.

request_url6() ->
    SC = #sconf{servername="example.com", ssl=undefined},
    Arg = #arg{req     = #http_request{path={abs_patch, "/page.yaws?query-string=1"}},
               headers = #headers{host="www.example.com:8000"}},
    put(sc, SC),
    Req = yaws_api:request_url(Arg),
    ?assertEqual(Req#url.scheme,   "http"),
    ?assertEqual(Req#url.host,     "www.example.com"),
    ?assertEqual(Req#url.port,     8000),
    ?assertEqual(Req#url.path,     "/page.yaws"),
    ?assertEqual(Req#url.querypart, "query-string=1"),
    ok.

request_url7() ->
    SC = #sconf{servername="example.com", ssl=placeholder},
    Arg = #arg{req     = #http_request{path={abs_patch, "/page.yaws?query-string=1"}},
               headers = #headers{host="www.example.com"}},
    put(sc, SC),
    Req = yaws_api:request_url(Arg),
    ?assertEqual(Req#url.scheme,   "https"),
    ?assertEqual(Req#url.host,     "www.example.com"),
    ?assertEqual(Req#url.port,     undefined),
    ?assertEqual(Req#url.path,     "/page.yaws"),
    ?assertEqual(Req#url.querypart, "query-string=1"),
    ok.

request_url8() ->
    SC = #sconf{servername="example.com", ssl=placeholder},
    Arg = #arg{req     = #http_request{path={abs_patch, "/page.yaws?query-string=1"}},
               headers = #headers{host="www.example.com:4443"}},
    put(sc, SC),
    Req = yaws_api:request_url(Arg),
    ?assertEqual(Req#url.scheme,   "https"),
    ?assertEqual(Req#url.host,     "www.example.com"),
    ?assertEqual(Req#url.port,     4443),
    ?assertEqual(Req#url.path,     "/page.yaws"),
    ?assertEqual(Req#url.querypart, "query-string=1"),
    ok.

request_url9() ->
    SC = #sconf{servername="example.com", ssl=undegined},
    Arg = #arg{req     = #http_request{path={abs_patch, "/page.yaws?query-string=1"}},
               headers = #headers{host="127.0.0.1:8000"}},
    put(sc, SC),
    Req = yaws_api:request_url(Arg),
    ?assertEqual(Req#url.scheme,   "https"),
    ?assertEqual(Req#url.host,     "127.0.0.1"),
    ?assertEqual(Req#url.port,     8000),
    ?assertEqual(Req#url.path,     "/page.yaws"),
    ?assertEqual(Req#url.querypart, "query-string=1"),
    ok.

request_url10() ->
    SC = #sconf{servername="example.com", ssl=placeholder},
    Arg = #arg{req     = #http_request{path={abs_patch, "/page.yaws?query-string=1"}},
               headers = #headers{host="[2001:610:240:22::c100:68b]:4443"}},
    put(sc, SC),
    Req = yaws_api:request_url(Arg),
    ?assertEqual(Req#url.scheme,   "https"),
    ?assertEqual(Req#url.host,     "[2001:610:240:22::c100:68b]"),
    ?assertEqual(Req#url.port,     4443),
    ?assertEqual(Req#url.path,     "/page.yaws"),
    ?assertEqual(Req#url.querypart, "query-string=1"),
    ok.