85
73
pssl_mod_actions/1,
87
74
essl_mod_actions/1,
89
76
pssl_mod_security/1,
91
77
essl_mod_security/1,
97
82
pssl_mod_auth_api/1,
99
83
essl_mod_auth_api/1,
101
85
pssl_mod_auth_mnesia_api/1,
102
ossl_mod_auth_mnesia_api/1,
103
86
essl_mod_auth_mnesia_api/1,
105
88
pssl_mod_htaccess/1,
107
89
essl_mod_htaccess/1,
129
106
pssl_load_light/1,
131
107
essl_load_light/1,
133
109
pssl_load_medium/1,
135
110
essl_load_medium/1,
137
112
pssl_load_heavy/1,
139
113
essl_load_heavy/1,
141
115
pssl_dos_hostname/1,
143
116
essl_dos_hostname/1,
145
118
pssl_time_test/1,
147
119
essl_time_test/1,
149
121
pssl_restart_no_block/1,
150
ossl_restart_no_block/1,
151
122
essl_restart_no_block/1,
153
124
pssl_restart_disturbing_block/1,
154
ossl_restart_disturbing_block/1,
155
125
essl_restart_disturbing_block/1,
157
127
pssl_restart_non_disturbing_block/1,
158
ossl_restart_non_disturbing_block/1,
159
128
essl_restart_non_disturbing_block/1,
161
130
pssl_block_disturbing_idle/1,
162
ossl_block_disturbing_idle/1,
163
131
essl_block_disturbing_idle/1,
165
133
pssl_block_non_disturbing_idle/1,
166
ossl_block_non_disturbing_idle/1,
167
134
essl_block_non_disturbing_idle/1,
169
136
pssl_block_503/1,
171
137
essl_block_503/1,
173
139
pssl_block_disturbing_active/1,
174
ossl_block_disturbing_active/1,
175
140
essl_block_disturbing_active/1,
177
142
pssl_block_non_disturbing_active/1,
178
ossl_block_non_disturbing_active/1,
179
143
essl_block_non_disturbing_active/1,
181
145
pssl_block_disturbing_active_timeout_not_released/1,
182
ossl_block_disturbing_active_timeout_not_released/1,
183
146
essl_block_disturbing_active_timeout_not_released/1,
185
148
pssl_block_disturbing_active_timeout_released/1,
186
ossl_block_disturbing_active_timeout_released/1,
187
149
essl_block_disturbing_active_timeout_released/1,
189
151
pssl_block_non_disturbing_active_timeout_not_released/1,
190
ossl_block_non_disturbing_active_timeout_not_released/1,
191
152
essl_block_non_disturbing_active_timeout_not_released/1,
193
154
pssl_block_non_disturbing_active_timeout_released/1,
194
ossl_block_non_disturbing_active_timeout_released/1,
195
155
essl_block_non_disturbing_active_timeout_released/1,
197
157
pssl_block_disturbing_blocker_dies/1,
198
ossl_block_disturbing_blocker_dies/1,
199
158
essl_block_disturbing_blocker_dies/1,
201
160
pssl_block_non_disturbing_blocker_dies/1,
202
ossl_block_non_disturbing_blocker_dies/1,
203
161
essl_block_non_disturbing_blocker_dies/1
249
210
%% Description: Returns documentation/test cases in this test suite
250
211
%% or a skip tuple if the platform is not supported.
251
212
%%--------------------------------------------------------------------
253
["Test the http server in the intes application."];
213
suite() -> [{ct_hooks,[ts_install_cth]}].
219
{group, http_1_1_ip},
220
{group, http_1_0_ip},
221
{group, http_0_9_ip},
228
[ip_mod_alias, ip_mod_actions, ip_mod_security,
229
ip_mod_auth, ip_mod_auth_api, ip_mod_auth_mnesia_api,
230
ip_mod_htaccess, ip_mod_cgi, ip_mod_esi, ip_mod_get,
231
ip_mod_head, ip_mod_all, ip_load_light, ip_load_medium,
232
ip_load_heavy, ip_dos_hostname, ip_time_test,
233
ip_restart_no_block, ip_restart_disturbing_block,
234
ip_restart_non_disturbing_block,
235
ip_block_disturbing_idle, ip_block_non_disturbing_idle,
236
ip_block_503, ip_block_disturbing_active,
237
ip_block_non_disturbing_active,
238
ip_block_disturbing_active_timeout_not_released,
239
ip_block_disturbing_active_timeout_released,
240
ip_block_non_disturbing_active_timeout_not_released,
241
ip_block_non_disturbing_active_timeout_released,
242
ip_block_disturbing_blocker_dies,
243
ip_block_non_disturbing_blocker_dies]},
244
{ssl, [], [{group, pssl}, {group, essl}]},
246
[pssl_mod_alias, pssl_mod_actions, pssl_mod_security,
247
pssl_mod_auth, pssl_mod_auth_api,
248
pssl_mod_auth_mnesia_api, pssl_mod_htaccess,
249
pssl_mod_cgi, pssl_mod_esi, pssl_mod_get, pssl_mod_head,
250
pssl_mod_all, pssl_load_light, pssl_load_medium,
251
pssl_load_heavy, pssl_dos_hostname, pssl_time_test,
252
pssl_restart_no_block, pssl_restart_disturbing_block,
253
pssl_restart_non_disturbing_block,
254
pssl_block_disturbing_idle,
255
pssl_block_non_disturbing_idle, pssl_block_503,
256
pssl_block_disturbing_active,
257
pssl_block_non_disturbing_active,
258
pssl_block_disturbing_active_timeout_not_released,
259
pssl_block_disturbing_active_timeout_released,
260
pssl_block_non_disturbing_active_timeout_not_released,
261
pssl_block_non_disturbing_active_timeout_released,
262
pssl_block_disturbing_blocker_dies,
263
pssl_block_non_disturbing_blocker_dies]},
265
[essl_mod_alias, essl_mod_actions, essl_mod_security,
266
essl_mod_auth, essl_mod_auth_api,
267
essl_mod_auth_mnesia_api, essl_mod_htaccess,
268
essl_mod_cgi, essl_mod_esi, essl_mod_get, essl_mod_head,
269
essl_mod_all, essl_load_light, essl_load_medium,
270
essl_load_heavy, essl_dos_hostname, essl_time_test,
271
essl_restart_no_block, essl_restart_disturbing_block,
272
essl_restart_non_disturbing_block,
273
essl_block_disturbing_idle,
274
essl_block_non_disturbing_idle, essl_block_503,
275
essl_block_disturbing_active,
276
essl_block_non_disturbing_active,
277
essl_block_disturbing_active_timeout_not_released,
278
essl_block_disturbing_active_timeout_released,
279
essl_block_non_disturbing_active_timeout_not_released,
280
essl_block_non_disturbing_active_timeout_released,
281
essl_block_disturbing_blocker_dies,
282
essl_block_non_disturbing_blocker_dies]},
284
[ip_host, ip_chunked, ip_expect, ip_range, ip_if_test,
285
ip_http_trace, ip_http1_1_head,
286
ip_mod_cgi_chunked_encoding_test]},
288
[ip_head_1_0, ip_get_1_0, ip_post_1_0]},
289
{http_0_9_ip, [], [ip_get_0_9]},
290
{ipv6, [], [ipv6_hostname_ipcomm, ipv6_address_ipcomm,
291
ipv6_hostname_essl, ipv6_address_essl]},
293
[ticket_5775, ticket_5865, ticket_5913, ticket_6003,
296
init_per_group(_GroupName, Config) ->
299
end_per_group(_GroupName, Config) ->
265
303
%%--------------------------------------------------------------------
266
304
%% Function: init_per_suite(Config) -> Config
267
305
%% Config - [tuple()]
422
459
%% on 'test_host_ipv6_only' that will only be present
423
460
%% when you run the whole test suite due to shortcomings
424
461
%% of the test server.
425
%% case (catch ?config(test_host_ipv6_only, Config)) of
426
%% {_,IPv6Host,IPv6Adress,_,_} ->
427
%% create_ipv6_config([{port, ?IP_PORT},
428
%% {sock_type, ip_comm} | NewConfig],
429
%% "ipv6_hostname.conf", IPv6Host),
430
%% create_ipv6_config([{port, ?IP_PORT},
431
%% {sock_type, ip_comm} | NewConfig],
432
%% "ipv6_address.conf", IPv6Adress);
463
io:format(user, "~w:init_per_testcase2(~w) -> "
464
"maybe generate IPv6 config file(s)", [?MODULE, Case]),
466
case atom_to_list(Case) of
468
case (catch inets_test_lib:has_ipv6_support(NewConfig)) of
469
{ok, IPv6Address0} ->
470
{ok, Hostname} = inet:gethostname(),
471
IPv6Address = http_transport:ipv6_name(IPv6Address0),
472
create_ipv6_config([{port, ?IP_PORT},
473
{sock_type, ip_comm},
474
{ipv6_host, IPv6Address} |
476
"ipv6_hostname_ipcomm.conf",
478
create_ipv6_config([{port, ?IP_PORT},
479
{sock_type, ip_comm},
480
{ipv6_host, IPv6Address} |
482
"ipv6_address_ipcomm.conf",
484
create_ipv6_config([{port, ?SSL_PORT},
486
{ipv6_host, IPv6Address} |
488
"ipv6_hostname_essl.conf",
490
create_ipv6_config([{port, ?SSL_PORT},
492
{ipv6_host, IPv6Address} |
494
"ipv6_address_essl.conf",
496
[{ipv6_host, IPv6Address} | NewConfig];
437
505
io:format(user, "~w:init_per_testcase2(~w) -> done~n",
438
506
[?MODULE, Case]),
443
511
init_per_testcase3(Case, Config) ->
516
584
[X, $s, $s, $l, $_, $m, $o, $d, $_, $h, $t, $a, $c, $c, $e, $s, $s] ->
585
?ENSURE_STARTED([crypto, public_key, ssl]),
520
$o -> ossl; % OpenSSL based ssl
521
589
$e -> essl % Erlang based ssl
523
591
case inets_test_lib:start_http_server_ssl(
524
592
filename:join(TcTopDir,
525
593
integer_to_list(?SSL_PORT) ++
526
"htacess.conf"), SslTag) of
594
"htaccess.conf"), SslTag) of
530
error_logger:info_report("Other: ~p~n", [Other]),
598
error_logger:info_msg("Other: ~p~n", [Other]),
531
599
{skip, "SSL does not seem to be supported"}
533
601
[X, $s, $s, $l, $_ | Rest] ->
602
?ENSURE_STARTED([crypto, public_key, ssl]),
540
608
case inets_test_lib:start_http_server_ssl(
615
680
%%-------------------------------------------------------------------------
616
681
%% Test cases starts here.
617
682
%%-------------------------------------------------------------------------
619
["HTTP tests using TCP/IP"];
627
ip_mod_auth_mnesia_api,
640
ip_restart_disturbing_block,
641
ip_restart_non_disturbing_block,
642
ip_block_disturbing_idle,
643
ip_block_non_disturbing_idle,
645
ip_block_disturbing_active,
646
ip_block_non_disturbing_active,
647
ip_block_disturbing_active_timeout_not_released,
648
ip_block_disturbing_active_timeout_released,
649
ip_block_non_disturbing_active_timeout_not_released,
650
ip_block_non_disturbing_active_timeout_released,
651
ip_block_disturbing_blocker_dies,
652
ip_block_non_disturbing_blocker_dies
655
%%-------------------------------------------------------------------------
657
["HTTP test using SSL"];
667
["HTTP test using SSL - using old way of configuring SSL"];
675
pssl_mod_auth_mnesia_api,
687
pssl_restart_no_block,
688
pssl_restart_disturbing_block,
689
pssl_restart_non_disturbing_block,
690
pssl_block_disturbing_idle,
691
pssl_block_non_disturbing_idle,
693
pssl_block_disturbing_active,
694
pssl_block_non_disturbing_active,
695
pssl_block_disturbing_active_timeout_not_released,
696
pssl_block_disturbing_active_timeout_released,
697
pssl_block_non_disturbing_active_timeout_not_released,
698
pssl_block_non_disturbing_active_timeout_released,
699
pssl_block_disturbing_blocker_dies,
700
pssl_block_non_disturbing_blocker_dies
704
["HTTP test using SSL - using new way of configuring usage of old SSL"];
712
ossl_mod_auth_mnesia_api,
724
ossl_restart_no_block,
725
ossl_restart_disturbing_block,
726
ossl_restart_non_disturbing_block,
727
ossl_block_disturbing_idle,
728
ossl_block_non_disturbing_idle,
730
ossl_block_disturbing_active,
731
ossl_block_non_disturbing_active,
732
ossl_block_disturbing_active_timeout_not_released,
733
ossl_block_disturbing_active_timeout_released,
734
ossl_block_non_disturbing_active_timeout_not_released,
735
ossl_block_non_disturbing_active_timeout_released,
736
ossl_block_disturbing_blocker_dies,
737
ossl_block_non_disturbing_blocker_dies
741
["HTTP test using SSL - using new way of configuring usage of new SSL"];
749
essl_mod_auth_mnesia_api,
761
essl_restart_no_block,
762
essl_restart_disturbing_block,
763
essl_restart_non_disturbing_block,
764
essl_block_disturbing_idle,
765
essl_block_non_disturbing_idle,
767
essl_block_disturbing_active,
768
essl_block_non_disturbing_active,
769
essl_block_disturbing_active_timeout_not_released,
770
essl_block_disturbing_active_timeout_released,
771
essl_block_non_disturbing_active_timeout_not_released,
772
essl_block_non_disturbing_active_timeout_released,
773
essl_block_disturbing_blocker_dies,
774
essl_block_non_disturbing_blocker_dies
778
%%-------------------------------------------------------------------------
781
http_1_1_ip(suite) ->
790
ip_mod_cgi_chunked_encoding_test
793
%%-------------------------------------------------------------------------
796
http_1_0_ip(suite) ->
803
%%-------------------------------------------------------------------------
806
http_0_9_ip(suite) ->
811
%%-------------------------------------------------------------------------
813
["Tests ipv6 functionality."];
820
%%-------------------------------------------------------------------------
822
["Test cases for reported bugs."];
832
684
%%-------------------------------------------------------------------------
833
685
ip_mod_alias(doc) ->
2528
2141
%-------------------------------------------------------------------------
2529
ipv6_hostname(doc) ->
2143
ipv6_hostname_ipcomm() ->
2144
[{require, ipv6_hosts}].
2145
ipv6_hostname_ipcomm(X) ->
2146
SocketType = ip_comm,
2148
ipv6_hostname(SocketType, Port, X).
2150
ipv6_hostname_essl() ->
2151
[{require, ipv6_hosts}].
2152
ipv6_hostname_essl(X) ->
2155
ipv6_hostname(SocketType, Port, X).
2157
ipv6_hostname(_SocketType, _Port, doc) ->
2530
2158
["Test standard ipv6 address"];
2531
ipv6_hostname(suite)->
2159
ipv6_hostname(_SocketType, _Port, suite)->
2533
ipv6_hostname(Config) when is_list(Config) ->
2161
ipv6_hostname(SocketType, Port, Config) when is_list(Config) ->
2162
tsp("ipv6_hostname -> entry with"
2165
"~n Config: ~p", [SocketType, Port, Config]),
2534
2166
Host = ?config(host, Config),
2535
httpd_test_lib:verify_request(ip_comm, Host, ?IP_PORT, node(),
2536
"GET / HTTP/1.1\r\n\r\n",
2538
{version, "HTTP/1.1"}]),
2167
URI = "GET HTTP://" ++
2168
Host ++ ":" ++ integer_to_list(Port) ++ "/ HTTP/1.1\r\n\r\n",
2169
tsp("ipv6_hostname -> Host: ~p", [Host]),
2170
httpd_test_lib:verify_request(SocketType, Host, Port, [inet6],
2173
[{statuscode, 200}, {version, "HTTP/1.1"}]),
2541
2176
%%-------------------------------------------------------------------------
2542
ipv6_address(doc) ->
2178
ipv6_address_ipcomm() ->
2179
[{require, ipv6_hosts}].
2180
ipv6_address_ipcomm(X) ->
2181
SocketType = ip_comm,
2183
ipv6_address(SocketType, Port, X).
2185
ipv6_address_essl() ->
2186
[{require, ipv6_hosts}].
2187
ipv6_address_essl(X) ->
2190
ipv6_address(SocketType, Port, X).
2192
ipv6_address(_SocketType, _Port, doc) ->
2543
2193
["Test standard ipv6 address"];
2544
ipv6_address(suite)->
2194
ipv6_address(_SocketType, _Port, suite)->
2546
ipv6_address(Config) when is_list(Config) ->
2547
httpd_test_lib:verify_request(ip_comm, ?IPV6_LOCAL_HOST, ?IP_PORT,
2548
node(), "GET / HTTP/1.1\r\n\r\n",
2550
{version, "HTTP/1.1"}]),
2196
ipv6_address(SocketType, Port, Config) when is_list(Config) ->
2197
tsp("ipv6_address -> entry with"
2200
"~n Config: ~p", [SocketType, Port, Config]),
2201
Host = ?config(host, Config),
2202
tsp("ipv6_address -> Host: ~p", [Host]),
2203
URI = "GET HTTP://" ++
2204
Host ++ ":" ++ integer_to_list(Port) ++ "/ HTTP/1.1\r\n\r\n",
2205
httpd_test_lib:verify_request(SocketType, Host, Port, [inet6],
2208
[{statuscode, 200}, {version, "HTTP/1.1"}]),
2553
2212
%%--------------------------------------------------------------------
2554
2213
ticket_5775(doc) ->
2555
2214
["Tests that content-length is correct"];
2605
2264
["Tests that a header without last-modified is handled"];
2606
2265
ticket_5913(suite) -> [];
2607
2266
ticket_5913(Config) ->
2608
ok=httpd_test_lib:verify_request(ip_comm, ?config(host, Config),
2609
?IP_PORT, ?config(node, Config),
2267
ok = httpd_test_lib:verify_request(ip_comm, ?config(host, Config),
2268
?IP_PORT, ?config(node, Config),
2610
2269
"GET /cgi-bin/erl/httpd_example:get_bin "
2611
2270
"HTTP/1.0\r\n\r\n",
2612
2271
[{statuscode, 200},
2613
{version, "HTTP/1.0"}]),
2272
{version, "HTTP/1.0"}]),
2616
2275
ticket_6003(doc) ->
2617
2276
["Tests that a URI with a bad hexadecimal code is handled"];
2618
2277
ticket_6003(suite) -> [];
2619
2278
ticket_6003(Config) ->
2620
ok=httpd_test_lib:verify_request(ip_comm, ?config(host, Config),
2621
?IP_PORT, ?config(node, Config),
2622
"GET http://www.erlang.org/%skalle "
2625
{version, "HTTP/1.0"}]),
2279
ok = httpd_test_lib:verify_request(ip_comm, ?config(host, Config),
2280
?IP_PORT, ?config(node, Config),
2281
"GET http://www.erlang.org/%skalle "
2284
{version, "HTTP/1.0"}]),
2628
2287
ticket_7304(doc) ->
2922
2580
mnesia:delete_schema([node()]),
2925
create_htacess_data(Path, IpAddress)->
2926
create_htacess_dirs(Path),
2583
create_htaccess_data(Path, IpAddress)->
2584
create_htaccess_dirs(Path),
2928
2586
create_html_file(filename:join([Path,"ht/open/dummy.html"])),
2929
2587
create_html_file(filename:join([Path,"ht/blocknet/dummy.html"])),
2930
2588
create_html_file(filename:join([Path,"ht/secret/dummy.html"])),
2931
2589
create_html_file(filename:join([Path,"ht/secret/top_secret/dummy.html"])),
2933
create_htacess_file(filename:join([Path,"ht/open/.htaccess"]),
2591
create_htaccess_file(filename:join([Path,"ht/open/.htaccess"]),
2934
2592
Path, "user one Aladdin"),
2935
create_htacess_file(filename:join([Path,"ht/secret/.htaccess"]),
2593
create_htaccess_file(filename:join([Path,"ht/secret/.htaccess"]),
2936
2594
Path, "group group1 group2"),
2937
create_htacess_file(filename:join([Path,
2595
create_htaccess_file(filename:join([Path,
2938
2596
"ht/secret/top_secret/.htaccess"]),
2939
2597
Path, "user four"),
2940
create_htacess_file(filename:join([Path,"ht/blocknet/.htaccess"]),
2598
create_htaccess_file(filename:join([Path,"ht/blocknet/.htaccess"]),
2941
2599
Path, nouser, IpAddress),
2943
2601
create_user_group_file(filename:join([Path,"ht","users.file"]),
3056
2714
"12345678901234567890",
3057
2715
"12345678901234567890"])).
3059
%% create_ipv6_config(Config, FileName, Ipv6Address) ->
3060
%% ServerRoot = ?config(server_root, Config),
3061
%% TcTopDir = ?config(tc_top_dir, Config),
3062
%% Port = ?config(port, Config),
3063
%% SockType = ?config(sock_type, Config),
3065
%% MaxHdrSz = io_lib:format("~p", [256]),
3066
%% MaxHdrAct = io_lib:format("~p", [close]),
3068
%% Mod_order = "Modules mod_alias mod_auth mod_esi mod_actions mod_cgi"
3069
%% " mod_include mod_dir mod_get mod_head"
3070
%% " mod_log mod_disk_log mod_trace",
3072
%% HttpConfig = [cline(["BindAddress ", "[" ++ Ipv6Address ++"]|inet6"]),
3073
%% cline(["Port ", integer_to_list(Port)]),
3074
%% cline(["ServerName ", "httpc_test"]),
3075
%% cline(["SocketType ", atom_to_list(SockType)]),
3076
%% cline([Mod_order]),
3077
%% cline(["ServerRoot ", ServerRoot]),
3078
%% cline(["DocumentRoot ",
3079
%% filename:join(ServerRoot, "htdocs")]),
3080
%% cline(["MaxHeaderSize ",MaxHdrSz]),
3081
%% cline(["MaxHeaderAction ",MaxHdrAct]),
3082
%% cline(["DirectoryIndex ", "index.html "]),
3083
%% cline(["DefaultType ", "text/plain"])],
3084
%% ConfigFile = filename:join([TcTopDir,FileName]),
3085
%% {ok, Fd} = file:open(ConfigFile, [write]),
3086
%% ok = file:write(Fd, lists:flatten(HttpConfig)),
3087
%% ok = file:close(Fd).
2717
create_ipv6_config(Config, FileName, Ipv6Address) ->
2718
ServerRoot = ?config(server_root, Config),
2719
TcTopDir = ?config(tc_top_dir, Config),
2720
Port = ?config(port, Config),
2721
SockType = ?config(sock_type, Config),
2722
Mods = io_lib:format("~p", [httpd_mod]),
2723
Funcs = io_lib:format("~p", [ssl_password_cb]),
2724
Host = ?config(ipv6_host, Config),
2726
MaxHdrSz = io_lib:format("~p", [256]),
2727
MaxHdrAct = io_lib:format("~p", [close]),
2729
Mod_order = "Modules mod_alias mod_auth mod_esi mod_actions mod_cgi"
2730
" mod_include mod_dir mod_get mod_head"
2731
" mod_log mod_disk_log mod_trace",
2735
(SockType =:= ssl) orelse
2736
(SockType =:= essl) ->
2737
[cline(["SSLCertificateFile ",
2738
filename:join(ServerRoot, "ssl/ssl_server.pem")]),
2739
cline(["SSLCertificateKeyFile ",
2740
filename:join(ServerRoot, "ssl/ssl_server.pem")]),
2741
cline(["SSLCACertificateFile ",
2742
filename:join(ServerRoot, "ssl/ssl_server.pem")]),
2743
cline(["SSLPasswordCallbackModule ", Mods]),
2744
cline(["SSLPasswordCallbackFunction ", Funcs]),
2745
cline(["SSLVerifyClient 0"]),
2746
cline(["SSLVerifyDepth 1"])];
2751
BindAddress = "[" ++ Ipv6Address ++"]|inet6",
2754
[cline(["BindAddress ", BindAddress]),
2755
cline(["Port ", integer_to_list(Port)]),
2756
cline(["ServerName ", Host]),
2757
cline(["SocketType ", atom_to_list(SockType)]),
2759
cline(["ServerRoot ", ServerRoot]),
2760
cline(["DocumentRoot ", filename:join(ServerRoot, "htdocs")]),
2761
cline(["MaxHeaderSize ",MaxHdrSz]),
2762
cline(["MaxHeaderAction ",MaxHdrAct]),
2763
cline(["DirectoryIndex ", "index.html "]),
2764
cline(["DefaultType ", "text/plain"]),
2766
ConfigFile = filename:join([TcTopDir,FileName]),
2767
{ok, Fd} = file:open(ConfigFile, [write]),
2768
ok = file:write(Fd, lists:flatten(HttpConfig)),
2769
ok = file:close(Fd).
2773
%% inets_test_lib:tsp(F).
2775
inets_test_lib:tsp(F, A).
3090
test_server:fail(Reason).
2778
inets_test_lib:tsf(Reason).