2 # Before `make install' is performed this script should be runnable with
3 # `make test'. After `make install' it should work as `perl t/core.t'
8 eval {require "t/ssl_settings.req";} ||
9 eval {require "ssl_settings.req";};
11 print "1..0 # Skipped: test cert has expired\n";
14 $NET_SSLEAY_VERSION = $Net::SSLeay::VERSION;
20 if (/MacOS/ or /VOS/ or /vmesa/ or /riscos/ or /amigaos/) {
21 print "1..0 # Skipped: fork not implemented on this platform\n";
26 if ($NET_SSLEAY_VERSION < 1.26) {
27 print "1..0 \# Skipped: Net::SSLeay version less than 1.26\n";
31 print "1..$numtests\n";
34 (SSL_key_file => "certs/server-key.enc",
35 SSL_passwd_cb => sub { return "bluebell" },
36 LocalAddr => $SSL_SERVER_ADDR,
41 SSL_verify_mode => 0x00,
42 SSL_ca_file => "certs/test-ca.pem",
44 SSL_cert_file => "certs/server-cert.pem",
45 SSL_version => 'TLSv1',
46 SSL_cipher_list => 'HIGH');
49 my @servers = (IO::Socket::SSL->new( %server_options),
50 IO::Socket::SSL->new( %server_options),
51 IO::Socket::SSL->new( %server_options));
53 if (!$servers[0] or !$servers[1] or !$servers[2]) {
54 print "not ok # Server init\n";
57 &ok("Server initialization");
59 my ($SSL_SERVER_PORT) = unpack_sockaddr_in( $servers[0]->sockname );
60 my ($SSL_SERVER_PORT2) = unpack_sockaddr_in( $servers[1]->sockname );
61 my ($SSL_SERVER_PORT3) = unpack_sockaddr_in( $servers[2]->sockname );
65 close $_ foreach @servers;
66 my $ctx = new IO::Socket::SSL::SSL_Context
67 (SSL_key_file => "certs/client-key.enc",
68 SSL_passwd_cb => sub { return "opossum" },
69 SSL_verify_mode => 0x01,
70 SSL_ca_file => "certs/test-ca.pem",
73 SSL_cert_file => "certs/client-cert.pem",
74 SSL_version => 'TLSv1',
75 SSL_cipher_list => 'HIGH',
76 SSL_session_cache_size => 4);
79 if (! defined $ctx->{'session_cache'}) {
80 print "not ok \# Context init\n";
87 unless ($ctx->session_cache("bogus", "bogus", 0)) {
90 &ok("Superficial Cache Addition Test");
92 unless ($ctx->session_cache("bogus1", "bogus1", 0)) {
95 &ok("Superficial Cache Addition Test 2");
97 my $cache = $ctx->{'session_cache'};
99 if (keys(%$cache) != 4) {
102 &ok("Cache Keys Check 1");
104 unless ($cache->{'bogus1:bogus1'} and $cache->{'bogus:bogus'}) {
107 &ok("Cache Keys Check 2");
109 my ($bogus, $bogus1) = ($cache->{'bogus:bogus'}, $cache->{'bogus1:bogus1'});
110 unless ($cache->{'_head'} eq $bogus1) {
113 &ok("Cache Head Check");
115 unless ($bogus1->{prev} eq $bogus and
116 $bogus1->{next} eq $bogus and
117 $bogus->{prev} eq $bogus1 and
118 $bogus->{next} eq $bogus1) {
121 &ok("Cache Link Check");
124 IO::Socket::SSL::set_default_context($ctx);
126 my $sock3 = IO::Socket::INET->new(
127 PeerAddr => $SSL_SERVER_ADDR,
128 PeerPort => $SSL_SERVER_PORT3
131 IO::Socket::SSL->new(PeerAddr => $SSL_SERVER_ADDR, PeerPort => $SSL_SERVER_PORT),
132 IO::Socket::SSL->new(PeerAddr => $SSL_SERVER_ADDR, PeerPort => $SSL_SERVER_PORT2),
133 IO::Socket::SSL->start_SSL( $sock3 ),
136 if (!$clients[0] or !$clients[1] or !$clients[2]) {
137 print "not ok \# Client init\n";
142 # Make sure that first 'bogus' entry has been removed
143 if (keys(%$cache) != 6) {
146 &ok("Cache Keys Check 3");
148 if ($cache->{'bogus:bogus'}) {
151 &ok("Cache Removal Test");
153 if ($cache->{'_head'}->{prev} ne $bogus1) {
156 &ok("Cache Tail Check");
158 if ($cache->{'_head'} ne $cache->{"$SSL_SERVER_ADDR:$SSL_SERVER_PORT3"}) {
161 &ok("Cache Insertion Test");
163 my @server_ports = ($SSL_SERVER_PORT, $SSL_SERVER_PORT2, $SSL_SERVER_PORT3);
165 if (Net::SSLeay::get_session($clients[$_]->_get_ssl_object) ne
166 $cache->{"$SSL_SERVER_ADDR:$server_ports[$_]"}->{session}) {
169 &ok("Cache Entry Test $_");
173 @clients = (new IO::Socket::SSL(PeerAddr => $SSL_SERVER_ADDR, PeerPort => $SSL_SERVER_PORT),
174 new IO::Socket::SSL(PeerAddr => $SSL_SERVER_ADDR, PeerPort => $SSL_SERVER_PORT2),
175 new IO::Socket::SSL(PeerAddr => $SSL_SERVER_ADDR, PeerPort => $SSL_SERVER_PORT3));
177 if (keys(%$cache) != 6) {
180 &ok("Cache Keys Check 4");
182 if (!$cache->{'bogus1:bogus1'}) {
185 &ok("Cache Keys Check 5");
188 if (Net::SSLeay::get_session($clients[$_]->_get_ssl_object) ne
189 $cache->{"$SSL_SERVER_ADDR:$server_ports[$_]"}->{session}) {
192 &ok("Second Cache Entry Test $_");
193 unless ($clients[$_]->print("Test $_\n")) {
196 &ok("Write Test $_");
197 unless ($clients[$_]->readline eq "Ok $_\n") {
207 my @clients = map { scalar $_->accept } @servers;
208 if (!$clients[0] or !$clients[1] or !$clients[2]) {
209 print "not ok \# Client init\n";
214 close $_ foreach (@clients);
217 @clients = map { scalar $_->accept } @servers;
218 if (!$clients[0] or !$clients[1] or !$clients[2]) {
219 print "not ok \# Client init\n";
222 &ok("Client init 2");
225 unless ($clients[$_]->readline eq "Test $_\n") {
228 &ok("Server Read $_");
229 unless ($clients[$_]->print("Ok $_\n")) {
232 &ok("Server Write $_");
245 print "Bail Out! $IO::Socket::SSL::ERROR";