test-kitchen 1.14.1 → 1.14.2
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/Berksfile +1 -1
- data/CHANGELOG.md +7 -0
- data/Gemfile +1 -1
- data/Guardfile +5 -5
- data/Rakefile +5 -5
- data/bin/kitchen +1 -1
- data/features/step_definitions/gem_steps.rb +6 -6
- data/features/support/env.rb +6 -7
- data/lib/kitchen.rb +5 -7
- data/lib/kitchen/base64_stream.rb +2 -8
- data/lib/kitchen/cli.rb +76 -80
- data/lib/kitchen/collection.rb +0 -2
- data/lib/kitchen/color.rb +7 -9
- data/lib/kitchen/command.rb +0 -4
- data/lib/kitchen/command/action.rb +0 -3
- data/lib/kitchen/command/console.rb +4 -7
- data/lib/kitchen/command/diagnose.rb +7 -14
- data/lib/kitchen/command/driver_discover.rb +1 -4
- data/lib/kitchen/command/exec.rb +0 -3
- data/lib/kitchen/command/list.rb +9 -12
- data/lib/kitchen/command/login.rb +0 -3
- data/lib/kitchen/command/package.rb +0 -3
- data/lib/kitchen/command/sink.rb +6 -9
- data/lib/kitchen/command/test.rb +1 -4
- data/lib/kitchen/config.rb +25 -27
- data/lib/kitchen/configurable.rb +26 -31
- data/lib/kitchen/data_munger.rb +34 -36
- data/lib/kitchen/diagnostic.rb +5 -7
- data/lib/kitchen/driver.rb +3 -5
- data/lib/kitchen/driver/base.rb +0 -3
- data/lib/kitchen/driver/dummy.rb +0 -3
- data/lib/kitchen/driver/proxy.rb +0 -3
- data/lib/kitchen/driver/ssh_base.rb +13 -16
- data/lib/kitchen/errors.rb +11 -16
- data/lib/kitchen/generator/driver_create.rb +18 -21
- data/lib/kitchen/generator/init.rb +21 -26
- data/lib/kitchen/instance.rb +19 -23
- data/lib/kitchen/lazy_hash.rb +1 -2
- data/lib/kitchen/loader/yaml.rb +22 -25
- data/lib/kitchen/logger.rb +9 -14
- data/lib/kitchen/logging.rb +0 -3
- data/lib/kitchen/login_command.rb +0 -2
- data/lib/kitchen/metadata_chopper.rb +0 -2
- data/lib/kitchen/platform.rb +1 -3
- data/lib/kitchen/provisioner.rb +3 -5
- data/lib/kitchen/provisioner/base.rb +2 -5
- data/lib/kitchen/provisioner/chef/berkshelf.rb +1 -5
- data/lib/kitchen/provisioner/chef/common_sandbox.rb +24 -29
- data/lib/kitchen/provisioner/chef/librarian.rb +2 -6
- data/lib/kitchen/provisioner/chef/policyfile.rb +4 -8
- data/lib/kitchen/provisioner/chef_apply.rb +14 -17
- data/lib/kitchen/provisioner/chef_base.rb +43 -46
- data/lib/kitchen/provisioner/chef_solo.rb +10 -13
- data/lib/kitchen/provisioner/chef_zero.rb +22 -29
- data/lib/kitchen/provisioner/dummy.rb +0 -3
- data/lib/kitchen/provisioner/shell.rb +6 -9
- data/lib/kitchen/rake_tasks.rb +4 -6
- data/lib/kitchen/shell_out.rb +3 -5
- data/lib/kitchen/ssh.rb +16 -22
- data/lib/kitchen/state_file.rb +3 -5
- data/lib/kitchen/suite.rb +0 -2
- data/lib/kitchen/thor_tasks.rb +2 -4
- data/lib/kitchen/transport.rb +3 -5
- data/lib/kitchen/transport/base.rb +1 -7
- data/lib/kitchen/transport/dummy.rb +0 -4
- data/lib/kitchen/transport/ssh.rb +41 -47
- data/lib/kitchen/transport/winrm.rb +41 -40
- data/lib/kitchen/util.rb +1 -3
- data/lib/kitchen/verifier.rb +3 -5
- data/lib/kitchen/verifier/base.rb +2 -5
- data/lib/kitchen/verifier/busser.rb +24 -24
- data/lib/kitchen/verifier/dummy.rb +0 -3
- data/lib/kitchen/verifier/shell.rb +1 -3
- data/lib/kitchen/version.rb +1 -1
- data/lib/vendor/hash_recursive_merge.rb +0 -2
- data/spec/kitchen/base64_stream_spec.rb +3 -6
- data/spec/kitchen/cli_spec.rb +0 -2
- data/spec/kitchen/collection_spec.rb +4 -8
- data/spec/kitchen/color_spec.rb +0 -3
- data/spec/kitchen/config_spec.rb +91 -106
- data/spec/kitchen/configurable_spec.rb +44 -76
- data/spec/kitchen/data_munger_spec.rb +1178 -1247
- data/spec/kitchen/diagnostic_spec.rb +37 -38
- data/spec/kitchen/driver/base_spec.rb +7 -14
- data/spec/kitchen/driver/dummy_spec.rb +1 -7
- data/spec/kitchen/driver/proxy_spec.rb +2 -7
- data/spec/kitchen/driver/ssh_base_spec.rb +128 -149
- data/spec/kitchen/driver_spec.rb +7 -13
- data/spec/kitchen/errors_spec.rb +50 -60
- data/spec/kitchen/instance_spec.rb +217 -294
- data/spec/kitchen/lazy_hash_spec.rb +14 -18
- data/spec/kitchen/loader/yaml_spec.rb +201 -227
- data/spec/kitchen/logger_spec.rb +7 -15
- data/spec/kitchen/logging_spec.rb +1 -4
- data/spec/kitchen/login_command_spec.rb +3 -4
- data/spec/kitchen/metadata_chopper_spec.rb +0 -3
- data/spec/kitchen/platform_spec.rb +31 -32
- data/spec/kitchen/provisioner/base_spec.rb +22 -41
- data/spec/kitchen/provisioner/chef/policyfile_spec.rb +15 -15
- data/spec/kitchen/provisioner/chef_apply_spec.rb +8 -13
- data/spec/kitchen/provisioner/chef_base_spec.rb +150 -182
- data/spec/kitchen/provisioner/chef_solo_spec.rb +58 -72
- data/spec/kitchen/provisioner/chef_zero_spec.rb +99 -125
- data/spec/kitchen/provisioner/dummy_spec.rb +8 -11
- data/spec/kitchen/provisioner/shell_spec.rb +86 -103
- data/spec/kitchen/provisioner_spec.rb +5 -11
- data/spec/kitchen/shell_out_spec.rb +15 -19
- data/spec/kitchen/ssh_spec.rb +16 -35
- data/spec/kitchen/state_file_spec.rb +6 -11
- data/spec/kitchen/suite_spec.rb +5 -6
- data/spec/kitchen/transport/base_spec.rb +6 -14
- data/spec/kitchen/transport/ssh_spec.rb +39 -64
- data/spec/kitchen/transport/winrm_spec.rb +99 -127
- data/spec/kitchen/transport_spec.rb +7 -13
- data/spec/kitchen/util_spec.rb +17 -26
- data/spec/kitchen/verifier/base_spec.rb +24 -40
- data/spec/kitchen/verifier/busser_spec.rb +38 -68
- data/spec/kitchen/verifier/dummy_spec.rb +8 -11
- data/spec/kitchen/verifier/shell_spec.rb +14 -17
- data/spec/kitchen/verifier_spec.rb +7 -13
- data/spec/kitchen_spec.rb +4 -6
- data/spec/spec_helper.rb +1 -1
- data/spec/support/powershell_max_size_spec.rb +1 -2
- data/support/chef-client-zero.rb +3 -4
- data/test-kitchen.gemspec +4 -6
- metadata +9 -9
|
@@ -21,33 +21,32 @@ require_relative "../spec_helper"
|
|
|
21
21
|
require "kitchen/diagnostic"
|
|
22
22
|
|
|
23
23
|
describe Kitchen::Diagnostic do
|
|
24
|
-
|
|
25
24
|
let(:loader) do
|
|
26
|
-
stub(:
|
|
25
|
+
stub(diagnose: { who: "loader" })
|
|
27
26
|
end
|
|
28
27
|
|
|
29
28
|
let(:instances) do
|
|
30
29
|
[
|
|
31
30
|
stub(
|
|
32
|
-
:
|
|
33
|
-
:
|
|
34
|
-
:
|
|
35
|
-
:
|
|
36
|
-
:
|
|
37
|
-
:
|
|
38
|
-
:
|
|
31
|
+
name: "i1",
|
|
32
|
+
diagnose: { stuff: "sup" },
|
|
33
|
+
diagnose_plugins: {
|
|
34
|
+
driver: { name: "driva", a: "b" },
|
|
35
|
+
provisioner: { name: "prov", c: "d" },
|
|
36
|
+
transport: { name: "transa", e: "f" },
|
|
37
|
+
verifier: { name: "verve", g: "h" },
|
|
39
38
|
}
|
|
40
39
|
),
|
|
41
40
|
stub(
|
|
42
|
-
:
|
|
43
|
-
:
|
|
44
|
-
:
|
|
45
|
-
:
|
|
46
|
-
:
|
|
47
|
-
:
|
|
48
|
-
:
|
|
41
|
+
name: "i2",
|
|
42
|
+
diagnose: { stuff: "yo" },
|
|
43
|
+
diagnose_plugins: {
|
|
44
|
+
driver: { name: "driva", a: "b" },
|
|
45
|
+
provisioner: { name: "presto", i: "j" },
|
|
46
|
+
transport: { name: "tressa", k: "l" },
|
|
47
|
+
verifier: { name: "verve", g: "h" },
|
|
49
48
|
}
|
|
50
|
-
)
|
|
49
|
+
),
|
|
51
50
|
]
|
|
52
51
|
end
|
|
53
52
|
|
|
@@ -62,8 +61,8 @@ describe Kitchen::Diagnostic do
|
|
|
62
61
|
it "#read returns a timestamp in UTC" do
|
|
63
62
|
Time.stubs(:now).returns(Time.at(0))
|
|
64
63
|
|
|
65
|
-
Kitchen::Diagnostic.new.read["timestamp"]
|
|
66
|
-
must_equal "1970-01-01 00:00:00 UTC"
|
|
64
|
+
Kitchen::Diagnostic.new.read["timestamp"]
|
|
65
|
+
.must_equal "1970-01-01 00:00:00 UTC"
|
|
67
66
|
end
|
|
68
67
|
|
|
69
68
|
it "#read doesn't return a loader hash if not given one" do
|
|
@@ -71,39 +70,39 @@ describe Kitchen::Diagnostic do
|
|
|
71
70
|
end
|
|
72
71
|
|
|
73
72
|
it "#read returns the loader's diganose hash if a loader is present" do
|
|
74
|
-
Kitchen::Diagnostic.new(:
|
|
75
|
-
|
|
73
|
+
Kitchen::Diagnostic.new(loader: loader)
|
|
74
|
+
.read["loader"].must_equal("who" => "loader")
|
|
76
75
|
end
|
|
77
76
|
|
|
78
77
|
it "#read returns an error hash for loader if error hash is passed in" do
|
|
79
|
-
Kitchen::Diagnostic.new(:
|
|
80
|
-
|
|
78
|
+
Kitchen::Diagnostic.new(loader: { error: "damn" })
|
|
79
|
+
.read["loader"].must_equal("error" => "damn")
|
|
81
80
|
end
|
|
82
81
|
|
|
83
82
|
it "#read returns the unique set of plugins' diagnose hash if :plugins is set" do
|
|
84
|
-
Kitchen::Diagnostic.new(:
|
|
85
|
-
|
|
86
|
-
must_equal(
|
|
83
|
+
Kitchen::Diagnostic.new(instances: instances, plugins: true)
|
|
84
|
+
.read["plugins"]
|
|
85
|
+
.must_equal(
|
|
87
86
|
"driver" => {
|
|
88
|
-
"driva" => { "a" => "b" }
|
|
87
|
+
"driva" => { "a" => "b" },
|
|
89
88
|
},
|
|
90
89
|
"provisioner" => {
|
|
91
90
|
"prov" => { "c" => "d" },
|
|
92
|
-
"presto" => { "i" => "j" }
|
|
91
|
+
"presto" => { "i" => "j" },
|
|
93
92
|
},
|
|
94
93
|
"transport" => {
|
|
95
94
|
"transa" => { "e" => "f" },
|
|
96
|
-
"tressa" => { "k" => "l" }
|
|
95
|
+
"tressa" => { "k" => "l" },
|
|
97
96
|
},
|
|
98
97
|
"verifier" => {
|
|
99
|
-
"verve" => { "g" => "h" }
|
|
98
|
+
"verve" => { "g" => "h" },
|
|
100
99
|
}
|
|
101
100
|
)
|
|
102
101
|
end
|
|
103
102
|
|
|
104
103
|
it "#read returns an empty plugins hash if no instances were given" do
|
|
105
|
-
Kitchen::Diagnostic.new(:
|
|
106
|
-
|
|
104
|
+
Kitchen::Diagnostic.new(plugins: true)
|
|
105
|
+
.read["plugins"].must_equal Hash.new
|
|
107
106
|
end
|
|
108
107
|
|
|
109
108
|
it "#read returns an empty instances hash if no instances were given" do
|
|
@@ -112,18 +111,18 @@ describe Kitchen::Diagnostic do
|
|
|
112
111
|
|
|
113
112
|
it "#read returns an error hash for plugins if error hash is passed in" do
|
|
114
113
|
Kitchen::Diagnostic.new(
|
|
115
|
-
:
|
|
114
|
+
instances: { error: "shoot" }, plugins: true
|
|
116
115
|
).read["plugins"].must_equal("error" => "shoot")
|
|
117
116
|
end
|
|
118
117
|
|
|
119
118
|
it "#read returns the instances' diganose hashes if instances are present" do
|
|
120
|
-
Kitchen::Diagnostic.new(:
|
|
121
|
-
|
|
122
|
-
must_equal("i1" => { "stuff" => "sup" }, "i2" => { "stuff" => "yo" })
|
|
119
|
+
Kitchen::Diagnostic.new(instances: instances)
|
|
120
|
+
.read["instances"]
|
|
121
|
+
.must_equal("i1" => { "stuff" => "sup" }, "i2" => { "stuff" => "yo" })
|
|
123
122
|
end
|
|
124
123
|
|
|
125
124
|
it "#read returns an error hash for instances if error hash is passed in" do
|
|
126
|
-
Kitchen::Diagnostic.new(:
|
|
127
|
-
|
|
125
|
+
Kitchen::Diagnostic.new(instances: { error: "shoot" })
|
|
126
|
+
.read["instances"].must_equal("error" => "shoot")
|
|
128
127
|
end
|
|
129
128
|
end
|
|
@@ -23,19 +23,15 @@ require "stringio"
|
|
|
23
23
|
require "kitchen"
|
|
24
24
|
|
|
25
25
|
module Kitchen
|
|
26
|
-
|
|
27
26
|
module Driver
|
|
28
|
-
|
|
29
27
|
class Speedy < Base
|
|
30
28
|
end
|
|
31
29
|
|
|
32
30
|
class Dodgy < Base
|
|
33
|
-
|
|
34
31
|
no_parallel_for :setup
|
|
35
32
|
end
|
|
36
33
|
|
|
37
34
|
class Slow < Base
|
|
38
|
-
|
|
39
35
|
no_parallel_for :create, :destroy
|
|
40
36
|
no_parallel_for :verify
|
|
41
37
|
end
|
|
@@ -43,22 +39,21 @@ module Kitchen
|
|
|
43
39
|
end
|
|
44
40
|
|
|
45
41
|
describe Kitchen::Driver::Base do
|
|
46
|
-
|
|
47
42
|
let(:logged_output) { StringIO.new }
|
|
48
43
|
let(:logger) { Logger.new(logged_output) }
|
|
49
44
|
let(:config) { Hash.new }
|
|
50
45
|
let(:state) { Hash.new }
|
|
51
46
|
|
|
52
47
|
let(:busser) do
|
|
53
|
-
stub(:
|
|
48
|
+
stub(setup_cmd: "setup", sync_cmd: "sync", run_cmd: "run")
|
|
54
49
|
end
|
|
55
50
|
|
|
56
51
|
let(:instance) do
|
|
57
52
|
stub(
|
|
58
|
-
:
|
|
59
|
-
:
|
|
60
|
-
:
|
|
61
|
-
:
|
|
53
|
+
name: "coolbeans",
|
|
54
|
+
logger: logger,
|
|
55
|
+
busser: busser,
|
|
56
|
+
to_str: "instance"
|
|
62
57
|
)
|
|
63
58
|
end
|
|
64
59
|
|
|
@@ -85,7 +80,6 @@ describe Kitchen::Driver::Base do
|
|
|
85
80
|
end
|
|
86
81
|
|
|
87
82
|
[:create, :setup, :verify, :destroy].each do |action|
|
|
88
|
-
|
|
89
83
|
it "has a #{action} method that takes state" do
|
|
90
84
|
# TODO: revert back
|
|
91
85
|
# state = Hash.new
|
|
@@ -95,7 +89,6 @@ describe Kitchen::Driver::Base do
|
|
|
95
89
|
end
|
|
96
90
|
|
|
97
91
|
describe ".no_parallel_for" do
|
|
98
|
-
|
|
99
92
|
it "registers no serial actions when none are declared" do
|
|
100
93
|
Kitchen::Driver::Speedy.serial_actions.must_equal nil
|
|
101
94
|
end
|
|
@@ -113,9 +106,9 @@ describe Kitchen::Driver::Base do
|
|
|
113
106
|
end
|
|
114
107
|
|
|
115
108
|
it "raises a ClientError if value is not an action method" do
|
|
116
|
-
proc
|
|
109
|
+
proc do
|
|
117
110
|
Class.new(Kitchen::Driver::Base) { no_parallel_for :telling_stories }
|
|
118
|
-
|
|
111
|
+
end.must_raise Kitchen::ClientError
|
|
119
112
|
end
|
|
120
113
|
end
|
|
121
114
|
end
|
|
@@ -23,14 +23,13 @@ require "stringio"
|
|
|
23
23
|
require "kitchen/driver/dummy"
|
|
24
24
|
|
|
25
25
|
describe Kitchen::Driver::Dummy do
|
|
26
|
-
|
|
27
26
|
let(:logged_output) { StringIO.new }
|
|
28
27
|
let(:logger) { Logger.new(logged_output) }
|
|
29
28
|
let(:config) { Hash.new }
|
|
30
29
|
let(:state) { Hash.new }
|
|
31
30
|
|
|
32
31
|
let(:instance) do
|
|
33
|
-
stub(:
|
|
32
|
+
stub(name: "coolbeans", logger: logger, to_str: "instance")
|
|
34
33
|
end
|
|
35
34
|
|
|
36
35
|
let(:driver) do
|
|
@@ -46,7 +45,6 @@ describe Kitchen::Driver::Dummy do
|
|
|
46
45
|
end
|
|
47
46
|
|
|
48
47
|
describe "default_config" do
|
|
49
|
-
|
|
50
48
|
it "sets :sleep to 0 by default" do
|
|
51
49
|
driver[:sleep].must_equal 0
|
|
52
50
|
end
|
|
@@ -57,7 +55,6 @@ describe Kitchen::Driver::Dummy do
|
|
|
57
55
|
end
|
|
58
56
|
|
|
59
57
|
describe "#create" do
|
|
60
|
-
|
|
61
58
|
it "sets :my_id to a unique value as an example" do
|
|
62
59
|
driver.create(state)
|
|
63
60
|
|
|
@@ -104,7 +101,6 @@ describe Kitchen::Driver::Dummy do
|
|
|
104
101
|
end
|
|
105
102
|
|
|
106
103
|
describe "#setup" do
|
|
107
|
-
|
|
108
104
|
it "calls sleep if :sleep value is greater than 0" do
|
|
109
105
|
config[:sleep] = 12.5
|
|
110
106
|
driver.expects(:sleep).with(12.5).returns(true)
|
|
@@ -133,7 +129,6 @@ describe Kitchen::Driver::Dummy do
|
|
|
133
129
|
end
|
|
134
130
|
|
|
135
131
|
describe "#verify" do
|
|
136
|
-
|
|
137
132
|
it "calls sleep if :sleep value is greater than 0" do
|
|
138
133
|
config[:sleep] = 12.5
|
|
139
134
|
driver.expects(:sleep).with(12.5).returns(true)
|
|
@@ -162,7 +157,6 @@ describe Kitchen::Driver::Dummy do
|
|
|
162
157
|
end
|
|
163
158
|
|
|
164
159
|
describe "#destroy" do
|
|
165
|
-
|
|
166
160
|
it "removes :my_id from the state hash" do
|
|
167
161
|
state[:my_id] = "90210"
|
|
168
162
|
driver.destroy(state)
|
|
@@ -21,17 +21,16 @@ require_relative "../../spec_helper"
|
|
|
21
21
|
require "kitchen/driver/proxy"
|
|
22
22
|
|
|
23
23
|
describe Kitchen::Driver::Proxy do
|
|
24
|
-
|
|
25
24
|
let(:logged_output) { StringIO.new }
|
|
26
25
|
let(:logger) { Logger.new(logged_output) }
|
|
27
26
|
let(:state) { Hash.new }
|
|
28
27
|
|
|
29
28
|
let(:config) do
|
|
30
|
-
{ :
|
|
29
|
+
{ host: "foobnoobs.com", reset_command: "mulligan" }
|
|
31
30
|
end
|
|
32
31
|
|
|
33
32
|
let(:instance) do
|
|
34
|
-
stub(:
|
|
33
|
+
stub(name: "coolbeans", logger: logger, to_str: "instance")
|
|
35
34
|
end
|
|
36
35
|
|
|
37
36
|
let(:driver) do
|
|
@@ -43,7 +42,6 @@ describe Kitchen::Driver::Proxy do
|
|
|
43
42
|
end
|
|
44
43
|
|
|
45
44
|
describe "non-parallel action" do
|
|
46
|
-
|
|
47
45
|
it "create must be serially executed" do
|
|
48
46
|
Kitchen::Driver::Proxy.serial_actions.must_include :create
|
|
49
47
|
end
|
|
@@ -54,7 +52,6 @@ describe Kitchen::Driver::Proxy do
|
|
|
54
52
|
end
|
|
55
53
|
|
|
56
54
|
describe "required_config" do
|
|
57
|
-
|
|
58
55
|
[:host, :reset_command].each do |attr|
|
|
59
56
|
it "requires :#{attr}" do
|
|
60
57
|
config.delete(attr)
|
|
@@ -74,7 +71,6 @@ describe Kitchen::Driver::Proxy do
|
|
|
74
71
|
end
|
|
75
72
|
|
|
76
73
|
describe "#create" do
|
|
77
|
-
|
|
78
74
|
it "sets :hostname in state config" do
|
|
79
75
|
driver.stubs(:ssh)
|
|
80
76
|
driver.create(state)
|
|
@@ -100,7 +96,6 @@ describe Kitchen::Driver::Proxy do
|
|
|
100
96
|
end
|
|
101
97
|
|
|
102
98
|
describe "#destroy" do
|
|
103
|
-
|
|
104
99
|
before do
|
|
105
100
|
state[:hostname] = "beep"
|
|
106
101
|
end
|
|
@@ -23,11 +23,8 @@ require "kitchen/transport/ssh"
|
|
|
23
23
|
require "kitchen/verifier/busser"
|
|
24
24
|
|
|
25
25
|
module Kitchen
|
|
26
|
-
|
|
27
26
|
module Driver
|
|
28
|
-
|
|
29
27
|
class BackCompat < Kitchen::Driver::SSHBase
|
|
30
|
-
|
|
31
28
|
def use_run_remote(state, command)
|
|
32
29
|
connection = Kitchen::SSH.new(*build_ssh_args(state))
|
|
33
30
|
run_remote(command, connection)
|
|
@@ -43,12 +40,10 @@ module Kitchen
|
|
|
43
40
|
end
|
|
44
41
|
|
|
45
42
|
class DodgyCompat < Kitchen::Driver::SSHBase
|
|
46
|
-
|
|
47
43
|
no_parallel_for :converge
|
|
48
44
|
end
|
|
49
45
|
|
|
50
46
|
class SlowCompat < Kitchen::Driver::SSHBase
|
|
51
|
-
|
|
52
47
|
no_parallel_for :create, :destroy
|
|
53
48
|
no_parallel_for :verify
|
|
54
49
|
end
|
|
@@ -56,7 +51,6 @@ module Kitchen
|
|
|
56
51
|
end
|
|
57
52
|
|
|
58
53
|
describe Kitchen::Driver::SSHBase do
|
|
59
|
-
|
|
60
54
|
let(:logged_output) { StringIO.new }
|
|
61
55
|
let(:logger) { Logger.new(logged_output) }
|
|
62
56
|
let(:config) { Hash.new }
|
|
@@ -78,13 +72,13 @@ describe Kitchen::Driver::SSHBase do
|
|
|
78
72
|
|
|
79
73
|
let(:provisioner) do
|
|
80
74
|
stub(
|
|
81
|
-
:
|
|
82
|
-
:
|
|
83
|
-
:
|
|
84
|
-
:
|
|
85
|
-
:
|
|
86
|
-
:
|
|
87
|
-
:
|
|
75
|
+
install_command: "install",
|
|
76
|
+
init_command: "init",
|
|
77
|
+
prepare_command: "prepare",
|
|
78
|
+
run_command: "run",
|
|
79
|
+
create_sandbox: true,
|
|
80
|
+
cleanup_sandbox: true,
|
|
81
|
+
sandbox_path: "/tmp/sandbox"
|
|
88
82
|
)
|
|
89
83
|
end
|
|
90
84
|
|
|
@@ -96,12 +90,12 @@ describe Kitchen::Driver::SSHBase do
|
|
|
96
90
|
|
|
97
91
|
let(:instance) do
|
|
98
92
|
stub(
|
|
99
|
-
:
|
|
100
|
-
:
|
|
101
|
-
:
|
|
102
|
-
:
|
|
103
|
-
:
|
|
104
|
-
:
|
|
93
|
+
name: "coolbeans",
|
|
94
|
+
logger: logger,
|
|
95
|
+
verifier: verifier,
|
|
96
|
+
provisioner: provisioner,
|
|
97
|
+
transport: transport,
|
|
98
|
+
to_str: "instance"
|
|
105
99
|
)
|
|
106
100
|
end
|
|
107
101
|
|
|
@@ -114,7 +108,6 @@ describe Kitchen::Driver::SSHBase do
|
|
|
114
108
|
end
|
|
115
109
|
|
|
116
110
|
describe "configuration" do
|
|
117
|
-
|
|
118
111
|
it ":sudo defaults to true" do
|
|
119
112
|
driver[:sudo].must_equal true
|
|
120
113
|
end
|
|
@@ -135,19 +128,18 @@ describe Kitchen::Driver::SSHBase do
|
|
|
135
128
|
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
136
129
|
def self.constructs_an_ssh_connection
|
|
137
130
|
describe "constructs an SSH connection" do
|
|
138
|
-
|
|
139
131
|
it "with hostname set from state" do
|
|
140
|
-
transport.expects(:connection).with
|
|
132
|
+
transport.expects(:connection).with do |state|
|
|
141
133
|
state[:hostname].must_equal "fizzy"
|
|
142
|
-
|
|
134
|
+
end.returns(stub(login_command: stub))
|
|
143
135
|
|
|
144
136
|
cmd
|
|
145
137
|
end
|
|
146
138
|
|
|
147
139
|
it "with username set from state" do
|
|
148
|
-
transport.expects(:connection).with
|
|
140
|
+
transport.expects(:connection).with do |state|
|
|
149
141
|
state[:username].must_equal "bork"
|
|
150
|
-
|
|
142
|
+
end.returns(stub(login_command: stub))
|
|
151
143
|
|
|
152
144
|
cmd
|
|
153
145
|
end
|
|
@@ -155,9 +147,9 @@ describe Kitchen::Driver::SSHBase do
|
|
|
155
147
|
it "with :ssh_key option set from config" do
|
|
156
148
|
config[:ssh_key] = "wicked"
|
|
157
149
|
|
|
158
|
-
transport.expects(:connection).with
|
|
150
|
+
transport.expects(:connection).with do |state|
|
|
159
151
|
state[:ssh_key].must_equal "wicked"
|
|
160
|
-
|
|
152
|
+
end.returns(stub(login_command: stub))
|
|
161
153
|
|
|
162
154
|
cmd
|
|
163
155
|
end
|
|
@@ -165,17 +157,17 @@ describe Kitchen::Driver::SSHBase do
|
|
|
165
157
|
it "with :ssh_key option set from state" do
|
|
166
158
|
state[:ssh_key] = "wicked"
|
|
167
159
|
|
|
168
|
-
transport.expects(:connection).with
|
|
160
|
+
transport.expects(:connection).with do |state|
|
|
169
161
|
state[:ssh_key].must_equal "wicked"
|
|
170
|
-
|
|
162
|
+
end.returns(stub(login_command: stub))
|
|
171
163
|
|
|
172
164
|
cmd
|
|
173
165
|
end
|
|
174
166
|
|
|
175
167
|
it "with :password option set to falsey by default" do
|
|
176
|
-
transport.expects(:connection).with
|
|
168
|
+
transport.expects(:connection).with do |state|
|
|
177
169
|
state[:password].nil?
|
|
178
|
-
|
|
170
|
+
end.returns(stub(login_command: stub))
|
|
179
171
|
|
|
180
172
|
cmd
|
|
181
173
|
end
|
|
@@ -183,9 +175,9 @@ describe Kitchen::Driver::SSHBase do
|
|
|
183
175
|
it "with :password option set if given in config" do
|
|
184
176
|
config[:password] = "psst"
|
|
185
177
|
|
|
186
|
-
transport.expects(:connection).with
|
|
178
|
+
transport.expects(:connection).with do |state|
|
|
187
179
|
state[:password].must_equal "psst"
|
|
188
|
-
|
|
180
|
+
end.returns(stub(login_command: stub))
|
|
189
181
|
|
|
190
182
|
cmd
|
|
191
183
|
end
|
|
@@ -193,17 +185,17 @@ describe Kitchen::Driver::SSHBase do
|
|
|
193
185
|
it "with :password option set if given in state" do
|
|
194
186
|
state[:password] = "psst"
|
|
195
187
|
|
|
196
|
-
transport.expects(:connection).with
|
|
188
|
+
transport.expects(:connection).with do |state|
|
|
197
189
|
state[:password].must_equal "psst"
|
|
198
|
-
|
|
190
|
+
end.returns(stub(login_command: stub))
|
|
199
191
|
|
|
200
192
|
cmd
|
|
201
193
|
end
|
|
202
194
|
|
|
203
195
|
it "with :forward_agent option set to falsey by default" do
|
|
204
|
-
transport.expects(:connection).with
|
|
196
|
+
transport.expects(:connection).with do |state|
|
|
205
197
|
state[:forward_agent].nil?
|
|
206
|
-
|
|
198
|
+
end.returns(stub(login_command: stub))
|
|
207
199
|
|
|
208
200
|
cmd
|
|
209
201
|
end
|
|
@@ -211,9 +203,9 @@ describe Kitchen::Driver::SSHBase do
|
|
|
211
203
|
it "with :forward_agent option set if given in config" do
|
|
212
204
|
config[:forward_agent] = "yeah?"
|
|
213
205
|
|
|
214
|
-
transport.expects(:connection).with
|
|
206
|
+
transport.expects(:connection).with do |state|
|
|
215
207
|
state[:forward_agent].must_equal "yeah?"
|
|
216
|
-
|
|
208
|
+
end.returns(stub(login_command: stub))
|
|
217
209
|
|
|
218
210
|
cmd
|
|
219
211
|
end
|
|
@@ -221,17 +213,17 @@ describe Kitchen::Driver::SSHBase do
|
|
|
221
213
|
it "with :forward_agent option set if given in state" do
|
|
222
214
|
state[:forward_agent] = "yeah?"
|
|
223
215
|
|
|
224
|
-
transport.expects(:connection).with
|
|
216
|
+
transport.expects(:connection).with do |state|
|
|
225
217
|
state[:forward_agent].must_equal "yeah?"
|
|
226
|
-
|
|
218
|
+
end.returns(stub(login_command: stub))
|
|
227
219
|
|
|
228
220
|
cmd
|
|
229
221
|
end
|
|
230
222
|
|
|
231
223
|
it "with :port option set to 22 by default" do
|
|
232
|
-
transport.expects(:connection).with
|
|
224
|
+
transport.expects(:connection).with do |state|
|
|
233
225
|
state[:port].must_equal 22
|
|
234
|
-
|
|
226
|
+
end.returns(stub(login_command: stub))
|
|
235
227
|
|
|
236
228
|
cmd
|
|
237
229
|
end
|
|
@@ -239,9 +231,9 @@ describe Kitchen::Driver::SSHBase do
|
|
|
239
231
|
it "with :port option set if customized in config" do
|
|
240
232
|
config[:port] = 1234
|
|
241
233
|
|
|
242
|
-
transport.expects(:connection).with
|
|
234
|
+
transport.expects(:connection).with do |state|
|
|
243
235
|
state[:port].must_equal 1234
|
|
244
|
-
|
|
236
|
+
end.returns(stub(login_command: stub))
|
|
245
237
|
|
|
246
238
|
cmd
|
|
247
239
|
end
|
|
@@ -249,9 +241,9 @@ describe Kitchen::Driver::SSHBase do
|
|
|
249
241
|
it "with :port option set if customized in state" do
|
|
250
242
|
state[:port] = 9999
|
|
251
243
|
|
|
252
|
-
transport.expects(:connection).with
|
|
244
|
+
transport.expects(:connection).with do |state|
|
|
253
245
|
state[:port].must_equal 9999
|
|
254
|
-
|
|
246
|
+
end.returns(stub(login_command: stub))
|
|
255
247
|
|
|
256
248
|
cmd
|
|
257
249
|
end
|
|
@@ -260,7 +252,6 @@ describe Kitchen::Driver::SSHBase do
|
|
|
260
252
|
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
|
261
253
|
|
|
262
254
|
describe "#login_command" do
|
|
263
|
-
|
|
264
255
|
let(:cmd) { driver.login_command(state) }
|
|
265
256
|
|
|
266
257
|
before do
|
|
@@ -269,7 +260,7 @@ describe Kitchen::Driver::SSHBase do
|
|
|
269
260
|
end
|
|
270
261
|
|
|
271
262
|
it "returns a LoginCommand" do
|
|
272
|
-
transport.stubs(:connection).returns(stub(:
|
|
263
|
+
transport.stubs(:connection).returns(stub(login_command: "command"))
|
|
273
264
|
|
|
274
265
|
cmd.must_equal "command"
|
|
275
266
|
end
|
|
@@ -278,9 +269,8 @@ describe Kitchen::Driver::SSHBase do
|
|
|
278
269
|
end
|
|
279
270
|
|
|
280
271
|
describe "#converge" do
|
|
281
|
-
|
|
282
272
|
let(:cmd) { driver.converge(state) }
|
|
283
|
-
let(:connection) { stub(:
|
|
273
|
+
let(:connection) { stub(execute: true, upload: true) }
|
|
284
274
|
|
|
285
275
|
before do
|
|
286
276
|
state[:hostname] = "fizzy"
|
|
@@ -340,25 +330,25 @@ describe Kitchen::Driver::SSHBase do
|
|
|
340
330
|
cmd
|
|
341
331
|
end
|
|
342
332
|
|
|
343
|
-
it
|
|
333
|
+
it 'invokes the #install_command with ENV["http_proxy"] set' do
|
|
344
334
|
ENV["http_proxy"] = "http://proxy"
|
|
345
335
|
transport.stubs(:connection).yields(connection)
|
|
346
336
|
if running_tests_on_windows?
|
|
347
|
-
connection.expects(:execute)
|
|
348
|
-
|
|
337
|
+
connection.expects(:execute)
|
|
338
|
+
.with("env http_proxy=http://proxy HTTP_PROXY=http://proxy install")
|
|
349
339
|
else
|
|
350
340
|
connection.expects(:execute).with("env http_proxy=http://proxy install")
|
|
351
341
|
end
|
|
352
342
|
cmd
|
|
353
343
|
end
|
|
354
344
|
|
|
355
|
-
it
|
|
345
|
+
it 'invokes the #install_command with ENV["http_proxy"] and ENV["no_proxy"] set' do
|
|
356
346
|
ENV["http_proxy"] = "http://proxy"
|
|
357
347
|
ENV["no_proxy"] = "http://no"
|
|
358
348
|
transport.stubs(:connection).yields(connection)
|
|
359
349
|
if running_tests_on_windows?
|
|
360
|
-
connection.expects(:execute)
|
|
361
|
-
|
|
350
|
+
connection.expects(:execute)
|
|
351
|
+
.with("env http_proxy=http://proxy HTTP_PROXY=http://proxy " \
|
|
362
352
|
"no_proxy=http://no NO_PROXY=http://no install")
|
|
363
353
|
else
|
|
364
354
|
connection.expects(:execute).with("env http_proxy=http://proxy " \
|
|
@@ -375,25 +365,25 @@ describe Kitchen::Driver::SSHBase do
|
|
|
375
365
|
cmd
|
|
376
366
|
end
|
|
377
367
|
|
|
378
|
-
it
|
|
368
|
+
it 'invokes the #install_command with ENV["https_proxy"] set' do
|
|
379
369
|
ENV["https_proxy"] = "https://proxy"
|
|
380
370
|
transport.stubs(:connection).yields(connection)
|
|
381
371
|
if running_tests_on_windows?
|
|
382
|
-
connection.expects(:execute)
|
|
383
|
-
|
|
372
|
+
connection.expects(:execute)
|
|
373
|
+
.with("env https_proxy=https://proxy HTTPS_PROXY=https://proxy install")
|
|
384
374
|
else
|
|
385
375
|
connection.expects(:execute).with("env https_proxy=https://proxy install")
|
|
386
376
|
end
|
|
387
377
|
cmd
|
|
388
378
|
end
|
|
389
379
|
|
|
390
|
-
it
|
|
380
|
+
it 'invokes the #install_command with ENV["https_proxy"] and ENV["no_proxy"] set' do
|
|
391
381
|
ENV["https_proxy"] = "https://proxy"
|
|
392
382
|
ENV["no_proxy"] = "https://no"
|
|
393
383
|
transport.stubs(:connection).yields(connection)
|
|
394
384
|
if running_tests_on_windows?
|
|
395
|
-
connection.expects(:execute)
|
|
396
|
-
|
|
385
|
+
connection.expects(:execute)
|
|
386
|
+
.with("env https_proxy=https://proxy HTTPS_PROXY=https://proxy " \
|
|
397
387
|
"no_proxy=https://no NO_PROXY=https://no install")
|
|
398
388
|
else
|
|
399
389
|
connection.expects(:execute).with("env https_proxy=https://proxy " \
|
|
@@ -410,25 +400,25 @@ describe Kitchen::Driver::SSHBase do
|
|
|
410
400
|
cmd
|
|
411
401
|
end
|
|
412
402
|
|
|
413
|
-
it
|
|
403
|
+
it 'invokes the #install_command with ENV["ftp_proxy"] set' do
|
|
414
404
|
ENV["ftp_proxy"] = "ftp://proxy"
|
|
415
405
|
transport.stubs(:connection).yields(connection)
|
|
416
406
|
if running_tests_on_windows?
|
|
417
|
-
connection.expects(:execute)
|
|
418
|
-
|
|
407
|
+
connection.expects(:execute)
|
|
408
|
+
.with("env ftp_proxy=ftp://proxy FTP_PROXY=ftp://proxy install")
|
|
419
409
|
else
|
|
420
410
|
connection.expects(:execute).with("env ftp_proxy=ftp://proxy install")
|
|
421
411
|
end
|
|
422
412
|
cmd
|
|
423
413
|
end
|
|
424
414
|
|
|
425
|
-
it
|
|
415
|
+
it 'invokes the #install_command with ENV["ftp_proxy"] and ENV["no_proxy"] set' do
|
|
426
416
|
ENV["ftp_proxy"] = "ftp://proxy"
|
|
427
417
|
ENV["no_proxy"] = "http://no"
|
|
428
418
|
transport.stubs(:connection).yields(connection)
|
|
429
419
|
if running_tests_on_windows?
|
|
430
|
-
connection.expects(:execute)
|
|
431
|
-
|
|
420
|
+
connection.expects(:execute)
|
|
421
|
+
.with("env ftp_proxy=ftp://proxy FTP_PROXY=http://proxy " \
|
|
432
422
|
"no_proxy=http://no NO_PROXY=http://no install")
|
|
433
423
|
else
|
|
434
424
|
connection.expects(:execute).with("env ftp_proxy=ftp://proxy " \
|
|
@@ -449,7 +439,6 @@ describe Kitchen::Driver::SSHBase do
|
|
|
449
439
|
end
|
|
450
440
|
|
|
451
441
|
describe "transferring files" do
|
|
452
|
-
|
|
453
442
|
before do
|
|
454
443
|
transport.stubs(:connection).yields(connection)
|
|
455
444
|
connection.stubs(:upload)
|
|
@@ -465,8 +454,8 @@ describe Kitchen::Driver::SSHBase do
|
|
|
465
454
|
it "logs to info" do
|
|
466
455
|
cmd
|
|
467
456
|
|
|
468
|
-
logged_output.string
|
|
469
|
-
|
|
457
|
+
logged_output.string
|
|
458
|
+
.must_match(/INFO -- : Transferring files to instance$/)
|
|
470
459
|
end
|
|
471
460
|
|
|
472
461
|
it "logs to debug" do
|
|
@@ -491,7 +480,6 @@ describe Kitchen::Driver::SSHBase do
|
|
|
491
480
|
end
|
|
492
481
|
|
|
493
482
|
describe "#setup" do
|
|
494
|
-
|
|
495
483
|
let(:cmd) { driver.setup(state) }
|
|
496
484
|
let(:connection) { mock }
|
|
497
485
|
|
|
@@ -553,9 +541,8 @@ describe Kitchen::Driver::SSHBase do
|
|
|
553
541
|
end
|
|
554
542
|
|
|
555
543
|
describe "#verify" do
|
|
556
|
-
|
|
557
544
|
let(:cmd) { driver.verify(state) }
|
|
558
|
-
let(:connection) { stub(:
|
|
545
|
+
let(:connection) { stub(execute: true, upload: true) }
|
|
559
546
|
|
|
560
547
|
before do
|
|
561
548
|
state[:hostname] = "fizzy"
|
|
@@ -590,7 +577,7 @@ describe Kitchen::Driver::SSHBase do
|
|
|
590
577
|
cmd
|
|
591
578
|
end
|
|
592
579
|
|
|
593
|
-
%
|
|
580
|
+
%w{init prepare run}.each do |phase|
|
|
594
581
|
it "invokes Verifier##{phase}_command over ssh" do
|
|
595
582
|
connection.expects(:execute).with(phase)
|
|
596
583
|
|
|
@@ -632,8 +619,8 @@ describe Kitchen::Driver::SSHBase do
|
|
|
632
619
|
it "logs to info" do
|
|
633
620
|
cmd
|
|
634
621
|
|
|
635
|
-
logged_output.string
|
|
636
|
-
|
|
622
|
+
logged_output.string
|
|
623
|
+
.must_match(/INFO -- : Transferring files to instance$/)
|
|
637
624
|
end
|
|
638
625
|
|
|
639
626
|
it "uploads sandbox files" do
|
|
@@ -649,8 +636,8 @@ describe Kitchen::Driver::SSHBase do
|
|
|
649
636
|
end
|
|
650
637
|
|
|
651
638
|
it "raises an ActionFailed on transfer when TransportFailed is raised" do
|
|
652
|
-
connection.stubs(:upload)
|
|
653
|
-
|
|
639
|
+
connection.stubs(:upload)
|
|
640
|
+
.raises(Kitchen::Transport::TransportFailed.new("dang"))
|
|
654
641
|
|
|
655
642
|
proc { cmd }.must_raise Kitchen::ActionFailed
|
|
656
643
|
end
|
|
@@ -663,17 +650,16 @@ describe Kitchen::Driver::SSHBase do
|
|
|
663
650
|
end
|
|
664
651
|
|
|
665
652
|
describe "#ssh" do
|
|
666
|
-
|
|
667
|
-
let(:cmd) { driver.ssh(["host", "user", { :one => "two" }], "go") }
|
|
653
|
+
let(:cmd) { driver.ssh(["host", "user", { one: "two" }], "go") }
|
|
668
654
|
let(:connection) { mock }
|
|
669
655
|
|
|
670
656
|
it "creates an SSH connection" do
|
|
671
657
|
connection.stubs(:execute)
|
|
672
658
|
transport.expects(:connection).with(
|
|
673
|
-
:
|
|
674
|
-
:
|
|
675
|
-
:
|
|
676
|
-
:
|
|
659
|
+
hostname: "host",
|
|
660
|
+
username: "user",
|
|
661
|
+
port: 22,
|
|
662
|
+
one: "two"
|
|
677
663
|
).yields(connection)
|
|
678
664
|
|
|
679
665
|
cmd
|
|
@@ -688,7 +674,6 @@ describe Kitchen::Driver::SSHBase do
|
|
|
688
674
|
end
|
|
689
675
|
|
|
690
676
|
describe "#remote_command" do
|
|
691
|
-
|
|
692
677
|
let(:cmd) { driver.remote_command(state, "shipit") }
|
|
693
678
|
let(:connection) { mock }
|
|
694
679
|
|
|
@@ -699,9 +684,9 @@ describe Kitchen::Driver::SSHBase do
|
|
|
699
684
|
|
|
700
685
|
it "creates an SSH connection" do
|
|
701
686
|
transport.expects(:connection).with(
|
|
702
|
-
:
|
|
703
|
-
:
|
|
704
|
-
:
|
|
687
|
+
hostname: "fizzy",
|
|
688
|
+
username: "bork",
|
|
689
|
+
port: 22
|
|
705
690
|
)
|
|
706
691
|
|
|
707
692
|
cmd
|
|
@@ -716,18 +701,17 @@ describe Kitchen::Driver::SSHBase do
|
|
|
716
701
|
end
|
|
717
702
|
|
|
718
703
|
describe "#wait_for_sshd" do
|
|
719
|
-
|
|
720
704
|
let(:cmd) do
|
|
721
|
-
driver.send(:wait_for_sshd, "host", "user", :
|
|
705
|
+
driver.send(:wait_for_sshd, "host", "user", one: "two")
|
|
722
706
|
end
|
|
723
707
|
|
|
724
708
|
it "creates an SSH connection with merged options" do
|
|
725
709
|
transport.expects(:connection).with(
|
|
726
|
-
:
|
|
727
|
-
:
|
|
728
|
-
:
|
|
729
|
-
:
|
|
730
|
-
).returns(stub(:
|
|
710
|
+
hostname: "host",
|
|
711
|
+
username: "user",
|
|
712
|
+
port: 22,
|
|
713
|
+
one: "two"
|
|
714
|
+
).returns(stub(wait_until_ready: true))
|
|
731
715
|
|
|
732
716
|
cmd
|
|
733
717
|
end
|
|
@@ -742,7 +726,6 @@ describe Kitchen::Driver::SSHBase do
|
|
|
742
726
|
end
|
|
743
727
|
|
|
744
728
|
describe "to maintain backwards compatibility" do
|
|
745
|
-
|
|
746
729
|
let(:driver) do
|
|
747
730
|
Kitchen::Driver::BackCompat.new(config).finalize_config!(instance)
|
|
748
731
|
end
|
|
@@ -756,7 +739,6 @@ describe Kitchen::Driver::SSHBase do
|
|
|
756
739
|
end
|
|
757
740
|
|
|
758
741
|
describe "#logger" do
|
|
759
|
-
|
|
760
742
|
before { @klog = Kitchen.logger }
|
|
761
743
|
after { Kitchen.logger = @klog }
|
|
762
744
|
|
|
@@ -795,7 +777,6 @@ describe Kitchen::Driver::SSHBase do
|
|
|
795
777
|
end
|
|
796
778
|
|
|
797
779
|
describe ".no_parallel_for" do
|
|
798
|
-
|
|
799
780
|
it "registers no serial actions when none are declared" do
|
|
800
781
|
Kitchen::Driver::SpeedyCompat.serial_actions.must_equal nil
|
|
801
782
|
end
|
|
@@ -813,52 +794,52 @@ describe Kitchen::Driver::SSHBase do
|
|
|
813
794
|
end
|
|
814
795
|
|
|
815
796
|
it "raises a ClientError if value is not an action method" do
|
|
816
|
-
proc
|
|
817
|
-
Class.new(Kitchen::Driver::BackCompat)
|
|
797
|
+
proc do
|
|
798
|
+
Class.new(Kitchen::Driver::BackCompat) do
|
|
818
799
|
no_parallel_for :telling_stories
|
|
819
|
-
|
|
820
|
-
|
|
800
|
+
end
|
|
801
|
+
end.must_raise Kitchen::ClientError
|
|
821
802
|
end
|
|
822
803
|
end
|
|
823
804
|
|
|
824
805
|
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
825
806
|
def self.constructs_an_ssh_object
|
|
826
807
|
it "with hostname set from state" do
|
|
827
|
-
Kitchen::SSH.expects(:new).with
|
|
808
|
+
Kitchen::SSH.expects(:new).with do |hostname, _username, _opts|
|
|
828
809
|
hostname.must_equal "fizzy"
|
|
829
|
-
|
|
810
|
+
end.returns(connection)
|
|
830
811
|
|
|
831
812
|
cmd
|
|
832
813
|
end
|
|
833
814
|
|
|
834
815
|
it "with username set from state" do
|
|
835
|
-
Kitchen::SSH.expects(:new).with
|
|
816
|
+
Kitchen::SSH.expects(:new).with do |_hostname, username, _opts|
|
|
836
817
|
username.must_equal "bork"
|
|
837
|
-
|
|
818
|
+
end.returns(connection)
|
|
838
819
|
|
|
839
820
|
cmd
|
|
840
821
|
end
|
|
841
822
|
|
|
842
823
|
it "with :user_known_hosts_file option set to /dev/null" do
|
|
843
|
-
Kitchen::SSH.expects(:new).with
|
|
824
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
844
825
|
opts[:user_known_hosts_file].must_equal "/dev/null"
|
|
845
|
-
|
|
826
|
+
end.returns(connection)
|
|
846
827
|
|
|
847
828
|
cmd
|
|
848
829
|
end
|
|
849
830
|
|
|
850
831
|
it "with :paranoid option set to false" do
|
|
851
|
-
Kitchen::SSH.expects(:new).with
|
|
832
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
852
833
|
opts[:paranoid].must_equal false
|
|
853
|
-
|
|
834
|
+
end.returns(connection)
|
|
854
835
|
|
|
855
836
|
cmd
|
|
856
837
|
end
|
|
857
838
|
|
|
858
839
|
it "with :keys_only option set to falsey by default" do
|
|
859
|
-
Kitchen::SSH.expects(:new).with
|
|
840
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
860
841
|
opts[:keys_only].nil?
|
|
861
|
-
|
|
842
|
+
end.returns(connection)
|
|
862
843
|
|
|
863
844
|
cmd
|
|
864
845
|
end
|
|
@@ -866,9 +847,9 @@ describe Kitchen::Driver::SSHBase do
|
|
|
866
847
|
it "with :keys_only option set to true if :ssh_key is set in config" do
|
|
867
848
|
config[:ssh_key] = "wicked"
|
|
868
849
|
|
|
869
|
-
Kitchen::SSH.expects(:new).with
|
|
850
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
870
851
|
opts[:keys_only].must_equal true
|
|
871
|
-
|
|
852
|
+
end.returns(connection)
|
|
872
853
|
|
|
873
854
|
cmd
|
|
874
855
|
end
|
|
@@ -876,17 +857,17 @@ describe Kitchen::Driver::SSHBase do
|
|
|
876
857
|
it "with :keys_only option set to true if :ssh_key is set in state" do
|
|
877
858
|
state[:ssh_key] = "wicked"
|
|
878
859
|
|
|
879
|
-
Kitchen::SSH.expects(:new).with
|
|
860
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
880
861
|
opts[:keys_only].must_equal true
|
|
881
|
-
|
|
862
|
+
end.returns(connection)
|
|
882
863
|
|
|
883
864
|
cmd
|
|
884
865
|
end
|
|
885
866
|
|
|
886
867
|
it "with :keys option set to falsey by default" do
|
|
887
|
-
Kitchen::SSH.expects(:new).with
|
|
868
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
888
869
|
opts[:keys].nil?
|
|
889
|
-
|
|
870
|
+
end.returns(connection)
|
|
890
871
|
|
|
891
872
|
cmd
|
|
892
873
|
end
|
|
@@ -894,9 +875,9 @@ describe Kitchen::Driver::SSHBase do
|
|
|
894
875
|
it "with :keys option set to an array if :ssh_key is set in config" do
|
|
895
876
|
config[:ssh_key] = "wicked"
|
|
896
877
|
|
|
897
|
-
Kitchen::SSH.expects(:new).with
|
|
878
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
898
879
|
opts[:keys].must_equal ["wicked"]
|
|
899
|
-
|
|
880
|
+
end.returns(connection)
|
|
900
881
|
|
|
901
882
|
cmd
|
|
902
883
|
end
|
|
@@ -904,17 +885,17 @@ describe Kitchen::Driver::SSHBase do
|
|
|
904
885
|
it "with :keys option set to an array if :ssh_key is set in state" do
|
|
905
886
|
state[:ssh_key] = "wicked"
|
|
906
887
|
|
|
907
|
-
Kitchen::SSH.expects(:new).with
|
|
888
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
908
889
|
opts[:keys].must_equal ["wicked"]
|
|
909
|
-
|
|
890
|
+
end.returns(connection)
|
|
910
891
|
|
|
911
892
|
cmd
|
|
912
893
|
end
|
|
913
894
|
|
|
914
895
|
it "with :password option set to falsey by default" do
|
|
915
|
-
Kitchen::SSH.expects(:new).with
|
|
896
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
916
897
|
opts[:password].nil?
|
|
917
|
-
|
|
898
|
+
end.returns(connection)
|
|
918
899
|
|
|
919
900
|
cmd
|
|
920
901
|
end
|
|
@@ -922,9 +903,9 @@ describe Kitchen::Driver::SSHBase do
|
|
|
922
903
|
it "with :password option set if given in config" do
|
|
923
904
|
config[:password] = "psst"
|
|
924
905
|
|
|
925
|
-
Kitchen::SSH.expects(:new).with
|
|
906
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
926
907
|
opts[:password].must_equal "psst"
|
|
927
|
-
|
|
908
|
+
end.returns(connection)
|
|
928
909
|
|
|
929
910
|
cmd
|
|
930
911
|
end
|
|
@@ -932,17 +913,17 @@ describe Kitchen::Driver::SSHBase do
|
|
|
932
913
|
it "with :password option set if given in state" do
|
|
933
914
|
state[:password] = "psst"
|
|
934
915
|
|
|
935
|
-
Kitchen::SSH.expects(:new).with
|
|
916
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
936
917
|
opts[:password].must_equal "psst"
|
|
937
|
-
|
|
918
|
+
end.returns(connection)
|
|
938
919
|
|
|
939
920
|
cmd
|
|
940
921
|
end
|
|
941
922
|
|
|
942
923
|
it "with :forward_agent option set to falsey by default" do
|
|
943
|
-
Kitchen::SSH.expects(:new).with
|
|
924
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
944
925
|
opts[:forward_agent].nil?
|
|
945
|
-
|
|
926
|
+
end.returns(connection)
|
|
946
927
|
|
|
947
928
|
cmd
|
|
948
929
|
end
|
|
@@ -950,9 +931,9 @@ describe Kitchen::Driver::SSHBase do
|
|
|
950
931
|
it "with :forward_agent option set if given in config" do
|
|
951
932
|
config[:forward_agent] = "yeah?"
|
|
952
933
|
|
|
953
|
-
Kitchen::SSH.expects(:new).with
|
|
934
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
954
935
|
opts[:forward_agent].must_equal "yeah?"
|
|
955
|
-
|
|
936
|
+
end.returns(connection)
|
|
956
937
|
|
|
957
938
|
cmd
|
|
958
939
|
end
|
|
@@ -960,17 +941,17 @@ describe Kitchen::Driver::SSHBase do
|
|
|
960
941
|
it "with :forward_agent option set if given in state" do
|
|
961
942
|
state[:forward_agent] = "yeah?"
|
|
962
943
|
|
|
963
|
-
Kitchen::SSH.expects(:new).with
|
|
944
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
964
945
|
opts[:forward_agent].must_equal "yeah?"
|
|
965
|
-
|
|
946
|
+
end.returns(connection)
|
|
966
947
|
|
|
967
948
|
cmd
|
|
968
949
|
end
|
|
969
950
|
|
|
970
951
|
it "with :port option set to 22 by default" do
|
|
971
|
-
Kitchen::SSH.expects(:new).with
|
|
952
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
972
953
|
opts[:port].must_equal 22
|
|
973
|
-
|
|
954
|
+
end.returns(connection)
|
|
974
955
|
|
|
975
956
|
cmd
|
|
976
957
|
end
|
|
@@ -978,9 +959,9 @@ describe Kitchen::Driver::SSHBase do
|
|
|
978
959
|
it "with :port option set if customized in config" do
|
|
979
960
|
config[:port] = 1234
|
|
980
961
|
|
|
981
|
-
Kitchen::SSH.expects(:new).with
|
|
962
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
982
963
|
opts[:port].must_equal 1234
|
|
983
|
-
|
|
964
|
+
end.returns(connection)
|
|
984
965
|
|
|
985
966
|
cmd
|
|
986
967
|
end
|
|
@@ -988,17 +969,17 @@ describe Kitchen::Driver::SSHBase do
|
|
|
988
969
|
it "with :port option set if customized in state" do
|
|
989
970
|
state[:port] = 9999
|
|
990
971
|
|
|
991
|
-
Kitchen::SSH.expects(:new).with
|
|
972
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
992
973
|
opts[:port].must_equal 9999
|
|
993
|
-
|
|
974
|
+
end.returns(connection)
|
|
994
975
|
|
|
995
976
|
cmd
|
|
996
977
|
end
|
|
997
978
|
|
|
998
979
|
it "with :logger option set to driver's logger" do
|
|
999
|
-
Kitchen::SSH.expects(:new).with
|
|
980
|
+
Kitchen::SSH.expects(:new).with do |_hostname, _username, opts|
|
|
1000
981
|
opts[:logger].must_equal logger
|
|
1001
|
-
|
|
982
|
+
end.returns(connection)
|
|
1002
983
|
|
|
1003
984
|
cmd
|
|
1004
985
|
end
|
|
@@ -1006,9 +987,8 @@ describe Kitchen::Driver::SSHBase do
|
|
|
1006
987
|
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
|
1007
988
|
|
|
1008
989
|
describe "#run_remote" do
|
|
1009
|
-
|
|
1010
990
|
let(:cmd) { driver.use_run_remote(state, "huh") }
|
|
1011
|
-
let(:connection) { stub(:
|
|
991
|
+
let(:connection) { stub(exec: true) }
|
|
1012
992
|
|
|
1013
993
|
before do
|
|
1014
994
|
state[:hostname] = "fizzy"
|
|
@@ -1074,10 +1054,9 @@ describe Kitchen::Driver::SSHBase do
|
|
|
1074
1054
|
end
|
|
1075
1055
|
|
|
1076
1056
|
describe "#transfer_path" do
|
|
1077
|
-
|
|
1078
1057
|
let(:cmd) { driver.use_transfer_path(state, ["nope"], "nadda") }
|
|
1079
|
-
let(:channel) { stub(:
|
|
1080
|
-
let(:connection) { stub(
|
|
1058
|
+
let(:channel) { stub(wait: true) }
|
|
1059
|
+
let(:connection) { stub(upload_path!: true, upload_path: channel) }
|
|
1081
1060
|
|
|
1082
1061
|
before do
|
|
1083
1062
|
state[:hostname] = "fizzy"
|