rspec-ssltls 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7635f72b8316eb0801a357f252c363202ea50a8a
4
- data.tar.gz: 5609957cc3fc4cb58dee2b719bce7405075e9722
3
+ metadata.gz: d4e6b41ab56f558b87703db57059c0f92818cf81
4
+ data.tar.gz: ff9624c700828c5840f2350ae571cffe33d7f2ca
5
5
  SHA512:
6
- metadata.gz: 1a1e4b32a265f40da8651b5868952f27c24513a8ba8a79d522d4ecc12871cc1b15a5ee35f651ae4c94e6c9b7aecbf13dd8113ae16ab75bbb850c97b09912d931
7
- data.tar.gz: fbbcaf923ef47cad4f88fd3888df07090dc9e8f129d326e5a36f6cb01822ef9acd86ce05d5c802d8e4210c8fb7149b5670a55c5bfd42686d060f9564e1f2e704
6
+ metadata.gz: 74a720c9dc8eb7fd047a439b1e2b653fa6c4b11836ed97d16738861b9d10e7607414b0ff323fab67e06a776ab624afe0ea2b14fe9996415e333212eb82b59e8e
7
+ data.tar.gz: 7f277309217156481b16f343d3111750f96abd6009b42fc91c6e3fffb8ed6daf5414c7d6e95249fff8581842af1737499fcb829c7594c2460683c859c2da1a87
data/README.md CHANGED
@@ -21,6 +21,15 @@ describe 'www.example.com:443' do
21
21
  it { is_expected.to have_certificate.subject(CN: '*.example.com') }
22
22
  it { is_expected.to have_certificate.issuer(CN: 'ca.example.org') }
23
23
  it { is_expected.to have_certificate.chain(0).subject(CN: '*.example.com') }
24
+ it do
25
+ is_expected.to have_certificate
26
+ .subject(CN: '*.example.com').valid_at('2020/09/12 19:00:05 JST')
27
+ end
28
+ it do
29
+ is_expected.to have_certificate
30
+ .subject(CN: '*.example.com')
31
+ .valid_in('2014/09/12 19:00:05 UTC', '2015/10/01 00:00:00 UTC')
32
+ end
24
33
  it { is_expected.to support_protocol('TLSv1_2') }
25
34
  it { is_expected.to support_cipher('AES256-SHA').protocol('TLSv1') }
26
35
  it { is_expected.to support_cipher('DES-CBC3-SHA').protocol('SSLv3') }
@@ -1,5 +1,6 @@
1
1
  require 'rspec_ssltls'
2
2
  require 'uri'
3
+ require 'time'
3
4
 
4
5
  RSpec::Matchers.define :have_certificate do
5
6
  match do |dest|
@@ -31,10 +32,25 @@ RSpec::Matchers.define :have_certificate do
31
32
  RspecSsltls::Util.add_string(@chain_string, "chain[#{n}]")
32
33
  end
33
34
 
35
+ chain :valid_at do |t|
36
+ @chain_string =
37
+ RspecSsltls::Util.add_string(@chain_string, "valiid at #{t}")
38
+ @t1 = t
39
+ @t2 = t
40
+ end
41
+
42
+ chain :valid_in do |t1, t2|
43
+ @chain_string = RspecSsltls::Util
44
+ .add_string(@chain_string, "valiid in #{t1} - #{t2}")
45
+ @t1 = t1
46
+ @t2 = t2
47
+ end
48
+
34
49
  def valid_cert?
35
50
  @result_cert = {}
36
51
  @result_cert.merge!(subject: valid_identifier?(:subject, @subject))
37
52
  @result_cert.merge!(issuer: valid_identifier?(:issuer, @issuer))
53
+ @result_cert.merge!(valid_in: valid_in?)
38
54
  @result_cert.values.all? { |r| r == true }
39
55
  end
40
56
 
@@ -68,6 +84,28 @@ RSpec::Matchers.define :have_certificate do
68
84
  RspecSsltls::Util.add_string(@chain_string, "#{key} #{kv}", ' ')
69
85
  end
70
86
 
87
+ def valid_in?
88
+ return true unless @t1 && @t2
89
+ fail 'Input time range is incorrect' if @t2 < @t1
90
+ parse_time
91
+
92
+ if @t1 == @t2
93
+ @result_string += " expected: valid in #{@t1} .. #{@t2}\n"
94
+ else
95
+ @result_string += " expected: valid at #{@t1}\n"
96
+ end
97
+ @result_string +=
98
+ " actual: valid in #{@peer_cert.not_before} .. #{@peer_cert.not_after}\n"
99
+
100
+ (@peer_cert.not_before..@peer_cert.not_after).cover?(@t1) &&
101
+ (@peer_cert.not_before..@peer_cert.not_after).cover?(@t2)
102
+ end
103
+
104
+ def parse_time
105
+ @t1 = Time.parse(@t1) unless @t1.respond_to?(:getutc)
106
+ @t2 = Time.parse(@t2) unless @t2.respond_to?(:getutc)
107
+ end
108
+
71
109
  description do
72
110
  "have a certificate#{@chain_string}"
73
111
  end
@@ -1,4 +1,4 @@
1
1
  # Easily test your SSL/TLS with RSpec.
2
2
  module RspecSsltls
3
- VERSION = '0.0.4'
3
+ VERSION = '0.0.5'
4
4
  end
@@ -22,6 +22,8 @@ example_ca_cert_name =
22
22
  ])
23
23
  example_ca_cert = OpenSSL::X509::Certificate.new
24
24
  example_ca_cert.subject = example_ca_cert_name
25
+ example_ca_cert.not_before = Time.utc(0, 0, 0, 1, 10, 2014, nil, nil, nil, nil)
26
+ example_ca_cert.not_after = Time.utc(0, 0, 0, 1, 10, 2022, nil, nil, nil, nil)
25
27
 
26
28
  example_cert_name =
27
29
  OpenSSL::X509::Name.new([%w(C JP),
@@ -33,6 +35,8 @@ example_cert_name =
33
35
  example_cert = OpenSSL::X509::Certificate.new
34
36
  example_cert.subject = example_cert_name
35
37
  example_cert.issuer = example_ca_cert_name
38
+ example_cert.not_before = Time.utc(5, 0, 19, 12, 9, 2014, nil, nil, nil, nil)
39
+ example_cert.not_after = Time.utc(0, 0, 0, 1, 10, 2015, nil, nil, nil, nil)
36
40
 
37
41
  describe 'rspec-ssltls matchers' do
38
42
  describe '#have_certificate' do
@@ -127,5 +131,63 @@ describe 'rspec-ssltls matchers' do
127
131
  OU: 'Example Div.'
128
132
  )
129
133
  end
134
+
135
+ it 'can evalutate having certificate subject valid_at' do
136
+ stub_ssl_socket(peer_cert_chain: [example_cert])
137
+ expect('www.example.com:443').to have_certificate
138
+ .subject(CN: '*.example.com')
139
+ .valid_at('2014/10/01 09:34 JST')
140
+
141
+ expect('www.example.com:443').to have_certificate
142
+ .subject(CN: '*.example.com',
143
+ C: 'JP',
144
+ ST: 'Tokyo',
145
+ O: 'Example Co., Ltd.',
146
+ OU: 'Example Div.'
147
+ )
148
+ .valid_at('2014/10/01 09:34 JST')
149
+ expect('www.example.com:443').not_to have_certificate
150
+ .subject(CN: '*.example.com')
151
+ .valid_at('2014/09/01 12:34 JST')
152
+ end
153
+
154
+ # show default description
155
+ it do
156
+ stub_ssl_socket(peer_cert_chain: [example_cert])
157
+ expect('www.example.com:443').to have_certificate
158
+ .subject(CN: '*.example.com')
159
+ .valid_at('2014/10/01 09:34 JST')
160
+ end
161
+
162
+ it 'can evalutate having certificate subject valid_in' do
163
+ stub_ssl_socket(peer_cert_chain: [example_cert])
164
+ expect('www.example.com:443').to have_certificate
165
+ .subject(CN: '*.example.com')
166
+ .valid_in('2014/09/12 19:00:05 UTC', '2015/10/01 00:00:00 UTC')
167
+
168
+ expect('www.example.com:443').to have_certificate
169
+ .subject(CN: '*.example.com',
170
+ C: 'JP',
171
+ ST: 'Tokyo',
172
+ O: 'Example Co., Ltd.',
173
+ OU: 'Example Div.'
174
+ )
175
+ .valid_in('2014/09/12 19:00:05 UTC', '2015/10/01 00:00:00 UTC')
176
+ expect('www.example.com:443').not_to have_certificate
177
+ .subject(CN: '*.example.com')
178
+ .valid_in('2014/09/12 19:00:05 UTC', '2025/10/01 00:00:00 UTC')
179
+ expect('www.example.com:443').not_to have_certificate
180
+ .subject(CN: '*.example.com')
181
+ .valid_in(Time.parse('2014/09/12 19:00:05 UTC'),
182
+ Time.parse('2025/10/01 00:00:00 UTC'))
183
+ end
184
+
185
+ # show default description
186
+ it do
187
+ stub_ssl_socket(peer_cert_chain: [example_cert])
188
+ expect('www.example.com:443').to have_certificate
189
+ .subject(CN: '*.example.com')
190
+ .valid_in('2014/09/12 19:00:05 UTC', '2015/10/01 00:00:00 UTC')
191
+ end
130
192
  end
131
193
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-ssltls
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - OTA Hiroshi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-23 00:00:00.000000000 Z
11
+ date: 2014-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec