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
@@ -18,11 +18,6 @@ describe 'file interface' do
|
|
18
18
|
file.type.must_equal(:pipe)
|
19
19
|
end
|
20
20
|
|
21
|
-
# # TODO add back content
|
22
|
-
# it 'has no content' do
|
23
|
-
# file.content.must_be_nil
|
24
|
-
# end
|
25
|
-
|
26
21
|
it 'has owner name root' do
|
27
22
|
file.owner.must_equal('root')
|
28
23
|
end
|
@@ -43,16 +38,6 @@ describe 'file interface' do
|
|
43
38
|
file.link_path.must_be_nil
|
44
39
|
end
|
45
40
|
|
46
|
-
# # TODO add back content
|
47
|
-
# it 'has no md5sum' do
|
48
|
-
# file.md5sum.must_be_nil
|
49
|
-
# end
|
50
|
-
#
|
51
|
-
# # TODO add back content
|
52
|
-
# it 'has no sha256sum' do
|
53
|
-
# file.sha256sum.must_be_nil
|
54
|
-
# end
|
55
|
-
|
56
41
|
it 'has a modified time' do
|
57
42
|
file.mtime.must_be_close_to(Time.now.to_i - Test.mtime/2, Test.mtime)
|
58
43
|
end
|
@@ -143,4 +143,82 @@ describe Train::File::Local::Unix do
|
|
143
143
|
file_tester.unix_mode_mask('all', 'r').must_equal 0444
|
144
144
|
end
|
145
145
|
end
|
146
|
-
|
146
|
+
|
147
|
+
describe '#md5sum' do
|
148
|
+
let(:md5_checksum) { '57d4c6f9d15313fd5651317e588c035d' }
|
149
|
+
|
150
|
+
let(:ruby_md5_mock) do
|
151
|
+
checksum_mock = mock
|
152
|
+
checksum_mock.expects(:update).returns('')
|
153
|
+
checksum_mock.expects(:hexdigest).returns(md5_checksum)
|
154
|
+
checksum_mock
|
155
|
+
end
|
156
|
+
|
157
|
+
it 'defaults to a Ruby based checksum if other methods fail' do
|
158
|
+
backend.mock_command('md5sum /tmp/testfile', '', '', 1)
|
159
|
+
Digest::MD5.expects(:new).returns(ruby_md5_mock)
|
160
|
+
cls.new(backend, '/tmp/testfile').md5sum.must_equal md5_checksum
|
161
|
+
end
|
162
|
+
|
163
|
+
it 'calculates the correct md5sum on the `linux` platform family' do
|
164
|
+
output = "#{md5_checksum} /tmp/testfile"
|
165
|
+
backend.mock_command('md5sum /tmp/testfile', output)
|
166
|
+
cls.new(backend, '/tmp/testfile').md5sum.must_equal md5_checksum
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'calculates the correct md5sum on the `darwin` platform family' do
|
170
|
+
output = "#{md5_checksum} /tmp/testfile"
|
171
|
+
backend.mock_os(family: 'darwin')
|
172
|
+
backend.mock_command('md5 -r /tmp/testfile', output)
|
173
|
+
cls.new(backend, '/tmp/testfile').md5sum.must_equal md5_checksum
|
174
|
+
end
|
175
|
+
|
176
|
+
it 'calculates the correct md5sum on the `solaris` platform family' do
|
177
|
+
# The `digest` command doesn't output the filename by default
|
178
|
+
output = "#{md5_checksum}"
|
179
|
+
backend.mock_os(family: 'solaris')
|
180
|
+
backend.mock_command('digest -a md5 /tmp/testfile', output)
|
181
|
+
cls.new(backend, '/tmp/testfile').md5sum.must_equal md5_checksum
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
describe '#sha256sum' do
|
186
|
+
let(:sha256_checksum) {
|
187
|
+
'491260aaa6638d4a64c714a17828c3d82bad6ca600c9149b3b3350e91bcd283d'
|
188
|
+
}
|
189
|
+
|
190
|
+
let(:ruby_sha256_mock) do
|
191
|
+
checksum_mock = mock
|
192
|
+
checksum_mock.expects(:update).returns('')
|
193
|
+
checksum_mock.expects(:hexdigest).returns(sha256_checksum)
|
194
|
+
checksum_mock
|
195
|
+
end
|
196
|
+
|
197
|
+
it 'defaults to a Ruby based checksum if other methods fail' do
|
198
|
+
backend.mock_command('sha256sum /tmp/testfile', '', '', 1)
|
199
|
+
Digest::SHA256.expects(:new).returns(ruby_sha256_mock)
|
200
|
+
cls.new(backend, '/tmp/testfile').sha256sum.must_equal sha256_checksum
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'calculates the correct sha256sum on the `linux` platform family' do
|
204
|
+
output = "#{sha256_checksum} /tmp/testfile"
|
205
|
+
backend.mock_command('sha256sum /tmp/testfile', output)
|
206
|
+
cls.new(backend, '/tmp/testfile').sha256sum.must_equal sha256_checksum
|
207
|
+
end
|
208
|
+
|
209
|
+
it 'calculates the correct sha256sum on the `darwin` platform family' do
|
210
|
+
output = "#{sha256_checksum} /tmp/testfile"
|
211
|
+
backend.mock_os(family: 'darwin')
|
212
|
+
backend.mock_command('shasum -a 256 /tmp/testfile', output)
|
213
|
+
cls.new(backend, '/tmp/testfile').sha256sum.must_equal sha256_checksum
|
214
|
+
end
|
215
|
+
|
216
|
+
it 'calculates the correct sha256sum on the `solaris` platform family' do
|
217
|
+
# The `digest` command doesn't output the filename by default
|
218
|
+
output = "#{sha256_checksum}"
|
219
|
+
backend.mock_os(family: 'solaris')
|
220
|
+
backend.mock_command('digest -a sha256 /tmp/testfile', output)
|
221
|
+
cls.new(backend, '/tmp/testfile').sha256sum.must_equal sha256_checksum
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
@@ -38,4 +38,64 @@ describe 'file common' do
|
|
38
38
|
backend.mock_command('Get-Acl "path" | select -expand Owner', out)
|
39
39
|
cls.new(backend, 'path').owner.must_equal out
|
40
40
|
end
|
41
|
+
|
42
|
+
describe '#md5sum' do
|
43
|
+
let(:md5_checksum) { '4ce0c733cdcf1d2f78532bbd9ce3441d' }
|
44
|
+
let(:filepath) { 'C:\Windows\explorer.exe' }
|
45
|
+
|
46
|
+
let(:ruby_md5_mock) do
|
47
|
+
checksum_mock = mock
|
48
|
+
checksum_mock.expects(:update).returns('')
|
49
|
+
checksum_mock.expects(:hexdigest).returns(md5_checksum)
|
50
|
+
checksum_mock
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'defaults to a Ruby based checksum if other methods fail' do
|
54
|
+
backend.mock_command("CertUtil -hashfile #{filepath} MD5", '', '', 1)
|
55
|
+
Digest::MD5.expects(:new).returns(ruby_md5_mock)
|
56
|
+
cls.new(backend, '/tmp/testfile').md5sum.must_equal md5_checksum
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'calculates the correct md5sum on the `windows` platform family' do
|
60
|
+
output = <<-EOC
|
61
|
+
MD5 hash of file C:\\Windows\\explorer.exe:\r
|
62
|
+
4c e0 c7 33 cd cf 1d 2f 78 53 2b bd 9c e3 44 1d\r
|
63
|
+
CertUtil: -hashfile command completed successfully.\r
|
64
|
+
EOC
|
65
|
+
|
66
|
+
backend.mock_command("CertUtil -hashfile #{filepath} MD5", output)
|
67
|
+
cls.new(backend, filepath).md5sum.must_equal md5_checksum
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe '#sha256sum' do
|
72
|
+
let(:sha256_checksum) {
|
73
|
+
'85270240a5fd51934f0627c92b2282749d071fdc9ac351b81039ced5b10f798b'
|
74
|
+
}
|
75
|
+
let(:filepath) { 'C:\Windows\explorer.exe' }
|
76
|
+
|
77
|
+
let(:ruby_sha256_mock) do
|
78
|
+
checksum_mock = mock
|
79
|
+
checksum_mock.expects(:update).returns('')
|
80
|
+
checksum_mock.expects(:hexdigest).returns(sha256_checksum)
|
81
|
+
checksum_mock
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'defaults to a Ruby based checksum if other methods fail' do
|
85
|
+
backend.mock_command('CertUtil -hashfile #{filepath} SHA256', '', '', 1)
|
86
|
+
Digest::SHA256.expects(:new).returns(ruby_sha256_mock)
|
87
|
+
cls.new(backend, '/tmp/testfile').sha256sum.must_equal sha256_checksum
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'calculates the correct sha256sum on the `windows` platform family' do
|
91
|
+
output = <<-EOC
|
92
|
+
SHA256 hash of file C:\\Windows\\explorer.exe:\r
|
93
|
+
85 27 02 40 a5 fd 51 93 4f 06 27 c9 2b 22 82 74 9d 07 1f dc 9a c3 51 b8 10 39 ce d5 b1 0f 79 8b\r
|
94
|
+
CertUtil: -hashfile command completed successfully.\r
|
95
|
+
EOC
|
96
|
+
|
97
|
+
backend.mock_command("CertUtil -hashfile #{filepath} SHA256", output)
|
98
|
+
cls.new(backend, filepath).sha256sum.must_equal sha256_checksum
|
99
|
+
end
|
100
|
+
end
|
41
101
|
end
|
@@ -30,4 +30,52 @@ describe Train::File::Remote::Aix do
|
|
30
30
|
backend.mock_command("perl -e 'print readlink shift' path", 'our_link_path')
|
31
31
|
file.link_path.must_equal 'our_link_path'
|
32
32
|
end
|
33
|
+
|
34
|
+
describe '#md5sum' do
|
35
|
+
let(:md5_checksum) { '57d4c6f9d15313fd5651317e588c035d' }
|
36
|
+
|
37
|
+
let(:ruby_md5_mock) do
|
38
|
+
checksum_mock = mock
|
39
|
+
checksum_mock.expects(:update).returns('')
|
40
|
+
checksum_mock.expects(:hexdigest).returns(md5_checksum)
|
41
|
+
checksum_mock
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'defaults to a Ruby based checksum if other methods fail' do
|
45
|
+
backend.mock_command('md5sum /tmp/testfile', '', '', 1)
|
46
|
+
Digest::MD5.expects(:new).returns(ruby_md5_mock)
|
47
|
+
cls.new(backend, '/tmp/testfile').md5sum.must_equal md5_checksum
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'calculates the correct md5sum on the `aix` platform family' do
|
51
|
+
output = "#{md5_checksum} /tmp/testfile"
|
52
|
+
backend.mock_command('md5sum /tmp/testfile', output)
|
53
|
+
cls.new(backend, '/tmp/testfile').md5sum.must_equal md5_checksum
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#sha256sum' do
|
58
|
+
let(:sha256_checksum) {
|
59
|
+
'491260aaa6638d4a64c714a17828c3d82bad6ca600c9149b3b3350e91bcd283d'
|
60
|
+
}
|
61
|
+
|
62
|
+
let(:ruby_sha256_mock) do
|
63
|
+
checksum_mock = mock
|
64
|
+
checksum_mock.expects(:update).returns('')
|
65
|
+
checksum_mock.expects(:hexdigest).returns(sha256_checksum)
|
66
|
+
checksum_mock
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'defaults to a Ruby based checksum if other methods fail' do
|
70
|
+
backend.mock_command('sha256sum /tmp/testfile', '', '', 1)
|
71
|
+
Digest::SHA256.expects(:new).returns(ruby_sha256_mock)
|
72
|
+
cls.new(backend, '/tmp/testfile').sha256sum.must_equal sha256_checksum
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'calculates the correct sha256sum on the `aix` platform family' do
|
76
|
+
output = "#{sha256_checksum} /tmp/testfile"
|
77
|
+
backend.mock_command('sha256sum /tmp/testfile', output)
|
78
|
+
cls.new(backend, '/tmp/testfile').sha256sum.must_equal sha256_checksum
|
79
|
+
end
|
80
|
+
end
|
33
81
|
end
|
@@ -9,7 +9,7 @@ describe Train::File::Remote::Linux do
|
|
9
9
|
backend = Train::Transports::Mock.new.connection
|
10
10
|
backend.mock_os({ name: 'linux', family: 'unix' })
|
11
11
|
backend
|
12
|
-
}
|
12
|
+
}
|
13
13
|
|
14
14
|
def mock_stat(args, out, err = '', code = 0)
|
15
15
|
backend.mock_command(
|
@@ -170,4 +170,52 @@ describe Train::File::Remote::Linux do
|
|
170
170
|
f.selinux_label.must_equal 'labels'
|
171
171
|
end
|
172
172
|
end
|
173
|
+
|
174
|
+
describe '#md5sum' do
|
175
|
+
let(:md5_checksum) { '57d4c6f9d15313fd5651317e588c035d' }
|
176
|
+
|
177
|
+
let(:ruby_md5_mock) do
|
178
|
+
checksum_mock = mock
|
179
|
+
checksum_mock.expects(:update).returns('')
|
180
|
+
checksum_mock.expects(:hexdigest).returns(md5_checksum)
|
181
|
+
checksum_mock
|
182
|
+
end
|
183
|
+
|
184
|
+
it 'defaults to a Ruby based checksum if other methods fail' do
|
185
|
+
backend.mock_command('md5sum /tmp/testfile', '', '', 1)
|
186
|
+
Digest::MD5.expects(:new).returns(ruby_md5_mock)
|
187
|
+
cls.new(backend, '/tmp/testfile').md5sum.must_equal md5_checksum
|
188
|
+
end
|
189
|
+
|
190
|
+
it 'calculates the correct md5sum on the `linux` platform family' do
|
191
|
+
output = "#{md5_checksum} /tmp/testfile"
|
192
|
+
backend.mock_command('md5sum /tmp/testfile', output)
|
193
|
+
cls.new(backend, '/tmp/testfile').md5sum.must_equal md5_checksum
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
describe '#sha256sum' do
|
198
|
+
let(:sha256_checksum) {
|
199
|
+
'491260aaa6638d4a64c714a17828c3d82bad6ca600c9149b3b3350e91bcd283d'
|
200
|
+
}
|
201
|
+
|
202
|
+
let(:ruby_sha256_mock) do
|
203
|
+
checksum_mock = mock
|
204
|
+
checksum_mock.expects(:update).returns('')
|
205
|
+
checksum_mock.expects(:hexdigest).returns(sha256_checksum)
|
206
|
+
checksum_mock
|
207
|
+
end
|
208
|
+
|
209
|
+
it 'defaults to a Ruby based checksum if other methods fail' do
|
210
|
+
backend.mock_command('sha256sum /tmp/testfile', '', '', 1)
|
211
|
+
Digest::SHA256.expects(:new).returns(ruby_sha256_mock)
|
212
|
+
cls.new(backend, '/tmp/testfile').sha256sum.must_equal sha256_checksum
|
213
|
+
end
|
214
|
+
|
215
|
+
it 'calculates the correct sha256sum on the `linux` platform family' do
|
216
|
+
output = "#{sha256_checksum} /tmp/testfile"
|
217
|
+
backend.mock_command('sha256sum /tmp/testfile', output)
|
218
|
+
cls.new(backend, '/tmp/testfile').sha256sum.must_equal sha256_checksum
|
219
|
+
end
|
220
|
+
end
|
173
221
|
end
|
@@ -7,7 +7,7 @@ describe Train::File::Remote::Qnx do
|
|
7
7
|
let(:cls) { Train::File::Remote::Qnx }
|
8
8
|
let(:backend) {
|
9
9
|
backend = Train::Transports::Mock.new.connection
|
10
|
-
backend.mock_os({
|
10
|
+
backend.mock_os({ family: 'qnx' })
|
11
11
|
backend
|
12
12
|
}
|
13
13
|
|
@@ -41,4 +41,40 @@ describe Train::File::Remote::Qnx do
|
|
41
41
|
proc { file.send(m) }.must_raise NotImplementedError
|
42
42
|
end
|
43
43
|
end
|
44
|
+
|
45
|
+
describe '#md5sum' do
|
46
|
+
let(:md5_checksum) { '17404a596cbd0d1e6c7d23fcd845ab82' }
|
47
|
+
|
48
|
+
let(:ruby_md5_mock) do
|
49
|
+
checksum_mock = mock
|
50
|
+
checksum_mock.expects(:update).returns('')
|
51
|
+
checksum_mock.expects(:hexdigest).returns(md5_checksum)
|
52
|
+
checksum_mock
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'defaults to a Ruby based checksum if other methods fail' do
|
56
|
+
backend.mock_command('md5sum /tmp/testfile', '', '', 1)
|
57
|
+
Digest::MD5.expects(:new).returns(ruby_md5_mock)
|
58
|
+
cls.new(backend, '/tmp/testfile').md5sum.must_equal md5_checksum
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe '#sha256sum' do
|
63
|
+
let(:sha256_checksum) {
|
64
|
+
'ec864fe99b539704b8872ac591067ef22d836a8d942087f2dba274b301ebe6e5'
|
65
|
+
}
|
66
|
+
|
67
|
+
let(:ruby_sha256_mock) do
|
68
|
+
checksum_mock = mock
|
69
|
+
checksum_mock.expects(:update).returns('')
|
70
|
+
checksum_mock.expects(:hexdigest).returns(sha256_checksum)
|
71
|
+
checksum_mock
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'defaults to a Ruby based checksum if other methods fail' do
|
75
|
+
backend.mock_command('sha256sum /tmp/testfile', '', '', 1)
|
76
|
+
Digest::SHA256.expects(:new).returns(ruby_sha256_mock)
|
77
|
+
cls.new(backend, '/tmp/testfile').sha256sum.must_equal sha256_checksum
|
78
|
+
end
|
79
|
+
end
|
44
80
|
end
|
@@ -1,8 +1,15 @@
|
|
1
1
|
require 'helper'
|
2
|
+
require 'train/transports/mock'
|
2
3
|
require 'train/file/remote/unix'
|
3
4
|
|
4
5
|
describe Train::File::Remote::Unix do
|
5
|
-
let(:cls) { Train::File::Remote::Unix }
|
6
|
+
let(:cls) { Train::File::Remote::Unix }
|
7
|
+
|
8
|
+
let(:backend) {
|
9
|
+
backend = Train::Transports::Mock.new.connection
|
10
|
+
backend.mock_os({ family: 'linux' })
|
11
|
+
backend
|
12
|
+
}
|
6
13
|
|
7
14
|
def mockup(stubs)
|
8
15
|
Class.new(cls) do
|
@@ -41,4 +48,72 @@ describe Train::File::Remote::Unix do
|
|
41
48
|
fc.unix_mode_mask('all', 'r').must_equal 0444
|
42
49
|
end
|
43
50
|
end
|
44
|
-
|
51
|
+
|
52
|
+
describe '#md5sum' do
|
53
|
+
let(:md5_checksum) { '57d4c6f9d15313fd5651317e588c035d' }
|
54
|
+
|
55
|
+
let(:ruby_md5_mock) do
|
56
|
+
checksum_mock = mock
|
57
|
+
checksum_mock.expects(:update).returns('')
|
58
|
+
checksum_mock.expects(:hexdigest).returns(md5_checksum)
|
59
|
+
checksum_mock
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'defaults to a Ruby based checksum if other methods fail' do
|
63
|
+
backend.mock_command('md5 -r /tmp/testfile', '', '', 1)
|
64
|
+
Digest::MD5.expects(:new).returns(ruby_md5_mock)
|
65
|
+
cls.new(backend, '/tmp/testfile').md5sum.must_equal md5_checksum
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
it 'calculates the correct md5sum on the `darwin` platform family' do
|
70
|
+
output = "#{md5_checksum} /tmp/testfile"
|
71
|
+
backend.mock_os(family: 'darwin')
|
72
|
+
backend.mock_command('md5 -r /tmp/testfile', output)
|
73
|
+
cls.new(backend, '/tmp/testfile').md5sum.must_equal md5_checksum
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'calculates the correct md5sum on the `solaris` platform family' do
|
77
|
+
# The `digest` command doesn't output the filename by default
|
78
|
+
output = "#{md5_checksum}"
|
79
|
+
backend.mock_os(family: 'solaris')
|
80
|
+
backend.mock_command('digest -a md5 /tmp/testfile', output)
|
81
|
+
cls.new(backend, '/tmp/testfile').md5sum.must_equal md5_checksum
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe '#sha256sum' do
|
86
|
+
let(:sha256_checksum) {
|
87
|
+
'491260aaa6638d4a64c714a17828c3d82bad6ca600c9149b3b3350e91bcd283d'
|
88
|
+
}
|
89
|
+
|
90
|
+
let(:ruby_sha256_mock) do
|
91
|
+
checksum_mock = mock
|
92
|
+
checksum_mock.expects(:update).returns('')
|
93
|
+
checksum_mock.expects(:hexdigest).returns(sha256_checksum)
|
94
|
+
checksum_mock
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'defaults to a Ruby based checksum if other methods fail' do
|
98
|
+
backend.mock_command('shasum -a 256 /tmp/testfile', '', '', 1)
|
99
|
+
Digest::SHA256.expects(:new).returns(ruby_sha256_mock)
|
100
|
+
cls.new(backend, '/tmp/testfile').sha256sum.must_equal sha256_checksum
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
it 'calculates the correct sha256sum on the `darwin` platform family' do
|
105
|
+
output = "#{sha256_checksum} /tmp/testfile"
|
106
|
+
backend.mock_os(family: 'darwin')
|
107
|
+
backend.mock_command('shasum -a 256 /tmp/testfile', output)
|
108
|
+
cls.new(backend, '/tmp/testfile').sha256sum.must_equal sha256_checksum
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'calculates the correct sha256sum on the `solaris` platform family' do
|
112
|
+
# The `digest` command doesn't output the filename by default
|
113
|
+
output = "#{sha256_checksum}"
|
114
|
+
backend.mock_os(family: 'solaris')
|
115
|
+
backend.mock_command('digest -a sha256 /tmp/testfile', output)
|
116
|
+
cls.new(backend, '/tmp/testfile').sha256sum.must_equal sha256_checksum
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'train/transports/mock'
|
3
|
+
require 'train/file/remote/windows'
|
4
|
+
|
5
|
+
describe Train::File::Remote::Windows do
|
6
|
+
let(:cls) { Train::File::Remote::Windows }
|
7
|
+
let(:backend) {
|
8
|
+
backend = Train::Transports::Mock.new.connection
|
9
|
+
backend.mock_os({ family: 'windows' })
|
10
|
+
backend
|
11
|
+
}
|
12
|
+
|
13
|
+
describe '#md5sum' do
|
14
|
+
let(:md5_checksum) { '4ce0c733cdcf1d2f78532bbd9ce3441d' }
|
15
|
+
let(:filepath) { 'C:\Windows\explorer.exe' }
|
16
|
+
|
17
|
+
let(:ruby_md5_mock) do
|
18
|
+
checksum_mock = mock
|
19
|
+
checksum_mock.expects(:update).returns('')
|
20
|
+
checksum_mock.expects(:hexdigest).returns(md5_checksum)
|
21
|
+
checksum_mock
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'defaults to a Ruby based checksum if other methods fail' do
|
25
|
+
backend.mock_command("CertUtil -hashfile #{filepath} MD5", '', '', 1)
|
26
|
+
Digest::MD5.expects(:new).returns(ruby_md5_mock)
|
27
|
+
cls.new(backend, '/tmp/testfile').md5sum.must_equal md5_checksum
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'calculates the correct md5sum on the `windows` platform family' do
|
31
|
+
output = <<-EOC
|
32
|
+
MD5 hash of file C:\\Windows\\explorer.exe:\r
|
33
|
+
4c e0 c7 33 cd cf 1d 2f 78 53 2b bd 9c e3 44 1d\r
|
34
|
+
CertUtil: -hashfile command completed successfully.\r
|
35
|
+
EOC
|
36
|
+
|
37
|
+
backend.mock_command("CertUtil -hashfile #{filepath} MD5", output)
|
38
|
+
cls.new(backend, filepath).md5sum.must_equal md5_checksum
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#sha256sum' do
|
43
|
+
let(:sha256_checksum) {
|
44
|
+
'85270240a5fd51934f0627c92b2282749d071fdc9ac351b81039ced5b10f798b'
|
45
|
+
}
|
46
|
+
let(:filepath) { 'C:\Windows\explorer.exe' }
|
47
|
+
|
48
|
+
let(:ruby_sha256_mock) do
|
49
|
+
checksum_mock = mock
|
50
|
+
checksum_mock.expects(:update).returns('')
|
51
|
+
checksum_mock.expects(:hexdigest).returns(sha256_checksum)
|
52
|
+
checksum_mock
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'defaults to a Ruby based checksum if other methods fail' do
|
56
|
+
backend.mock_command("CertUtil -hashfile #{filepath} SHA256", '', '', 1)
|
57
|
+
Digest::SHA256.expects(:new).returns(ruby_sha256_mock)
|
58
|
+
cls.new(backend, '/tmp/testfile').sha256sum.must_equal sha256_checksum
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'calculates the correct sha256sum on the `windows` platform family' do
|
62
|
+
output = <<-EOC
|
63
|
+
SHA256 hash of file C:\\Windows\\explorer.exe:\r
|
64
|
+
85 27 02 40 a5 fd 51 93 4f 06 27 c9 2b 22 82 74 9d 07 1f dc 9a c3 51 b8 10 39 ce d5 b1 0f 79 8b\r
|
65
|
+
CertUtil: -hashfile command completed successfully.\r
|
66
|
+
EOC
|
67
|
+
|
68
|
+
backend.mock_command("CertUtil -hashfile #{filepath} SHA256", output)
|
69
|
+
cls.new(backend, filepath).sha256sum.must_equal sha256_checksum
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|