hieracles 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/Gemfile +2 -0
- data/README.md +54 -8
- data/bin/hc +12 -6
- data/bin/ppdb +42 -0
- data/hc.1 +50 -8
- data/lib/hieracles.rb +2 -2
- data/lib/hieracles/config.rb +31 -19
- data/lib/hieracles/format.rb +4 -0
- data/lib/hieracles/formats/console.rb +49 -16
- data/lib/hieracles/formats/csv.rb +12 -8
- data/lib/hieracles/formats/json.rb +19 -6
- data/lib/hieracles/formats/plain.rb +24 -3
- data/lib/hieracles/formats/rawyaml.rb +4 -0
- data/lib/hieracles/formats/yaml.rb +4 -0
- data/lib/hieracles/node.rb +55 -10
- data/lib/hieracles/notification.rb +31 -0
- data/lib/hieracles/options/hc.rb +109 -0
- data/lib/hieracles/options/ppdb.rb +32 -0
- data/lib/hieracles/optparse.rb +4 -43
- data/lib/hieracles/puppetdb.rb +12 -0
- data/lib/hieracles/puppetdb/apierror.rb +10 -0
- data/lib/hieracles/puppetdb/client.rb +63 -0
- data/lib/hieracles/puppetdb/filter.rb +15 -0
- data/lib/hieracles/puppetdb/fixsslconnectionadapter.rb +25 -0
- data/lib/hieracles/puppetdb/query.rb +79 -0
- data/lib/hieracles/puppetdb/request.rb +44 -0
- data/lib/hieracles/puppetdb/response.rb +14 -0
- data/ppdb.1 +158 -0
- data/spec/files/config.yml +2 -0
- data/spec/files/config_withdb.yml +9 -0
- data/spec/files/facts.json +110 -0
- data/spec/files/facts.yaml +103 -0
- data/spec/files/hiera_columns.yaml +16 -0
- data/spec/files/hiera_deep.yaml +17 -0
- data/spec/files/hiera_deeper.yaml +17 -0
- data/spec/files/ssl/bad-ca.crt +1 -0
- data/spec/files/ssl/bad-cert.crt +1 -0
- data/spec/files/ssl/bad-key.pem +1 -0
- data/spec/files/ssl/ca.crt +16 -0
- data/spec/files/ssl/cert.crt +16 -0
- data/spec/files/ssl/key-pass.pem +18 -0
- data/spec/files/ssl/key.pem +15 -0
- data/spec/lib/config_spec.rb +51 -11
- data/spec/lib/format_spec.rb +5 -0
- data/spec/lib/formats/console_spec.rb +24 -3
- data/spec/lib/formats/csv_spec.rb +15 -0
- data/spec/lib/formats/json_spec.rb +22 -2
- data/spec/lib/formats/plain_spec.rb +23 -3
- data/spec/lib/formats/rawyaml_spec.rb +13 -0
- data/spec/lib/formats/yaml_spec.rb +138 -48
- data/spec/lib/hiera_spec.rb +0 -1
- data/spec/lib/hieracles_spec.rb +8 -0
- data/spec/lib/interpolate_spec.rb +49 -0
- data/spec/lib/node_spec.rb +50 -9
- data/spec/lib/notification_spec.rb +29 -0
- data/spec/lib/options/hc_spec.rb +82 -0
- data/spec/lib/optparse_spec.rb +7 -7
- data/spec/lib/puppetdb/apierror_spec.rb +11 -0
- data/spec/lib/puppetdb/client_spec.rb +64 -0
- data/spec/lib/puppetdb/fixsslconnectionadapter_spec.rb +107 -0
- data/spec/lib/puppetdb/query_spec.rb +39 -0
- data/spec/lib/puppetdb/request_spec.rb +61 -0
- data/spec/lib/puppetdb/response_spec.rb +13 -0
- data/spec/spec_helper.rb +4 -4
- metadata +133 -30
- data/Rakefile +0 -14
- data/hieracles.gemspec +0 -90
- data/lib/hieracles/help.rb +0 -38
- data/spec/lib/help_spec.rb +0 -8
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hieracles::Interpolate do
|
4
|
+
include Hieracles::Interpolate
|
5
|
+
|
6
|
+
describe ".parse" do
|
7
|
+
let(:input) { StringIO.new }
|
8
|
+
let(:output) { StringIO.new }
|
9
|
+
before { setio input, output }
|
10
|
+
|
11
|
+
context "when in non-interactive mode" do
|
12
|
+
let(:data) { 'something_%{a_var}' }
|
13
|
+
context "and has valid value" do
|
14
|
+
let(:values) { { a_var: 'value' } }
|
15
|
+
let(:expected) { 'something_value' }
|
16
|
+
it { expect(parse data, values).to eq expected }
|
17
|
+
end
|
18
|
+
context "and has invalid value" do
|
19
|
+
let(:values) { { b_var: 'novalue' } }
|
20
|
+
let(:expected) { 'something_' }
|
21
|
+
it { expect(parse data, values).to eq expected }
|
22
|
+
end
|
23
|
+
context "and has valid value with doublecolumn" do
|
24
|
+
let(:data) { 'something_%{::a_var}' }
|
25
|
+
let(:values) { { a_var: 'value' } }
|
26
|
+
let(:expected) { 'something_value' }
|
27
|
+
it { expect(parse data, values).to eq expected }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
context "when in interactive mode" do
|
31
|
+
let(:data) { 'something_%{a_var}' }
|
32
|
+
context "and has valid value" do
|
33
|
+
let(:values) { { a_var: 'value' } }
|
34
|
+
let(:expected) { 'something_value' }
|
35
|
+
it { expect(parse data, values, true).to eq expected }
|
36
|
+
end
|
37
|
+
context "and has invalid value" do
|
38
|
+
let(:values) { { b_var: 'novalue' } }
|
39
|
+
let(:expected) { 'something_value' }
|
40
|
+
before { allow(input).to receive(:gets).and_return 'value' }
|
41
|
+
it { expect(parse data, values, true).to eq expected }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe ".ask_about" do
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/spec/lib/node_spec.rb
CHANGED
@@ -7,7 +7,8 @@ describe Hieracles::Node do
|
|
7
7
|
config: 'spec/files/config.yml',
|
8
8
|
hierafile: 'hiera.yaml',
|
9
9
|
encpath: 'enc',
|
10
|
-
basepath: 'spec/files'
|
10
|
+
basepath: 'spec/files',
|
11
|
+
usedb: false
|
11
12
|
}
|
12
13
|
}
|
13
14
|
|
@@ -193,16 +194,56 @@ describe Hieracles::Node do
|
|
193
194
|
end
|
194
195
|
|
195
196
|
describe '.info' do
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
197
|
+
context "without calling puppetd" do
|
198
|
+
let(:expected) { {
|
199
|
+
classes: ['dev'],
|
200
|
+
fqdn: 'server.example.com',
|
201
|
+
datacenter: 'equinix',
|
202
|
+
country: 'fr',
|
203
|
+
farm: 'dev'
|
204
|
+
} }
|
205
|
+
it { expect(node.info).to eq expected }
|
206
|
+
end
|
204
207
|
end
|
208
|
+
end
|
209
|
+
end
|
205
210
|
|
211
|
+
context "with calling puppetd" do
|
212
|
+
let(:options) {
|
213
|
+
{
|
214
|
+
config: 'spec/files/config_withdb.yml',
|
215
|
+
hierafile: 'hiera.yaml',
|
216
|
+
encpath: 'enc',
|
217
|
+
basepath: 'spec/files'
|
218
|
+
}
|
219
|
+
}
|
220
|
+
describe '.info' do
|
221
|
+
let(:expected) { {
|
222
|
+
classes: ['dev'],
|
223
|
+
fqdn: 'server.example.com',
|
224
|
+
datacenter: 'equinix',
|
225
|
+
country: 'fr',
|
226
|
+
farm: 'dev',
|
227
|
+
catalog_timestamp: '2015-12-01T23:09:41.540Z'
|
228
|
+
} }
|
229
|
+
let(:resp_info) {
|
230
|
+
Hieracles::Puppetdb::Response.new({ catalog_timestamp: '2015-12-01T23:09:41.540Z'}, 1)
|
231
|
+
}
|
232
|
+
let(:resp_facts) {
|
233
|
+
Hieracles::Puppetdb::Response.new([{ 'name' => 'datacenter', 'value' => 'tahiti' }], 1)
|
234
|
+
}
|
235
|
+
let(:node) { Hieracles::Node.new 'server.example.com', options }
|
236
|
+
before {
|
237
|
+
allow_any_instance_of(Hieracles::Puppetdb::Client).
|
238
|
+
to receive(:request).
|
239
|
+
with("nodes/server.example.com").
|
240
|
+
and_return(resp_info)
|
241
|
+
allow_any_instance_of(Hieracles::Puppetdb::Client).
|
242
|
+
to receive(:request).
|
243
|
+
with("nodes/server.example.com/facts").
|
244
|
+
and_return(resp_facts)
|
245
|
+
}
|
246
|
+
it { expect(node.info).to eq expected }
|
206
247
|
end
|
207
248
|
end
|
208
249
|
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hieracles::Notification do
|
4
|
+
|
5
|
+
describe '.new' do
|
6
|
+
let(:notif) { Hieracles::Notification.new 'a_source', 'a_message'}
|
7
|
+
it { expect(notif.level).to eq 'info' }
|
8
|
+
it { expect(notif.message).to eq 'a_message' }
|
9
|
+
it { expect(notif.source).to eq 'a_source' }
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '.to_hash' do
|
13
|
+
let(:notif) { Hieracles::Notification.new 'a_source', 'a_message'}
|
14
|
+
before {
|
15
|
+
allow(Time).to receive(:new).and_return(Time.new(2015))
|
16
|
+
}
|
17
|
+
let(:expected) {
|
18
|
+
{
|
19
|
+
'source' => 'a_source',
|
20
|
+
'level' => 'info',
|
21
|
+
'message' => 'a_message',
|
22
|
+
'timestamp' => Time.new(2015)
|
23
|
+
}
|
24
|
+
}
|
25
|
+
it { expect(notif.to_hash).to eq expected }
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'hieracles/options/hc'
|
3
|
+
|
4
|
+
describe Hieracles::Options::Hc do
|
5
|
+
describe '.initialize' do
|
6
|
+
context 'with proper arguments' do
|
7
|
+
let(:array) { ['arg1', 'arg2', '-c', 'path/to/config-file', '-f', 'thatformat'] }
|
8
|
+
let(:expected_payload) { ['arg1', 'arg2'] }
|
9
|
+
let(:expected_options) do
|
10
|
+
{ config: 'path/to/config-file', format: 'thatformat' }
|
11
|
+
end
|
12
|
+
subject { Hieracles::Options::Hc.new array }
|
13
|
+
it "populates payload" do
|
14
|
+
expect(subject.payload).to eq expected_payload
|
15
|
+
end
|
16
|
+
it 'populates options' do
|
17
|
+
expect(subject.options).to eq expected_options
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'with proper arguments in random order' do
|
22
|
+
let(:array) { ['-c', 'path/to/config-file', 'arg1', 'arg2', '-f', 'thatformat'] }
|
23
|
+
let(:expected_payload) { ['arg1', 'arg2'] }
|
24
|
+
let(:expected_options) do
|
25
|
+
{ config: 'path/to/config-file', format: 'thatformat' }
|
26
|
+
end
|
27
|
+
subject { Hieracles::Options::Hc.new array }
|
28
|
+
it "populates payload" do
|
29
|
+
expect(subject.payload).to eq expected_payload
|
30
|
+
end
|
31
|
+
it 'populates options' do
|
32
|
+
expect(subject.options).to eq expected_options
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'with funnily ordered arguments' do
|
37
|
+
let(:array) { ['arg1', '-u', 'path/to/config-file', 'arg2', '-f', 'thatformat'] }
|
38
|
+
let(:expected_payload) { ['arg1', 'arg2'] }
|
39
|
+
let(:expected_options) do
|
40
|
+
{ format: 'thatformat' }
|
41
|
+
end
|
42
|
+
subject { Hieracles::Options::Hc.new array }
|
43
|
+
it "populates payload" do
|
44
|
+
expect(subject.payload).to eq expected_payload
|
45
|
+
end
|
46
|
+
it 'populates options' do
|
47
|
+
expect(subject.options).to eq expected_options
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'with arguments in alternative syntax' do
|
52
|
+
let(:array) { ['arg1', 'arg2', '-config', 'path/to/config-file', '--format', 'thatformat'] }
|
53
|
+
let(:expected_payload) { ['arg1', 'arg2'] }
|
54
|
+
let(:expected_options) do
|
55
|
+
{ config: 'path/to/config-file', format: 'thatformat' }
|
56
|
+
end
|
57
|
+
subject { Hieracles::Options::Hc.new array }
|
58
|
+
it "populates payload" do
|
59
|
+
expect(subject.payload).to eq expected_payload
|
60
|
+
end
|
61
|
+
it 'populates options' do
|
62
|
+
expect(subject.options).to eq expected_options
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'with arguments containing boolean element' do
|
67
|
+
let(:array) { ['arg1', 'arg2', '-i', '-format', 'thatformat'] }
|
68
|
+
let(:expected_payload) { ['arg1', 'arg2'] }
|
69
|
+
let(:expected_options) do
|
70
|
+
{ format: 'thatformat', interactive: true }
|
71
|
+
end
|
72
|
+
subject { Hieracles::Options::Hc.new array }
|
73
|
+
it "populates payload" do
|
74
|
+
expect(subject.payload).to eq expected_payload
|
75
|
+
end
|
76
|
+
it 'populates options' do
|
77
|
+
expect(subject.options).to eq expected_options
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
data/spec/lib/optparse_spec.rb
CHANGED
@@ -6,13 +6,13 @@ describe Hieracles::Optparse do
|
|
6
6
|
let(:array) { ['arg1', 'arg2', '-c', 'path/to/config-file', '-f', 'thatformat'] }
|
7
7
|
let(:expected_payload) { ['arg1', 'arg2'] }
|
8
8
|
let(:expected_options) do
|
9
|
-
{
|
9
|
+
{ }
|
10
10
|
end
|
11
11
|
subject { Hieracles::Optparse.new array }
|
12
12
|
it "populates payload" do
|
13
13
|
expect(subject.payload).to eq expected_payload
|
14
14
|
end
|
15
|
-
it 'populates options' do
|
15
|
+
it 'populates no options' do
|
16
16
|
expect(subject.options).to eq expected_options
|
17
17
|
end
|
18
18
|
end
|
@@ -21,7 +21,7 @@ describe Hieracles::Optparse do
|
|
21
21
|
let(:array) { ['-c', 'path/to/config-file', 'arg1', 'arg2', '-f', 'thatformat'] }
|
22
22
|
let(:expected_payload) { ['arg1', 'arg2'] }
|
23
23
|
let(:expected_options) do
|
24
|
-
{
|
24
|
+
{ }
|
25
25
|
end
|
26
26
|
subject { Hieracles::Optparse.new array }
|
27
27
|
it "populates payload" do
|
@@ -36,7 +36,7 @@ describe Hieracles::Optparse do
|
|
36
36
|
let(:array) { ['arg1', '-u', 'path/to/config-file', 'arg2', '-f', 'thatformat'] }
|
37
37
|
let(:expected_payload) { ['arg1', 'arg2'] }
|
38
38
|
let(:expected_options) do
|
39
|
-
{
|
39
|
+
{ }
|
40
40
|
end
|
41
41
|
subject { Hieracles::Optparse.new array }
|
42
42
|
it "populates payload" do
|
@@ -51,7 +51,7 @@ describe Hieracles::Optparse do
|
|
51
51
|
let(:array) { ['arg1', 'arg2', '-config', 'path/to/config-file', '--format', 'thatformat'] }
|
52
52
|
let(:expected_payload) { ['arg1', 'arg2'] }
|
53
53
|
let(:expected_options) do
|
54
|
-
{
|
54
|
+
{ }
|
55
55
|
end
|
56
56
|
subject { Hieracles::Optparse.new array }
|
57
57
|
it "populates payload" do
|
@@ -65,9 +65,9 @@ describe Hieracles::Optparse do
|
|
65
65
|
|
66
66
|
context 'with arguments containing boolean element' do
|
67
67
|
let(:array) { ['arg1', 'arg2', '-i', '-format', 'thatformat'] }
|
68
|
-
let(:expected_payload) { ['arg1', 'arg2'] }
|
68
|
+
let(:expected_payload) { ['arg1', 'arg2', 'thatformat'] }
|
69
69
|
let(:expected_options) do
|
70
|
-
{
|
70
|
+
{ }
|
71
71
|
end
|
72
72
|
subject { Hieracles::Optparse.new array }
|
73
73
|
it "populates payload" do
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hieracles::Puppetdb::Client do
|
4
|
+
|
5
|
+
describe '.new' do
|
6
|
+
context 'when no option is passed' do
|
7
|
+
let(:client) { Hieracles::Puppetdb::Client.new Hash.new }
|
8
|
+
it { expect(client.class.instance_variable_get(:@default_options)[:base_uri]).to eq 'http://localhost:8080/v3' }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '.setup_if_ssl' do
|
13
|
+
let(:basepath) { 'spec/files' }
|
14
|
+
let(:options) {
|
15
|
+
{
|
16
|
+
'usessl' => true,
|
17
|
+
'key' => File.join(basepath, 'ssl', 'key.pem'),
|
18
|
+
'cert' => File.join(basepath, 'ssl', 'cert.crt'),
|
19
|
+
'ca_file' => File.join(basepath, 'ssl', 'ca.crt')
|
20
|
+
}
|
21
|
+
}
|
22
|
+
let(:client) { Hieracles::Puppetdb::Client.new options }
|
23
|
+
it { expect(client.class.instance_variable_get(:@default_options)[:options]).to eq options }
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '.request' do
|
27
|
+
context 'with a GET request' do
|
28
|
+
let(:client) { Hieracles::Puppetdb::Client.new Hash.new }
|
29
|
+
let(:request) { client.request('endpoint', 'get')}
|
30
|
+
let(:response) { Hieracles::Puppetdb::Response.new(Hash.new, 0, Array.new) }
|
31
|
+
before {
|
32
|
+
resp = double
|
33
|
+
allow(resp).
|
34
|
+
to receive(:code).
|
35
|
+
and_return(200)
|
36
|
+
allow(resp).
|
37
|
+
to receive(:parsed_response).
|
38
|
+
and_return('')
|
39
|
+
allow(client).
|
40
|
+
to receive(:get_request).
|
41
|
+
with('endpoint', nil, {}).
|
42
|
+
and_return(resp)
|
43
|
+
}
|
44
|
+
it { expect(request.data).to eq Hash.new }
|
45
|
+
it { expect(request.notifications.count).to eq 1 }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '.get_request' do
|
50
|
+
let(:client) { Hieracles::Puppetdb::Client.new Hash.new }
|
51
|
+
context 'without query' do
|
52
|
+
let(:request) { client.request('endpoint', 'get')}
|
53
|
+
before {
|
54
|
+
allow(client.class).
|
55
|
+
to receive(:get).
|
56
|
+
and_return('ha')
|
57
|
+
}
|
58
|
+
let(:get_request) { client.get_request('endpoint', nil, Hash.new) }
|
59
|
+
it { expect(get_request).to eq 'ha' }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Hieracles::Puppetdb::FixSSLConnectionAdapter do
|
4
|
+
|
5
|
+
let(:uri) { URI "https://localhost" }
|
6
|
+
let(:options) { {} }
|
7
|
+
let(:adapter) { Hieracles::Puppetdb::FixSSLConnectionAdapter.new uri, options }
|
8
|
+
describe '.attach_ssl_certificates' do
|
9
|
+
|
10
|
+
context "with cert file" do
|
11
|
+
context "not found" do
|
12
|
+
let(:options) {
|
13
|
+
{
|
14
|
+
'cert' => File.expand_path('spec/files/ssl/no-cert.crt'),
|
15
|
+
'key' => File.expand_path('spec/files/ssl/key.pem'),
|
16
|
+
'ca_file' => File.expand_path('spec/files/ssl/ca.crt')
|
17
|
+
}
|
18
|
+
}
|
19
|
+
it { expect { adapter.connection }.to raise_error(IOError, /Cert file .*no-cert.crt not found\./) }
|
20
|
+
end
|
21
|
+
context "badly formatted" do
|
22
|
+
let(:options) {
|
23
|
+
{
|
24
|
+
'cert' => File.expand_path('spec/files/ssl/bad-cert.crt'),
|
25
|
+
'key' => File.expand_path('spec/files/ssl/key.pem'),
|
26
|
+
'ca_file' => File.expand_path('spec/files/ssl/ca.crt')
|
27
|
+
}
|
28
|
+
}
|
29
|
+
it { expect { adapter.connection }.to raise_error(OpenSSL::X509::CertificateError) }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "with key file" do
|
34
|
+
context "not found" do
|
35
|
+
let(:options) {
|
36
|
+
{
|
37
|
+
'cert' => File.expand_path('spec/files/ssl/cert.crt'),
|
38
|
+
'key' => File.expand_path('spec/files/ssl/no-key.pem'),
|
39
|
+
'ca_file' => File.expand_path('spec/files/ssl/ca.crt')
|
40
|
+
}
|
41
|
+
}
|
42
|
+
it { expect { adapter.connection }.to raise_error(IOError, /Key file .*no-key.pem not found\./) }
|
43
|
+
end
|
44
|
+
context "badly formatted" do
|
45
|
+
let(:options) {
|
46
|
+
{
|
47
|
+
'cert' => File.expand_path('spec/files/ssl/cert.crt'),
|
48
|
+
'key' => File.expand_path('spec/files/ssl/bad-key.pem'),
|
49
|
+
'ca_file' => File.expand_path('spec/files/ssl/ca.crt')
|
50
|
+
}
|
51
|
+
}
|
52
|
+
it { expect { adapter.connection }.to raise_error(OpenSSL::PKey::RSAError) }
|
53
|
+
end
|
54
|
+
context "with pasword" do
|
55
|
+
context "correct" do
|
56
|
+
let(:options) {
|
57
|
+
{
|
58
|
+
'cert' => File.expand_path('spec/files/ssl/cert.crt'),
|
59
|
+
'key' => File.expand_path('spec/files/ssl/key-pass.pem'),
|
60
|
+
'key_password' => 'good-toto',
|
61
|
+
'ca_file' => File.expand_path('spec/files/ssl/ca.crt')
|
62
|
+
}
|
63
|
+
}
|
64
|
+
it { expect { adapter.connection }.not_to raise_error }
|
65
|
+
end
|
66
|
+
context "incorrect" do
|
67
|
+
let(:options) {
|
68
|
+
{
|
69
|
+
'cert' => File.expand_path('spec/files/ssl/cert.crt'),
|
70
|
+
'key' => File.expand_path('spec/files/ssl/key-pass.pem'),
|
71
|
+
'key_password' => 'bad-toto',
|
72
|
+
'ca_file' => File.expand_path('spec/files/ssl/ca.crt')
|
73
|
+
}
|
74
|
+
}
|
75
|
+
it {expect { adapter.connection }.to raise_error(OpenSSL::PKey::RSAError) }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "with CA file" do
|
81
|
+
context "not found" do
|
82
|
+
let(:options) {
|
83
|
+
{
|
84
|
+
'cert' => File.expand_path('spec/files/ssl/cert.crt'),
|
85
|
+
'key' => File.expand_path('spec/files/ssl/key.pem'),
|
86
|
+
'ca_file' => File.expand_path('spec/files/ssl/no-ca.crt')
|
87
|
+
}
|
88
|
+
}
|
89
|
+
it { expect { adapter.connection }.to raise_error(IOError, /CA file .*no-ca.crt not found\./) }
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context "all correct" do
|
94
|
+
let(:options) {
|
95
|
+
{
|
96
|
+
'cert' => File.expand_path('spec/files/ssl/cert.crt'),
|
97
|
+
'key' => File.expand_path('spec/files/ssl/key.pem'),
|
98
|
+
'ca_file' => File.expand_path('spec/files/ssl/ca.crt'),
|
99
|
+
'verify_peer' => '1'
|
100
|
+
}
|
101
|
+
}
|
102
|
+
it { expect { adapter.connection }.not_to raise_error }
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|