diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/kernel/test/inet_sockopt_SUITE.erl | 82 | 
1 files changed, 81 insertions, 1 deletions
| diff --git a/lib/kernel/test/inet_sockopt_SUITE.erl b/lib/kernel/test/inet_sockopt_SUITE.erl index 9d236a8a0a..2b1abeb88f 100644 --- a/lib/kernel/test/inet_sockopt_SUITE.erl +++ b/lib/kernel/test/inet_sockopt_SUITE.erl @@ -1,7 +1,7 @@  %%  %% %CopyrightBegin%  %%  -%% Copyright Ericsson AB 2007-2013. All Rights Reserved. +%% Copyright Ericsson AB 2007-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 @@ -51,6 +51,7 @@  -export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,   	 init_per_group/2,end_per_group/2,   	 simple/1, loop_all/1, simple_raw/1, simple_raw_getbin/1,  +	 multiple_raw/1, multiple_raw_getbin/1,  	 doc_examples_raw/1,doc_examples_raw_getbin/1,  	 large_raw/1,large_raw_getbin/1,combined/1,combined_getbin/1,  	 ipv6_v6only_udp/1, ipv6_v6only_tcp/1, ipv6_v6only_sctp/1, @@ -64,6 +65,7 @@ suite() -> [{ct_hooks,[ts_install_cth]}].  all() ->       [simple, loop_all, simple_raw, simple_raw_getbin, +     multiple_raw, multiple_raw_getbin,       doc_examples_raw, doc_examples_raw_getbin, large_raw,       large_raw_getbin, combined, combined_getbin,       ipv6_v6only_udp, ipv6_v6only_tcp, ipv6_v6only_sctp, @@ -184,6 +186,84 @@ nintbin2int(<<Int:16/native>>) -> Int;  nintbin2int(<<Int:8/native>>) -> Int;  nintbin2int(<<>>) -> 0. + + +multiple_raw(suite) -> []; +multiple_raw(doc) -> "Test setopt/getopt of multiple raw options."; +multiple_raw(Config) when is_list(Config) -> +    do_multiple_raw(Config,false). +multiple_raw_getbin(suite) -> []; +multiple_raw_getbin(doc) -> "Test setopt/getopt of multiple raw options, " +			      "with binaries in getopt."; +multiple_raw_getbin(Config) when is_list(Config) -> +    do_multiple_raw(Config,true). + +do_multiple_raw(Config, Binary) -> +    Port = start_helper(Config), +    SolSocket = ask_helper(Port, ?C_GET_SOL_SOCKET), +    SoKeepalive = ask_helper(Port, ?C_GET_SO_KEEPALIVE), +    SoKeepaliveTrue = {raw,SolSocket,SoKeepalive,<<1:32/native>>}, +    SoKeepaliveFalse = {raw,SolSocket,SoKeepalive,<<0:32/native>>}, +    SoReuseaddr = ask_helper(Port, ?C_GET_SO_REUSEADDR), +    SoReuseaddrTrue = {raw,SolSocket,SoReuseaddr,<<1:32/native>>}, +    SoReuseaddrFalse = {raw,SolSocket,SoReuseaddr,<<0:32/native>>}, +    {S1,S2} = +	create_socketpair( +	  [SoReuseaddrFalse,SoKeepaliveTrue], +	  [SoKeepaliveFalse,SoReuseaddrTrue]), +    {ok,[{reuseaddr,false},{keepalive,true}]} = +	inet:getopts(S1, [reuseaddr,keepalive]), +    {ok, +     [{raw,SolSocket,SoReuseaddr,S1R1}, +      {raw,SolSocket,SoKeepalive,S1K1}]} = +	inet:getopts( +	  S1, +	  [{raw,SolSocket,SoReuseaddr,binarify(4, Binary)}, +	   {raw,SolSocket,SoKeepalive,binarify(4, Binary)}]), +    true = nintbin2int(S1R1) =:= 0, +    true = nintbin2int(S1K1) =/= 0, +    {ok,[{keepalive,false},{reuseaddr,true}]} = +	inet:getopts(S2, [keepalive,reuseaddr]), +    {ok, +     [{raw,SolSocket,SoKeepalive,S2K1}, +      {raw,SolSocket,SoReuseaddr,S2R1}]} = +	inet:getopts( +	  S2, +	  [{raw,SolSocket,SoKeepalive,binarify(4, Binary)}, +	   {raw,SolSocket,SoReuseaddr,binarify(4, Binary)}]), +    true = nintbin2int(S2K1) =:= 0, +    true = nintbin2int(S2R1) =/= 0, +    %% +    ok = inet:setopts( +	   S1, [SoReuseaddrTrue,SoKeepaliveFalse]), +    ok = inet:setopts( +	   S2, [SoKeepaliveTrue,SoReuseaddrFalse]), +    {ok, +     [{raw,SolSocket,SoReuseaddr,S1R2}, +      {raw,SolSocket,SoKeepalive,S1K2}]} = +	inet:getopts( +	  S1, +	  [{raw,SolSocket,SoReuseaddr,binarify(4, Binary)}, +	   {raw,SolSocket,SoKeepalive,binarify(4, Binary)}]), +    true = nintbin2int(S1R2) =/= 0, +    true = nintbin2int(S1K2) =:= 0, +    {ok, +     [{raw,SolSocket,SoKeepalive,S2K2}, +      {raw,SolSocket,SoReuseaddr,S2R2}]} = +	inet:getopts( +	  S2, +	  [{raw,SolSocket,SoKeepalive,binarify(4, Binary)}, +	   {raw,SolSocket,SoReuseaddr,binarify(4, Binary)}]), +    true = nintbin2int(S2K2) =/= 0, +    true = nintbin2int(S2R2) =:= 0, +    %% +    gen_tcp:close(S1), +    gen_tcp:close(S2), +    stop_helper(Port), +    ok. + + +  doc_examples_raw(suite) -> [];  doc_examples_raw(doc) -> "Test that the example code from the documentation "  			     "works"; | 
