jruby-openssl 0.8.0.pre3 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. data/Manifest.txt +5 -124
  2. data/Rakefile +3 -3
  3. data/lib/shared/jopenssl.jar +0 -0
  4. data/lib/shared/jopenssl/version.rb +1 -1
  5. metadata +10 -116
  6. data/test/1.8/ssl_server.rb +0 -99
  7. data/test/1.8/test_asn1.rb +0 -212
  8. data/test/1.8/test_cipher.rb +0 -193
  9. data/test/1.8/test_config.rb +0 -290
  10. data/test/1.8/test_digest.rb +0 -88
  11. data/test/1.8/test_ec.rb +0 -128
  12. data/test/1.8/test_hmac.rb +0 -46
  13. data/test/1.8/test_ns_spki.rb +0 -59
  14. data/test/1.8/test_pair.rb +0 -149
  15. data/test/1.8/test_pkcs7.rb +0 -489
  16. data/test/1.8/test_pkey_rsa.rb +0 -49
  17. data/test/1.8/test_ssl.rb +0 -1032
  18. data/test/1.8/test_x509cert.rb +0 -277
  19. data/test/1.8/test_x509crl.rb +0 -253
  20. data/test/1.8/test_x509ext.rb +0 -99
  21. data/test/1.8/test_x509name.rb +0 -290
  22. data/test/1.8/test_x509req.rb +0 -195
  23. data/test/1.8/test_x509store.rb +0 -246
  24. data/test/1.8/utils.rb +0 -144
  25. data/test/1.9/ssl_server.rb +0 -81
  26. data/test/1.9/test_asn1.rb +0 -589
  27. data/test/1.9/test_bn.rb +0 -23
  28. data/test/1.9/test_buffering.rb +0 -88
  29. data/test/1.9/test_cipher.rb +0 -107
  30. data/test/1.9/test_config.rb +0 -288
  31. data/test/1.9/test_digest.rb +0 -118
  32. data/test/1.9/test_engine.rb +0 -15
  33. data/test/1.9/test_hmac.rb +0 -32
  34. data/test/1.9/test_ns_spki.rb +0 -50
  35. data/test/1.9/test_ocsp.rb +0 -47
  36. data/test/1.9/test_pair.rb +0 -257
  37. data/test/1.9/test_pkcs12.rb +0 -209
  38. data/test/1.9/test_pkcs7.rb +0 -156
  39. data/test/1.9/test_pkey_dh.rb +0 -72
  40. data/test/1.9/test_pkey_dsa.rb +0 -224
  41. data/test/1.9/test_pkey_ec.rb +0 -182
  42. data/test/1.9/test_pkey_rsa.rb +0 -244
  43. data/test/1.9/test_ssl.rb +0 -499
  44. data/test/1.9/test_ssl_session.rb +0 -327
  45. data/test/1.9/test_x509cert.rb +0 -217
  46. data/test/1.9/test_x509crl.rb +0 -221
  47. data/test/1.9/test_x509ext.rb +0 -69
  48. data/test/1.9/test_x509name.rb +0 -366
  49. data/test/1.9/test_x509req.rb +0 -150
  50. data/test/1.9/test_x509store.rb +0 -229
  51. data/test/1.9/utils.rb +0 -304
  52. data/test/cert_with_ec_pk.cer +0 -27
  53. data/test/fixture/ca-bundle.crt +0 -2794
  54. data/test/fixture/ca_path/72fa7371.0 +0 -19
  55. data/test/fixture/ca_path/verisign.pem +0 -19
  56. data/test/fixture/cacert.pem +0 -23
  57. data/test/fixture/cert_localhost.pem +0 -19
  58. data/test/fixture/common.pem +0 -48
  59. data/test/fixture/ids_in_subject_rdn_set.pem +0 -31
  60. data/test/fixture/imaps/cacert.pem +0 -60
  61. data/test/fixture/imaps/server.crt +0 -61
  62. data/test/fixture/imaps/server.key +0 -15
  63. data/test/fixture/key_then_cert.pem +0 -34
  64. data/test/fixture/keypair.pem +0 -27
  65. data/test/fixture/localhost_keypair.pem +0 -18
  66. data/test/fixture/max.pem +0 -29
  67. data/test/fixture/purpose/b70a5bc1.0 +0 -24
  68. data/test/fixture/purpose/ca/PASSWD_OF_CA_KEY_IS_1234 +0 -0
  69. data/test/fixture/purpose/ca/ca_config.rb +0 -37
  70. data/test/fixture/purpose/ca/cacert.pem +0 -24
  71. data/test/fixture/purpose/ca/newcerts/2_cert.pem +0 -19
  72. data/test/fixture/purpose/ca/newcerts/3_cert.pem +0 -19
  73. data/test/fixture/purpose/ca/newcerts/4_cert.pem +0 -19
  74. data/test/fixture/purpose/ca/private/cakeypair.pem +0 -30
  75. data/test/fixture/purpose/ca/serial +0 -1
  76. data/test/fixture/purpose/cacert.pem +0 -24
  77. data/test/fixture/purpose/scripts/gen_cert.rb +0 -127
  78. data/test/fixture/purpose/scripts/gen_csr.rb +0 -50
  79. data/test/fixture/purpose/scripts/init_ca.rb +0 -66
  80. data/test/fixture/purpose/sslclient.pem +0 -19
  81. data/test/fixture/purpose/sslclient/csr.pem +0 -10
  82. data/test/fixture/purpose/sslclient/keypair.pem +0 -15
  83. data/test/fixture/purpose/sslclient/sslclient.pem +0 -19
  84. data/test/fixture/purpose/sslserver.pem +0 -19
  85. data/test/fixture/purpose/sslserver/csr.pem +0 -10
  86. data/test/fixture/purpose/sslserver/keypair.pem +0 -15
  87. data/test/fixture/purpose/sslserver/sslserver.pem +0 -19
  88. data/test/fixture/purpose/sslserver_no_dsig_in_keyUsage.pem +0 -19
  89. data/test/fixture/selfcert.pem +0 -23
  90. data/test/fixture/verisign.pem +0 -19
  91. data/test/fixture/verisign_c3.pem +0 -14
  92. data/test/ref/a.out +0 -0
  93. data/test/ref/compile.rb +0 -8
  94. data/test/ref/pkcs1 +0 -0
  95. data/test/ref/pkcs1.c +0 -21
  96. data/test/ruby/envutil.rb +0 -208
  97. data/test/ruby/ut_eof.rb +0 -128
  98. data/test/test_all.rb +0 -1
  99. data/test/test_certificate.rb +0 -132
  100. data/test/test_cipher.rb +0 -197
  101. data/test/test_imaps.rb +0 -107
  102. data/test/test_integration.rb +0 -144
  103. data/test/test_openssl.rb +0 -4
  104. data/test/test_parse_certificate.rb +0 -27
  105. data/test/test_pkcs7.rb +0 -56
  106. data/test/test_pkey_dsa.rb +0 -180
  107. data/test/test_pkey_rsa.rb +0 -329
  108. data/test/test_ssl.rb +0 -97
  109. data/test/test_x509store.rb +0 -168
@@ -1,118 +0,0 @@
1
- require_relative 'utils'
2
-
3
- if defined?(OpenSSL)
4
-
5
- class OpenSSL::TestDigest < Test::Unit::TestCase
6
- def setup
7
- @d1 = OpenSSL::Digest::Digest::new("MD5")
8
- @d2 = OpenSSL::Digest::MD5.new
9
- @md = Digest::MD5.new
10
- @data = "DATA"
11
- end
12
-
13
- def teardown
14
- @d1 = @d2 = @md = nil
15
- end
16
-
17
- def test_digest
18
- assert_equal(@md.digest, @d1.digest)
19
- assert_equal(@md.hexdigest, @d1.hexdigest)
20
- @d1 << @data
21
- @d2 << @data
22
- @md << @data
23
- assert_equal(@md.digest, @d1.digest)
24
- assert_equal(@md.hexdigest, @d1.hexdigest)
25
- assert_equal(@d1.digest, @d2.digest)
26
- assert_equal(@d1.hexdigest, @d2.hexdigest)
27
- assert_equal(@md.digest, OpenSSL::Digest::MD5.digest(@data))
28
- assert_equal(@md.hexdigest, OpenSSL::Digest::MD5.hexdigest(@data))
29
- end
30
-
31
- def test_eql
32
- assert(@d1 == @d2, "==")
33
- d = @d1.clone
34
- assert(d == @d1, "clone")
35
- end
36
-
37
- def test_info
38
- assert_equal("MD5", @d1.name, "name")
39
- assert_equal("MD5", @d2.name, "name")
40
- assert_equal(16, @d1.size, "size")
41
- end
42
-
43
- def test_dup
44
- @d1.update(@data)
45
- assert_equal(@d1.name, @d1.dup.name, "dup")
46
- assert_equal(@d1.name, @d1.clone.name, "clone")
47
- assert_equal(@d1.digest, @d1.clone.digest, "clone .digest")
48
- end
49
-
50
- def test_reset
51
- @d1.update(@data)
52
- dig1 = @d1.digest
53
- @d1.reset
54
- @d1.update(@data)
55
- dig2 = @d1.digest
56
- assert_equal(dig1, dig2, "reset")
57
- end
58
-
59
- def test_digest_constants
60
- algs = %w(DSS1 MD4 MD5 RIPEMD160 SHA SHA1)
61
- if OpenSSL::OPENSSL_VERSION_NUMBER > 0x00908000
62
- algs += %w(SHA224 SHA256 SHA384 SHA512)
63
- end
64
- algs.each do |alg|
65
- assert_not_nil(OpenSSL::Digest.new(alg))
66
- klass = OpenSSL::Digest.const_get(alg)
67
- assert_not_nil(klass.new)
68
- end
69
- end
70
-
71
- def test_digest_by_oid_and_name
72
- check_digest(OpenSSL::ASN1::ObjectId.new("MD5"))
73
- check_digest(OpenSSL::ASN1::ObjectId.new("SHA1"))
74
- end
75
-
76
- if OpenSSL::OPENSSL_VERSION_NUMBER > 0x00908000
77
- def encode16(str)
78
- str.unpack("H*").first
79
- end
80
-
81
- def test_098_features
82
- sha224_a = "abd37534c7d9a2efb9465de931cd7055ffdb8879563ae98078d6d6d5"
83
- sha256_a = "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"
84
- sha384_a = "54a59b9f22b0b80880d8427e548b7c23abd873486e1f035dce9cd697e85175033caa88e6d57bc35efae0b5afd3145f31"
85
- sha512_a = "1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75"
86
-
87
- assert_equal(sha224_a, OpenSSL::Digest::SHA224.hexdigest("a"))
88
- assert_equal(sha256_a, OpenSSL::Digest::SHA256.hexdigest("a"))
89
- assert_equal(sha384_a, OpenSSL::Digest::SHA384.hexdigest("a"))
90
- assert_equal(sha512_a, OpenSSL::Digest::SHA512.hexdigest("a"))
91
-
92
- assert_equal(sha224_a, encode16(OpenSSL::Digest::SHA224.digest("a")))
93
- assert_equal(sha256_a, encode16(OpenSSL::Digest::SHA256.digest("a")))
94
- assert_equal(sha384_a, encode16(OpenSSL::Digest::SHA384.digest("a")))
95
- assert_equal(sha512_a, encode16(OpenSSL::Digest::SHA512.digest("a")))
96
- end
97
-
98
- def test_digest_by_oid_and_name_sha2
99
- check_digest(OpenSSL::ASN1::ObjectId.new("SHA224"))
100
- check_digest(OpenSSL::ASN1::ObjectId.new("SHA256"))
101
- check_digest(OpenSSL::ASN1::ObjectId.new("SHA384"))
102
- check_digest(OpenSSL::ASN1::ObjectId.new("SHA512"))
103
- end
104
- end
105
-
106
- private
107
-
108
- def check_digest(oid)
109
- d = OpenSSL::Digest.new(oid.sn)
110
- assert_not_nil(d)
111
- d = OpenSSL::Digest.new(oid.ln)
112
- assert_not_nil(d)
113
- d = OpenSSL::Digest.new(oid.oid)
114
- assert_not_nil(d)
115
- end
116
- end
117
-
118
- end
@@ -1,15 +0,0 @@
1
- require_relative 'utils'
2
-
3
- if defined?(OpenSSL) && defined?(OpenSSL::Engine)
4
-
5
- class OpenSSL::TestEngine < Test::Unit::TestCase
6
-
7
- def test_engines_free # [ruby-dev:44173]
8
- OpenSSL::Engine.load
9
- OpenSSL::Engine.engines
10
- OpenSSL::Engine.engines
11
- end
12
-
13
- end
14
-
15
- end
@@ -1,32 +0,0 @@
1
- require_relative 'utils'
2
-
3
- class OpenSSL::TestHMAC < Test::Unit::TestCase
4
- def setup
5
- @digest = OpenSSL::Digest::MD5
6
- @key = "KEY"
7
- @data = "DATA"
8
- @h1 = OpenSSL::HMAC.new(@key, @digest.new)
9
- @h2 = OpenSSL::HMAC.new(@key, "MD5")
10
- end
11
-
12
- def teardown
13
- end
14
-
15
- def test_hmac
16
- @h1.update(@data)
17
- @h2.update(@data)
18
- assert_equal(@h1.digest, @h2.digest)
19
-
20
- assert_equal(OpenSSL::HMAC.digest(@digest.new, @key, @data), @h1.digest, "digest")
21
- assert_equal(OpenSSL::HMAC.hexdigest(@digest.new, @key, @data), @h1.hexdigest, "hexdigest")
22
-
23
- assert_equal(OpenSSL::HMAC.digest("MD5", @key, @data), @h2.digest, "digest")
24
- assert_equal(OpenSSL::HMAC.hexdigest("MD5", @key, @data), @h2.hexdigest, "hexdigest")
25
- end
26
-
27
- def test_dup
28
- @h1.update(@data)
29
- h = @h1.dup
30
- assert_equal(@h1.digest, h.digest, "dup digest")
31
- end
32
- end if defined?(OpenSSL)
@@ -1,50 +0,0 @@
1
- require_relative 'utils'
2
-
3
- if defined?(OpenSSL)
4
-
5
- class OpenSSL::TestNSSPI < Test::Unit::TestCase
6
- def setup
7
- # This request data is adopt from the specification of
8
- # "Netscape Extensions for User Key Generation".
9
- # -- http://wp.netscape.com/eng/security/comm4-keygen.html
10
- @b64 = "MIHFMHEwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAnX0TILJrOMUue+PtwBRE6XfV"
11
- @b64 << "WtKQbsshxk5ZhcUwcwyvcnIq9b82QhJdoACdD34rqfCAIND46fXKQUnb0mvKzQID"
12
- @b64 << "AQABFhFNb3ppbGxhSXNNeUZyaWVuZDANBgkqhkiG9w0BAQQFAANBAAKv2Eex2n/S"
13
- @b64 << "r/7iJNroWlSzSMtTiQTEB+ADWHGj9u1xrUrOilq/o2cuQxIfZcNZkYAkWP4DubqW"
14
- @b64 << "i0//rgBvmco="
15
- end
16
-
17
- def test_build_data
18
- key1 = OpenSSL::TestUtils::TEST_KEY_RSA1024
19
- key2 = OpenSSL::TestUtils::TEST_KEY_RSA2048
20
- spki = OpenSSL::Netscape::SPKI.new
21
- spki.challenge = "RandomString"
22
- spki.public_key = key1.public_key
23
- spki.sign(key1, OpenSSL::Digest::SHA1.new)
24
- assert(spki.verify(spki.public_key))
25
- assert(spki.verify(key1.public_key))
26
- assert(!spki.verify(key2.public_key))
27
-
28
- der = spki.to_der
29
- spki = OpenSSL::Netscape::SPKI.new(der)
30
- assert_equal("RandomString", spki.challenge)
31
- assert_equal(key1.public_key.to_der, spki.public_key.to_der)
32
- assert(spki.verify(spki.public_key))
33
- end
34
-
35
- def test_decode_data
36
- spki = OpenSSL::Netscape::SPKI.new(@b64)
37
- assert_equal(@b64, spki.to_pem)
38
- assert_equal(@b64.unpack("m").first, spki.to_der)
39
- assert_equal("MozillaIsMyFriend", spki.challenge)
40
- assert_equal(OpenSSL::PKey::RSA, spki.public_key.class)
41
-
42
- spki = OpenSSL::Netscape::SPKI.new(@b64.unpack("m").first)
43
- assert_equal(@b64, spki.to_pem)
44
- assert_equal(@b64.unpack("m").first, spki.to_der)
45
- assert_equal("MozillaIsMyFriend", spki.challenge)
46
- assert_equal(OpenSSL::PKey::RSA, spki.public_key.class)
47
- end
48
- end
49
-
50
- end
@@ -1,47 +0,0 @@
1
- require_relative "utils"
2
-
3
- if defined?(OpenSSL)
4
-
5
- class OpenSSL::TestOCSP < Test::Unit::TestCase
6
- def setup
7
- ca_subj = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=TestCA")
8
- ca_key = OpenSSL::TestUtils::TEST_KEY_RSA1024
9
- ca_serial = 0xabcabcabcabc
10
-
11
- subj = OpenSSL::X509::Name.parse("/DC=org/DC=ruby-lang/CN=TestCert")
12
- @key = OpenSSL::TestUtils::TEST_KEY_RSA1024
13
- serial = 0xabcabcabcabd
14
-
15
- now = Time.at(Time.now.to_i) # suppress usec
16
- dgst = OpenSSL::Digest::SHA1.new
17
-
18
- @ca_cert = OpenSSL::TestUtils.issue_cert(
19
- ca_subj, ca_key, ca_serial, now, now+3600, [], nil, nil, dgst)
20
- @cert = OpenSSL::TestUtils.issue_cert(
21
- subj, @key, serial, now, now+3600, [], @ca_cert, nil, dgst)
22
- end
23
-
24
- def test_new_certificate_id
25
- cid = OpenSSL::OCSP::CertificateId.new(@cert, @ca_cert)
26
- assert_kind_of OpenSSL::OCSP::CertificateId, cid
27
- assert_equal @cert.serial, cid.serial
28
- end
29
-
30
- def test_new_certificate_id_with_digest
31
- cid = OpenSSL::OCSP::CertificateId.new(@cert, @ca_cert, OpenSSL::Digest::SHA256.new)
32
- assert_kind_of OpenSSL::OCSP::CertificateId, cid
33
- assert_equal @cert.serial, cid.serial
34
- end if defined?(OpenSSL::Digest::SHA256)
35
-
36
- def test_new_ocsp_request
37
- request = OpenSSL::OCSP::Request.new
38
- cid = OpenSSL::OCSP::CertificateId.new(@cert, @ca_cert, OpenSSL::Digest::SHA1.new)
39
- request.add_certid(cid)
40
- request.sign(@cert, @key, [@cert])
41
- assert_kind_of OpenSSL::OCSP::Request, request
42
- # in current implementation not same instance of certificate id, but should contain same data
43
- assert_equal cid.serial, request.certid.first.serial
44
- end
45
- end
46
-
47
- end
@@ -1,257 +0,0 @@
1
- require_relative 'utils'
2
-
3
- if defined?(OpenSSL)
4
-
5
- require 'socket'
6
- require_relative '../ruby/ut_eof'
7
-
8
- module SSLPair
9
- DHParam = OpenSSL::PKey::DH.new(128)
10
- def server
11
- host = "127.0.0.1"
12
- port = 0
13
- ctx = OpenSSL::SSL::SSLContext.new()
14
- ctx.ciphers = "ADH"
15
- ctx.tmp_dh_callback = proc { DHParam }
16
- tcps = TCPServer.new(host, port)
17
- ssls = OpenSSL::SSL::SSLServer.new(tcps, ctx)
18
- return ssls
19
- end
20
-
21
- def client(port)
22
- host = "127.0.0.1"
23
- ctx = OpenSSL::SSL::SSLContext.new()
24
- ctx.ciphers = "ADH"
25
- s = TCPSocket.new(host, port)
26
- ssl = OpenSSL::SSL::SSLSocket.new(s, ctx)
27
- ssl.connect
28
- ssl.sync_close = true
29
- ssl
30
- end
31
-
32
- def ssl_pair
33
- ssls = server
34
- th = Thread.new {
35
- ns = ssls.accept
36
- ssls.close
37
- ns
38
- }
39
- port = ssls.to_io.addr[1]
40
- c = client(port)
41
- s = th.value
42
- if block_given?
43
- begin
44
- yield c, s
45
- ensure
46
- c.close unless c.closed?
47
- s.close unless s.closed?
48
- end
49
- else
50
- return c, s
51
- end
52
- ensure
53
- if th && th.alive?
54
- th.kill
55
- th.join
56
- end
57
- end
58
- end
59
-
60
- class OpenSSL::TestEOF1 < Test::Unit::TestCase
61
- include TestEOF
62
- include SSLPair
63
-
64
- def open_file(content)
65
- s1, s2 = ssl_pair
66
- Thread.new { s2 << content; s2.close }
67
- yield s1
68
- end
69
- end
70
-
71
- class OpenSSL::TestEOF2 < Test::Unit::TestCase
72
- include TestEOF
73
- include SSLPair
74
-
75
- def open_file(content)
76
- s1, s2 = ssl_pair
77
- Thread.new { s1 << content; s1.close }
78
- yield s2
79
- end
80
- end
81
-
82
- class OpenSSL::TestPair < Test::Unit::TestCase
83
- include SSLPair
84
-
85
- def test_getc
86
- ssl_pair {|s1, s2|
87
- s1 << "a"
88
- assert_equal(?a, s2.getc)
89
- }
90
- end
91
-
92
- def test_readpartial
93
- ssl_pair {|s1, s2|
94
- s2.write "a\nbcd"
95
- assert_equal("a\n", s1.gets)
96
- read = s1.readpartial(10)
97
- assert_equal("bcd"[0, read.bytesize], read)
98
- s1.read(read.bytesize - 3) # drop unread bytes
99
- s2.write "efg"
100
- read = s1.readpartial(10)
101
- assert_equal("efg"[0, read.bytesize], read)
102
- rest = 3 - read.bytesize
103
- while rest > 0
104
- rest -= s1.readpartial(rest).size
105
- end
106
- s2.close
107
- assert_raise(EOFError) { s1.readpartial(10) }
108
- assert_raise(EOFError) { s1.readpartial(10) }
109
- assert_equal("", s1.readpartial(0))
110
- }
111
- end
112
-
113
- def test_readall
114
- ssl_pair {|s1, s2|
115
- s2.close
116
- assert_equal("", s1.read)
117
- }
118
- end
119
-
120
- def test_readline
121
- ssl_pair {|s1, s2|
122
- s2.close
123
- assert_raise(EOFError) { s1.readline }
124
- }
125
- end
126
-
127
- def test_puts_meta
128
- ssl_pair {|s1, s2|
129
- begin
130
- old = $/
131
- $/ = '*'
132
- s1.puts 'a'
133
- ensure
134
- $/ = old
135
- end
136
- s1.close
137
- assert_equal("a\n", s2.read)
138
- }
139
- end
140
-
141
- def test_puts_empty
142
- ssl_pair {|s1, s2|
143
- s1.puts
144
- s1.close
145
- assert_equal("\n", s2.read)
146
- }
147
- end
148
-
149
- def test_read_nonblock
150
- ssl_pair {|s1, s2|
151
- err = nil
152
- assert_raise(OpenSSL::SSL::SSLError) {
153
- begin
154
- s2.read_nonblock(10)
155
- ensure
156
- err = $!
157
- end
158
- }
159
- assert_kind_of(IO::WaitReadable, err)
160
- s1.write "abc\ndef\n"
161
- IO.select([s2])
162
- assert_equal("ab", s2.read_nonblock(2))
163
- assert_equal("c\n", s2.gets)
164
- ret = nil
165
- assert_nothing_raised("[ruby-core:20298]") { ret = s2.read_nonblock(10) }
166
- assert_equal("def\n", ret)
167
- }
168
- end
169
-
170
- def test_write_nonblock
171
- ssl_pair {|s1, s2|
172
- n = 0
173
- begin
174
- n += s1.write_nonblock("a" * 100000)
175
- n += s1.write_nonblock("b" * 100000)
176
- n += s1.write_nonblock("c" * 100000)
177
- n += s1.write_nonblock("d" * 100000)
178
- n += s1.write_nonblock("e" * 100000)
179
- n += s1.write_nonblock("f" * 100000)
180
- rescue IO::WaitWritable
181
- end
182
- s1.close
183
- assert_equal(n, s2.read.length)
184
- }
185
- end
186
-
187
- def test_write_nonblock_with_buffered_data
188
- ssl_pair {|s1, s2|
189
- s1.write "foo"
190
- s1.write_nonblock("bar")
191
- s1.write "baz"
192
- s1.close
193
- assert_equal("foobarbaz", s2.read)
194
- }
195
- end
196
-
197
- def test_connect_accept_nonblock
198
- host = "127.0.0.1"
199
- port = 0
200
- ctx = OpenSSL::SSL::SSLContext.new()
201
- ctx.ciphers = "ADH"
202
- ctx.tmp_dh_callback = proc { DHParam }
203
- serv = TCPServer.new(host, port)
204
-
205
- port = serv.connect_address.ip_port
206
-
207
- sock1 = TCPSocket.new(host, port)
208
- sock2 = serv.accept
209
- serv.close
210
-
211
- th = Thread.new {
212
- s2 = OpenSSL::SSL::SSLSocket.new(sock2, ctx)
213
- s2.sync_close = true
214
- begin
215
- sleep 0.2
216
- s2.accept_nonblock
217
- rescue IO::WaitReadable
218
- IO.select([s2])
219
- retry
220
- rescue IO::WaitWritable
221
- IO.select(nil, [s2])
222
- retry
223
- end
224
- s2
225
- }
226
-
227
- sleep 0.1
228
- ctx = OpenSSL::SSL::SSLContext.new()
229
- ctx.ciphers = "ADH"
230
- s1 = OpenSSL::SSL::SSLSocket.new(sock1, ctx)
231
- begin
232
- sleep 0.2
233
- s1.connect_nonblock
234
- rescue IO::WaitReadable
235
- IO.select([s1])
236
- retry
237
- rescue IO::WaitWritable
238
- IO.select(nil, [s1])
239
- retry
240
- end
241
- s1.sync_close = true
242
-
243
- s2 = th.value
244
-
245
- s1.print "a\ndef"
246
- assert_equal("a\n", s2.gets)
247
- ensure
248
- s1.close if s1 && !s1.closed?
249
- s2.close if s2 && !s2.closed?
250
- serv.close if serv && !serv.closed?
251
- sock1.close if sock1 && !sock1.closed?
252
- sock2.close if sock2 && !sock2.closed?
253
- end
254
-
255
- end
256
-
257
- end