diff options
| -rw-r--r-- | lib/inets/test/httpd_SUITE.erl | 145 | 
1 files changed, 73 insertions, 72 deletions
| diff --git a/lib/inets/test/httpd_SUITE.erl b/lib/inets/test/httpd_SUITE.erl index 34d701eb26..c0d73663d3 100644 --- a/lib/inets/test/httpd_SUITE.erl +++ b/lib/inets/test/httpd_SUITE.erl @@ -1,7 +1,7 @@  %%  %% %CopyrightBegin%  %%  -%% Copyright Ericsson AB 2013-2013. All Rights Reserved. +%% Copyright Ericsson AB 2013-2014. 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 @@ -42,16 +42,17 @@ suite() ->  all() ->      [ -     {group, http} -     %{group, https} +     {group, http}, +     {group, http_limit} +     %%{group, https}      ].  groups() ->      [       {http, [], all_groups()}, -     %{https, [], all_groups()}, -     {http_1_1, [], [host, chunked, expect, cgi, max_clients -		    ] ++ http_head() ++ http_get()}, +     %%{https, [], all_groups()}, +     {http_limit, [], [max_clients_1_1, max_clients_1_0, max_clients_0_9]},   +     {http_1_1, [], [host, chunked, expect, cgi] ++ http_head() ++ http_get()},       {http_1_0, [], [host, cgi] ++ http_head() ++ http_get()},       {http_0_9, [], http_head() ++ http_get()}      ]. @@ -95,7 +96,7 @@ init_per_group(https = Group, Config0) ->  	    {skip, "Could not start https apps"}      end; -init_per_group(http = Group, Config0) -> +init_per_group(Group, Config0)  when Group == http; Group == http_limit ->      init_httpd(Group, [{type, ip_comm} | Config0]);  init_per_group(http_1_1, Config) ->      [{http_version, "HTTP/1.1"} | Config]; @@ -106,10 +107,9 @@ init_per_group(http_0_9, Config) ->  init_per_group(_, Config) ->      Config.  end_per_group(http, _Config) -> -    inets:stop(); +    ok;  end_per_group(https, _Config) -> -    ssl:stop(), -    inets:stop(); +    ssl:stop();  end_per_group(_, _) ->      ok. @@ -119,7 +119,7 @@ init_httpd(Group, Config0) ->      {Pid, Port} = server_start(Group, server_config(Group, Config)),      [{server_pid, Pid}, {port, Port} | Config].  %%-------------------------------------------------------------------- -init_per_testcase(host = Case, Config) -> +init_per_testcase(host, Config) ->      Prop = ?config(tc_group_properties, Config),      Name = proplists:get_value(name, Prop),      Cb = case Name of @@ -128,45 +128,14 @@ init_per_testcase(host = Case, Config) ->  	     http_1_1 ->  		 httpd_1_1  	 end, -    common_init_per_test_case(Case, [{version_cb, Cb} | proplists:delete(version_cb, Config)]); +    [{version_cb, Cb} | proplists:delete(version_cb, Config)]; +init_per_testcase(_, Config) -> +    Config.  %% init_per_testcase(basic_auth = Case, Config) ->  %%     start_mnesia(?config(node, Config)),  %%     common_init_per_test_case(Case, Config); -init_per_testcase(max_clients, Config) -> -    Pid = ?config(server_pid, Config),     -    Prop = httpd:info(Pid), -    Port = proplists:get_value(port, Prop), -    TempProp = [{port, Port} | proplists:delete(port, server_config(http, Config))], -    NewProp = [{max_clients, 1} | TempProp], -    httpd:reload_config(NewProp, non_disturbing), -    Config; - -init_per_testcase(_Case, Config) -> -    common_init_per_test_case(_Case, Config). - -%%% Should be run by all test cases except max_clients, to make -%%% sure failiure of max_clients does not affect other test cases -common_init_per_test_case(_Case, Config) ->     -    Pid = ?config(server_pid, Config),     -    Prop = httpd:info(Pid), -    case proplists:get_value(max_clients, Prop, 150) of -    	150 -> -	    Config; -    	_ -> -	    end_per_testcase(max_clients, Config) -    end. - -end_per_testcase(max_clients, Config) -> -    Pid = ?config(server_pid, Config),     -    Prop = httpd:info(Pid), -    Port = proplists:get_value(port, Prop), -    TempProp = [{port, Port} | proplists:delete(port, server_config(http, Config))], -    NewProp = proplists:delete(max_clients, TempProp), -    httpd:reload_config(NewProp, non_disturbing), -    Config; -  %% end_per_testcase(basic_auth, Config) ->  %%     cleanup_mnesia();  end_per_testcase(_Case, _Config) -> @@ -270,35 +239,24 @@ expect(Config) when is_list(Config) ->      httpd_1_1:expect(?config(type, Config), ?config(port, Config),   		     ?config(host, Config), ?config(node, Config)). -max_clients() -> +max_clients_1_1() ->      [{doc, "Test max clients limit"}]. -max_clients(Config) when is_list(Config) ->  -    Version = ?config(http_version, Config), -    Host = ?config(host, Config), -    Pid = ?config(server_pid, Config), -    ct:pal("Configurartion: ~p~n", [httpd:info(Pid)]), -    spawn(fun() -> httpd_test_lib:verify_request(?config(type, Config), Host,  -						 ?config(port, Config),  ?config(node, Config), -						 http_request("GET /eval?httpd_example:delay(1000) ",  -							      Version, Host), -						 [{statuscode, 200}, -						  {version, Version}]) -	  end), -    ok = httpd_test_lib:verify_request(?config(type, Config), Host,  -				       ?config(port, Config),  ?config(node, Config), -				       http_request("GET /index.html ", Version, Host), -				       [{statuscode, 503}, -					{version, Version}]), -    receive  -    after 1000 -> -	    ok = httpd_test_lib:verify_request(?config(type, Config), Host,  -				       ?config(port, Config),  ?config(node, Config), -				       http_request("GET /index.html ", Version, Host), -					       [{statuscode, 200}, -						{version, Version}]) -    end. -	     +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"}]. @@ -590,6 +548,24 @@ alias(Config) when is_list(Config) ->  %%--------------------------------------------------------------------  %% Internal functions -----------------------------------  %%-------------------------------------------------------------------- +do_max_clients(Config) -> +    Version = ?config(http_version, Config), +    Host = ?config(host, Config), +    start_blocker(Config), +    ok = httpd_test_lib:verify_request(?config(type, Config), Host,  +				       ?config(port, Config),  ?config(node, Config), +				       http_request("GET /index.html ", Version, Host), +				       [{statuscode, 503}, +					{version, Version}]), +    receive  +    after 2000 -> +	    ok = httpd_test_lib:verify_request(?config(type, Config), Host,  +					       ?config(port, Config),  ?config(node, Config), +					       http_request("GET /index.html ", Version, Host), +					       [{statuscode, 200}, +						{version, Version}]) +    end. +  setup_server_dirs(ServerRoot, DocRoot, DataDir) ->         CgiDir =  filename:join(ServerRoot, "cgi-bin"),      AuthDir =  filename:join(ServerRoot, "auth"), @@ -658,6 +634,10 @@ server_config(http, Config) ->       {erl_script_alias, {"/cgi-bin/erl", [httpd_example, io]}},       {eval_script_alias, {"/eval", [httpd_example, io]}}      ] ++  auth_conf(ServerRoot); + +server_config(http_limit, Config) -> +    [{max_clients, 1}]  ++ server_config(http, Config); +      server_config(_, _) ->      []. @@ -791,3 +771,24 @@ cleanup_mnesia() ->      stopped = mnesia:stop(),      mnesia:delete_schema([node()]),      ok. + +start_blocker(Config) -> +    spawn(httpd_SUITE, init_blocker, [self(), Config]), +    receive +	blocker_start -> +	    ok +    end. +     +init_blocker(From, Config) -> +    From ! blocker_start, +    block(Config). + +block(Config) -> +    Version = ?config(http_version, Config), +    Host = ?config(host, Config), +    httpd_test_lib:verify_request(?config(type, Config), Host,  +				  ?config(port, Config),  ?config(node, Config), +				  http_request("GET /eval?httpd_example:delay(1000) ",  +					       Version, Host), +				  [{statuscode, 200}, +				   {version, Version}]). | 
