~clint-fewbar/ubuntu/precise/erlang/merge-15b

« back to all changes in this revision

Viewing changes to lib/ssl/test/ssl_to_openssl_SUITE.erl

  • Committer: Package Import Robot
  • Author(s): Sergei Golovan
  • Date: 2011-12-15 19:20:10 UTC
  • mfrom: (1.1.18) (3.5.15 sid)
  • mto: (3.5.16 sid)
  • mto: This revision was merged to the branch mainline in revision 33.
  • Revision ID: package-import@ubuntu.com-20111215192010-jnxcfe3tbrpp0big
Tags: 1:15.b-dfsg-1
* New upstream release.
* Upload to experimental because this release breaks external drivers
  API along with ABI, so several applications are to be fixed.
* Removed SSL patch because the old SSL implementation is removed from
  the upstream distribution.
* Removed never used patch which added native code to erlang beam files.
* Removed the erlang-docbuilder binary package because the docbuilder
  application was dropped by upstream.
* Documented dropping ${erlang-docbuilder:Depends} substvar in
  erlang-depends(1) manpage.
* Made erlang-base and erlang-base-hipe provide virtual package
  erlang-abi-15.b (the number means the first erlang version, which
  provides current ABI).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
%%
2
2
%% %CopyrightBegin%
3
3
%%
4
 
%% Copyright Ericsson AB 2008-2010. All Rights Reserved.
 
4
%% Copyright Ericsson AB 2008-2011. All Rights Reserved.
5
5
%%
6
6
%% The contents of this file are subject to the Erlang Public License,
7
7
%% Version 1.1, (the "License"); you may not use this file except in
24
24
%% Note: This directive should only be used in test suites.
25
25
-compile(export_all).
26
26
 
27
 
-include("test_server.hrl").
 
27
-include_lib("common_test/include/ct.hrl").
28
28
 
29
29
-define(TIMEOUT, 120000).
30
30
-define(LONG_TIMEOUT, 600000).
50
50
        false ->
51
51
            {skip, "Openssl not found"};
52
52
        _ ->
53
 
            crypto:start(),
54
 
            application:start(public_key),
55
 
            ssl:start(),
56
 
            Result = 
57
 
                (catch make_certs:all(?config(data_dir, Config0), 
58
 
                                      ?config(priv_dir, Config0))),
59
 
            test_server:format("Make certs  ~p~n", [Result]),
60
 
            Config1 = ssl_test_lib:make_dsa_cert(Config0),
61
 
            Config = ssl_test_lib:cert_options(Config1),
62
 
            [{watchdog, Dog} | Config]
 
53
            try crypto:start() of
 
54
                ok ->
 
55
                    application:start(public_key),
 
56
                    ssl:start(),
 
57
                    Result =
 
58
                        (catch make_certs:all(?config(data_dir, Config0),
 
59
                                              ?config(priv_dir, Config0))),
 
60
                    test_server:format("Make certs  ~p~n", [Result]),
 
61
                    Config1 = ssl_test_lib:make_dsa_cert(Config0),
 
62
                    Config = ssl_test_lib:cert_options(Config1),
 
63
                    [{watchdog, Dog} | Config]
 
64
                catch _:_  ->
 
65
                    {skip, "Crypto did not start"}
 
66
            end
63
67
    end.
64
68
 
65
69
%%--------------------------------------------------------------------
70
74
%%--------------------------------------------------------------------
71
75
end_per_suite(_Config) ->
72
76
    ssl:stop(),
73
 
    crypto:stop().
 
77
    application:stop(crypto).
74
78
 
75
79
%%--------------------------------------------------------------------
76
80
%% Function: init_per_testcase(TestCase, Config) -> Config
105
109
       TestCase == erlang_server_openssl_client_no_wrap_sequence_number ->
106
110
    check_sane_openssl_renegotaite(Config);
107
111
 
 
112
special_init(ssl2_erlang_server_openssl_client, Config) ->
 
113
    check_sane_openssl_sslv2(Config);
 
114
 
108
115
special_init(_, Config) ->
109
116
    Config.
110
117
    
139
146
%%   Name of a test case.
140
147
%% Description: Returns a list of all test cases in this test suite
141
148
%%--------------------------------------------------------------------
142
 
all(doc) -> 
143
 
    ["Test erlangs ssl against openssl"];
 
149
suite() -> [{ct_hooks,[ts_install_cth]}].
144
150
 
145
 
all(suite) -> 
146
 
    [erlang_client_openssl_server, 
 
151
all() -> 
 
152
    [erlang_client_openssl_server,
147
153
     erlang_server_openssl_client,
148
154
     tls1_erlang_client_openssl_server_dsa_cert,
149
155
     tls1_erlang_server_openssl_client_dsa_cert,
154
160
     erlang_client_openssl_server_no_wrap_sequence_number,
155
161
     erlang_server_openssl_client_no_wrap_sequence_number,
156
162
     erlang_client_openssl_server_no_server_ca_cert,
157
 
     ssl3_erlang_client_openssl_server, 
 
163
     ssl3_erlang_client_openssl_server,
158
164
     ssl3_erlang_server_openssl_client,
159
165
     ssl3_erlang_client_openssl_server_client_cert,
160
166
     ssl3_erlang_server_openssl_client_client_cert,
161
167
     ssl3_erlang_server_erlang_client_client_cert,
162
 
     tls1_erlang_client_openssl_server, 
 
168
     tls1_erlang_client_openssl_server,
163
169
     tls1_erlang_server_openssl_client,
164
170
     tls1_erlang_client_openssl_server_client_cert,
165
171
     tls1_erlang_server_openssl_client_client_cert,
166
172
     tls1_erlang_server_erlang_client_client_cert,
167
 
     ciphers_rsa_signed_certs,
168
 
     ciphers_dsa_signed_certs,
 
173
     ciphers_rsa_signed_certs, ciphers_dsa_signed_certs,
169
174
     erlang_client_bad_openssl_server,
170
175
     expired_session,
171
 
     ssl2_erlang_server_openssl_client
172
 
    ].
 
176
     ssl2_erlang_server_openssl_client].
 
177
 
 
178
groups() -> 
 
179
    [].
 
180
 
 
181
init_per_group(_GroupName, Config) ->
 
182
    Config.
 
183
 
 
184
end_per_group(_GroupName, Config) ->
 
185
    Config.
 
186
 
173
187
 
174
188
%% Test cases starts here.
175
189
%%--------------------------------------------------------------------
212
226
  
213
227
    %% Clean close down!   Server needs to be closed first !!
214
228
    close_port(OpensslPort),
215
 
 
216
229
    ssl_test_lib:close(Client),
217
230
    process_flag(trap_exit, false),
218
231
    ok.
246
259
    port_command(OpenSslPort, Data),
247
260
    
248
261
    ssl_test_lib:check_result(Server, ok),
249
 
    
 
262
 
 
263
    %% Clean close down!   Server needs to be closed first !!
250
264
    ssl_test_lib:close(Server),
251
 
 
252
265
    close_port(OpenSslPort),
253
266
    process_flag(trap_exit, false),
254
267
    ok.
296
309
   
297
310
    %% Clean close down!   Server needs to be closed first !!
298
311
    close_port(OpensslPort),
299
 
 
300
312
    ssl_test_lib:close(Client),
301
313
    process_flag(trap_exit, false),
302
314
    ok.
336
348
    
337
349
    ssl_test_lib:check_result(Server, ok),
338
350
    
 
351
    %% Clean close down!   Server needs to be closed first !!
339
352
    ssl_test_lib:close(Server),
340
 
 
341
353
    close_port(OpenSslPort),
342
354
    process_flag(trap_exit, false),
343
355
    ok.
385
397
   
386
398
    %% Clean close down!   Server needs to be closed first !!
387
399
    close_port(OpensslPort),
388
 
 
389
400
    ssl_test_lib:close(Client),
390
401
    process_flag(trap_exit, false),
391
402
    ok.
425
436
    
426
437
    ssl_test_lib:check_result(Server, ok),
427
438
    
 
439
    %% Clean close down!   Server needs to be closed first !!
428
440
    ssl_test_lib:close(Server),
429
 
 
430
441
    close_port(OpenSslPort),
431
442
    process_flag(trap_exit, false),
432
443
    ok.
465
476
    
466
477
    ssl_test_lib:check_result(Server, ok),
467
478
    
 
479
    %% Clean close down!   Server needs to be closed first !!
468
480
    ssl_test_lib:close(Server),
469
 
 
470
481
    close_port(OpenSslPort),
471
482
    process_flag(trap_exit, false),
472
483
    ok.
515
526
   
516
527
    %% Clean close down!   Server needs to be closed first !!
517
528
    close_port(OpensslPort),
518
 
 
519
529
    ssl_test_lib:close(Client),
520
530
    process_flag(trap_exit, false),
521
531
    ok.
564
574
 
565
575
    %% Clean close down!   Server needs to be closed first !!
566
576
    close_port(OpensslPort),
567
 
 
568
577
    ssl_test_lib:close(Client),
569
578
    process_flag(trap_exit, false),
570
579
    ok.
605
614
    
606
615
    ssl_test_lib:check_result(Server, ok),
607
616
    
 
617
    %% Clean close down!   Server needs to be closed first !!
608
618
    ssl_test_lib:close(Server),
609
 
 
610
619
    close_port(OpenSslPort),
611
620
    process_flag(trap_exit, false),
612
621
    ok.
653
662
 
654
663
    %% Clean close down!   Server needs to be closed first !!
655
664
    close_port(OpensslPort),
656
 
 
657
665
    ssl_test_lib:close(Client),
658
666
    process_flag(trap_exit, false),
659
667
    ok.
664
672
ssl3_erlang_client_openssl_server(suite) ->
665
673
    [];
666
674
ssl3_erlang_client_openssl_server(Config) when is_list(Config) ->
 
675
    process_flag(trap_exit, true),
667
676
    ServerOpts = ?config(server_opts, Config),  
668
677
    ClientOpts = ?config(client_opts, Config),  
669
678
 
690
699
                                        {options, 
691
700
                                         [{versions, [sslv3]} | ClientOpts]}]),
692
701
    ssl_test_lib:check_result(Client, ok),
693
 
    
 
702
 
 
703
    %% Clean close down!   Server needs to be closed first !!
 
704
    close_port(OpensslPort),
694
705
    ssl_test_lib:close(Client),
695
 
    %% Clean close down!
696
 
    close_port(OpensslPort),
697
 
    test_server:sleep(?SLEEP),
 
706
    process_flag(trap_exit, false),
698
707
    ok.
699
708
 
700
709
%%--------------------------------------------------------------------
704
713
ssl3_erlang_server_openssl_client(suite) ->
705
714
    [];
706
715
ssl3_erlang_server_openssl_client(Config) when is_list(Config) ->
 
716
    process_flag(trap_exit, true),
707
717
    ServerOpts = ?config(server_opts, Config),  
708
718
    
709
719
    {_, ServerNode, _} = ssl_test_lib:run_where(Config),
724
734
    OpenSslPort =  open_port({spawn, Cmd}, [stderr_to_stdout]), 
725
735
 
726
736
    ssl_test_lib:check_result(Server, ok),
727
 
    
728
 
    close_port(OpenSslPort), %% openssl server first
 
737
    %% Clean close down!   Server needs to be closed first !!
729
738
    ssl_test_lib:close(Server),
730
 
    test_server:sleep(?SLEEP),
 
739
    close_port(OpenSslPort),
 
740
    process_flag(trap_exit, false),
731
741
    ok.
732
742
 
733
743
%%--------------------------------------------------------------------
769
779
    
770
780
    ssl_test_lib:check_result(Client, ok),
771
781
  
772
 
    %% Clean close down!
 
782
    %% Clean close down!   Server needs to be closed first !!
773
783
    close_port(OpensslPort), 
774
784
    ssl_test_lib:close(Client),
775
785
    process_flag(trap_exit, false),
814
824
    
815
825
    ssl_test_lib:check_result(Server, ok),
816
826
    
817
 
    close_port(OpenSslPort), %% openssl server first
 
827
    %% Clean close down!   Server needs to be closed first !!
 
828
    close_port(OpenSslPort),
818
829
    ssl_test_lib:close(Server),
819
 
    %% Clean close down!
820
830
    process_flag(trap_exit, false),
821
831
    ok.
822
832
 
839
849
    Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0}, 
840
850
                                        {from, self()}, 
841
851
                                        {mfa, {?MODULE, 
842
 
                                               erlang_ssl_receive, [Data]}},
 
852
                                               erlang_ssl_receive, 
 
853
                                               %% Due to 1/n-1 splitting countermeasure Rizzo/Duong-Beast
 
854
                                               [Data]}},
843
855
                                        {options, 
844
856
                                         [{verify , verify_peer} 
845
857
                                          | ServerOpts]}]),
848
860
    Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, 
849
861
                                        {host, Hostname},
850
862
                                        {from, self()}, 
 
863
                                        %% Due to 1/n-1 splitting countermeasure Rizzo/Duong-Beast
851
864
                                        {mfa, {ssl, send, [Data]}},
852
865
                                        {options, 
853
866
                                         [{versions, [sslv3]} | ClientOpts]}]),
859
872
    process_flag(trap_exit, false),
860
873
    ok.
861
874
 
 
875
 
862
876
%%--------------------------------------------------------------------
863
877
 
864
878
tls1_erlang_client_openssl_server(doc) ->
897
911
                                         [{versions, [tlsv1]} | ClientOpts]}]),
898
912
    
899
913
    ssl_test_lib:check_result(Client, ok),
900
 
    
 
914
 
 
915
    %% Clean close down!   Server needs to be closed first !!
 
916
    close_port(OpensslPort),
901
917
    ssl_test_lib:close(Client),
902
 
    %% Clean close down!
903
 
    close_port(OpensslPort),
904
918
    process_flag(trap_exit, false),
905
919
    ok.
906
920
 
933
947
     
934
948
    ssl_test_lib:check_result(Server, ok),
935
949
    
936
 
    %% Clean close down!
 
950
    %% Clean close down!   Server needs to be closed first !!
 
951
    ssl_test_lib:close(Server),
937
952
    close_port(OpenSslPort),
938
 
    ssl_test_lib:close(Server),
939
953
    process_flag(trap_exit, false),
940
954
    ok.
941
955
 
979
993
    
980
994
    ssl_test_lib:check_result(Client, ok),
981
995
  
982
 
    %% Clean close down!
 
996
    %% Clean close down!   Server needs to be closed first !!
983
997
    close_port(OpensslPort),
984
998
    ssl_test_lib:close(Client),
985
999
    process_flag(trap_exit, false),
1024
1038
    
1025
1039
    ssl_test_lib:check_result(Server, ok),
1026
1040
    
1027
 
    %% Clean close down!
 
1041
    %% Clean close down!   Server needs to be closed first !!
 
1042
    ssl_test_lib:close(Server),
1028
1043
    close_port(OpenSslPort),
1029
 
    ssl_test_lib:close(Server),
1030
1044
    process_flag(trap_exit, false),
1031
1045
    ok.
1032
1046
 
1061
1075
                                         [{versions, [tlsv1]} | ClientOpts]}]),
1062
1076
    
1063
1077
    ssl_test_lib:check_result(Server, ok, Client, ok),
1064
 
    
1065
1078
    ssl_test_lib:close(Server),
1066
 
    %% Clean close down!
1067
1079
    process_flag(trap_exit, false),
1068
1080
    ok.
1069
1081
%%--------------------------------------------------------------------
1126
1138
    CertFile = proplists:get_value(certfile, ServerOpts),
1127
1139
    KeyFile = proplists:get_value(keyfile, ServerOpts),
1128
1140
   
1129
 
    Cmd = "openssl s_server -accept " ++ integer_to_list(Port)  ++ 
 
1141
    Cmd = "openssl s_server -accept " ++ integer_to_list(Port)  ++  version_flag(Version) ++
1130
1142
        " -cert " ++ CertFile ++ " -key " ++ KeyFile ++ "",
1131
1143
 
1132
1144
    test_server:format("openssl cmd: ~p~n", [Cmd]),
1161
1173
    
1162
1174
    Result = ssl_test_lib:wait_for_result(Client, ok),    
1163
1175
 
 
1176
    %% Clean close down!   Server needs to be closed first !!
1164
1177
    close_port(OpenSslPort),
1165
 
    %% Clean close down!
1166
1178
    ssl_test_lib:close(Client),
1167
 
    receive 
1168
 
        {'EXIT', Client, normal} ->
1169
 
            ok
1170
 
    end,
1171
1179
    
1172
1180
    Return = case Result of
1173
1181
                 ok ->
1178
1186
    process_flag(trap_exit, false),
1179
1187
    Return.
1180
1188
 
 
1189
 
 
1190
version_flag(tlsv1) ->
 
1191
    " -tls1 ";
 
1192
version_flag(sslv3) ->
 
1193
    " -ssl3 ".
 
1194
 
1181
1195
%%--------------------------------------------------------------------
1182
1196
erlang_client_bad_openssl_server(doc) ->
1183
1197
    [""];
1193
1207
    Port = ssl_test_lib:inet_port(node()),
1194
1208
    CertFile = proplists:get_value(certfile, ServerOpts),
1195
1209
    KeyFile = proplists:get_value(keyfile, ServerOpts),
1196
 
   
 
1210
 
1197
1211
    Cmd = "openssl s_server -accept " ++ integer_to_list(Port)  ++ 
1198
 
        " -cert " ++ CertFile ++ " -key " ++ KeyFile ++ "", 
1199
 
    
 
1212
        " -cert " ++ CertFile ++ " -key " ++ KeyFile ++ "",
 
1213
 
1200
1214
    test_server:format("openssl cmd: ~p~n", [Cmd]),
1201
1215
 
1202
1216
    OpensslPort =  open_port({spawn, Cmd}, [stderr_to_stdout]), 
1203
 
 
 
1217
    
1204
1218
    wait_for_openssl_server(),
1205
1219
    
1206
1220
    Client0 = ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, 
1207
 
                                        {host, Hostname},
1208
 
                                        {from, self()}, 
1209
 
                                        {mfa, {?MODULE, server_sent_garbage, []}},
1210
 
                                        {options, 
1211
 
                                         [{versions, [tlsv1]} | ClientOpts]}]),
 
1221
                                         {host, Hostname},
 
1222
                                         {from, self()}, 
 
1223
                                        {mfa, {?MODULE, server_sent_garbage, []}},
 
1224
                                         {options,
 
1225
                                          [{versions, [tlsv1]} | ClientOpts]}]),
1212
1226
    
1213
1227
    %% Send garbage
1214
1228
    port_command(OpensslPort, ?OPENSSL_GARBAGE),
1215
 
    
 
1229
 
1216
1230
    test_server:sleep(?SLEEP),
1217
1231
 
1218
1232
    Client0 ! server_sent_garbage,
1222
1236
    ssl_test_lib:close(Client0),
1223
1237
    
1224
1238
    %% Make sure openssl does not hang and leave zombie process
1225
 
    Client1 = ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, 
1226
 
                                         {host, Hostname},
1227
 
                                         {from, self()}, 
1228
 
                                         {mfa, {ssl_test_lib, no_result_msg, []}},
1229
 
                                         {options, 
1230
 
                                          [{versions, [tlsv1]} | ClientOpts]}]),
1231
 
    
 
1239
    Client1 = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
 
1240
                                         {host, Hostname},
 
1241
                                         {from, self()},
 
1242
                                         {mfa, {ssl_test_lib, no_result_msg, []}},
 
1243
                                         {options,
 
1244
                                          [{versions, [tlsv1]} | ClientOpts]}]),
 
1245
 
 
1246
    %% Clean close down!   Server needs to be closed first !!
 
1247
    close_port(OpensslPort),
1232
1248
    ssl_test_lib:close(Client1),
1233
 
    
1234
 
    %% Clean close down!
1235
 
    close_port(OpensslPort),
1236
1249
    process_flag(trap_exit, false),
1237
1250
    ok.
1238
1251
 
1291
1304
                                   {mfa, {ssl_test_lib, no_result, []}},
1292
1305
                                   {from, self()},  {options, ClientOpts}]),  
1293
1306
 
 
1307
    %% Clean close down!   Server needs to be closed first !!
1294
1308
    close_port(OpensslPort),
1295
1309
    ssl_test_lib:close(Client2),
1296
1310
    process_flag(trap_exit, false).
1323
1337
    
1324
1338
    ssl_test_lib:check_result(Server, {error,"protocol version"}),
1325
1339
    
 
1340
    %% Clean close down!   Server needs to be closed first !!
1326
1341
    ssl_test_lib:close(Server),
1327
 
 
1328
1342
    close_port(OpenSslPort),
1329
1343
    process_flag(trap_exit, false),
1330
1344
    ok.
1340
1354
            %% open_ssl server sometimes hangs waiting in blocking read
1341
1355
            ssl:send(Socket, "Got it"), 
1342
1356
            ok;
 
1357
        {ssl, Socket, Byte} when length(Byte) == 1 ->
 
1358
            erlang_ssl_receive(Socket, tl(Data));
1343
1359
        {Port, {data,Debug}} when is_port(Port) ->
1344
1360
            io:format("openssl ~s~n",[Debug]),
1345
1361
            erlang_ssl_receive(Socket,Data);
1427
1443
        _ ->
1428
1444
            Config
1429
1445
    end.
 
1446
 
 
1447
check_sane_openssl_sslv2(Config) ->
 
1448
    case os:cmd("openssl version") of
 
1449
        "OpenSSL 1.0.0e" ++ _ ->
 
1450
            {skip, "Known option bug"};
 
1451
        _ ->
 
1452
            Config
 
1453
    end.