poise-tls-remote-file 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.kitchen.yml +3 -0
  4. data/.travis.yml +56 -0
  5. data/.yardopts +7 -0
  6. data/CHANGELOG.md +5 -0
  7. data/Gemfile +34 -0
  8. data/LICENSE +201 -0
  9. data/README.md +82 -0
  10. data/Rakefile +17 -0
  11. data/chef/attributes/default.rb +24 -0
  12. data/lib/poise_tls_remote_file.rb +21 -0
  13. data/lib/poise_tls_remote_file/cheftie.rb +17 -0
  14. data/lib/poise_tls_remote_file/resources.rb +26 -0
  15. data/lib/poise_tls_remote_file/resources/poise_tls_remote_file.rb +148 -0
  16. data/lib/poise_tls_remote_file/version.rb +20 -0
  17. data/poise-tls-remote-file.gemspec +41 -0
  18. data/test/cookbook/files/ca.crt +33 -0
  19. data/test/cookbook/files/ca.key +51 -0
  20. data/test/cookbook/files/client.crt +29 -0
  21. data/test/cookbook/files/client.csr +27 -0
  22. data/test/cookbook/files/client.key +51 -0
  23. data/test/cookbook/files/client.pem +80 -0
  24. data/test/cookbook/files/server.crt +30 -0
  25. data/test/cookbook/files/server.csr +27 -0
  26. data/test/cookbook/files/server.key +51 -0
  27. data/test/cookbook/metadata.rb +19 -0
  28. data/test/cookbook/recipes/default.rb +96 -0
  29. data/test/gemfiles/chef-12.10.gemfile +23 -0
  30. data/test/gemfiles/chef-12.11.gemfile +23 -0
  31. data/test/gemfiles/chef-12.12.gemfile +22 -0
  32. data/test/gemfiles/chef-12.13.gemfile +22 -0
  33. data/test/gemfiles/chef-12.14.gemfile +19 -0
  34. data/test/gemfiles/chef-12.15.gemfile +19 -0
  35. data/test/gemfiles/chef-12.16.gemfile +19 -0
  36. data/test/gemfiles/chef-12.17.gemfile +19 -0
  37. data/test/gemfiles/chef-12.18.gemfile +19 -0
  38. data/test/gemfiles/chef-12.19.gemfile +19 -0
  39. data/test/gemfiles/chef-12.5.gemfile +23 -0
  40. data/test/gemfiles/chef-12.6.gemfile +23 -0
  41. data/test/gemfiles/chef-12.7.gemfile +23 -0
  42. data/test/gemfiles/chef-12.8.gemfile +23 -0
  43. data/test/gemfiles/chef-12.9.gemfile +23 -0
  44. data/test/gemfiles/chef-12.gemfile +19 -0
  45. data/test/gemfiles/chef-13.0.gemfile +19 -0
  46. data/test/gemfiles/chef-13.gemfile +19 -0
  47. data/test/gemfiles/master.gemfile +24 -0
  48. data/test/integration/default/serverspec/default_spec.rb +30 -0
  49. data/test/spec/resources/poise_tls_remote_file_spec.rb +330 -0
  50. data/test/spec/spec_helper.rb +19 -0
  51. metadata +192 -0
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.16.42'
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.17.44'
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.18.31'
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.19.36'
@@ -0,0 +1,23 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.5.1'
20
+ gem 'rack', '< 2'
21
+ gem 'foodcritic', '< 8'
22
+ gem 'fauxhai', '<= 3.9.0'
23
+ gem 'chefspec', '< 6'
@@ -0,0 +1,23 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.6.0'
20
+ gem 'rack', '< 2'
21
+ gem 'foodcritic', '< 8'
22
+ gem 'fauxhai', '<= 3.9.0'
23
+ gem 'chefspec', '< 6'
@@ -0,0 +1,23 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.7.2'
20
+ gem 'rack', '< 2'
21
+ gem 'foodcritic', '< 8'
22
+ gem 'fauxhai', '<= 3.9.0'
23
+ gem 'chefspec', '< 6'
@@ -0,0 +1,23 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.8.1'
20
+ gem 'rack', '< 2'
21
+ gem 'foodcritic', '< 8'
22
+ gem 'fauxhai', '<= 3.9.0'
23
+ gem 'chefspec', '< 6'
@@ -0,0 +1,23 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.9.41'
20
+ gem 'rack', '< 2'
21
+ gem 'foodcritic', '< 8'
22
+ gem 'fauxhai', '<= 3.9.0'
23
+ gem 'chefspec', '< 6'
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 12.19'
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 13.0.118'
@@ -0,0 +1,19 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', '~> 13.0'
@@ -0,0 +1,24 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ eval_gemfile File.expand_path('../../../Gemfile', __FILE__)
18
+
19
+ gem 'chef', github: 'chef/chef'
20
+ gem 'ohai', github: 'chef/ohai'
21
+ gem 'halite', github: 'poise/halite'
22
+ gem 'poise', github: 'poise/poise'
23
+ gem 'poise-boiler', github: 'poise/poise-boiler'
24
+ gem 'poise-service', github: 'poise/poise-service'
@@ -0,0 +1,30 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'serverspec'
18
+ set :backend, :exec
19
+
20
+ describe file('/output') do
21
+ its(:content) { is_expected.to eq "Hello world\n" }
22
+ end
23
+
24
+ describe file('/output2') do
25
+ its(:content) { is_expected.to eq "Hello world\n" }
26
+ end
27
+
28
+ describe file('/output3') do
29
+ its(:content) { is_expected.to eq "Hello world\n" }
30
+ end
@@ -0,0 +1,330 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'spec_helper'
18
+
19
+ describe PoiseTlsRemoteFile::Resources::PoiseTlsRemoteFile do
20
+ step_into(:tls_remote_file)
21
+ let(:tempfile) { Tempfile.new('chefout') }
22
+ let(:stub_http_response) { double('Net::HTTPResponse', http_version: '1.1', code: '200', msg: 'OK') }
23
+ let(:stub_cert_store) { double('OpenSSL::X509::Store') }
24
+ let(:stub_http) { double('Net::HTTP', proxy_address: nil, cert_store: stub_cert_store) }
25
+ before { override_attributes['test_tempfile'] = tempfile.path }
26
+ after { tempfile.close! }
27
+ before do
28
+ # Stub file loading.
29
+ allow(IO).to receive(:read).and_call_original
30
+ allow(IO).to receive(:read).with('/test/client.crt') { IO.read(File.expand_path('../../../cookbook/files/client.crt', __FILE__)) }
31
+ allow(IO).to receive(:read).with('/test/client.key') { IO.read(File.expand_path('../../../cookbook/files/client.key', __FILE__)) }
32
+ allow(IO).to receive(:read).with('/test/client.pem') { IO.read(File.expand_path('../../../cookbook/files/client.pem', __FILE__)) }
33
+ allow(IO).to receive(:read).with('/test/ca.crt') { IO.read(File.expand_path('../../../cookbook/files/ca.crt', __FILE__)) }
34
+ # Stub core HTTP stuffs.
35
+ allow(Net::HTTP).to receive(:new).and_return(stub_http)
36
+ allow(stub_http).to receive(:proxy_port=).with(nil)
37
+ allow(stub_http).to receive(:use_ssl=).with(true)
38
+ allow(stub_http).to receive(:verify_mode=).with(1)
39
+ allow(stub_http).to receive(:cert_store=)
40
+ allow(stub_http).to receive(:read_timeout=).with(300)
41
+ allow(stub_http).to receive(:open_timeout=).with(300)
42
+ allow(stub_http).to receive(:request).and_yield(stub_http_response)
43
+ allow(stub_cert_store).to receive(:set_default_paths)
44
+ allow(stub_http_response).to receive(:error!)
45
+ allow(stub_http_response).to receive(:each)
46
+ # Attributes.
47
+ override_attributes['poise-tls-remote-file'] = {}
48
+ end
49
+ recipe do
50
+ tls_remote_file node['test_tempfile'] do
51
+ source 'https://example.com/'
52
+ end
53
+ end
54
+
55
+ CA_FINGERPRINT = 'fb:f0:76:db:c2:02:c8:53:47:9e:fd:cd:53:e0:99:58'
56
+ CLIENT_FINGERPRINT = '84:9f:57:30:e7:74:d1:fd:d5:a2:d7:72:9c:02:a0:3c'
57
+ SERVER_FINGERPRINT = 'c9:cd:24:86:65:13:33:19:11:0f:0d:06:6f:63:3f:dd'
58
+
59
+ def expect_cert(fingerprint)
60
+ expect(stub_http).to receive(:cert=) do |cert|
61
+ expect(cert.public_key.fingerprint).to eq fingerprint
62
+ end
63
+ end
64
+
65
+ def expect_key(fingerprint)
66
+ expect(stub_http).to receive(:key=) do |key|
67
+ expect(key.fingerprint).to eq fingerprint
68
+ end
69
+ end
70
+
71
+ def expect_add_cert(fingerprint)
72
+ expect(stub_cert_store).to receive(:add_cert) do |cert|
73
+ expect(cert.public_key.fingerprint).to eq fingerprint
74
+ end
75
+ end
76
+
77
+ context 'with client_cert' do
78
+ recipe do
79
+ tls_remote_file node['test_tempfile'] do
80
+ source 'https://example.com/'
81
+ client_cert '/test/client.crt'
82
+ end
83
+ end
84
+
85
+ it do
86
+ expect_cert(CLIENT_FINGERPRINT)
87
+ run_chef
88
+ end
89
+ end # /context with client_cert
90
+
91
+ context 'with client_key' do
92
+ recipe do
93
+ tls_remote_file node['test_tempfile'] do
94
+ source 'https://example.com/'
95
+ client_key '/test/client.key'
96
+ end
97
+ end
98
+
99
+ it do
100
+ expect_key(CLIENT_FINGERPRINT)
101
+ run_chef
102
+ end
103
+ end # /context with client_key
104
+
105
+ context 'with both client_cert and client_key' do
106
+ recipe do
107
+ tls_remote_file node['test_tempfile'] do
108
+ source 'https://example.com/'
109
+ client_cert '/test/client.crt'
110
+ client_key '/test/client.key'
111
+ end
112
+ end
113
+
114
+ it do
115
+ expect_cert(CLIENT_FINGERPRINT)
116
+ expect_key(CLIENT_FINGERPRINT)
117
+ run_chef
118
+ end
119
+ end # /context with both client_cert and client_key
120
+
121
+ context 'with ca string' do
122
+ recipe do
123
+ tls_remote_file node['test_tempfile'] do
124
+ source 'https://example.com/'
125
+ ca '/test/ca.crt'
126
+ end
127
+ end
128
+
129
+ it do
130
+ expect_add_cert(CA_FINGERPRINT)
131
+ run_chef
132
+ end
133
+ end # /context with ca string
134
+
135
+ context 'with ca array' do
136
+ recipe do
137
+ tls_remote_file node['test_tempfile'] do
138
+ source 'https://example.com/'
139
+ ca %w{/test/ca.crt /test/client.crt}
140
+ end
141
+ end
142
+
143
+ it do
144
+ expect_add_cert(CA_FINGERPRINT)
145
+ expect_add_cert(CLIENT_FINGERPRINT)
146
+ run_chef
147
+ end
148
+ end # /context with ca array
149
+
150
+ context 'with a literal client_cert' do
151
+ recipe do
152
+ tls_remote_file node['test_tempfile'] do
153
+ source 'https://example.com/'
154
+ client_cert <<-EOH
155
+ -----BEGIN CERTIFICATE-----
156
+ MIIFEjCCAvoCAQIwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQVUxEzARBgNV
157
+ BAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0
158
+ ZDAeFw0xNzA0MTQwNjIxNTRaFw0xODA0MTQwNjIxNTRaMFkxCzAJBgNVBAYTAkFV
159
+ MRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRz
160
+ IFB0eSBMdGQxEjAQBgNVBAMTCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQAD
161
+ ggIPADCCAgoCggIBANsqb+c62APAmf3/TAVBq54e9fJgHshr/I8L0qzj2M5oD7Sr
162
+ C+9U01mLSIeJu+CPINpRihR7L0iMT92hBFStlnivdCt+471q/vQTlfOl54DRgvm5
163
+ FD10LOkNagSMa9jziSo+25yBKtojrPUN4bt0FjMMDqix/T6P/8xDx+g8hP63CCll
164
+ ygwIlvO508IM6+trAqaNbgy7lOhrlKcAjNt86n/hmFV+chdgr5dVYZ5JULtfKNuk
165
+ oFLSL56R9pMAGl/v43FsD6w4G2pFndJip5+f46L30gQ7GqkfduPHCjGWwO7rQ6Fz
166
+ M2IVDIV+lknExpGGFkcFjPtrXpOVic7aTDk78xhsOu/73In6KNE6QLcRVKFkUIfh
167
+ FGWjSXdX5fVLtPiAD0+jbT6qTbwb8ztgHDUbxBZmqeLeabUaNtrbkaAMaJNIW55/
168
+ aoiD9CTmtbsl0WFLD+Cji8Ikv1nwAIuV+d2cLSMFOf6kIQHjBA69JqSUqj5ac9IM
169
+ oSjlolN+x6RiSVzmplXGc9t4SQ04izTTPQ71ca+IkcaZJpRgm76fdL2YUsHkrzF9
170
+ hGvINWtkT++z8hqTnZRxjIRi7TokvwGxmHF7MLoY30Z8L3YMSY8bH2s4ObsS97AP
171
+ EMk03HBVncSzzt+yXpAzJDYHgM9K4TzpFieC4ZHcmiKM+fxlwUTA3vFj/rLrAgMB
172
+ AAEwDQYJKoZIhvcNAQEFBQADggIBAKahlpkOI4qDpdiwxsfHzIUOoRugpKWRhEKf
173
+ ER11JZesoX2mSi2KLNoYncPSmhDc1w5E3szQlCQwWA4iIkEcjCeFB00lIR/rS98F
174
+ 5JrxN8lCGssBSwM2BGH0ntqDPNTUygxANB8qAIuWA2Kdf1ZJJWlCYY6wmO8LlDRp
175
+ nlSw/jXKxigedEhwBvx6/0mgsNT9DbJklfZvcrHNE/YDKBmEObg0vSO4/KDH7HqB
176
+ YxWRUmrAJMWq8sARk4eHmo9VTtGT06owWRWeBMFyNUm3U4KMGeexwExPKGPvRgck
177
+ XgdgTKdMTOYeKgnXf3hPRn1GV3ikdh6F6DXtzNIGSmjOhj2nDbG57lKhvz5XD5//
178
+ JAdnqFyvu3rCJ3xu74x7a7xXac3qdoCqTUsW2CluHb7CDkqhid+hu9+8ZSbsjleq
179
+ xbfsRNgqRUiRfLlP/VUw/dOWwArHRw8xN6RIZi3jXsA1TWlG5Y0D2fz14sGANaSN
180
+ 7j4WbrfQUeF55KM8XKmBVLQtV26sdIWUP8NGjnm8MuxKxWxc9MwAKdWZDzv0KaP/
181
+ TKsEDqY1v+5YEeoLzp6AXIPIpj7IuJGArQBI/ASaSr3hpJm7RM2VZIMXwVN6O1S5
182
+ iopdV1Wu+B3qDhl9WQpSAra/n/SuMCp821PhSuaRoG/VQyRbNiV63ERSRgmh21Kz
183
+ Uuiq6QmL
184
+ -----END CERTIFICATE-----
185
+ EOH
186
+ end
187
+ end
188
+
189
+ it do
190
+ expect_cert(SERVER_FINGERPRINT)
191
+ run_chef
192
+ end
193
+ end # /context with a literal client_cert
194
+
195
+ context 'with a literal client_key' do
196
+ recipe do
197
+ tls_remote_file node['test_tempfile'] do
198
+ source 'https://example.com/'
199
+ client_key <<-EOH
200
+ -----BEGIN RSA PRIVATE KEY-----
201
+ MIIJKwIBAAKCAgEA2ypv5zrYA8CZ/f9MBUGrnh718mAeyGv8jwvSrOPYzmgPtKsL
202
+ 71TTWYtIh4m74I8g2lGKFHsvSIxP3aEEVK2WeK90K37jvWr+9BOV86XngNGC+bkU
203
+ PXQs6Q1qBIxr2POJKj7bnIEq2iOs9Q3hu3QWMwwOqLH9Po//zEPH6DyE/rcIKWXK
204
+ DAiW87nTwgzr62sCpo1uDLuU6GuUpwCM23zqf+GYVX5yF2Cvl1VhnklQu18o26Sg
205
+ UtIvnpH2kwAaX+/jcWwPrDgbakWd0mKnn5/jovfSBDsaqR9248cKMZbA7utDoXMz
206
+ YhUMhX6WScTGkYYWRwWM+2tek5WJztpMOTvzGGw67/vcifoo0TpAtxFUoWRQh+EU
207
+ ZaNJd1fl9Uu0+IAPT6NtPqpNvBvzO2AcNRvEFmap4t5ptRo22tuRoAxok0hbnn9q
208
+ iIP0JOa1uyXRYUsP4KOLwiS/WfAAi5X53ZwtIwU5/qQhAeMEDr0mpJSqPlpz0gyh
209
+ KOWiU37HpGJJXOamVcZz23hJDTiLNNM9DvVxr4iRxpkmlGCbvp90vZhSweSvMX2E
210
+ a8g1a2RP77PyGpOdlHGMhGLtOiS/AbGYcXswuhjfRnwvdgxJjxsfazg5uxL3sA8Q
211
+ yTTccFWdxLPO37JekDMkNgeAz0rhPOkWJ4LhkdyaIoz5/GXBRMDe8WP+susCAwEA
212
+ AQKCAgEAzbPD+gxRyRvRrQMcD+b2M9+tScMLwWMRVhVrtBfaWshyzUipWAWOpQHE
213
+ nmoY64iK9j4H0ndYBsijAUpqbSvMChPrfhOHnzY4e0+Ss29onJCIVOhwZcmPiWGs
214
+ uv4tDyBtAjijGP5nAPzxDcPstWsclubfL1h3b2vqU4ber0t2LDgQMgK2o5rAS5uD
215
+ dCN6nqf+geJGgy7gcVDf4erzSeKxmjtcJgoa/XQi+nAJwm3fly2WhKi8TV+3kCZB
216
+ fvFez+Kw37jj8OlsWc9jdJ5h48FG/6OH+66ZtFiy1tDu8WIkTVqFTJh6hrlo2jbY
217
+ yf4lvVpTuG8uRqAc0XpOMNbVKfbpjqrZUSPRN+kJOY8YnNHpNodNByPWTI92p4xe
218
+ k5Kda5/EiPUIJDnF5GxG35Sw8rv3vRCofbJCS6DdsthNYiXGN1B3cE/ZQagtUhhe
219
+ ggFaD/LRPCE1F+iQpT4yENWxNqX39WHaaM1pAv0Om+gZFORabg3lsQdObOcjDX7U
220
+ +c4UgBkbknmFq3/XJXh2vnXMYBHAU6GyPfOC2FGM6OUE6boVtK6OpzUABNJGZxTq
221
+ IM0A/z6vTnvfcMsNx75brIbyWrdTBl6F/36Fcu5swk6Ff1zDx8Aw+GrW/sXe+hBO
222
+ Zy/HtyEbBeHtGxkiB2r14iCFZ3jiiteKZlj2tdyEWB/4h/U0YkkCggEBAPPwzQxS
223
+ 4l8pxwy9r0xrzb9REBSK4alYfW6NvuzBxkY9cVWDkuhgxXMEm1TYjZqhZR/kFccx
224
+ ZMHNLqt2306mU9icSui5cEFEZ7k2QUXueoV1vPJOQIkSJ8i53rLqm5upc2DK/Gry
225
+ YivKKy0DpKHBnSgz84rjjK7d6bSyxYcsyNW/KIAGmgiiTHqLh7xBdDIVE1xc/5PU
226
+ RF3bg8qmjhXvfY71yGbWrkhTutKxBgwE/gRsdqOz/Fuee+qIRcGCPhXO2pAfFKSp
227
+ O8bB+aEfVB0uznj35tm4McbUvlHrHy9drF1o8QXFgbb43DgD9Nll6YzmfvECwaNH
228
+ ev/WLLnicrumdA8CggEBAOYAGNnYOS+oQAS1UYPeKpiX4KQQwOC2E9s+YlcSVY8q
229
+ lWtnPc02TH06K/rdRmeM9QE/HAaI/e587TNFTlbmsEt/pZjKiLqNXoWQg15LTOZz
230
+ bRF2It1nBx3HBdGKyeTrM9gw/GflRP25upUbJGrbM6rWERX63zNqyPaVEdnVKhG+
231
+ vwO+sdqmaQuO5xD8fMbDttzRuxkcrNwxyuTt4zOhkib0wWJC33Ax0yX8ZcUzmZMU
232
+ tgcFkGVfGquExPmNIJLCl4PfHPFrbXNS5mpKR66Gm7p830mu713CHADXQrF7cofJ
233
+ n2gF5gbnMgrp+pyRu0K84mjJjNs+L7qi4PkSC47xh2UCggEBANejHM9xEVUILEHy
234
+ B90pSuZ9NRbDsjmt1Kt+t7C4lpoOxHnQZnPu33wOLXVyPLLdSvRG/o1n92ZuB3xh
235
+ B4OR+np3pqxVCItZecs6z7aO2lXRv2X+kIPavbptvBQy2b1frHN63Gl5vBhzjXks
236
+ SEMJUPByBC7Zeco2ttoaUgxtJVf1tEqAC3foaGzHnQRoY9vFz6iNOQwnzwuc+cKR
237
+ OvbfDwHp+O4Xhla/VV3cSLklTJsCelm5yDIBRg8LyYYGqPVENubB4tCwHPxVCmNI
238
+ u2VUtAYxNitt7OqTs23cx2NqjezA0JbGgiUJljoaHT50HWGFe993DU9V57/yRvVG
239
+ 3R9ORDcCggEBAJwDftfuYsQgBeTrtXKUtiIyC7BeqOcEuy1iAMT9a8okYZysOHDG
240
+ H1ZmqkSN6l79b4g77d/E9zLZzPCVV5F9BCMCYCrnX53jnTVOlL3WqEA+FcLddsLm
241
+ Sx54zUqZMWA150ID4IL9MzJE1PqloatWK5L7iDV3qgWvrsgM0EIJ5XKKB/obVXty
242
+ nBi6A6UzD9SoF5dsMNTU7bCjmfR2JUL1mzUPm0nzAKuTMJ44ujPtT4REbUEQFiWd
243
+ QHMOKar5fxnuI2bRZkmgzGqI1kFNR5hsOKBkafYKUtYvgF1VpyjLCyJustGWBrWy
244
+ B/D9TAD+nZ6kj5Py+7gQU8HvEFoDUpHQ5j0CggEBAJnJgAjeD4VWpKe73Hbvs297
245
+ vLWf7LrBSYzInIF08B7i4Zrk9paxGrYfMQvNFgjHne3tQ0Wt747obp91zIpc6mEF
246
+ pxkq+gAJNdnr1HZF0goX396bvUSSSrkHhzECUFaBk6GkatOStSG3P6qfY5b9GUNj
247
+ q6Y3TehyKWn15NJuAXCCcW3iQP6eRPpb8SE+0GUfhNl3jImCsTBAfJf/0RzXy47s
248
+ paNbbb+V1ebmBHVwkNTDN7eZYhgEUhVd2EsxUaOa+Ow59SL6rLVBSK2NC8ttjR9v
249
+ sMhZt11Wrp4bbHh80a+Mw8SPoLMhCCIJzmFjwFoY8pspjK1ql6HTltHakloxY7o=
250
+ -----END RSA PRIVATE KEY-----
251
+ EOH
252
+ end
253
+ end
254
+
255
+ it do
256
+ expect_key(SERVER_FINGERPRINT)
257
+ run_chef
258
+ end
259
+ end # /context with a literal client_key
260
+
261
+ context 'with a literal ca' do
262
+ recipe do
263
+ tls_remote_file node['test_tempfile'] do
264
+ source 'https://example.com/'
265
+ ca <<-EOH
266
+ -----BEGIN CERTIFICATE-----
267
+ MIIFEjCCAvoCAQIwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQVUxEzARBgNV
268
+ BAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0
269
+ ZDAeFw0xNzA0MTQwNjIxNTRaFw0xODA0MTQwNjIxNTRaMFkxCzAJBgNVBAYTAkFV
270
+ MRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRz
271
+ IFB0eSBMdGQxEjAQBgNVBAMTCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQAD
272
+ ggIPADCCAgoCggIBANsqb+c62APAmf3/TAVBq54e9fJgHshr/I8L0qzj2M5oD7Sr
273
+ C+9U01mLSIeJu+CPINpRihR7L0iMT92hBFStlnivdCt+471q/vQTlfOl54DRgvm5
274
+ FD10LOkNagSMa9jziSo+25yBKtojrPUN4bt0FjMMDqix/T6P/8xDx+g8hP63CCll
275
+ ygwIlvO508IM6+trAqaNbgy7lOhrlKcAjNt86n/hmFV+chdgr5dVYZ5JULtfKNuk
276
+ oFLSL56R9pMAGl/v43FsD6w4G2pFndJip5+f46L30gQ7GqkfduPHCjGWwO7rQ6Fz
277
+ M2IVDIV+lknExpGGFkcFjPtrXpOVic7aTDk78xhsOu/73In6KNE6QLcRVKFkUIfh
278
+ FGWjSXdX5fVLtPiAD0+jbT6qTbwb8ztgHDUbxBZmqeLeabUaNtrbkaAMaJNIW55/
279
+ aoiD9CTmtbsl0WFLD+Cji8Ikv1nwAIuV+d2cLSMFOf6kIQHjBA69JqSUqj5ac9IM
280
+ oSjlolN+x6RiSVzmplXGc9t4SQ04izTTPQ71ca+IkcaZJpRgm76fdL2YUsHkrzF9
281
+ hGvINWtkT++z8hqTnZRxjIRi7TokvwGxmHF7MLoY30Z8L3YMSY8bH2s4ObsS97AP
282
+ EMk03HBVncSzzt+yXpAzJDYHgM9K4TzpFieC4ZHcmiKM+fxlwUTA3vFj/rLrAgMB
283
+ AAEwDQYJKoZIhvcNAQEFBQADggIBAKahlpkOI4qDpdiwxsfHzIUOoRugpKWRhEKf
284
+ ER11JZesoX2mSi2KLNoYncPSmhDc1w5E3szQlCQwWA4iIkEcjCeFB00lIR/rS98F
285
+ 5JrxN8lCGssBSwM2BGH0ntqDPNTUygxANB8qAIuWA2Kdf1ZJJWlCYY6wmO8LlDRp
286
+ nlSw/jXKxigedEhwBvx6/0mgsNT9DbJklfZvcrHNE/YDKBmEObg0vSO4/KDH7HqB
287
+ YxWRUmrAJMWq8sARk4eHmo9VTtGT06owWRWeBMFyNUm3U4KMGeexwExPKGPvRgck
288
+ XgdgTKdMTOYeKgnXf3hPRn1GV3ikdh6F6DXtzNIGSmjOhj2nDbG57lKhvz5XD5//
289
+ JAdnqFyvu3rCJ3xu74x7a7xXac3qdoCqTUsW2CluHb7CDkqhid+hu9+8ZSbsjleq
290
+ xbfsRNgqRUiRfLlP/VUw/dOWwArHRw8xN6RIZi3jXsA1TWlG5Y0D2fz14sGANaSN
291
+ 7j4WbrfQUeF55KM8XKmBVLQtV26sdIWUP8NGjnm8MuxKxWxc9MwAKdWZDzv0KaP/
292
+ TKsEDqY1v+5YEeoLzp6AXIPIpj7IuJGArQBI/ASaSr3hpJm7RM2VZIMXwVN6O1S5
293
+ iopdV1Wu+B3qDhl9WQpSAra/n/SuMCp821PhSuaRoG/VQyRbNiV63ERSRgmh21Kz
294
+ Uuiq6QmL
295
+ -----END CERTIFICATE-----
296
+ EOH
297
+ end
298
+ end
299
+
300
+ it do
301
+ expect_add_cert(SERVER_FINGERPRINT)
302
+ run_chef
303
+ end
304
+ end # /context with a literal ca
305
+
306
+
307
+ context 'with node["poise-tls-remote-file"]["client_cert"]' do
308
+ before { override_attributes['poise-tls-remote-file']['client_cert'] = '/test/client.crt' }
309
+ it do
310
+ expect_cert(CLIENT_FINGERPRINT)
311
+ run_chef
312
+ end
313
+ end # /context with node["poise-tls-remote-file"]["client_cert"]
314
+
315
+ context 'with node["poise-tls-remote-file"]["client_key"]' do
316
+ before { override_attributes['poise-tls-remote-file']['client_key'] = '/test/client.key' }
317
+ it do
318
+ expect_key(CLIENT_FINGERPRINT)
319
+ run_chef
320
+ end
321
+ end # /context with node["poise-tls-remote-file"]["client_key"]
322
+
323
+ context 'with node["poise-tls-remote-file"]["ca"]' do
324
+ before { override_attributes['poise-tls-remote-file']['ca'] = '/test/ca.crt' }
325
+ it do
326
+ expect_add_cert(CA_FINGERPRINT)
327
+ run_chef
328
+ end
329
+ end # /context with node["poise-tls-remote-file"]["ca"]
330
+ end