%%---------------------------------------------------------------------- %% %% %CopyrightBegin% %% %% Copyright Ericsson AB 1999-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. %% You may obtain a copy of the License at %% %% http://www.apache.org/licenses/LICENSE-2.0 %% %% Unless required by applicable law or agreed to in writing, software %% distributed under the License is distributed on an "AS IS" BASIS, %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %% See the License for the specific language governing permissions and %% limitations under the License. %% %% %CopyrightEnd% %% %%---------------------------------------------------------------------- %% File : ip_v4v6_interop_SUITE.erl %% Description : %% %%---------------------------------------------------------------------- -module(ip_v4v6_interop_SUITE). -compile(export_all). %%---------------------------------------------------------------------- %% External exports %%---------------------------------------------------------------------- -export([ all/0, init_per_suite/1, end_per_suite/1, init_per_testcase/2, end_per_testcase/2, groups/0, init_per_group/2, end_per_group/2 ]). %%----------------------------------------------------------------- %% Internal exports %%----------------------------------------------------------------- -export([]). %%---------------------------------------------------------------------- %% Include files %%---------------------------------------------------------------------- -include_lib("common_test/include/ct.hrl"). -include_lib("orber/include/corba.hrl"). -include_lib("orber/COSS/CosNaming/CosNaming.hrl"). -include_lib("orber/src/orber_iiop.hrl"). -include_lib("orber/src/ifr_objects.hrl"). -include("idl_output/orber_test_server.hrl"). -include_lib("orber/COSS/CosNaming/CosNaming_NamingContextExt.hrl"). -include_lib("orber/COSS/CosNaming/CosNaming_NamingContext.hrl"). %%---------------------------------------------------------------------- %% Macros %%---------------------------------------------------------------------- -define(default_timeout, test_server:minutes(15)). -define(match(ExpectedRes,Expr), fun() -> AcTuAlReS = (catch (Expr)), case AcTuAlReS of ExpectedRes -> io:format("------ CORRECT RESULT ------~n~p~n", [AcTuAlReS]), AcTuAlReS; _ -> io:format("###### ERROR ERROR ######~nRESULT: ~p~n", [AcTuAlReS]), exit(AcTuAlReS) end end()). %%---------------------------------------------------------------------- %% Records %%---------------------------------------------------------------------- %%====================================================================== %% Initialization functions. %%====================================================================== init_per_testcase(_Case, Config) -> %% Starting dual configured ORB orber:jump_start([{iiop_port, 10001}, {flags, 16#1000}]), orber:info(), Dog=test_server:timetrap(?default_timeout), [{watchdog, Dog}|Config]. end_per_testcase(_Case, Config) -> orber:jump_stop(), Dog = proplists:get_value(watchdog, Config), test_server:timetrap_cancel(Dog), ok. init_per_suite(Config) -> Config. end_per_suite(Config) -> Config. %%==================================================================== %% SUITE specification %%==================================================================== all() -> [ dual_ipv4v6 ]. suite() -> [{ct_hooks,[ts_install_cth]}]. groups() -> []. init_per_group(_GroupName, Config) -> Config. end_per_group(_GroupName, Config) -> Config. %%==================================================================== %% Test Cases %%==================================================================== %% ORB configured for supporting both IPv4 and IPv6 dual_ipv4v6(_Config) -> %% Starting slave node with ipv4 configured ORB {ok, Ipv4Node, _Ipv4Host} = ?match({ok,_,_}, orber_test_lib:js_node([{iiop_port, 4001}])), Ipv4NS = orber_test_lib:remote_apply(Ipv4Node, corba, resolve_initial_references, ["NameService"]), %% Starting slave node with ipv6 configured ORB {ok, Ipv6Node, _Ipv6Host} = ?match({ok,_,_}, orber_test_lib:js_node([{iiop_port, 6001}, {flags, 16#0100}])), Ipv6NS = orber_test_lib:remote_apply(Ipv6Node, corba, resolve_initial_references, ["NameService"]), %% Add the ipv6 interface in the dual configured ORB ?match({ok, _}, orber:add_listen_interface("::1", normal, [{ip_family, inet6}, {iiop_port, 10002}])), DualNS = corba:resolve_initial_references("NameService"), %% Bind IPv4 NameServer to a name in the dual stack orbs NameServer NSDual4 = orber_test_lib:remote_apply(Ipv4Node, corba, resolve_initial_references_remote, ["NameService", ["iiop://127.0.0.1:10001"]]), ?match(ok, orber_test_lib:remote_apply(Ipv4Node, 'CosNaming_NamingContext', bind, [NSDual4, lname:new(["ns4"]), Ipv4NS])), 'CosNaming_NamingContext':resolve(DualNS, lname:new(["ns4"])), %% Bind IPv6 NameServer to a name in the dual stack orbs NameServer NSDual6 = orber_test_lib:remote_apply(Ipv6Node, corba, resolve_initial_references_remote, ["NameService", ["iiop://[::1]:10002"]]), ?match(ok, orber_test_lib:remote_apply(Ipv6Node, 'CosNaming_NamingContext', bind, [NSDual6, lname:new(["ns6"]), Ipv6NS])), 'CosNaming_NamingContext':resolve(DualNS, lname:new(["ns6"])), %% IPv4: Fetch IPv6 NS reference from dual stack orber and register own NameServer in that Ipv4NSO = orber_test_lib:remote_apply(Ipv4Node, 'CosNaming_NamingContext', resolve, [NSDual4, lname:new(["ns6"])]), ?match(ok, orber_test_lib:remote_apply(Ipv4Node, 'CosNaming_NamingContext', bind, [Ipv4NSO, lname:new(["nso"]), Ipv4NS])), %% IPv6: Fetch IPv4 NS reference from dual stack orber and register own NameServer in that Ipv6NSO = orber_test_lib:remote_apply(Ipv6Node, 'CosNaming_NamingContext', resolve, [NSDual6, lname:new(["ns4"])]), ?match(ok, orber_test_lib:remote_apply(Ipv6Node, 'CosNaming_NamingContext', bind, [Ipv6NSO, lname:new(["nso"]), Ipv6NS])), %% IPv4: Fetch own NS reference from IPv6 NameServer and add a context then check that everything went well Ipv4NSFromIpv6 = orber_test_lib:remote_apply(Ipv6Node, 'CosNaming_NamingContext', resolve, [Ipv6NS, lname:new(["nso"])]), _Ipv4NC = orber_test_lib:remote_apply(Ipv4Node, 'CosNaming_NamingContext', bind_new_context, [Ipv4NSFromIpv6, lname:new(["test_context4"])]), %% IPv6: Fetch own NS reference from IPv4 NameServer and add a context then check that everything went well Ipv6NSFromIpv4 = orber_test_lib:remote_apply(Ipv4Node, 'CosNaming_NamingContext', resolve, [Ipv4NS, lname:new(["nso"])]), _Ipv6NC = orber_test_lib:remote_apply(Ipv6Node, 'CosNaming_NamingContext', bind_new_context, [Ipv6NSFromIpv4, lname:new(["test_context6"])]), %% Check that all the names are register correctly {ok,DualNames,_} = 'CosNaming_NamingContext':list(DualNS, 100), {ok,Ipv4Names,_} = orber_test_lib:remote_apply(Ipv4Node, 'CosNaming_NamingContext', list, [Ipv4NS, 100]), {ok,Ipv6Names,_} = orber_test_lib:remote_apply(Ipv6Node, 'CosNaming_NamingContext', list, [Ipv6NS, 100]), io:format("\nNames in Dual NS: ~p\n", [DualNames]), ?match(2, length(DualNames)), io:format("\nNames in IPv4 NS: ~p\n", [Ipv4Names]), ?match(2, length(Ipv4Names)), io:format("\nNames in IPv6 NS: ~p\n", [Ipv6Names]), ?match(2, length(Ipv6Names)), ok.