train 0.12.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +71 -0
  3. data/CHANGELOG.md +308 -0
  4. data/Gemfile +30 -0
  5. data/LICENSE +201 -0
  6. data/README.md +156 -0
  7. data/Rakefile +148 -0
  8. data/lib/train.rb +117 -0
  9. data/lib/train/errors.rb +23 -0
  10. data/lib/train/extras.rb +17 -0
  11. data/lib/train/extras/command_wrapper.rb +148 -0
  12. data/lib/train/extras/file_aix.rb +20 -0
  13. data/lib/train/extras/file_common.rb +161 -0
  14. data/lib/train/extras/file_linux.rb +16 -0
  15. data/lib/train/extras/file_unix.rb +79 -0
  16. data/lib/train/extras/file_windows.rb +91 -0
  17. data/lib/train/extras/linux_lsb.rb +60 -0
  18. data/lib/train/extras/os_common.rb +136 -0
  19. data/lib/train/extras/os_detect_darwin.rb +32 -0
  20. data/lib/train/extras/os_detect_linux.rb +148 -0
  21. data/lib/train/extras/os_detect_unix.rb +99 -0
  22. data/lib/train/extras/os_detect_windows.rb +57 -0
  23. data/lib/train/extras/stat.rb +133 -0
  24. data/lib/train/options.rb +80 -0
  25. data/lib/train/plugins.rb +40 -0
  26. data/lib/train/plugins/base_connection.rb +86 -0
  27. data/lib/train/plugins/transport.rb +49 -0
  28. data/lib/train/transports/docker.rb +103 -0
  29. data/lib/train/transports/local.rb +52 -0
  30. data/lib/train/transports/local_file.rb +90 -0
  31. data/lib/train/transports/local_os.rb +51 -0
  32. data/lib/train/transports/mock.rb +147 -0
  33. data/lib/train/transports/ssh.rb +163 -0
  34. data/lib/train/transports/ssh_connection.rb +225 -0
  35. data/lib/train/transports/winrm.rb +184 -0
  36. data/lib/train/transports/winrm_connection.rb +194 -0
  37. data/lib/train/version.rb +7 -0
  38. data/test/integration/.kitchen.yml +43 -0
  39. data/test/integration/Berksfile +3 -0
  40. data/test/integration/bootstrap.sh +17 -0
  41. data/test/integration/chefignore +1 -0
  42. data/test/integration/cookbooks/test/metadata.rb +1 -0
  43. data/test/integration/cookbooks/test/recipes/default.rb +100 -0
  44. data/test/integration/cookbooks/test/recipes/prep_files.rb +47 -0
  45. data/test/integration/docker_run.rb +153 -0
  46. data/test/integration/docker_test.rb +24 -0
  47. data/test/integration/docker_test_container.rb +24 -0
  48. data/test/integration/helper.rb +61 -0
  49. data/test/integration/sudo/customcommand.rb +15 -0
  50. data/test/integration/sudo/nopasswd.rb +16 -0
  51. data/test/integration/sudo/passwd.rb +21 -0
  52. data/test/integration/sudo/reqtty.rb +17 -0
  53. data/test/integration/sudo/run_as.rb +12 -0
  54. data/test/integration/test-travis-1.yaml +13 -0
  55. data/test/integration/test-travis-2.yaml +13 -0
  56. data/test/integration/test_local.rb +19 -0
  57. data/test/integration/test_ssh.rb +39 -0
  58. data/test/integration/tests/path_block_device_test.rb +74 -0
  59. data/test/integration/tests/path_character_device_test.rb +74 -0
  60. data/test/integration/tests/path_file_test.rb +79 -0
  61. data/test/integration/tests/path_folder_test.rb +90 -0
  62. data/test/integration/tests/path_missing_test.rb +77 -0
  63. data/test/integration/tests/path_pipe_test.rb +78 -0
  64. data/test/integration/tests/path_symlink_test.rb +95 -0
  65. data/test/integration/tests/run_command_test.rb +28 -0
  66. data/test/unit/extras/command_wrapper_test.rb +78 -0
  67. data/test/unit/extras/file_common_test.rb +180 -0
  68. data/test/unit/extras/linux_file_test.rb +167 -0
  69. data/test/unit/extras/os_common_test.rb +269 -0
  70. data/test/unit/extras/os_detect_linux_test.rb +189 -0
  71. data/test/unit/extras/os_detect_windows_test.rb +99 -0
  72. data/test/unit/extras/stat_test.rb +148 -0
  73. data/test/unit/extras/windows_file_test.rb +44 -0
  74. data/test/unit/helper.rb +7 -0
  75. data/test/unit/plugins/connection_test.rb +44 -0
  76. data/test/unit/plugins/transport_test.rb +111 -0
  77. data/test/unit/plugins_test.rb +22 -0
  78. data/test/unit/train_test.rb +156 -0
  79. data/test/unit/transports/local_file_test.rb +184 -0
  80. data/test/unit/transports/local_test.rb +87 -0
  81. data/test/unit/transports/mock_test.rb +87 -0
  82. data/test/unit/transports/ssh_test.rb +109 -0
  83. data/test/unit/version_test.rb +8 -0
  84. data/test/windows/local_test.rb +46 -0
  85. data/test/windows/winrm_test.rb +52 -0
  86. data/train.gemspec +38 -0
  87. metadata +295 -0
@@ -0,0 +1,87 @@
1
+ # encoding: utf-8
2
+ require 'helper'
3
+ require 'train/transports/mock'
4
+ require 'digest/sha2'
5
+
6
+ describe 'mock transport' do
7
+ let(:transport) { Train::Transports::Mock.new(verbose: true) }
8
+ let(:connection) { transport.connection }
9
+
10
+ it 'can be instantiated' do
11
+ transport.wont_be_nil
12
+ end
13
+
14
+ it 'can create a connection' do
15
+ connection.wont_be_nil
16
+ end
17
+
18
+ describe 'when running a mocked command' do
19
+ let(:mock_cmd) { }
20
+
21
+ it 'has a simple mock command creator' do
22
+ out = rand
23
+ cls = Train::Transports::Mock::Connection::Command
24
+ res = cls.new(out, '', 0)
25
+ connection.mock_command('test', out).must_equal res
26
+ end
27
+
28
+ it 'handles nil commands' do
29
+ connection.run_command(nil).stdout.must_equal('')
30
+ end
31
+
32
+ it 'can mock up nil commands' do
33
+ out = rand
34
+ connection.mock_command('', rand) # don't pull this result! always mock the input
35
+ connection.mock_command(nil, out) # pull this result
36
+ connection.run_command(nil).stdout.must_equal(out)
37
+ end
38
+
39
+ it 'gets results for stdout' do
40
+ out = rand
41
+ cmd = rand
42
+ connection.mock_command(cmd, out)
43
+ connection.run_command(cmd).stdout.must_equal(out)
44
+ end
45
+
46
+ it 'gets results for stderr' do
47
+ err = rand
48
+ cmd = rand
49
+ connection.mock_command(cmd, nil, err)
50
+ connection.run_command(cmd).stderr.must_equal(err)
51
+ end
52
+
53
+ it 'gets results for exit_status' do
54
+ code = rand
55
+ cmd = rand
56
+ connection.mock_command(cmd, nil, nil, code)
57
+ connection.run_command(cmd).exit_status.must_equal(code)
58
+ end
59
+
60
+ it 'can mock a command via its SHA2 sum' do
61
+ out = rand.to_s
62
+ cmd = rand.to_s
63
+ shacmd = Digest::SHA256.hexdigest cmd
64
+ connection.mock_command(shacmd, out)
65
+ connection.run_command(cmd).stdout.must_equal(out)
66
+ end
67
+ end
68
+
69
+ describe 'when accessing a mocked os' do
70
+ it 'has the default mock os faily set to unknown' do
71
+ connection.os[:family].must_equal 'unknown'
72
+ end
73
+
74
+ it 'sets the OS to the mocked value' do
75
+ connection.mock_os({ family: 'centos' })
76
+ connection.os.linux?.must_equal true
77
+ connection.os.redhat?.must_equal true
78
+ connection.os[:family].must_equal 'centos'
79
+ end
80
+ end
81
+
82
+ describe 'when accessing a mocked file' do
83
+ it 'gets results for content' do
84
+
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,109 @@
1
+ # encoding: utf-8
2
+ require 'helper'
3
+ require 'train/transports/ssh'
4
+
5
+ # overwrite os detection to simplify mock tests, otherwise run_command tries to
6
+ # determine the OS first and fails the tests
7
+ class Train::Transports::SSH::Connection
8
+ class OS < OSCommon
9
+ def initialize(backend)
10
+ super(backend, { family: 'train_mock_os' })
11
+ end
12
+
13
+ def detect_family
14
+ # no op, we do not need to detect the os
15
+ end
16
+ end
17
+ end
18
+
19
+ describe 'ssh transport' do
20
+ let(:cls) { Train::Transports::SSH }
21
+ let(:conf) {{
22
+ host: rand.to_s,
23
+ password: rand.to_s,
24
+ key_files: rand.to_s,
25
+ }}
26
+
27
+ describe 'default options' do
28
+ let(:ssh) { cls.new({ host: 'dummy' }) }
29
+
30
+ it 'can be instantiated (with valid config)' do
31
+ ssh.wont_be_nil
32
+ end
33
+
34
+ it 'configures the host' do
35
+ ssh.options[:host].must_equal 'dummy'
36
+ end
37
+
38
+ it 'has default port' do
39
+ ssh.options[:port].must_equal 22
40
+ end
41
+
42
+ it 'has default user' do
43
+ ssh.options[:user].must_equal 'root'
44
+ end
45
+ end
46
+
47
+ describe 'opening a connection' do
48
+ let(:ssh) { cls.new(conf) }
49
+ let(:connection) { ssh.connection }
50
+
51
+ it 'gets the connection' do
52
+ connection.must_be_kind_of Train::Transports::SSH::Connection
53
+ end
54
+
55
+ it 'must respond to wait_until_ready' do
56
+ connection.must_respond_to :wait_until_ready
57
+ end
58
+
59
+ it 'can be closed' do
60
+ connection.close.must_be_nil
61
+ end
62
+
63
+ it 'has a login command == ssh' do
64
+ connection.login_command.command.must_equal 'ssh'
65
+ end
66
+
67
+ it 'has login command arguments' do
68
+ connection.login_command.arguments.must_equal([
69
+ "-o", "UserKnownHostsFile=/dev/null",
70
+ "-o", "StrictHostKeyChecking=no",
71
+ "-o", "IdentitiesOnly=yes",
72
+ "-o", "LogLevel=VERBOSE",
73
+ "-o", "ForwardAgent=no",
74
+ "-i", conf[:key_files],
75
+ "-p", "22",
76
+ "root@#{conf[:host]}",
77
+ ])
78
+ end
79
+ end
80
+
81
+ describe 'failed configuration' do
82
+ it 'works with a minimum valid config' do
83
+ cls.new(conf).connection
84
+ end
85
+
86
+ it 'doesnt like host == nil' do
87
+ conf.delete(:host)
88
+ proc { cls.new(conf).connection }.must_raise Train::ClientError
89
+ end
90
+
91
+ it 'reverts to root on user == nil' do
92
+ conf[:user] = nil
93
+ cls.new(conf).connection.method(:options).call[:user] == 'root'
94
+ end
95
+
96
+ it 'doesnt like key and password == nil' do
97
+ conf.delete(:password)
98
+ conf.delete(:key_files)
99
+ proc { cls.new(conf).connection }.must_raise Train::ClientError
100
+ end
101
+
102
+ it 'wont connect if its not possible' do
103
+ conf[:host] = 'localhost'
104
+ conf[:port] = 1
105
+ conn = cls.new(conf).connection
106
+ proc { conn.run_command('uname') }.must_raise Train::Transports::SSHFailed
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+ require 'helper'
3
+
4
+ describe Train do
5
+ it 'defines a version' do
6
+ Train::VERSION.must_be_instance_of String
7
+ end
8
+ end
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+ # author: Christoph Hartmann
3
+ # author: Dominik Richter
4
+
5
+ require 'minitest/autorun'
6
+ require 'minitest/spec'
7
+ require 'mocha/setup'
8
+ require 'train'
9
+
10
+ describe 'windows local command' do
11
+ let(:conn) {
12
+ # get final config
13
+ target_config = Train.target_config({})
14
+ # initialize train
15
+ backend = Train.create('local', target_config)
16
+
17
+ # start or reuse a connection
18
+ conn = backend.connection
19
+ conn
20
+ }
21
+
22
+ it 'verify os' do
23
+ os = conn.os
24
+ os[:name].must_equal 'Windows Server 2012 R2 Datacenter'
25
+ os[:family].must_equal "windows"
26
+ os[:release].must_equal '6.3.9600'
27
+ os[:arch].must_equal '64-bit'
28
+ end
29
+
30
+ it 'run echo test' do
31
+ cmd = conn.run_command('Write-Output "test"')
32
+ cmd.stdout.must_equal "test\r\n"
33
+ cmd.stderr.must_equal ''
34
+ end
35
+
36
+ it 'use powershell piping' do
37
+ cmd = conn.run_command("New-Object -Type PSObject | Add-Member -MemberType NoteProperty -Name A -Value (Write-Output 'PropertyA') -PassThru | Add-Member -MemberType NoteProperty -Name B -Value (Write-Output 'PropertyB') -PassThru | ConvertTo-Json")
38
+ cmd.stdout.must_equal "{\r\n \"A\": \"PropertyA\",\r\n \"B\": \"PropertyB\"\r\n}\r\n"
39
+ cmd.stderr.must_equal ''
40
+ end
41
+
42
+ after do
43
+ # close the connection
44
+ conn.close
45
+ end
46
+ end
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+ # author: Christoph Hartmann
3
+ # author: Dominik Richter
4
+
5
+ require 'minitest/autorun'
6
+ require 'minitest/spec'
7
+ require 'mocha/setup'
8
+ require 'train'
9
+
10
+ describe 'windows local command' do
11
+ let(:conn) {
12
+ # get final config
13
+ target_config = Train.target_config({
14
+ target: ENV['train_target'],
15
+ password: ENV['winrm_pass'],
16
+ ssl: ENV['train_ssl'],
17
+ self_signed: true,
18
+ })
19
+
20
+ # initialize train
21
+ backend = Train.create('winrm', target_config)
22
+
23
+ # start or reuse a connection
24
+ conn = backend.connection
25
+ conn
26
+ }
27
+
28
+ it 'verify os' do
29
+ os = conn.os
30
+ os[:name].must_equal 'Windows Server 2012 R2 Datacenter'
31
+ os[:family].must_equal 'windows'
32
+ os[:release].must_equal '6.3.9600'
33
+ os[:arch].must_equal '64-bit'
34
+ end
35
+
36
+ it 'run echo test' do
37
+ cmd = conn.run_command('Write-Output "test"')
38
+ cmd.stdout.must_equal "test\r\n"
39
+ cmd.stderr.must_equal ''
40
+ end
41
+
42
+ it 'use powershell piping' do
43
+ cmd = conn.run_command("New-Object -Type PSObject | Add-Member -MemberType NoteProperty -Name A -Value (Write-Output 'PropertyA') -PassThru | Add-Member -MemberType NoteProperty -Name B -Value (Write-Output 'PropertyB') -PassThru | ConvertTo-Json")
44
+ cmd.stdout.must_equal "{\r\n \"A\": \"PropertyA\",\r\n \"B\": \"PropertyB\"\r\n}\r\n"
45
+ cmd.stderr.must_equal ''
46
+ end
47
+
48
+ after do
49
+ # close the connection
50
+ conn.close
51
+ end
52
+ end
@@ -0,0 +1,38 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'train/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'train'
8
+ spec.version = Train::VERSION
9
+ spec.authors = ['Dominik Richter']
10
+ spec.email = ['dominik.richter@gmail.com']
11
+ spec.summary = 'Transport interface to talk to different backends.'
12
+ spec.description = 'Transport interface to talk to different backends.'
13
+ spec.homepage = 'https://github.com/chef/train/'
14
+ spec.license = 'Apache-2.0'
15
+
16
+ spec.files = %w{
17
+ train.gemspec README.md Rakefile LICENSE Gemfile CHANGELOG.md .rubocop.yml
18
+ } + Dir.glob(
19
+ '{lib,test}/**/*', File::FNM_DOTMATCH
20
+ ).reject { |f| File.directory?(f) }
21
+
22
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
23
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
24
+ spec.require_paths = ['lib']
25
+
26
+ spec.add_dependency 'json', '~> 1.8'
27
+ # chef-client < 12.4.1 require mixlib-shellout-2.0.1
28
+ spec.add_dependency 'mixlib-shellout', '~> 2.0'
29
+ # net-ssh 3.x drops Ruby 1.9 support, so this constraint could be raised when
30
+ # 1.9 support is no longer needed here or for Inspec
31
+ spec.add_dependency 'net-ssh', '>= 2.9', '< 4.0'
32
+ spec.add_dependency 'net-scp', '~> 1.2'
33
+ spec.add_dependency 'winrm', '~> 1.6'
34
+ spec.add_dependency 'winrm-fs', '~> 0.3'
35
+ spec.add_dependency 'docker-api', '~> 1.26'
36
+
37
+ spec.add_development_dependency 'mocha', '~> 1.1'
38
+ end
metadata ADDED
@@ -0,0 +1,295 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: train
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.12.1
5
+ platform: ruby
6
+ authors:
7
+ - Dominik Richter
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-05-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.8'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mixlib-shellout
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: net-ssh
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '2.9'
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: '4.0'
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '2.9'
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '4.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: net-scp
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.2'
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.2'
75
+ - !ruby/object:Gem::Dependency
76
+ name: winrm
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.6'
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '1.6'
89
+ - !ruby/object:Gem::Dependency
90
+ name: winrm-fs
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0.3'
96
+ type: :runtime
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0.3'
103
+ - !ruby/object:Gem::Dependency
104
+ name: docker-api
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.26'
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '1.26'
117
+ - !ruby/object:Gem::Dependency
118
+ name: mocha
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1.1'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.1'
131
+ description: Transport interface to talk to different backends.
132
+ email:
133
+ - dominik.richter@gmail.com
134
+ executables: []
135
+ extensions: []
136
+ extra_rdoc_files: []
137
+ files:
138
+ - ".rubocop.yml"
139
+ - CHANGELOG.md
140
+ - Gemfile
141
+ - LICENSE
142
+ - README.md
143
+ - Rakefile
144
+ - lib/train.rb
145
+ - lib/train/errors.rb
146
+ - lib/train/extras.rb
147
+ - lib/train/extras/command_wrapper.rb
148
+ - lib/train/extras/file_aix.rb
149
+ - lib/train/extras/file_common.rb
150
+ - lib/train/extras/file_linux.rb
151
+ - lib/train/extras/file_unix.rb
152
+ - lib/train/extras/file_windows.rb
153
+ - lib/train/extras/linux_lsb.rb
154
+ - lib/train/extras/os_common.rb
155
+ - lib/train/extras/os_detect_darwin.rb
156
+ - lib/train/extras/os_detect_linux.rb
157
+ - lib/train/extras/os_detect_unix.rb
158
+ - lib/train/extras/os_detect_windows.rb
159
+ - lib/train/extras/stat.rb
160
+ - lib/train/options.rb
161
+ - lib/train/plugins.rb
162
+ - lib/train/plugins/base_connection.rb
163
+ - lib/train/plugins/transport.rb
164
+ - lib/train/transports/docker.rb
165
+ - lib/train/transports/local.rb
166
+ - lib/train/transports/local_file.rb
167
+ - lib/train/transports/local_os.rb
168
+ - lib/train/transports/mock.rb
169
+ - lib/train/transports/ssh.rb
170
+ - lib/train/transports/ssh_connection.rb
171
+ - lib/train/transports/winrm.rb
172
+ - lib/train/transports/winrm_connection.rb
173
+ - lib/train/version.rb
174
+ - test/integration/.kitchen.yml
175
+ - test/integration/Berksfile
176
+ - test/integration/bootstrap.sh
177
+ - test/integration/chefignore
178
+ - test/integration/cookbooks/test/metadata.rb
179
+ - test/integration/cookbooks/test/recipes/default.rb
180
+ - test/integration/cookbooks/test/recipes/prep_files.rb
181
+ - test/integration/docker_run.rb
182
+ - test/integration/docker_test.rb
183
+ - test/integration/docker_test_container.rb
184
+ - test/integration/helper.rb
185
+ - test/integration/sudo/customcommand.rb
186
+ - test/integration/sudo/nopasswd.rb
187
+ - test/integration/sudo/passwd.rb
188
+ - test/integration/sudo/reqtty.rb
189
+ - test/integration/sudo/run_as.rb
190
+ - test/integration/test-travis-1.yaml
191
+ - test/integration/test-travis-2.yaml
192
+ - test/integration/test_local.rb
193
+ - test/integration/test_ssh.rb
194
+ - test/integration/tests/path_block_device_test.rb
195
+ - test/integration/tests/path_character_device_test.rb
196
+ - test/integration/tests/path_file_test.rb
197
+ - test/integration/tests/path_folder_test.rb
198
+ - test/integration/tests/path_missing_test.rb
199
+ - test/integration/tests/path_pipe_test.rb
200
+ - test/integration/tests/path_symlink_test.rb
201
+ - test/integration/tests/run_command_test.rb
202
+ - test/unit/extras/command_wrapper_test.rb
203
+ - test/unit/extras/file_common_test.rb
204
+ - test/unit/extras/linux_file_test.rb
205
+ - test/unit/extras/os_common_test.rb
206
+ - test/unit/extras/os_detect_linux_test.rb
207
+ - test/unit/extras/os_detect_windows_test.rb
208
+ - test/unit/extras/stat_test.rb
209
+ - test/unit/extras/windows_file_test.rb
210
+ - test/unit/helper.rb
211
+ - test/unit/plugins/connection_test.rb
212
+ - test/unit/plugins/transport_test.rb
213
+ - test/unit/plugins_test.rb
214
+ - test/unit/train_test.rb
215
+ - test/unit/transports/local_file_test.rb
216
+ - test/unit/transports/local_test.rb
217
+ - test/unit/transports/mock_test.rb
218
+ - test/unit/transports/ssh_test.rb
219
+ - test/unit/version_test.rb
220
+ - test/windows/local_test.rb
221
+ - test/windows/winrm_test.rb
222
+ - train.gemspec
223
+ homepage: https://github.com/chef/train/
224
+ licenses:
225
+ - Apache-2.0
226
+ metadata: {}
227
+ post_install_message:
228
+ rdoc_options: []
229
+ require_paths:
230
+ - lib
231
+ required_ruby_version: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: '0'
236
+ required_rubygems_version: !ruby/object:Gem::Requirement
237
+ requirements:
238
+ - - ">="
239
+ - !ruby/object:Gem::Version
240
+ version: '0'
241
+ requirements: []
242
+ rubyforge_project:
243
+ rubygems_version: 2.4.6
244
+ signing_key:
245
+ specification_version: 4
246
+ summary: Transport interface to talk to different backends.
247
+ test_files:
248
+ - test/integration/.kitchen.yml
249
+ - test/integration/Berksfile
250
+ - test/integration/bootstrap.sh
251
+ - test/integration/chefignore
252
+ - test/integration/cookbooks/test/metadata.rb
253
+ - test/integration/cookbooks/test/recipes/default.rb
254
+ - test/integration/cookbooks/test/recipes/prep_files.rb
255
+ - test/integration/docker_run.rb
256
+ - test/integration/docker_test.rb
257
+ - test/integration/docker_test_container.rb
258
+ - test/integration/helper.rb
259
+ - test/integration/sudo/customcommand.rb
260
+ - test/integration/sudo/nopasswd.rb
261
+ - test/integration/sudo/passwd.rb
262
+ - test/integration/sudo/reqtty.rb
263
+ - test/integration/sudo/run_as.rb
264
+ - test/integration/test-travis-1.yaml
265
+ - test/integration/test-travis-2.yaml
266
+ - test/integration/test_local.rb
267
+ - test/integration/test_ssh.rb
268
+ - test/integration/tests/path_block_device_test.rb
269
+ - test/integration/tests/path_character_device_test.rb
270
+ - test/integration/tests/path_file_test.rb
271
+ - test/integration/tests/path_folder_test.rb
272
+ - test/integration/tests/path_missing_test.rb
273
+ - test/integration/tests/path_pipe_test.rb
274
+ - test/integration/tests/path_symlink_test.rb
275
+ - test/integration/tests/run_command_test.rb
276
+ - test/unit/extras/command_wrapper_test.rb
277
+ - test/unit/extras/file_common_test.rb
278
+ - test/unit/extras/linux_file_test.rb
279
+ - test/unit/extras/os_common_test.rb
280
+ - test/unit/extras/os_detect_linux_test.rb
281
+ - test/unit/extras/os_detect_windows_test.rb
282
+ - test/unit/extras/stat_test.rb
283
+ - test/unit/extras/windows_file_test.rb
284
+ - test/unit/helper.rb
285
+ - test/unit/plugins/connection_test.rb
286
+ - test/unit/plugins/transport_test.rb
287
+ - test/unit/plugins_test.rb
288
+ - test/unit/train_test.rb
289
+ - test/unit/transports/local_file_test.rb
290
+ - test/unit/transports/local_test.rb
291
+ - test/unit/transports/mock_test.rb
292
+ - test/unit/transports/ssh_test.rb
293
+ - test/unit/version_test.rb
294
+ - test/windows/local_test.rb
295
+ - test/windows/winrm_test.rb