train 1.4.25 → 1.4.29
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 +4 -4
- data/CHANGELOG.md +17 -7
- data/lib/train/file.rb +78 -19
- data/lib/train/transports/azure.rb +3 -37
- data/lib/train/transports/helpers/azure/file_credentials.rb +42 -0
- data/lib/train/transports/helpers/azure/file_parser.rb +25 -0
- data/lib/train/transports/helpers/azure/subscription_id_file_parser.rb +24 -0
- data/lib/train/transports/helpers/azure/subscription_number_file_parser.rb +30 -0
- data/lib/train/transports/ssh.rb +2 -1
- data/lib/train/transports/ssh_connection.rb +1 -0
- data/lib/train/version.rb +1 -1
- data/test/integration/tests/path_block_device_test.rb +2 -2
- data/test/integration/tests/path_folder_test.rb +4 -4
- data/test/integration/tests/path_missing_test.rb +4 -4
- data/test/integration/tests/path_pipe_test.rb +0 -15
- data/test/unit/file/local/unix_test.rb +79 -1
- data/test/unit/file/local/windows_test.rb +60 -0
- data/test/unit/file/remote/aix_test.rb +48 -0
- data/test/unit/file/remote/linux_test.rb +49 -1
- data/test/unit/file/remote/qnx_test.rb +37 -1
- data/test/unit/file/remote/unix_test.rb +77 -2
- data/test/unit/file/remote/windows_test.rb +72 -0
- data/test/unit/file_test.rb +2 -29
- data/test/unit/transports/azure_test.rb +0 -55
- data/test/unit/transports/helpers/azure/file_credentials_test.rb +121 -0
- data/test/unit/transports/ssh_test.rb +12 -0
- data/test/windows/winrm_test.rb +16 -6
- data/train.gemspec +3 -3
- metadata +13 -5
data/test/unit/file_test.rb
CHANGED
@@ -18,32 +18,6 @@ describe Train::File do
|
|
18
18
|
new_cls.type.must_equal :unknown
|
19
19
|
end
|
20
20
|
|
21
|
-
it 'calculates md5sum from content' do
|
22
|
-
content = 'hello world'
|
23
|
-
new_cls.stub :content, content do |i|
|
24
|
-
i.md5sum.must_equal '5eb63bbbe01eeed093cb22bb8f5acdc3'
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'sets md5sum of nil content to nil' do
|
29
|
-
new_cls.stub :content, nil do |i|
|
30
|
-
i.md5sum.must_be_nil
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'calculates sha256sum from content' do
|
35
|
-
content = 'hello world'
|
36
|
-
new_cls.stub :content, content do |i|
|
37
|
-
i.sha256sum.must_equal 'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9'
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'sets sha256sum of nil content to nil' do
|
42
|
-
new_cls.stub :content, nil do |i|
|
43
|
-
i.sha256sum.must_be_nil
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
21
|
it 'throws Not implemented error for exist?' do
|
48
22
|
# proc { Train.validate_backend({ host: rand }) }.must_raise Train::UserError
|
49
23
|
proc { new_cls.exist?}.must_raise NotImplementedError
|
@@ -91,13 +65,12 @@ describe Train::File do
|
|
91
65
|
|
92
66
|
it 'set product_version to nil' do
|
93
67
|
new_cls.product_version.must_be_nil
|
94
|
-
end
|
68
|
+
end
|
95
69
|
|
96
70
|
it 'set product_version to nil' do
|
97
71
|
new_cls.file_version.must_be_nil
|
98
72
|
end
|
99
73
|
|
100
|
-
|
101
74
|
describe 'type' do
|
102
75
|
it 'recognized type == file' do
|
103
76
|
fc = mockup(type: :file)
|
@@ -153,4 +126,4 @@ describe Train::File do
|
|
153
126
|
fc.version?(x).must_equal true
|
154
127
|
end
|
155
128
|
end
|
156
|
-
end
|
129
|
+
end
|
@@ -122,59 +122,4 @@ describe 'azure transport' do
|
|
122
122
|
connection.unique_identifier.must_equal 'test_tenant_id'
|
123
123
|
end
|
124
124
|
end
|
125
|
-
|
126
|
-
describe 'parse_credentials_file' do
|
127
|
-
let(:cred_file) do
|
128
|
-
require 'tempfile'
|
129
|
-
file = Tempfile.new('cred_file')
|
130
|
-
info = <<-INFO
|
131
|
-
[my_subscription_id]
|
132
|
-
client_id = "my_client_id"
|
133
|
-
client_secret = "my_client_secret"
|
134
|
-
tenant_id = "my_tenant_id"
|
135
|
-
|
136
|
-
[my_subscription_id2]
|
137
|
-
client_id = "my_client_id2"
|
138
|
-
client_secret = "my_client_secret2"
|
139
|
-
tenant_id = "my_tenant_id2"
|
140
|
-
INFO
|
141
|
-
file.write(info)
|
142
|
-
file.close
|
143
|
-
file
|
144
|
-
end
|
145
|
-
|
146
|
-
it 'validate credentials from file' do
|
147
|
-
options[:credentials_file] = cred_file.path
|
148
|
-
options[:subscription_id] = 'my_subscription_id'
|
149
|
-
connection.send(:parse_credentials_file)
|
150
|
-
|
151
|
-
options[:tenant_id].must_equal 'my_tenant_id'
|
152
|
-
options[:client_id].must_equal 'my_client_id'
|
153
|
-
options[:client_secret].must_equal 'my_client_secret'
|
154
|
-
options[:subscription_id].must_equal 'my_subscription_id'
|
155
|
-
end
|
156
|
-
|
157
|
-
it 'validate credentials from file subscription override' do
|
158
|
-
options[:credentials_file] = cred_file.path
|
159
|
-
options[:subscription_id] = 'my_subscription_id2'
|
160
|
-
connection.send(:parse_credentials_file)
|
161
|
-
|
162
|
-
options[:tenant_id].must_equal 'my_tenant_id2'
|
163
|
-
options[:client_id].must_equal 'my_client_id2'
|
164
|
-
options[:client_secret].must_equal 'my_client_secret2'
|
165
|
-
options[:subscription_id].must_equal 'my_subscription_id2'
|
166
|
-
end
|
167
|
-
|
168
|
-
it 'validate credentials from file subscription index' do
|
169
|
-
options[:credentials_file] = cred_file.path
|
170
|
-
options[:subscription_id] = nil
|
171
|
-
ENV['AZURE_SUBSCRIPTION_NUMBER'] = '2'
|
172
|
-
connection.send(:parse_credentials_file)
|
173
|
-
|
174
|
-
options[:tenant_id].must_equal 'my_tenant_id2'
|
175
|
-
options[:client_id].must_equal 'my_client_id2'
|
176
|
-
options[:client_secret].must_equal 'my_client_secret2'
|
177
|
-
options[:subscription_id].must_equal 'my_subscription_id2'
|
178
|
-
end
|
179
|
-
end
|
180
125
|
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'helper'
|
4
|
+
require 'tempfile'
|
5
|
+
require 'train/transports/helpers/azure/file_credentials'
|
6
|
+
|
7
|
+
describe 'parse_credentials_file' do
|
8
|
+
let(:cred_file_single_entry) do
|
9
|
+
file = Tempfile.new('cred_file')
|
10
|
+
info = <<-INFO
|
11
|
+
[my_subscription_id]
|
12
|
+
client_id = "my_client_id"
|
13
|
+
client_secret = "my_client_secret"
|
14
|
+
tenant_id = "my_tenant_id"
|
15
|
+
INFO
|
16
|
+
file.write(info)
|
17
|
+
file.close
|
18
|
+
file
|
19
|
+
end
|
20
|
+
|
21
|
+
let(:cred_file_multiple_entries) do
|
22
|
+
file = Tempfile.new('cred_file')
|
23
|
+
info = <<-INFO
|
24
|
+
[my_subscription_id]
|
25
|
+
client_id = "my_client_id"
|
26
|
+
client_secret = "my_client_secret"
|
27
|
+
tenant_id = "my_tenant_id"
|
28
|
+
|
29
|
+
[my_subscription_id2]
|
30
|
+
client_id = "my_client_id2"
|
31
|
+
client_secret = "my_client_secret2"
|
32
|
+
tenant_id = "my_tenant_id2"
|
33
|
+
INFO
|
34
|
+
file.write(info)
|
35
|
+
file.close
|
36
|
+
file
|
37
|
+
end
|
38
|
+
|
39
|
+
let(:options) { { credentials_file: cred_file_multiple_entries.path } }
|
40
|
+
|
41
|
+
it 'returns empty hash when no credentials file detected' do
|
42
|
+
result = Train::Transports::Helpers::Azure::FileCredentials.parse({})
|
43
|
+
|
44
|
+
assert_empty(result)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'loads only entry from file when no subscription id given' do
|
48
|
+
options[:credentials_file] = cred_file_single_entry.path
|
49
|
+
|
50
|
+
result = Train::Transports::Helpers::Azure::FileCredentials.parse(options)
|
51
|
+
|
52
|
+
assert_equal('my_tenant_id', result[:tenant_id])
|
53
|
+
assert_equal('my_client_id', result[:client_id])
|
54
|
+
assert_equal('my_client_secret', result[:client_secret])
|
55
|
+
assert_equal('my_subscription_id', result[:subscription_id])
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'raises an error when no subscription id given and multiple entries' do
|
59
|
+
error = assert_raises RuntimeError do
|
60
|
+
Train::Transports::Helpers::Azure::FileCredentials.parse(options)
|
61
|
+
end
|
62
|
+
|
63
|
+
assert_equal('Credentials file must have one entry. Check your credentials file. If you have more than one entry set AZURE_SUBSCRIPTION_ID environment variable.', error.message)
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'loads entry when subscription id is given' do
|
67
|
+
options[:subscription_id] = 'my_subscription_id'
|
68
|
+
|
69
|
+
result = Train::Transports::Helpers::Azure::FileCredentials.parse(options)
|
70
|
+
|
71
|
+
assert_equal('my_tenant_id', result[:tenant_id])
|
72
|
+
assert_equal('my_client_id', result[:client_id])
|
73
|
+
assert_equal('my_client_secret', result[:client_secret])
|
74
|
+
assert_equal('my_subscription_id', result[:subscription_id])
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'raises an error when subscription id not found' do
|
78
|
+
options[:subscription_id] = 'missing_subscription_id'
|
79
|
+
|
80
|
+
error = assert_raises RuntimeError do
|
81
|
+
Train::Transports::Helpers::Azure::FileCredentials.parse(options)
|
82
|
+
end
|
83
|
+
|
84
|
+
assert_equal('No credentials found for subscription number missing_subscription_id', error.message)
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'loads entry based on index' do
|
88
|
+
ENV['AZURE_SUBSCRIPTION_NUMBER'] = '2'
|
89
|
+
|
90
|
+
result = Train::Transports::Helpers::Azure::FileCredentials.parse(options)
|
91
|
+
|
92
|
+
ENV.delete('AZURE_SUBSCRIPTION_NUMBER')
|
93
|
+
|
94
|
+
assert_equal('my_tenant_id2', result[:tenant_id])
|
95
|
+
assert_equal('my_client_id2', result[:client_id])
|
96
|
+
assert_equal('my_client_secret2', result[:client_secret])
|
97
|
+
assert_equal('my_subscription_id2', result[:subscription_id])
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'raises an error when index is out of bounds' do
|
101
|
+
ENV['AZURE_SUBSCRIPTION_NUMBER'] = '3'
|
102
|
+
|
103
|
+
error = assert_raises RuntimeError do
|
104
|
+
Train::Transports::Helpers::Azure::FileCredentials.parse(options)
|
105
|
+
end
|
106
|
+
ENV.delete('AZURE_SUBSCRIPTION_NUMBER')
|
107
|
+
|
108
|
+
assert_equal('Your credentials file only contains 2 subscriptions. You specified number 3.', error.message)
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'raises an error when index 0 is given' do
|
112
|
+
ENV['AZURE_SUBSCRIPTION_NUMBER'] = '0'
|
113
|
+
|
114
|
+
error = assert_raises RuntimeError do
|
115
|
+
Train::Transports::Helpers::Azure::FileCredentials.parse(options)
|
116
|
+
end
|
117
|
+
ENV.delete('AZURE_SUBSCRIPTION_NUMBER')
|
118
|
+
|
119
|
+
assert_equal('Index must be greater than 0.', error.message)
|
120
|
+
end
|
121
|
+
end
|
@@ -55,6 +55,18 @@ describe 'ssh transport' do
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
+
describe 'ssh options' do
|
59
|
+
let(:ssh) { cls.new(conf) }
|
60
|
+
let(:connection) { ssh.connection }
|
61
|
+
it 'includes BatchMode when :non_interactive is set' do
|
62
|
+
conf[:non_interactive] = true
|
63
|
+
connection.ssh_opts.include?("BatchMode=yes").must_equal true
|
64
|
+
end
|
65
|
+
it 'excludes BatchMode when :non_interactive is not set' do
|
66
|
+
connection.ssh_opts.include?("BatchMode=yes").must_equal false
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
58
70
|
describe 'opening a connection' do
|
59
71
|
let(:ssh) { cls.new(conf) }
|
60
72
|
let(:connection) { ssh.connection }
|
data/test/windows/winrm_test.rb
CHANGED
@@ -84,12 +84,22 @@ describe 'windows winrm command' do
|
|
84
84
|
file.mode.must_be_nil
|
85
85
|
end
|
86
86
|
|
87
|
-
it 'has
|
88
|
-
file
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
file.
|
87
|
+
it 'has the correct md5sum' do
|
88
|
+
# Must create unique file to prevent `ERROR_SHARING_VIOLATION`
|
89
|
+
tempfile = Tempfile.new('tempfile')
|
90
|
+
tempfile.write('easy to hash')
|
91
|
+
tempfile.close
|
92
|
+
conn.file(tempfile.path).md5sum.must_equal 'c15b41ade1221a532a38d89671ffaa20'
|
93
|
+
tempfile.unlink
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'has the correct sha256sum' do
|
97
|
+
# Must create unique file to prevent `ERROR_SHARING_VIOLATION`
|
98
|
+
tempfile = Tempfile.new('tempfile')
|
99
|
+
tempfile.write('easy to hash')
|
100
|
+
tempfile.close
|
101
|
+
conn.file(tempfile.path).sha256sum.must_equal '24ae25354d5f697566e715cd46e1df2f490d0b8367c21447962dbf03bf7225ba'
|
102
|
+
tempfile.unlink
|
93
103
|
end
|
94
104
|
|
95
105
|
it 'has no modified time' do
|
data/train.gemspec
CHANGED
@@ -23,12 +23,12 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
24
24
|
spec.require_paths = ['lib']
|
25
25
|
|
26
|
+
spec.required_ruby_version = '>= 2.0'
|
27
|
+
|
26
28
|
spec.add_dependency 'json', '>= 1.8', '< 3.0'
|
27
29
|
# chef-client < 12.4.1 require mixlib-shellout-2.0.1
|
28
30
|
spec.add_dependency 'mixlib-shellout', '~> 2.0'
|
29
|
-
|
30
|
-
# 1.9 support is no longer needed here or for Inspec
|
31
|
-
spec.add_dependency 'net-ssh', '>= 2.9', '< 5.0'
|
31
|
+
spec.add_dependency 'net-ssh', '>= 2.9', '< 6.0'
|
32
32
|
spec.add_dependency 'net-scp', '~> 1.2'
|
33
33
|
spec.add_dependency 'winrm', '~> 2.0'
|
34
34
|
spec.add_dependency 'winrm-fs', '~> 1.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: train
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.29
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dominik Richter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
version: '2.9'
|
54
54
|
- - "<"
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
56
|
+
version: '6.0'
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -63,7 +63,7 @@ dependencies:
|
|
63
63
|
version: '2.9'
|
64
64
|
- - "<"
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version: '
|
66
|
+
version: '6.0'
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: net-scp
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -253,6 +253,10 @@ files:
|
|
253
253
|
- lib/train/transports/cisco_ios_connection.rb
|
254
254
|
- lib/train/transports/docker.rb
|
255
255
|
- lib/train/transports/gcp.rb
|
256
|
+
- lib/train/transports/helpers/azure/file_credentials.rb
|
257
|
+
- lib/train/transports/helpers/azure/file_parser.rb
|
258
|
+
- lib/train/transports/helpers/azure/subscription_id_file_parser.rb
|
259
|
+
- lib/train/transports/helpers/azure/subscription_number_file_parser.rb
|
256
260
|
- lib/train/transports/local.rb
|
257
261
|
- lib/train/transports/mock.rb
|
258
262
|
- lib/train/transports/ssh.rb
|
@@ -301,6 +305,7 @@ files:
|
|
301
305
|
- test/unit/file/remote/linux_test.rb
|
302
306
|
- test/unit/file/remote/qnx_test.rb
|
303
307
|
- test/unit/file/remote/unix_test.rb
|
308
|
+
- test/unit/file/remote/windows_test.rb
|
304
309
|
- test/unit/file/remote_test.rb
|
305
310
|
- test/unit/file_test.rb
|
306
311
|
- test/unit/helper.rb
|
@@ -321,6 +326,7 @@ files:
|
|
321
326
|
- test/unit/transports/azure_test.rb
|
322
327
|
- test/unit/transports/cisco_ios_connection.rb
|
323
328
|
- test/unit/transports/gcp_test.rb
|
329
|
+
- test/unit/transports/helpers/azure/file_credentials_test.rb
|
324
330
|
- test/unit/transports/local_test.rb
|
325
331
|
- test/unit/transports/mock_test.rb
|
326
332
|
- test/unit/transports/ssh_test.rb
|
@@ -341,7 +347,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
341
347
|
requirements:
|
342
348
|
- - ">="
|
343
349
|
- !ruby/object:Gem::Version
|
344
|
-
version: '0'
|
350
|
+
version: '2.0'
|
345
351
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
346
352
|
requirements:
|
347
353
|
- - ">="
|
@@ -394,6 +400,7 @@ test_files:
|
|
394
400
|
- test/unit/file/remote/linux_test.rb
|
395
401
|
- test/unit/file/remote/qnx_test.rb
|
396
402
|
- test/unit/file/remote/unix_test.rb
|
403
|
+
- test/unit/file/remote/windows_test.rb
|
397
404
|
- test/unit/file/remote_test.rb
|
398
405
|
- test/unit/file_test.rb
|
399
406
|
- test/unit/helper.rb
|
@@ -414,6 +421,7 @@ test_files:
|
|
414
421
|
- test/unit/transports/azure_test.rb
|
415
422
|
- test/unit/transports/cisco_ios_connection.rb
|
416
423
|
- test/unit/transports/gcp_test.rb
|
424
|
+
- test/unit/transports/helpers/azure/file_credentials_test.rb
|
417
425
|
- test/unit/transports/local_test.rb
|
418
426
|
- test/unit/transports/mock_test.rb
|
419
427
|
- test/unit/transports/ssh_test.rb
|