aboutsummaryrefslogtreecommitdiffstats
path: root/lib/inets/test
diff options
context:
space:
mode:
Diffstat (limited to 'lib/inets/test')
-rw-r--r--lib/inets/test/erl_make_certs.erl10
-rw-r--r--lib/inets/test/ftp_suite_lib.erl8
-rw-r--r--lib/inets/test/httpc_SUITE.erl44
-rw-r--r--lib/inets/test/httpd_SUITE.erl1279
-rw-r--r--lib/inets/test/httpd_SUITE_data/server_root/config/mime.types4
-rw-r--r--lib/inets/test/httpd_time_test.erl49
-rw-r--r--lib/inets/test/inets_SUITE.erl19
-rw-r--r--lib/inets/test/inets_app_test.erl67
-rw-r--r--lib/inets/test/inets_test_lib.erl23
-rw-r--r--lib/inets/test/old_httpd_SUITE.erl6
10 files changed, 68 insertions, 1441 deletions
diff --git a/lib/inets/test/erl_make_certs.erl b/lib/inets/test/erl_make_certs.erl
index 22dc951ac1..6c168a5704 100644
--- a/lib/inets/test/erl_make_certs.erl
+++ b/lib/inets/test/erl_make_certs.erl
@@ -204,7 +204,7 @@ issuer_der(Issuer) ->
Subject.
subject(undefined, IsRootCA) ->
- User = if IsRootCA -> "RootCA"; true -> user() end,
+ User = if IsRootCA -> "RootCA"; true -> os:getenv("USER", "test_user") end,
Opts = [{email, User ++ "@erlang.org"},
{name, User},
{city, "Stockholm"},
@@ -215,14 +215,6 @@ subject(undefined, IsRootCA) ->
subject(Opts, _) ->
subject(Opts).
-user() ->
- case os:getenv("USER") of
- false ->
- "test_user";
- User ->
- User
- end.
-
subject(SubjectOpts) when is_list(SubjectOpts) ->
Encode = fun(Opt) ->
{Type,Value} = subject_enc(Opt),
diff --git a/lib/inets/test/ftp_suite_lib.erl b/lib/inets/test/ftp_suite_lib.erl
index daee1bdcdc..b637832101 100644
--- a/lib/inets/test/ftp_suite_lib.erl
+++ b/lib/inets/test/ftp_suite_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2005-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2005-2015. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -1352,9 +1352,9 @@ do_delete(Pid, Config) ->
ok.
do_mkdir(Pid) ->
- {A, B, C} = erlang:now(),
- NewDir = "nisse_" ++ integer_to_list(A) ++ "_" ++
- integer_to_list(B) ++ "_" ++ integer_to_list(C),
+ NewDir = "earl_" ++
+ integer_to_list(inets_time_compat:unique_integer([positive])),
+
ok = ftp:cd(Pid, "incoming"),
{ok, CurrDir} = ftp:pwd(Pid),
{error, efnamena} = ftp:mkdir(Pid, NewDir++"\r\nCWD ."),
diff --git a/lib/inets/test/httpc_SUITE.erl b/lib/inets/test/httpc_SUITE.erl
index 4b1c6931d2..ab7ffadf75 100644
--- a/lib/inets/test/httpc_SUITE.erl
+++ b/lib/inets/test/httpc_SUITE.erl
@@ -28,6 +28,7 @@
-include_lib("common_test/include/ct.hrl").
-include("inets_test_lib.hrl").
-include("http_internal.hrl").
+-include("httpc_internal.hrl").
%% Note: This directive should only be used in test suites.
-compile(export_all).
@@ -106,6 +107,7 @@ only_simulated() ->
empty_response_header,
remote_socket_close,
remote_socket_close_async,
+ process_leak_on_keepalive,
transfer_encoding,
transfer_encoding_identity,
redirect_loop,
@@ -913,6 +915,33 @@ remote_socket_close_async(Config) when is_list(Config) ->
%%-------------------------------------------------------------------------
+process_leak_on_keepalive(Config) ->
+ {ok, ClosedSocket} = gen_tcp:listen(6666, [{active, false}]),
+ ok = gen_tcp:close(ClosedSocket),
+ Request = {url(group_name(Config), "/dummy.html", Config), []},
+ HttpcHandlers0 = supervisor:which_children(httpc_handler_sup),
+ {ok, {{_, 200, _}, _, Body}} = httpc:request(get, Request, [], []),
+ HttpcHandlers1 = supervisor:which_children(httpc_handler_sup),
+ ChildrenCount = supervisor:count_children(httpc_handler_sup),
+ %% Assuming that the new handler will be selected for keep_alive
+ %% which could not be the case if other handlers existed
+ [{undefined, Pid, worker, [httpc_handler]}] =
+ ordsets:to_list(
+ ordsets:subtract(ordsets:from_list(HttpcHandlers1),
+ ordsets:from_list(HttpcHandlers0))),
+ sys:replace_state(
+ Pid, fun (State) ->
+ Session = element(3, State),
+ setelement(3, State, Session#session{socket=ClosedSocket})
+ end),
+ {ok, {{_, 200, _}, _, Body}} = httpc:request(get, Request, [], []),
+ %% bad handler with the closed socket should get replaced by
+ %% the new one, so children count should stay the same
+ ChildrenCount = supervisor:count_children(httpc_handler_sup),
+ ok.
+
+%%-------------------------------------------------------------------------
+
stream_to_pid(Config) when is_list(Config) ->
ReceiverPid = create_receiver(pid),
Receiver = ReceiverPid,
@@ -1909,12 +1938,13 @@ run_clients(NumClients, ServerPort, SeqNumServer) ->
wait4clients([], _Timeout) ->
ok;
wait4clients(Clients, Timeout) when Timeout > 0 ->
- Time = now_ms(),
+ Time = inets_time_compat:monotonic_time(),
+
receive
{'DOWN', _MRef, process, Pid, normal} ->
{value, {Id, _, _}} = lists:keysearch(Pid, 2, Clients),
NewClients = lists:keydelete(Id, 1, Clients),
- wait4clients(NewClients, Timeout - (now_ms() - Time));
+ wait4clients(NewClients, Timeout - inets_lib:millisec_passed(Time));
{'DOWN', _MRef, process, Pid, Reason} ->
{value, {Id, _, _}} = lists:keysearch(Pid, 2, Clients),
ct:fail({bad_client_termination, Id, Reason})
@@ -2007,14 +2037,10 @@ parse_connection_type(Request) ->
"keep-alive" -> keep_alive
end.
-%% Time in milli seconds
-now_ms() ->
- {A,B,C} = erlang:now(),
- A*1000000000+B*1000+(C div 1000).
-
set_random_seed() ->
- {_, _, Micros} = now(),
- A = erlang:phash2([make_ref(), self(), Micros]),
+ Unique = inets_time_compat:unique_integer(),
+
+ A = erlang:phash2([make_ref(), self(), Unique]),
random:seed(A, A, A).
diff --git a/lib/inets/test/httpd_SUITE.erl b/lib/inets/test/httpd_SUITE.erl
index 1457f735ad..854ffa8981 100644
--- a/lib/inets/test/httpd_SUITE.erl
+++ b/lib/inets/test/httpd_SUITE.erl
@@ -68,7 +68,8 @@ all() ->
{group, http_security},
{group, https_security},
{group, http_reload},
- {group, https_reload}
+ {group, https_reload},
+ {group, http_mime_types}
].
groups() ->
@@ -93,1276 +94,9 @@ groups() ->
{https_security, [], [{group, security}]},
{http_reload, [], [{group, reload}]},
{https_reload, [], [{group, reload}]},
- {limit, [], [max_clients_1_1, max_clients_1_0, max_clients_0_9]},
+ {http_mime_types, [], [alias_1_1, alias_1_0, alias_0_9]},
+ {limit, [], [max_clients_1_1, max_clients_1_0, max_clients_0_9]},
{custom, [], [customize]},
- {reload, [], [non_disturbing_reconfiger_dies,
- disturbing_reconfiger_dies,
- non_disturbing_1_1,
- non_disturbing_1_0,
- non_disturbing_0_9,
- disturbing_1_1,
- disturbing_1_0,
- disturbing_0_9
- ]},
- {basic_auth, [], [basic_auth_1_1, basic_auth_1_0, basic_auth_0_9]},
- {auth_api, [], [auth_api_1_1, auth_api_1_0, auth_api_0_9
- ]},
- {auth_api_dets, [], [auth_api_1_1, auth_api_1_0, auth_api_0_9
- ]},
- {auth_api_mnesia, [], [auth_api_1_1, auth_api_1_0, auth_api_0_9
- ]},
- {htaccess, [], [htaccess_1_1, htaccess_1_0, htaccess_0_9]},
- {security, [], [security_1_1, security_1_0]}, %% Skip 0.9 as causes timing issus in test code
- {http_1_1, [], [host, chunked, expect, cgi, cgi_chunked_encoding_test,
- trace, range, if_modified_since] ++ http_head() ++ http_get() ++ load()},
- {http_1_0, [], [host, cgi, trace] ++ http_head() ++ http_get() ++ load()},
- {http_0_9, [], http_head() ++ http_get() ++ load()}
- ].
-
-basic_groups ()->
- [{group, http_1_1},
- {group, http_1_0},
- {group, http_0_9}
- ].
-
-http_head() ->
- [head].
-http_get() ->
- [alias,
- get,
- %%actions, Add configuration so that this test mod_action
- esi,
- ssi,
- content_length,
- bad_hex,
- missing_CR,
- max_header,
- max_content_length,
- ipv6
- ].
-
-load() ->
- [light, medium
- %%,heavy
- ].
-
-init_per_suite(Config) ->
- PrivDir = ?config(priv_dir, Config),
- DataDir = ?config(data_dir, Config),
- inets_test_lib:stop_apps([inets]),
- ServerRoot = filename:join(PrivDir, "server_root"),
- inets_test_lib:del_dirs(ServerRoot),
- DocRoot = filename:join(ServerRoot, "htdocs"),
- setup_server_dirs(ServerRoot, DocRoot, DataDir),
- {ok, Hostname0} = inet:gethostname(),
- Inet =
- case (catch ct:get_config(ipv6_hosts)) of
- undefined ->
- inet;
- Hosts when is_list(Hosts) ->
- case lists:member(list_to_atom(Hostname0), Hosts) of
- true ->
- inet6;
- false ->
- inet
- end;
- _ ->
- inet
- end,
- [{server_root, ServerRoot},
- {doc_root, DocRoot},
- {ipfamily, Inet},
- {node, node()},
- {host, inets_test_lib:hostname()},
- {address, getaddr()} | Config].
-
-end_per_suite(_Config) ->
- ok.
-
-%%--------------------------------------------------------------------
-init_per_group(Group, Config0) when Group == https_basic;
- Group == https_limit;
- Group == https_custom;
- Group == https_basic_auth;
- Group == https_auth_api;
- Group == https_auth_api_dets;
- Group == https_auth_api_mnesia;
- Group == https_security;
- Group == https_reload
- ->
- init_ssl(Group, Config0);
-init_per_group(Group, Config0) when Group == http_basic;
- Group == http_limit;
- Group == http_custom;
- Group == http_basic_auth;
- Group == http_auth_api;
- Group == http_auth_api_dets;
- Group == http_auth_api_mnesia;
- Group == http_security;
- Group == http_reload
- ->
- ok = start_apps(Group),
- init_httpd(Group, [{type, ip_comm} | Config0]);
-init_per_group(http_1_1, Config) ->
- [{http_version, "HTTP/1.1"} | Config];
-init_per_group(http_1_0, Config) ->
- [{http_version, "HTTP/1.0"} | Config];
-init_per_group(http_0_9, Config) ->
- case {os:type(), os:version()} of
- {{win32, _}, {5,1,2600}} ->
- {skip, "eaddrinuse XP problem"};
- _ ->
- [{http_version, "HTTP/0.9"} | Config]
- end;
-init_per_group(http_htaccess = Group, Config) ->
- Path = ?config(doc_root, Config),
- catch remove_htaccess(Path),
- create_htaccess_data(Path, ?config(address, Config)),
- ok = start_apps(Group),
- init_httpd(Group, [{type, ip_comm} | Config]);
-init_per_group(https_htaccess = Group, Config) ->
- Path = ?config(doc_root, Config),
- catch remove_htaccess(Path),
- create_htaccess_data(Path, ?config(address, Config)),
- init_ssl(Group, Config);
-init_per_group(auth_api, Config) ->
- [{auth_prefix, ""} | Config];
-init_per_group(auth_api_dets, Config) ->
- [{auth_prefix, "dets_"} | Config];
-init_per_group(auth_api_mnesia, Config) ->
- start_mnesia(?config(node, Config)),
- [{auth_prefix, "mnesia_"} | Config];
-init_per_group(_, Config) ->
- Config.
-
-end_per_group(Group, _Config) when Group == http_basic;
- Group == http_limit;
- Group == http_basic_auth;
- Group == http_auth_api;
- Group == http_auth_api_dets;
- Group == http_auth_api_mnesia;
- Group == http_htaccess;
- Group == http_security;
- Group == http_reload
- ->
- inets:stop();
-end_per_group(Group, _Config) when Group == https_basic;
- Group == https_limit;
- Group == https_basic_auth;
- Group == https_auth_api;
- Group == https_auth_api_dets;
- Group == https_auth_api_mnesia;
- Group == https_htaccess;
- Group == https_security;
- Group == https_reload
- ->
- ssl:stop(),
- inets:stop();
-
-end_per_group(auth_api_mnesia, _) ->
- cleanup_mnesia();
-
-end_per_group(_, _) ->
- ok.
-
-%%--------------------------------------------------------------------
-init_per_testcase(Case, Config) when Case == host; Case == trace ->
- Prop = ?config(tc_group_properties, Config),
- Name = proplists:get_value(name, Prop),
- Cb = case Name of
- http_1_0 ->
- httpd_1_0;
- http_1_1 ->
- httpd_1_1
- end,
- [{version_cb, Cb} | proplists:delete(version_cb, Config)];
-
-init_per_testcase(range, Config) ->
- DocRoot = ?config(doc_root, Config),
- create_range_data(DocRoot),
- Config;
-
-init_per_testcase(_, Config) ->
- Config.
-
-end_per_testcase(_Case, _Config) ->
- ok.
-
-%%-------------------------------------------------------------------------
-%% Test cases starts here.
-%%-------------------------------------------------------------------------
-
-head() ->
- [{doc, "HTTP HEAD request for static page"}].
-
-head(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config), ?config(node, Config),
- http_request("HEAD /index.html ", Version, Host),
- [{statuscode, head_status(Version)},
- {version, Version}]).
-
-get() ->
- [{doc, "HTTP GET request for static page"}].
-
-get(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config),
- transport_opts(Type, Config),
- ?config(node, Config),
- http_request("GET /index.html ", Version, Host),
- [{statuscode, 200},
- {header, "Content-Type", "text/html"},
- {header, "Date"},
- {header, "Server"},
- {version, Version}]).
-
-basic_auth_1_1(Config) when is_list(Config) ->
- basic_auth([{http_version, "HTTP/1.1"} | Config]).
-
-basic_auth_1_0(Config) when is_list(Config) ->
- basic_auth([{http_version, "HTTP/1.0"} | Config]).
-
-basic_auth_0_9(Config) when is_list(Config) ->
- basic_auth([{http_version, "HTTP/0.9"} | Config]).
-
-basic_auth() ->
- [{doc, "Test Basic authentication with WWW-Authenticate header"}].
-
-basic_auth(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- basic_auth_requiered(Config),
- %% Authentication OK! ["one:OnePassword" user first in user list]
- ok = auth_status(auth_request("/open/dummy.html", "one", "onePassword", Version, Host), Config,
- [{statuscode, 200}]),
- %% Authentication OK and a directory listing is supplied!
- %% ["Aladdin:open sesame" user second in user list]
- ok = auth_status(auth_request("/open/", "Aladdin", "AladdinPassword", Version, Host), Config,
- [{statuscode, 200}]),
- %% User correct but wrong password! ["one:one" user first in user list]
- ok = auth_status(auth_request("/open/dummy.html", "one", "one", Version, Host), Config,
- [{statuscode, 401},
- {header, "WWW-Authenticate"}]),
- %% Make sure Authenticate header is received even the second time
- %% we try a incorrect password! Otherwise a browser client will hang!
- ok = auth_status(auth_request("/open/dummy.html", "one", "one", Version, Host), Config,
- [{statuscode, 401},
- {header, "WWW-Authenticate"}]),
- %% Neither user or password correct! ["dummy:dummy"]
- ok = auth_status(auth_request("/open/dummy.html", "dummy", "dummy", Version, Host), Config,
- [{statuscode, 401}]),
- %% Nested secret/top_secret OK! ["Aladdin:open sesame"]
- ok = http_status(auth_request("/secret/top_secret/", "Aladdin", "AladdinPassword", Version, Host),
- Config, [{statuscode, 200}]),
- %% Authentication still required!
- basic_auth_requiered(Config).
-
-auth_api_1_1(Config) when is_list(Config) ->
- auth_api([{http_version, "HTTP/1.1"} | Config]).
-
-auth_api_1_0(Config) when is_list(Config) ->
- auth_api([{http_version, "HTTP/1.0"} | Config]).
-
-auth_api_0_9(Config) when is_list(Config) ->
- auth_api([{http_version, "HTTP/0.9"} | Config]).
-
-auth_api() ->
- [{doc, "Test mod_auth API"}].
-
-auth_api(Config) when is_list(Config) ->
- Prefix = ?config(auth_prefix, Config),
- do_auth_api(Prefix, Config).
-
-do_auth_api(AuthPrefix, Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Node = ?config(node, Config),
- ServerRoot = ?config(server_root, Config),
- ok = http_status("GET / ", Config,
- [{statuscode, 200}]),
- ok = auth_status(auth_request("/", "one", "WrongPassword", Version, Host), Config,
- [{statuscode, 200}]),
-
- %% Make sure Authenticate header is received even the second time
- %% we try a incorrect password! Otherwise a browser client will hang!
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "open/",
- "dummy", "WrongPassword", Version, Host), Config,
- [{statuscode, 401},
- {header, "WWW-Authenticate"}]),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "open/", "dummy", "WrongPassword",
- Version, Host), Config, [{statuscode, 401},
- {header, "WWW-Authenticate"}]),
-
- %% Change the password to DummyPassword then try to add a user
- %% Get an error and set it to NoPassword
- ok = update_password(Node, ServerRoot, Host, Port, AuthPrefix,
- "open", "NoPassword", "DummyPassword"),
- {error,bad_password} =
- add_user(Node, ServerRoot, Port, AuthPrefix, "open", "one",
- "onePassword", []),
- ok = update_password(Node, ServerRoot, Host, Port, AuthPrefix, "open",
- "DummyPassword", "NoPassword"),
-
- %% Test /*open, require user one Aladdin
- remove_users(Node, ServerRoot, Host, Port, AuthPrefix, "open"),
-
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "open/",
- "one", "onePassword", Version, Host), Config,
- [{statuscode, 401}]),
-
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "open/",
- "two", "twoPassword", Version, Host), Config,
- [{statuscode, 401}]),
-
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "open/",
- "Aladdin", "onePassword", Version, Host),
- Config, [{statuscode, 401}]),
-
- true = add_user(Node, ServerRoot, Port, AuthPrefix, "open", "one",
- "onePassword", []),
- true = add_user(Node, ServerRoot, Port, AuthPrefix, "open", "two",
- "twoPassword", []),
- true = add_user(Node, ServerRoot, Port, AuthPrefix, "open", "Aladdin",
- "AladdinPassword", []),
- {ok, [_|_]} = list_users(Node, ServerRoot, Host, Port,
- AuthPrefix, "open"),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "open/",
- "one", "WrongPassword", Version, Host),
- Config, [{statuscode, 401}]),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "open/",
- "one", "onePassword", Version, Host),
- Config, [{statuscode, 200}]),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "open/",
- "two", "twoPassword", Version, Host),
- Config,[{statuscode, 401}]),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "open/",
- "Aladdin", "WrongPassword", Version, Host),
- Config,[{statuscode, 401}]),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "open/",
- "Aladdin", "AladdinPassword", Version, Host),
- Config, [{statuscode, 200}]),
-
- remove_users(Node, ServerRoot, Host, Port, AuthPrefix, "open"),
- {ok, []} = list_users(Node, ServerRoot, Host, Port,
- AuthPrefix, "open"),
-
- %% Phase 2
- remove_users(Node, ServerRoot, Host, Port, AuthPrefix, "secret"),
- {ok, []} = list_users(Node, ServerRoot, Host, Port, AuthPrefix,
- "secret"),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "secret/",
- "one", "onePassword", Version, Host),
- Config, [{statuscode, 401}]),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "secret/",
- "two", "twoPassword", Version, Host),
- Config, [{statuscode, 401}]),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "secret/",
- "three", "threePassword", Version, Host),
- Config, [{statuscode, 401}]),
- add_user(Node, ServerRoot, Port, AuthPrefix, "secret", "one",
- "onePassword",
- []),
- add_user(Node, ServerRoot, Port, AuthPrefix, "secret",
- "two", "twoPassword", []),
- add_user(Node, ServerRoot, Port, AuthPrefix, "secret", "Aladdin",
- "AladdinPassword",[]),
- add_group_member(Node, ServerRoot, Port, AuthPrefix, "secret",
- "one", "group1"),
- add_group_member(Node, ServerRoot, Port, AuthPrefix, "secret",
- "two", "group1"),
- add_group_member(Node, ServerRoot, Port, AuthPrefix,
- "secret", "Aladdin", "group2"),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "secret/",
- "one", "onePassword", Version, Host),
- Config, [{statuscode, 200}]),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "secret/",
- "two", "twoPassword", Version, Host),
- Config,[{statuscode, 200}]),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "secret/",
- "Aladdin", "AladdinPassword", Version, Host),
- Config, [{statuscode, 200}]),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++ "secret/",
- "three", "threePassword", Version, Host),
- Config, [{statuscode, 401}]),
- remove_users(Node, ServerRoot, Host, Port, AuthPrefix, "secret"),
- {ok, []} = list_users(Node, ServerRoot, Host, Port,
- AuthPrefix, "secret"),
- remove_groups(Node, ServerRoot, Host, Port, AuthPrefix, "secret"),
-
- {ok, []} = list_groups(Node, ServerRoot, Host, Port, AuthPrefix, "secret"),
-
- %% Phase 3
- remove_users(Node, ServerRoot, Host, Port, AuthPrefix, "secret/top_secret"),
- remove_groups(Node, ServerRoot, Host, Port, AuthPrefix, "secret/top_secret"),
-
- ok = auth_status(auth_request("/" ++ AuthPrefix ++
- "secret/top_secret/",
- "three", "threePassword", Version, Host),
- Config, [{statuscode, 401}]),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++
- "secret/top_secret/", "two", "twoPassword", Version, Host),
- Config, [{statuscode, 401}]),
- add_user(Node, ServerRoot, Port, AuthPrefix,
- "secret/top_secret","three",
- "threePassword",[]),
- add_user(Node, ServerRoot, Port, AuthPrefix, "secret/top_secret",
- "two","twoPassword", []),
- add_group_member(Node, ServerRoot, Port, AuthPrefix, "secret/top_secret", "three", "group3"),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++
- "secret/top_secret/", "three", "threePassword",
- Version, Host),
- Config, [{statuscode, 200}]),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++
- "secret/top_secret/", "two", "twoPassword", Version, Host),
- Config, [{statuscode, 401}]),
- add_group_member(Node, ServerRoot, Port, AuthPrefix, "secret/top_secret", "two", "group3"),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++
- "secret/top_secret/",
- "two", "twoPassword", Version, Host),
- Config, [{statuscode, 200}]),
- remove_users(Node, ServerRoot, Host, Port, AuthPrefix, "secret/top_secret"),
- {ok, []} = list_users(Node, ServerRoot, Host, Port,
- AuthPrefix, "secret/top_secret"),
- remove_groups(Node, ServerRoot, Host, Port, AuthPrefix, "secret/top_secret"),
- {ok, []} = list_groups(Node, ServerRoot, Host, Port, AuthPrefix, "secret/top_secret"),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++
- "secret/top_secret/", "two", "twoPassword", Version, Host),
- Config, [{statuscode, 401}]),
- ok = auth_status(auth_request("/" ++ AuthPrefix ++
- "secret/top_secret/","three", "threePassword", Version, Host),
- Config, [{statuscde, 401}]).
-%%-------------------------------------------------------------------------
-ipv6() ->
- [{require, ipv6_hosts},
- {doc,"Test ipv6."}].
-ipv6(Config) when is_list(Config) ->
- {ok, Hostname0} = inet:gethostname(),
- case lists:member(list_to_atom(Hostname0), ct:get_config(ipv6_hosts)) of
- true ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- URI = http_request("GET / ", Version, Host),
- httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config), [inet6],
- ?config(code, Config),
- URI,
- [{statuscode, 200}, {version, Version}]);
- false ->
- {skip, "Host does not support IPv6"}
- end.
-
-%%-------------------------------------------------------------------------
-ssi() ->
- [{doc, "HTTP GET server side include test"}].
-ssi(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host, ?config(port, Config),
- transport_opts(Type, Config),
- ?config(node, Config),
- http_request("GET /fsize.shtml ", Version, Host),
- [{statuscode, 200},
- {header, "Content-Type", "text/html"},
- {header, "Date"},
- {header, "Server"},
- {version, Version}]).
-%%-------------------------------------------------------------------------
-htaccess_1_1(Config) when is_list(Config) ->
- htaccess([{http_version, "HTTP/1.1"} | Config]).
-
-htaccess_1_0(Config) when is_list(Config) ->
- htaccess([{http_version, "HTTP/1.0"} | Config]).
-
-htaccess_0_9(Config) when is_list(Config) ->
- htaccess([{http_version, "HTTP/0.9"} | Config]).
-
-htaccess() ->
- [{doc, "Test mod_auth API"}].
-
-htaccess(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- Port = ?config(port, Config),
- Node = ?config(node, Config),
- %% Control that authentication required!
- %% Control that the pages that shall be
- %% authenticated really need authenticatin
- ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
- http_request("GET /ht/open/ ", Version, Host),
- [{statuscode, 401},
- {version, Version},
- {header, "WWW-Authenticate"}]),
- ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
- http_request("GET /ht/secret/ ", Version, Host),
- [{statuscode, 401},
- {version, Version},
- {header, "WWW-Authenticate"}]),
- ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
- http_request("GET /ht/secret/top_secret/ ",
- Version, Host),
- [{statuscode, 401},
- {version, Version},
- {header, "WWW-Authenticate"}]),
-
- %% Make sure Authenticate header is received even the second time
- %% we try a incorrect password! Otherwise a browser client will hang!
- ok = auth_status(auth_request("/ht/open/",
- "dummy", "WrongPassword", Version, Host), Config,
- [{statuscode, 401},
- {header, "WWW-Authenticate"}]),
- ok = auth_status(auth_request("/ht/open/",
- "dummy", "WrongPassword", Version, Host), Config,
- [{statuscode, 401},
- {header, "WWW-Authenticate"}]),
-
- %% Control that not just the first user in the list is valid
- %% Control the first user
- %% Authennticating ["one:OnePassword" user first in user list]
- ok = auth_status(auth_request("/ht/open/dummy.html", "one", "OnePassword",
- Version, Host), Config,
- [{statuscode, 200}]),
-
- %% Control the second user
- %% Authentication OK and a directory listing is supplied!
- %% ["Aladdin:open sesame" user second in user list]
- ok = auth_status(auth_request("/ht/open/","Aladdin",
- "AladdinPassword", Version, Host), Config,
- [{statuscode, 200}]),
-
- %% Contro that bad passwords and userids get a good denial
- %% User correct but wrong password! ["one:one" user first in user list]
- ok = auth_status(auth_request("/ht/open/", "one", "one", Version, Host), Config,
- [{statuscode, 401}]),
- %% Neither user or password correct! ["dummy:dummy"]
- ok = auth_status(auth_request("/ht/open/", "dummy", "dummy", Version, Host), Config,
- [{statuscode, 401}]),
-
- %% Control that authetication still works, even if its a member in a group
- %% Authentication OK! ["two:TwoPassword" user in first group]
- ok = auth_status(auth_request("/ht/secret/dummy.html", "two",
- "TwoPassword", Version, Host), Config,
- [{statuscode, 200}]),
-
- %% Authentication OK and a directory listing is supplied!
- %% ["three:ThreePassword" user in second group]
- ok = auth_status(auth_request("/ht/secret/", "three",
- "ThreePassword", Version, Host), Config,
- [{statuscode, 200}]),
-
- %% Deny users with bad passwords even if the user is a group member
- %% User correct but wrong password! ["two:two" user in first group]
- ok = auth_status(auth_request("/ht/secret/", "two", "two", Version, Host), Config,
- [{statuscode, 401}]),
- %% Neither user or password correct! ["dummy:dummy"]
- ok = auth_status(auth_request("/ht/secret/", "dummy", "dummy", Version, Host), Config,
- [{statuscode, 401}]),
-
- %% control that we deny the users that are in subnet above the allowed
- ok = auth_status(auth_request("/ht/blocknet/dummy.html", "four",
- "FourPassword", Version, Host), Config,
- [{statuscode, 403}]),
- %% Control that we only applies the rules to the right methods
- ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
- http_request("HEAD /ht/blocknet/dummy.html ", Version, Host),
- [{statuscode, head_status(Version)},
- {version, Version}]),
-
- %% Control that the rerquire directive can be overrideen
- ok = auth_status(auth_request("/ht/secret/top_secret/ ", "Aladdin", "AladdinPassword",
- Version, Host), Config,
- [{statuscode, 401}]),
-
- %% Authentication still required!
- ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
- http_request("GET /ht/open/ ", Version, Host),
- [{statuscode, 401},
- {version, Version},
- {header, "WWW-Authenticate"}]),
- ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
- http_request("GET /ht/secret/ ", Version, Host),
- [{statuscode, 401},
- {version, Version},
- {header, "WWW-Authenticate"}]),
- ok = httpd_test_lib:verify_request(Type, Host, Port, Node,
- http_request("GET /ht/secret/top_secret/ ", Version, Host),
- [{statuscode, 401},
- {version, Version},
- {header, "WWW-Authenticate"}]).
-
-%%-------------------------------------------------------------------------
-host() ->
- [{doc, "Test host header"}].
-
-host(Config) when is_list(Config) ->
- Cb = ?config(version_cb, Config),
- Cb:host(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config)).
-%%-------------------------------------------------------------------------
-chunked() ->
- [{doc, "Check that the server accepts chunked requests."}].
-
-chunked(Config) when is_list(Config) ->
- httpd_1_1:chunked(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config)).
-%%-------------------------------------------------------------------------
-expect() ->
- ["Check that the server handles request with the expect header "
- "field appropiate"].
-expect(Config) when is_list(Config) ->
- httpd_1_1:expect(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config)).
-%%-------------------------------------------------------------------------
-max_clients_1_1() ->
- [{doc, "Test max clients limit"}].
-
-max_clients_1_1(Config) when is_list(Config) ->
- do_max_clients([{http_version, "HTTP/1.1"} | Config]).
-
-max_clients_1_0() ->
- [{doc, "Test max clients limit"}].
-
-max_clients_1_0(Config) when is_list(Config) ->
- do_max_clients([{http_version, "HTTP/1.0"} | Config]).
-
-max_clients_0_9() ->
- [{doc, "Test max clients limit"}].
-
-max_clients_0_9(Config) when is_list(Config) ->
- do_max_clients([{http_version, "HTTP/0.9"} | Config]).
-%%-------------------------------------------------------------------------
-esi() ->
- [{doc, "Test mod_esi"}].
-
-esi(Config) when is_list(Config) ->
- ok = http_status("GET /eval?httpd_example:print(\"Hi!\") ",
- Config, [{statuscode, 200}]),
- ok = http_status("GET /eval?not_allowed:print(\"Hi!\") ",
- Config, [{statuscode, 403}]),
- ok = http_status("GET /eval?httpd_example:undef(\"Hi!\") ",
- Config, [{statuscode, 500}]),
- ok = http_status("GET /cgi-bin/erl/httpd_example ",
- Config, [{statuscode, 400}]),
- ok = http_status("GET /cgi-bin/erl/httpd_example:get ",
- Config, [{statuscode, 200}]),
- ok = http_status("GET /cgi-bin/erl/httpd_example:"
- "get?input=4711 ", Config,
- [{statuscode, 200}]),
- ok = http_status("GET /cgi-bin/erl/httpd_example:post ",
- Config, [{statuscode, 200}]),
- ok = http_status("GET /cgi-bin/erl/not_allowed:post ",
- Config, [{statuscode, 403}]),
- ok = http_status("GET /cgi-bin/erl/httpd_example:undef ",
- Config, [{statuscode, 404}]),
- ok = http_status("GET /cgi-bin/erl/httpd_example/yahoo ",
- Config, [{statuscode, 302}]),
- %% Check "ErlScriptNoCache" directive (default: false)
- ok = http_status("GET /cgi-bin/erl/httpd_example:get ",
- Config, [{statuscode, 200},
- {no_header, "cache-control"}]).
-%%-------------------------------------------------------------------------
-cgi() ->
- [{doc, "Test mod_cgi"}].
-
-cgi(Config) when is_list(Config) ->
- {Script, Script2, Script3} =
- case test_server:os_type() of
- {win32, _} ->
- {"printenv.bat", "printenv.sh", "cgi_echo.exe"};
- _ ->
- {"printenv.sh", "printenv.bat", "cgi_echo"}
- end,
-
- %%The length (> 100) is intentional
- ok = http_status("POST /cgi-bin/" ++ Script3 ++ " ",
- {"Content-Length:100 \r\n",
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
- "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"},
- Config,
- [{statuscode, 200},
- {header, "content-type", "text/plain"}]),
-
- ok = http_status("GET /cgi-bin/"++ Script ++ " ", Config, [{statuscode, 200}]),
-
- ok = http_status("GET /cgi-bin/not_there ", Config,
- [{statuscode, 404}, {statuscode, 500}]),
-
- ok = http_status("GET /cgi-bin/"++ Script ++ "?Nisse:kkk?sss/lll ",
- Config,
- [{statuscode, 200}]),
-
- ok = http_status("POST /cgi-bin/"++ Script ++ " ", Config,
- [{statuscode, 200}]),
-
- ok = http_status("GET /htbin/"++ Script ++ " ", Config,
- [{statuscode, 200}]),
-
- ok = http_status("GET /htbin/not_there ", Config,
- [{statuscode, 404},{statuscode, 500}]),
-
- ok = http_status("GET /htbin/"++ Script ++ "?Nisse:kkk?sss/lll ", Config,
- [{statuscode, 200}]),
-
- ok = http_status("POST /htbin/"++ Script ++ " ", Config,
- [{statuscode, 200}]),
-
- ok = http_status("POST /htbin/"++ Script ++ " ", Config,
- [{statuscode, 200}]),
-
- %% Execute an existing, but bad CGI script..
- ok = http_status("POST /htbin/"++ Script2 ++ " ", Config,
- [{statuscode, 404}]),
-
- ok = http_status("POST /cgi-bin/"++ Script2 ++ " ", Config,
- [{statuscode, 404}]),
-
- %% Check "ScriptNoCache" directive (default: false)
- ok = http_status("GET /cgi-bin/" ++ Script ++ " ", Config,
- [{statuscode, 200},
- {no_header, "cache-control"}]).
-%%-------------------------------------------------------------------------
-cgi_chunked_encoding_test() ->
- [{doc, "Test chunked encoding together with mod_cgi "}].
-cgi_chunked_encoding_test(Config) when is_list(Config) ->
- Host = ?config(host, Config),
- Script =
- case test_server:os_type() of
- {win32, _} ->
- "/cgi-bin/printenv.bat";
- _ ->
- "/cgi-bin/printenv.sh"
- end,
- Requests =
- ["GET " ++ Script ++ " HTTP/1.1\r\nHost:"++ Host ++"\r\n\r\n",
- "GET /cgi-bin/erl/httpd_example/newformat HTTP/1.1\r\nHost:"
- ++ Host ++"\r\n\r\n"],
- httpd_1_1:mod_cgi_chunked_encoding_test(?config(type, Config), ?config(port, Config),
- Host,
- ?config(node, Config),
- Requests).
-%%-------------------------------------------------------------------------
-alias() ->
- [{doc, "Test mod_alias"}].
-
-alias(Config) when is_list(Config) ->
- ok = http_status("GET /pics/icon.sheet.gif ", Config,
- [{statuscode, 200},
- {header, "Content-Type","image/gif"},
- {header, "Server"},
- {header, "Date"}]),
-
- ok = http_status("GET / ", Config,
- [{statuscode, 200},
- {header, "Content-Type","text/html"},
- {header, "Server"},
- {header, "Date"}]),
-
- ok = http_status("GET /misc/ ", Config,
- [{statuscode, 200},
- {header, "Content-Type","text/html"},
- {header, "Server"},
- {header, "Date"}]),
-
- %% Check redirection if trailing slash is missing.
- ok = http_status("GET /misc ", Config,
- [{statuscode, 301},
- {header, "Location"},
- {header, "Content-Type","text/html"}]).
-%%-------------------------------------------------------------------------
-actions() ->
- [{doc, "Test mod_actions"}].
-
-actions(Config) when is_list(Config) ->
- ok = http_status("GET /", Config, [{statuscode, 200}]).
-
-%%-------------------------------------------------------------------------
-range() ->
- [{doc, "Test Range header"}].
-
-range(Config) when is_list(Config) ->
- httpd_1_1:range(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config)).
-
-%%-------------------------------------------------------------------------
-if_modified_since() ->
- [{doc, "Test If-Modified-Since header"}].
-
-if_modified_since(Config) when is_list(Config) ->
- httpd_1_1:if_test(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config),
- ?config(doc_root, Config)).
-%%-------------------------------------------------------------------------
-trace() ->
- [{doc, "Test TRACE method"}].
-
-trace(Config) when is_list(Config) ->
- Cb = ?config(version_cb, Config),
- Cb:trace(?config(type, Config), ?config(port, Config),
- ?config(host, Config), ?config(node, Config)).
-
-%%-------------------------------------------------------------------------
-light() ->
- ["Test light load"].
-light(Config) when is_list(Config) ->
- httpd_load:load_test(?config(type, Config), ?config(port, Config), ?config(host, Config),
- ?config(node, Config), 10).
-%%-------------------------------------------------------------------------
-medium() ->
- ["Test medium load"].
-medium(Config) when is_list(Config) ->
- httpd_load:load_test(?config(type, Config), ?config(port, Config), ?config(host, Config),
- ?config(node, Config), 100).
-%%-------------------------------------------------------------------------
-heavy() ->
- ["Test heavy load"].
-heavy(Config) when is_list(Config) ->
- httpd_load:load_test(?config(type, Config), ?config(port, Config), ?config(host, Config),
- ?config(node, Config),
- 1000).
-%%-------------------------------------------------------------------------
-content_length() ->
- ["Tests that content-length is correct OTP-5775"].
-content_length(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config), ?config(node, Config),
- http_request("GET /cgi-bin/erl/httpd_example:get_bin ",
- Version, Host),
- [{statuscode, 200},
- {content_length, 274},
- {version, Version}]).
-%%-------------------------------------------------------------------------
-bad_hex() ->
- ["Tests that a URI with a bad hexadecimal code is handled OTP-6003"].
-bad_hex(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config), ?config(node, Config),
- http_request("GET http://www.erlang.org/%skalle ",
- Version, Host),
- [{statuscode, 400},
- {version, Version}]).
-%%-------------------------------------------------------------------------
-missing_CR() ->
- ["Tests missing CR in delimiter OTP-7304"].
-missing_CR(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config), ?config(node, Config),
- http_request_missing_CR("GET /index.html ", Version, Host),
- [{statuscode, 200},
- {version, Version}]).
-
-%%-------------------------------------------------------------------------
-customize() ->
- [{doc, "Test filtering of headers with custom callback"}].
-
-customize(Config) when is_list(Config) ->
- Version = "HTTP/1.1",
- Host = ?config(host, Config),
- Type = ?config(type, Config),
- ok = httpd_test_lib:verify_request(?config(type, Config), Host,
- ?config(port, Config),
- transport_opts(Type, Config),
- ?config(node, Config),
- http_request("GET /index.html ", Version, Host),
- [{statuscode, 200},
- {header, "Content-Type", "text/html"},
- {header, "Date"},
- {no_header, "Server"},
- {version, Version}]).
-
-response_header({"server", _}) ->
- false;
-response_header(Header) ->
- {true, Header}.
-
-%%-------------------------------------------------------------------------
-max_header() ->
- ["Denial Of Service (DOS) attack, prevented by max_header"].
-max_header(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- case Version of
- "HTTP/0.9" ->
- {skip, not_implemented};
- _ ->
- dos_hostname(?config(type, Config), ?config(port, Config), Host,
- ?config(node, Config), Version, ?MAX_HEADER_SIZE)
- end.
-
-%%-------------------------------------------------------------------------
-max_content_length() ->
- ["Denial Of Service (DOS) attack, prevented by max_content_length"].
-max_content_length(Config) when is_list(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- garbage_content_length(?config(type, Config), ?config(port, Config), Host,
- ?config(node, Config), Version).
-
-%%-------------------------------------------------------------------------
-security_1_1(Config) when is_list(Config) ->
- security([{http_version, "HTTP/1.1"} | Config]).
-
-security_1_0(Config) when is_list(Config) ->
- security([{http_version, "HTTP/1.0"} | Config]).
-
-security() ->
- ["Test mod_security"].
-security(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Node = ?config(node, Config),
- ServerRoot = ?config(server_root, Config),
-
- global:register_name(mod_security_test, self()), % Receive events
-
- test_server:sleep(5000),
-
- OpenDir = filename:join([ServerRoot, "htdocs", "open"]),
-
- %% Test blocking / unblocking of users.
-
- %% /open, require user one Aladdin
- remove_users(Node, ServerRoot, Host, Port, "", "open"),
-
- ok = auth_status(auth_request("/open/",
- "one", "onePassword", Version, Host), Config,
- [{statuscode, 401}]),
-
- receive_security_event({event, auth_fail, Port, OpenDir,
- [{user, "one"}, {password, "onePassword"}]},
- Node, Port),
-
- ok = auth_status(auth_request("/open/",
- "two", "twoPassword", Version, Host), Config,
- [{statuscode, 401}]),
-
- receive_security_event({event, auth_fail, Port, OpenDir,
- [{user, "two"}, {password, "twoPassword"}]},
- Node, Port),
-
- ok = auth_status(auth_request("/open/",
- "Aladdin", "AladdinPassword", Version, Host),
- Config, [{statuscode, 401}]),
-
- receive_security_event({event, auth_fail, Port, OpenDir,
- [{user, "Aladdin"},
- {password, "AladdinPassword"}]},
- Node, Port),
-
- add_user(Node, ServerRoot, Port, "", "open", "one", "onePassword", []),
- add_user(Node, ServerRoot, Port, "", "open", "two", "twoPassword", []),
-
- ok = auth_status(auth_request("/open/", "one", "WrongPassword", Version, Host), Config,
- [{statuscode, 401}]),
-
- receive_security_event({event, auth_fail, Port, OpenDir,
- [{user, "one"}, {password, "WrongPassword"}]},
- Node, Port),
-
- ok = auth_status(auth_request("/open/", "one", "WrongPassword", Version, Host), Config,
- [{statuscode, 401}]),
-
- receive_security_event({event, auth_fail, Port, OpenDir,
- [{user, "one"}, {password, "WrongPassword"}]},
- Node, Port),
- receive_security_event({event, user_block, Port, OpenDir,
- [{user, "one"}]}, Node, Port),
-
- global:unregister_name(mod_security_test), % No more events.
-
- ok = auth_status(auth_request("/open/", "one", "WrongPassword", Version, Host), Config,
- [{statuscode, 401}]),
-
- %% User "one" should be blocked now..
- case list_blocked_users(Node, Port) of
- [{"one",_, Port, OpenDir,_}] ->
- ok;
- Blocked ->
- ct:fail({unexpected_blocked, Blocked})
- end,
-
- [{"one",_, Port, OpenDir,_}] = list_blocked_users(Node, Port, OpenDir),
-
- true = unblock_user(Node, "one", Port, OpenDir),
- %% User "one" should not be blocked any more.
-
- [] = list_blocked_users(Node, Port),
-
- ok = auth_status(auth_request("/open/", "one", "onePassword", Version, Host), Config,
- [{statuscode, 200}]),
-
- %% Test list_auth_users & auth_timeout
-
- ["one"] = list_auth_users(Node, Port),
-
- ok = auth_status(auth_request("/open/", "two", "onePassword", Version, Host), Config,
- [{statuscode, 401}]),
-
- ["one"] = list_auth_users(Node, Port),
-
-
- ["one"] = list_auth_users(Node, Port, OpenDir),
-
-
- ok = auth_status(auth_request("/open/", "two", "twoPassword", Version, Host), Config,
- [{statuscode, 401}]),
-
- ["one"] = list_auth_users(Node, Port),
-
-
- ["one"] = list_auth_users(Node, Port, OpenDir),
-
- %% Wait for successful auth to timeout.
- test_server:sleep(?AUTH_TIMEOUT*1001),
-
- [] = list_auth_users(Node, Port),
-
- [] = list_auth_users(Node, Port, OpenDir),
-
- %% "two" is blocked.
-
- true = unblock_user(Node, "two", Port, OpenDir),
-
-
- %% Test explicit blocking. Block user 'two'.
-
- [] = list_blocked_users(Node,Port,OpenDir),
-
- true = block_user(Node, "two", Port, OpenDir, 10),
-
- ok = auth_status(auth_request("/open/", "two", "twoPassword", Version, Host), Config,
- [{statuscode, 401}]),
-
- true = unblock_user(Node, "two", Port, OpenDir).
-
-%%-------------------------------------------------------------------------
-non_disturbing_reconfiger_dies(Config) when is_list(Config) ->
- do_reconfiger_dies([{http_version, "HTTP/1.1"} | Config], non_disturbing).
-disturbing_reconfiger_dies(Config) when is_list(Config) ->
- do_reconfiger_dies([{http_version, "HTTP/1.1"} | Config], disturbing).
-
-do_reconfiger_dies(Config, DisturbingType) ->
- Server = ?config(server_pid, Config),
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Type = ?config(type, Config),
-
- HttpdConfig = httpd:info(Server),
- BlockRequest = http_request("GET /eval?httpd_example:delay(2000) ", Version, Host),
- {ok, Socket} = inets_test_lib:connect_bin(Type, Host, Port, transport_opts(Type, Config)),
- inets_test_lib:send(Type, Socket, BlockRequest),
- ct:sleep(100), %% Avoid possible timing issues
- Pid = spawn(fun() -> httpd:reload_config([{server_name, "httpd_kill_" ++ Version},
- {port, Port}|
- proplists:delete(server_name, HttpdConfig)], DisturbingType)
- end),
-
- monitor(process, Pid),
- exit(Pid, kill),
- receive
- {'DOWN', _, _, _, _} ->
- ok
- end,
- inets_test_lib:close(Type, Socket),
- [{server_name, "httpd_test"}] = httpd:info(Server, [server_name]).
-%%-------------------------------------------------------------------------
-disturbing_1_1(Config) when is_list(Config) ->
- disturbing([{http_version, "HTTP/1.1"} | Config]).
-
-disturbing_1_0(Config) when is_list(Config) ->
- disturbing([{http_version, "HTTP/1.0"} | Config]).
-
-disturbing_0_9(Config) when is_list(Config) ->
- disturbing([{http_version, "HTTP/0.9"} | Config]).
-
-disturbing(Config) when is_list(Config)->
- Server = ?config(server_pid, Config),
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Type = ?config(type, Config),
- HttpdConfig = httpd:info(Server),
- BlockRequest = http_request("GET /eval?httpd_example:delay(2000) ", Version, Host),
- {ok, Socket} = inets_test_lib:connect_bin(Type, Host, Port, transport_opts(Type, Config)),
- inets_test_lib:send(Type, Socket, BlockRequest),
- ct:sleep(100), %% Avoid possible timing issues
- ok = httpd:reload_config([{server_name, "httpd_disturbing_" ++ Version}, {port, Port}|
- proplists:delete(server_name, HttpdConfig)], disturbing),
- Close = list_to_atom((typestr(Type)) ++ "_closed"),
- receive
- {Close, Socket} ->
- ok;
- Msg ->
- ct:fail({{expected, {Close, Socket}}, {got, Msg}})
- end,
- inets_test_lib:close(Type, Socket),
- [{server_name, "httpd_disturbing_" ++ Version}] = httpd:info(Server, [server_name]).
-%%-------------------------------------------------------------------------
-non_disturbing_1_1(Config) when is_list(Config) ->
- non_disturbing([{http_version, "HTTP/1.1"} | Config]).
-
-non_disturbing_1_0(Config) when is_list(Config) ->
- non_disturbing([{http_version, "HTTP/1.0"} | Config]).
-
-non_disturbing_0_9(Config) when is_list(Config) ->
- non_disturbing([{http_version, "HTTP/0.9"} | Config]).
-
-non_disturbing(Config) when is_list(Config)->
- Server = ?config(server_pid, Config),
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Type = ?config(type, Config),
-
- HttpdConfig = httpd:info(Server),
- BlockRequest = http_request("GET /eval?httpd_example:delay(2000) ", Version, Host),
- {ok, Socket} = inets_test_lib:connect_bin(Type, Host, Port, transport_opts(Type, Config)),
- inets_test_lib:send(Type, Socket, BlockRequest),
- ct:sleep(100), %% Avoid possible timing issues
- ok = httpd:reload_config([{server_name, "httpd_non_disturbing_" ++ Version}, {port, Port}|
- proplists:delete(server_name, HttpdConfig)], non_disturbing),
- Transport = type(Type),
- receive
- {Transport, Socket, Msg} ->
- ct:pal("Received message ~p~n", [Msg]),
- ok
- after 2000 ->
- ct:fail(timeout)
- end,
- inets_test_lib:close(Type, Socket),
- [{server_name, "httpd_non_disturbing_" ++ Version}] = httpd:info(Server, [server_name]).
-
-
-%%--------------------------------------------------------------------
-%% Internal functions -----------------------------------
-%%--------------------------------------------------------------------
-url(http, End, Config) ->
- Port = ?config(port, Config),
- {ok,Host} = inet:gethostname(),
- ?URL_START ++ Host ++ ":" ++ integer_to_list(Port) ++ End.
-
-do_max_clients(Config) ->
- Version = ?config(http_version, Config),
- Host = ?config(host, Config),
- Port = ?config(port, Config),
- Type = ?config(type, Config),
-
- Request = http_request("GET /index.html ", Version, Host),
- BlockRequest = http_request("GET /eval?httpd_example:delay(2000) ", Version, Host),
- {ok, Socket} = inets_test_lib:connect_bin(Type, Host, Port, transport_opts(Type, Config)),
- inets_test_lib:send(Type, Socket, BlockRequest),
- ct:sleep(100), %% Avoid possible timing issues
- ok = httpd_test_lib:verify_request(Type, Host,
- Port,
- transport_opts(Type, Config),
- ?config(node, Config),
- Request,
- [{statuscode, 503},
- {version, Version}]),
- receive
- {_, Socket, _Msg} ->
- ok
- end,
- inets_test_lib:close(Type, Socket),
- ct:sleep(100), %% Avoid possible timing issues
- ok = httpd_test_lib:verify_request(Type, Host,
- Port,
- transport_opts(Type, Config),
- ?config(node, Config),
- Request,
- [{statuscode, 200},
- {version, Version}]).
-
-setup_server_dirs(ServerRoot, DocRoot, DataDir) ->
- CgiDir = filename:join(ServerRoot, "cgi-bin"),
- AuthDir = filename:join(ServerRoot, "auth"),
- PicsDir = filename:join(ServerRoot, "icons"),
-
- ok = file:make_dir(ServerRoot),
- ok = file:make_dir(DocRoot),
- ok = file:make_dir(CgiDir),
- ok = file:make_dir(AuthDir),
- ok = file:make_dir(PicsDir),
-
- DocSrc = filename:join(DataDir, "server_root/htdocs"),
- AuthSrc = filename:join(DataDir, "server_root/auth"),
- CgiSrc = filename:join(DataDir, "server_root/cgi-bin"),
- PicsSrc = filename:join(DataDir, "server_root/icons"),
-
- inets_test_lib:copy_dirs(DocSrc, DocRoot),
- inets_test_lib:copy_dirs(AuthSrc, AuthDir),
- inets_test_lib:copy_dirs(CgiSrc, CgiDir),
- inets_test_lib:copy_dirs(PicsSrc, PicsDir),
-
- Cgi = case test_server:os_type() of
- {win32, _} ->
- "cgi_echo.exe";
- _ ->
- "cgi_echo"
- end,
-
- inets_test_lib:copy_file(Cgi, DataDir, CgiDir),
- AbsCgi = filename:join([CgiDir, Cgi]),
- {ok, FileInfo} = file:read_file_info(AbsCgi),
- ok = file:write_file_info(AbsCgi, FileInfo#file_info{mode = 8#00755}),
-
- EnvCGI = filename:join([ServerRoot, "cgi-bin", "printenv.sh"]),
- {ok, FileInfo1} = file:read_file_info(EnvCGI),
- ok = file:write_file_info(EnvCGI,
- FileInfo1#file_info{mode = 8#00755}).
-
-start_apps(Group) when Group == https_basic;
- Group == https_limit;
- Group == https_custom;
- Group == https_basic_auth;
- Group == https_auth_api;
- Group == https_auth_api_dets;
- Group == https_auth_api_mnesia;
- Group == https_htaccess;
- Group == https_security;
- Group == https_reload
- ->
- inets_test_lib:start_apps([inets, asn1, crypto, public_key, ssl]);
-start_apps(Group) when Group == http_basic;
- Group == http_limit;
- Group == http_custom;
- Group == http_basic_auth;
- Group == http_auth_api;
- Group == http_auth_api_dets;
- Group == http_auth_api_mnesia;
- Group == http_htaccess;
- Group == http_security;
- Group == http_reload->
inets_test_lib:start_apps([inets]).
server_start(_, HttpdConfig) ->
@@ -1454,6 +188,11 @@ server_config(http_security, Config) ->
server_config(https_security, Config) ->
ServerRoot = ?config(server_root, Config),
tl(auth_conf(ServerRoot)) ++ security_conf(ServerRoot) ++ server_config(https, Config);
+server_config(http_mime_types, Config0) ->
+ Config1 = basic_conf() ++ server_config(http, Config0),
+ ServerRoot = ?config(server_root, Config0),
+ MimeTypesFile = filename:join([ServerRoot,"config", "mime.types"]),
+ [{mime_types, MimeTypesFile} | proplists:delete(mime_types, Config1)];
server_config(http, Config) ->
ServerRoot = ?config(server_root, Config),
diff --git a/lib/inets/test/httpd_SUITE_data/server_root/config/mime.types b/lib/inets/test/httpd_SUITE_data/server_root/config/mime.types
new file mode 100644
index 0000000000..b68cff21a6
--- /dev/null
+++ b/lib/inets/test/httpd_SUITE_data/server_root/config/mime.types
@@ -0,0 +1,4 @@
+text/html html
+text/html htm
+text/html shtml
+image/gif gif
diff --git a/lib/inets/test/httpd_time_test.erl b/lib/inets/test/httpd_time_test.erl
index 0bb457f9b9..7dd61a5517 100644
--- a/lib/inets/test/httpd_time_test.erl
+++ b/lib/inets/test/httpd_time_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2015. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -116,13 +116,14 @@ main(N, SocketType, Host, Port, Time)
loop(Pollers, Timeout) ->
d("loop -> entry when"
"~n Timeout: ~p", [Timeout]),
- Start = t(),
+ Start = inets_time_compat:monotonic_time(),
+
receive
{'EXIT', Pid, {poller_stat_failure, SocketType, Host, Port, Time, Reason}} ->
case is_poller(Pid, Pollers) of
true ->
error_msg("received unexpected exit from poller ~p~n"
- "befor completion of test "
+ "before completion of test "
"after ~p micro sec"
"~n SocketType: ~p"
"~n Host: ~p"
@@ -133,7 +134,7 @@ loop(Pollers, Timeout) ->
false ->
error_msg("received unexpected ~p from ~p"
"befor completion of test", [Reason, Pid]),
- loop(Pollers, to(Timeout, Start))
+ loop(Pollers, Timeout - inets_lib:millisec_passed(Start))
end;
{poller_stat_failure, Pid, {SocketType, Host, Port, Time, Reason}} ->
@@ -412,35 +413,6 @@ validate(ExpStatusCode, _SocketType, _Socket, Response) ->
end.
-trash_the_rest(Socket, N) ->
- receive
- {ssl, Socket, Trash} ->
- trash_the_rest(Socket, add(N,sz(Trash)));
- {ssl_closed, Socket} ->
- N;
- {ssl_error, Socket, Error} ->
- exit({connection_error, Error});
-
- {tcp, Socket, Trash} ->
- trash_the_rest(Socket, add(N,sz(Trash)));
- {tcp_closed, Socket} ->
- N;
- {tcp_error, Socket, Error} ->
- exit({connection_error, Error})
-
- after 10000 ->
- exit({connection_timed_out, N})
- end.
-
-
-add(N1,N2) when is_integer(N1) andalso is_integer(N2) ->
- N1 + N2;
-add(N1,_) when is_integer(N1) ->
- N1;
-add(_,N2) when is_integer(N2) ->
- N2.
-
-
sz(L) when is_list(L) ->
length(lists:flatten(L));
sz(B) when is_binary(B) ->
@@ -505,17 +477,6 @@ status_to_message(Code) -> io_lib:format("Unknown status code: ~p",[Code]).
%% ----------------------------------------------------------------
-to(To, Start) ->
- To - (t() - Start).
-
-%% Time in milli seconds
-t() ->
- {A,B,C} = erlang:now(),
- A*1000000000+B*1000+(C div 1000).
-
-
-%% ----------------------------------------------------------------
-
% close(Socket) ->
diff --git a/lib/inets/test/inets_SUITE.erl b/lib/inets/test/inets_SUITE.erl
index 6510c70d08..a07dc79c02 100644
--- a/lib/inets/test/inets_SUITE.erl
+++ b/lib/inets/test/inets_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2015. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -549,25 +549,12 @@ tsf(Reason) ->
tsp(F) ->
tsp(F, []).
tsp(F, A) ->
- Timestamp = formated_timestamp(),
+ Timestamp = inets_lib:formated_timestamp(),
test_server:format("** ~s ** ~p ~p:" ++ F ++ "~n", [Timestamp, self(), ?MODULE | A]).
i(F) ->
i(F, []).
i(F, A) ->
- Timestamp = formated_timestamp(),
+ Timestamp = inets_lib:formated_timestamp(),
io:format("*** ~s ~w:" ++ F ++ "~n", [Timestamp, ?MODULE | A]).
-
-formated_timestamp() ->
- format_timestamp( os:timestamp() ).
-
-format_timestamp({_N1, _N2, N3} = Now) ->
- {Date, Time} = calendar:now_to_datetime(Now),
- {YYYY,MM,DD} = Date,
- {Hour,Min,Sec} = Time,
- FormatDate =
- io_lib:format("~.4w:~.2.0w:~.2.0w ~.2.0w:~.2.0w:~.2.0w 4~w",
- [YYYY,MM,DD,Hour,Min,Sec,round(N3/1000)]),
- lists:flatten(FormatDate).
-
diff --git a/lib/inets/test/inets_app_test.erl b/lib/inets/test/inets_app_test.erl
index eabfa69f7c..22d6e25c87 100644
--- a/lib/inets/test/inets_app_test.erl
+++ b/lib/inets/test/inets_app_test.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2002-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2002-2015. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -32,19 +32,6 @@
%% Test server callbacks
-init_per_testcase(undef_funcs, Config) ->
- NewConfig = lists:keydelete(watchdog, 1, Config),
- Dog = test_server:timetrap(inets_test_lib:minutes(10)),
-
- %% We need to check if there is a point to run this test.
- %% On some platforms, crypto will not build, which in turn
- %% causes ssl to not build (at this time, this will
- %% change in the future).
- %% So, we first check if we can start crypto, and if not,
- %% we skip this test case!
- ?ENSURE_STARTED(crypto),
-
- [{watchdog, Dog}| NewConfig];
init_per_testcase(_, Config) ->
Config.
@@ -54,7 +41,7 @@ end_per_testcase(_Case, Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
all() ->
- [fields, modules, exportall, app_depend, undef_funcs].
+ [fields, modules, exportall, app_depend].
groups() ->
[].
@@ -244,56 +231,6 @@ check_apps([App|Apps]) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-undef_funcs(suite) ->
- [];
-undef_funcs(doc) ->
- [];
-undef_funcs(Config) when is_list(Config) ->
- App = inets,
- AppFile = key1search(app_file, Config),
- Mods = key1search(modules, AppFile),
- Root = code:root_dir(),
- LibDir = code:lib_dir(App),
- EbinDir = filename:join([LibDir,"ebin"]),
- XRefTestName = undef_funcs_make_name(App, xref_test_name),
- {ok, XRef} = xref:start(XRefTestName),
- ok = xref:set_default(XRef,
- [{verbose,false},{warnings,false}]),
- XRefName = undef_funcs_make_name(App, xref_name),
- {ok, XRefName} = xref:add_release(XRef, Root, {name, XRefName}),
- {ok, App} = xref:replace_application(XRef, App, EbinDir),
- {ok, Undefs} = xref:analyze(XRef, undefined_function_calls),
- xref:stop(XRef),
- analyze_undefined_function_calls(Undefs, Mods, []).
-
-analyze_undefined_function_calls([], _, []) ->
- ok;
-analyze_undefined_function_calls([], _, AppUndefs) ->
- exit({suite_failed, {undefined_function_calls, AppUndefs}});
-analyze_undefined_function_calls([{{Mod, _F, _A}, _C} = AppUndef|Undefs],
- AppModules, AppUndefs) ->
- %% Check that this module is our's
- case lists:member(Mod,AppModules) of
- true ->
- {Calling,Called} = AppUndef,
- {Mod1,Func1,Ar1} = Calling,
- {Mod2,Func2,Ar2} = Called,
- io:format("undefined function call: "
- "~n ~w:~w/~w calls ~w:~w/~w~n",
- [Mod1,Func1,Ar1,Mod2,Func2,Ar2]),
- analyze_undefined_function_calls(Undefs, AppModules,
- [AppUndef|AppUndefs]);
- false ->
- io:format("dropping ~p~n", [Mod]),
- analyze_undefined_function_calls(Undefs, AppModules, AppUndefs)
- end.
-
-%% This function is used simply to avoid cut-and-paste errors later...
-undef_funcs_make_name(App, PostFix) ->
- list_to_atom(atom_to_list(App) ++ "_" ++ atom_to_list(PostFix)).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
fail(Reason) ->
exit({suite_failed, Reason}).
diff --git a/lib/inets/test/inets_test_lib.erl b/lib/inets/test/inets_test_lib.erl
index 4be9d9c8b3..7485971d3e 100644
--- a/lib/inets/test/inets_test_lib.erl
+++ b/lib/inets/test/inets_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2015. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -498,13 +498,6 @@ close(essl,Socket) ->
close(ip_comm,Socket) ->
catch gen_tcp:close(Socket).
-millis() ->
- erlang:now().
-
-millis_diff(A,B) ->
- T1 = (element(1,A)*1000000) + element(2,A) + (element(3,A)/1000000),
- T2 = (element(1,B)*1000000) + element(2,B) + (element(3,B)/1000000),
- T1 - T2.
hours(N) -> trunc(N * 1000 * 60 * 60).
minutes(N) -> trunc(N * 1000 * 60).
@@ -546,7 +539,7 @@ flush() ->
tsp(F) ->
tsp(F, []).
tsp(F, A) ->
- Timestamp = formated_timestamp(),
+ Timestamp = inets_lib:formated_timestamp(),
ct:pal("*** ~s ~p ~p " ++ F ++ "~n",
[Timestamp, node(), self() | A]).
@@ -559,18 +552,6 @@ tss(Time) ->
timestamp() ->
http_util:timestamp().
-formated_timestamp() ->
- format_timestamp( os:timestamp() ).
-
-format_timestamp({_N1, _N2, N3} = Now) ->
- {Date, Time} = calendar:now_to_datetime(Now),
- {YYYY,MM,DD} = Date,
- {Hour,Min,Sec} = Time,
- FormatDate =
- io_lib:format("~.4w:~.2.0w:~.2.0w ~.2.0w:~.2.0w:~.2.0w 4~w",
- [YYYY,MM,DD,Hour,Min,Sec,round(N3/1000)]),
- lists:flatten(FormatDate).
-
start_apps(Apps) ->
lists:foreach(fun(App) ->
application:stop(App),
diff --git a/lib/inets/test/old_httpd_SUITE.erl b/lib/inets/test/old_httpd_SUITE.erl
index 74c11f71ba..39b0b08645 100644
--- a/lib/inets/test/old_httpd_SUITE.erl
+++ b/lib/inets/test/old_httpd_SUITE.erl
@@ -2072,13 +2072,13 @@ create_config(Config, Access, FileName) ->
"Modules mod_alias mod_htaccess mod_auth "
"mod_security "
"mod_responsecontrol mod_trace mod_esi "
- "mod_actions mod_cgi mod_include mod_dir "
+ "mod_actions mod_cgi mod_dir "
"mod_range mod_get "
"mod_head mod_log mod_disk_log";
_ ->
"Modules mod_alias mod_auth mod_security "
"mod_responsecontrol mod_trace mod_esi "
- "mod_actions mod_cgi mod_include mod_dir "
+ "mod_actions mod_cgi mod_dir "
"mod_range mod_get "
"mod_head mod_log mod_disk_log"
end,
@@ -2436,7 +2436,7 @@ create_ipv6_config(Config, FileName, Ipv6Address) ->
MaxHdrAct = io_lib:format("~p", [close]),
Mod_order = "Modules mod_alias mod_auth mod_esi mod_actions mod_cgi"
- " mod_include mod_dir mod_get mod_head"
+ " mod_dir mod_get mod_head"
" mod_log mod_disk_log mod_trace",
SSL =