From 7babe1a82adc9dd1deb1b43074ac184f89fda945 Mon Sep 17 00:00:00 2001 From: Edwin Fine Date: Fri, 22 Jul 2016 20:15:54 -0400 Subject: Fix httpd_conf:validate_properties/1 for ipfamily inets:start/2 fails when using the legacy option inet6fb4 with a configuration proplist. It is not translated to inet as documented. This breaks existing code that relies on the documented behavior. This commit fixes the issue by translating inet6fb4 everywhere it is encountered in httpd_conf:validate_properties/1. From inets documentation (http://erlang.org/doc/man/httpd.html): {ipfamily, inet | inet6} Default is inet, legacy option inet6fb4 no longer makes sense and will be translated to inet. Fixes ERL-200. --- lib/inets/src/http_server/httpd_conf.erl | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/inets/src/http_server/httpd_conf.erl b/lib/inets/src/http_server/httpd_conf.erl index e5182ca23c..9e54f2b2c5 100644 --- a/lib/inets/src/http_server/httpd_conf.erl +++ b/lib/inets/src/http_server/httpd_conf.erl @@ -395,7 +395,8 @@ validate_properties(Properties) -> %% That is, if property A depends on property B. %% The only sunch preperty at this time is bind_address that depends %% on ipfamily. -validate_properties2(Properties) -> +validate_properties2(Properties0) -> + Properties = fix_ipfamily(Properties0), case proplists:get_value(bind_address, Properties) of undefined -> case proplists:get_value(sock_type, Properties, ip_comm) of @@ -422,6 +423,15 @@ validate_properties2(Properties) -> end end. +fix_ipfamily(Properties) -> + case proplists:get_value(ipfamily, Properties) of + undefined -> + Properties; + IpFamily -> + NewProps = proplists:delete(ipfamily, Properties), + [{ipfamily, validate_ipfamily(IpFamily)} | NewProps] + end. + add_inet_defaults(Properties) -> case proplists:get_value(ipfamily, Properties) of undefined -> -- cgit v1.2.3 From 7b69120ae116cf4d0e1e68775f5ba474c6b69f77 Mon Sep 17 00:00:00 2001 From: Edwin Fine Date: Thu, 28 Jul 2016 18:11:29 -0400 Subject: Add test for inet6fb4 validation --- lib/inets/test/inets_sup_SUITE.erl | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/inets/test/inets_sup_SUITE.erl b/lib/inets/test/inets_sup_SUITE.erl index 5b8b1463c8..cf7aa78ff3 100644 --- a/lib/inets/test/inets_sup_SUITE.erl +++ b/lib/inets/test/inets_sup_SUITE.erl @@ -33,7 +33,7 @@ suite() -> all() -> [default_tree, ftpc_worker, tftpd_worker, - httpd_subtree, httpd_subtree_profile, + httpd_config, httpd_subtree, httpd_subtree_profile, httpc_subtree]. groups() -> @@ -52,6 +52,29 @@ end_per_suite(_) -> inets:stop(), ok. +init_per_testcase(httpd_config, Config) -> + PrivDir = proplists:get_value(priv_dir, Config), + Dir = filename:join(PrivDir, "root"), + ok = file:make_dir(Dir), + + FallbackConfig = [{port, 0}, + {server_name,"www.test"}, + {modules, [mod_get]}, + {server_root, Dir}, + {document_root, Dir}, + {bind_address, any}, + {ipfamily, inet6fb4}], + try + inets:stop(), + inets:start(), + inets:start(httpd, FallbackConfig), + Config + catch + _:Reason -> + inets:stop(), + exit({failed_starting_inets, Reason}) + end; + init_per_testcase(httpd_subtree, Config) -> PrivDir = proplists:get_value(priv_dir, Config), Dir = filename:join(PrivDir, "root"), @@ -193,6 +216,11 @@ tftpd_worker(Config) when is_list(Config) -> [] = supervisor:which_children(tftp_sup), ok. +httpd_config() -> + [{doc, "Makes sure the httpd config works for inet6fb4."}]. +httpd_config(Config) when is_list(Config) -> + Config. % All the work is done in the init_per_testcase + httpd_subtree() -> [{doc, "Makes sure the httpd sub tree is correct."}]. httpd_subtree(Config) when is_list(Config) -> -- cgit v1.2.3 From d263c4ed701785693e3ffd819ef5e4f07fadb8ff Mon Sep 17 00:00:00 2001 From: Raimo Niskanen Date: Fri, 29 Jul 2016 15:53:52 +0200 Subject: Fix inets_sup_SUITE for local tests --- lib/inets/test/inets_sup_SUITE.erl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/inets/test/inets_sup_SUITE.erl b/lib/inets/test/inets_sup_SUITE.erl index cf7aa78ff3..a88414d6b1 100644 --- a/lib/inets/test/inets_sup_SUITE.erl +++ b/lib/inets/test/inets_sup_SUITE.erl @@ -52,9 +52,9 @@ end_per_suite(_) -> inets:stop(), ok. -init_per_testcase(httpd_config, Config) -> +init_per_testcase(httpd_config = TC, Config) -> PrivDir = proplists:get_value(priv_dir, Config), - Dir = filename:join(PrivDir, "root"), + Dir = filename:join(PrivDir, TC), ok = file:make_dir(Dir), FallbackConfig = [{port, 0}, @@ -75,9 +75,9 @@ init_per_testcase(httpd_config, Config) -> exit({failed_starting_inets, Reason}) end; -init_per_testcase(httpd_subtree, Config) -> +init_per_testcase(httpd_subtree = TC, Config) -> PrivDir = proplists:get_value(priv_dir, Config), - Dir = filename:join(PrivDir, "root"), + Dir = filename:join(PrivDir, TC), ok = file:make_dir(Dir), SimpleConfig = [{port, 0}, @@ -98,9 +98,9 @@ init_per_testcase(httpd_subtree, Config) -> exit({failed_starting_inets, Reason}) end; -init_per_testcase(httpd_subtree_profile, Config) -> +init_per_testcase(httpd_subtree_profile = TC, Config) -> PrivDir = proplists:get_value(priv_dir, Config), - Dir = filename:join(PrivDir, "root"), + Dir = filename:join(PrivDir, TC), ok = file:make_dir(Dir), SimpleConfig = [{port, 0}, -- cgit v1.2.3 From a9e53ba50d31debfbc6a85d713ce9c76b029ed68 Mon Sep 17 00:00:00 2001 From: Raimo Niskanen Date: Fri, 29 Jul 2016 15:55:42 +0200 Subject: Actually verify result of testcase --- lib/inets/test/inets_sup_SUITE.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/inets/test/inets_sup_SUITE.erl b/lib/inets/test/inets_sup_SUITE.erl index a88414d6b1..1e664337e6 100644 --- a/lib/inets/test/inets_sup_SUITE.erl +++ b/lib/inets/test/inets_sup_SUITE.erl @@ -219,7 +219,7 @@ tftpd_worker(Config) when is_list(Config) -> httpd_config() -> [{doc, "Makes sure the httpd config works for inet6fb4."}]. httpd_config(Config) when is_list(Config) -> - Config. % All the work is done in the init_per_testcase + do_httpd_subtree(Config, default). httpd_subtree() -> [{doc, "Makes sure the httpd sub tree is correct."}]. -- cgit v1.2.3 From 0c910241fdf66b5b0165e9a45c21ce38e83f8b28 Mon Sep 17 00:00:00 2001 From: Raimo Niskanen Date: Mon, 1 Aug 2016 10:36:02 +0200 Subject: Test inet6fb4 in basic suite --- lib/inets/test/inets_SUITE.erl | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/inets/test/inets_SUITE.erl b/lib/inets/test/inets_SUITE.erl index 5eaf3a28a0..38b8229389 100644 --- a/lib/inets/test/inets_SUITE.erl +++ b/lib/inets/test/inets_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1997-2015. All Rights Reserved. +%% Copyright Ericsson AB 1997-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -212,11 +212,19 @@ start_httpd(Config) when is_list(Config) -> Pids0 = [ServicePid || {_, ServicePid} <- inets:services()], true = lists:member(Pid0, Pids0), [_|_] = inets:services_info(), - inets:stop(httpd, Pid0), ct:sleep(500), + Pids1 = [ServicePid || {_, ServicePid} <- inets:services()], + false = lists:member(Pid0, Pids1), + {ok, Pid0b} = + inets:start(httpd, [{port, 0}, {ipfamily, inet6fb4} | HttpdConf]), + Pids0b = [ServicePid || {_, ServicePid} <- inets:services()], + true = lists:member(Pid0b, Pids0b), + [_|_] = inets:services_info(), + inets:stop(httpd, Pid0b), + ct:sleep(500), Pids1 = [ServicePid || {_, ServicePid} <- inets:services()], - false = lists:member(Pid0, Pids1), + false = lists:member(Pid0b, Pids1), {ok, Pid1} = inets:start(httpd, [{port, 0}, {ipfamily, inet} | HttpdConf], stand_alone), -- cgit v1.2.3