ridley 0.10.0.rc1 → 0.10.0.rc2

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.
@@ -10,6 +10,11 @@ describe Ridley::HostConnector::WinRM do
10
10
  let(:node_two) do
11
11
  Ridley::NodeResource.new(connection, automatic: { cloud: { public_hostname: "33.33.33.11" } })
12
12
  end
13
+ let(:command_uploader) { double('command_uploader', cleanup: nil) }
14
+
15
+ before do
16
+ Ridley::HostConnector::WinRM::CommandUploader.stub(:new).and_return(command_uploader)
17
+ end
13
18
 
14
19
  describe "ClassMethods" do
15
20
  subject { Ridley::HostConnector::WinRM }
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Ridley::HostConnector do
4
-
5
4
  subject do
6
5
  described_class
7
6
  end
@@ -14,29 +13,50 @@ describe Ridley::HostConnector do
14
13
  described_class::DEFAULT_WINRM_PORT.should eq(5985)
15
14
  end
16
15
 
17
- describe "#connector_port_open" do
18
- let(:host) {"127.0.0.1"}
19
- let(:port) {22}
20
- let(:socket) {double(:new => true, :close => nil)}
16
+ describe "#connector_port_open?" do
17
+ let(:host) { "127.0.0.1" }
18
+ let(:port) { 22 }
19
+ let(:socket) { double(:new => true, :close => nil) }
21
20
 
22
21
  context "when a port is open" do
23
- it "returns true" do
22
+ before do
24
23
  TCPSocket.stub(:new).and_return(socket)
25
- subject.connector_port_open?(host, port).should eq(true)
24
+ end
25
+
26
+ it "returns true" do
27
+ subject.connector_port_open?(host, port).should eql(true)
28
+ end
29
+
30
+ it "closes the opened socket" do
31
+ socket.should_receive(:close)
32
+ subject.connector_port_open?(host, port)
26
33
  end
27
34
  end
28
35
 
29
36
  context "when a port is closed" do
30
- it "returns false" do
37
+ before do
31
38
  TCPSocket.stub(:new).and_raise(Errno::ECONNREFUSED)
39
+ end
40
+
41
+ it "returns false" do
32
42
  subject.connector_port_open?(host, port).should eq(false)
33
43
  end
34
44
  end
45
+
46
+ context "when host is unreachable" do
47
+ before do
48
+ TCPSocket.stub(:new).and_raise(SocketError)
49
+ end
50
+
51
+ it "returns false" do
52
+ subject.connector_port_open?(host, port).should eql(false)
53
+ end
54
+ end
35
55
  end
36
56
 
37
57
  describe "#best_connector_for" do
38
58
  let(:host) {"127.0.0.1"}
39
-
59
+
40
60
  context "when an SSH port is open" do
41
61
  it "returns Ridley::HostConnector::SSH" do
42
62
  subject.stub(:connector_port_open?).and_return(true)
@@ -59,6 +79,15 @@ describe Ridley::HostConnector do
59
79
  }.to raise_error(Ridley::Errors::HostConnectionError)
60
80
  end
61
81
  end
82
+
83
+ context "when a block is provided" do
84
+ it "yields the best HostConnector to the block" do
85
+ subject.stub(:connector_port_open?).and_return(true)
86
+ subject.best_connector_for(host) do |yielded|
87
+ yielded.should eq(Ridley::HostConnector::SSH)
88
+ end
89
+ end
90
+ end
62
91
  end
63
92
 
64
93
  describe "#parse_port_options" do
@@ -72,7 +101,7 @@ describe Ridley::HostConnector do
72
101
  }
73
102
  }
74
103
  end
75
-
104
+
76
105
  context "when :ssh has a key for :port" do
77
106
  it "returns the value of port instead of the default" do
78
107
  subject.parse_port_options(options).should include(1234)
@@ -10,13 +10,21 @@ describe Ridley::NodeResource do
10
10
  ssh: {
11
11
  user: "reset",
12
12
  password: "lol"
13
- }
13
+ },
14
+ winrm: {
15
+ user: "Administrator",
16
+ password: "secret"
17
+ },
18
+ encrypted_data_bag_secret_path: nil
14
19
  )
15
20
  end
21
+ let(:host) { "33.33.33.10" }
16
22
 
17
23
  describe "ClassMethods" do
18
24
  subject { Ridley::NodeResource }
19
25
 
26
+ let(:worker) { double('worker', alive?: true, terminate: nil) }
27
+
20
28
  describe "::bootstrap" do
21
29
  let(:boot_options) do
22
30
  {
@@ -36,6 +44,133 @@ describe Ridley::NodeResource do
36
44
  end
37
45
  end
38
46
 
47
+ describe "::chef_run" do
48
+ subject { chef_run }
49
+ let(:chef_run) { described_class.chef_run(connection, host) }
50
+ let(:response) { [:ok, double('response', stdout: 'success_message')] }
51
+
52
+ before do
53
+ Ridley::NodeResource.stub(:configured_worker_for).and_return(worker)
54
+ worker.stub(:chef_client).and_return(response)
55
+ end
56
+
57
+ it { should eq(response) }
58
+
59
+ context "when it executes unsuccessfully" do
60
+ let(:response) { [:error, double('response', stderr: 'failure_message')] }
61
+
62
+ it {should eq(response)}
63
+ end
64
+
65
+ it "terminates the worker" do
66
+ worker.should_receive(:terminate)
67
+ chef_run
68
+ end
69
+ end
70
+
71
+ describe "::put_secret" do
72
+ subject { put_secret }
73
+ let(:put_secret) { described_class.put_secret(connection, host, secret_path)}
74
+ let(:response) { [:ok, double('response', stdout: 'success_message')] }
75
+ let(:secret_path) { fixtures_path.join("reset.pem").to_s }
76
+
77
+ before do
78
+ Ridley::NodeResource.stub(:configured_worker_for).and_return(worker)
79
+ worker.stub(:put_secret).and_return(response)
80
+ end
81
+
82
+ it { should eq(response) }
83
+
84
+ context "when it executes unsuccessfully" do
85
+ let(:response) { [:error, double('response', stderr: 'failure_message')] }
86
+
87
+ it { should eq(response) }
88
+ end
89
+
90
+ it "terminates the worker" do
91
+ worker.should_receive(:terminate)
92
+ put_secret
93
+ end
94
+ end
95
+
96
+ describe "::ruby_script" do
97
+ subject { ruby_script }
98
+ let(:ruby_script) { described_class.ruby_script(connection, host, command_lines) }
99
+ let(:response) { [:ok, double('response', stdout: 'success_message')] }
100
+ let(:command_lines) { ["puts 'hello'", "puts 'there'"] }
101
+
102
+ before do
103
+ Ridley::NodeResource.stub(:configured_worker_for).and_return(worker)
104
+ worker.stub(:ruby_script).and_return(response)
105
+ end
106
+
107
+ it { should eq(response) }
108
+
109
+ context "when it executes unsuccessfully" do
110
+ let(:response) { [:error, double('response', stderr: 'failure_message')] }
111
+
112
+ it { should eq(response) }
113
+ end
114
+
115
+ it "terminates the worker" do
116
+ worker.should_receive(:terminate)
117
+ ruby_script
118
+ end
119
+ end
120
+
121
+ describe "::execute_command" do
122
+ subject { execute_command }
123
+
124
+ let(:execute_command) { described_class.execute_command(connection, host, command) }
125
+ let(:response) { [:ok, double('response', stdout: 'success_message')] }
126
+ let(:command) { "echo 'hello world'" }
127
+
128
+ before do
129
+ Ridley::NodeResource.stub(:configured_worker_for).and_return(worker)
130
+ worker.stub(:run).and_return(response)
131
+ end
132
+
133
+ it { should eq(response) }
134
+
135
+ context "when it executes unsuccessfully" do
136
+ let(:response) { [:error, double('response', stderr: 'failure_message')] }
137
+
138
+ it { should eq(response) }
139
+ end
140
+ end
141
+
142
+ describe "::configured_worker_for" do
143
+ subject { configured_worker_for }
144
+
145
+ let(:configured_worker_for) { described_class.send(:configured_worker_for, connection, host) }
146
+
147
+ context "when the best connector is SSH" do
148
+ before do
149
+ Ridley::HostConnector.stub(:best_connector_for).and_yield(Ridley::HostConnector::SSH)
150
+ end
151
+
152
+ it "returns an SSH worker instance" do
153
+ configured_worker_for.should be_a(Ridley::HostConnector::SSH::Worker)
154
+ end
155
+
156
+ its(:user) { should eq("reset") }
157
+ end
158
+
159
+ context "when the best connector is WinRM" do
160
+ before do
161
+ Ridley::HostConnector.stub(:best_connector_for).and_yield(Ridley::HostConnector::WinRM)
162
+ Ridley::HostConnector::WinRM::CommandUploader.stub(:new)
163
+ end
164
+
165
+ it "returns a WinRm worker instance" do
166
+ configured_worker_for.should be_a(Ridley::HostConnector::WinRM::Worker)
167
+ end
168
+
169
+ its(:user) { should eq("Administrator") }
170
+ its(:password) { should eq("secret") }
171
+ end
172
+ end
173
+
39
174
  describe "::merge_data" do
40
175
  it "finds the target node and sends it the merge_data message" do
41
176
  data = double('data')
@@ -48,7 +183,8 @@ describe Ridley::NodeResource do
48
183
  end
49
184
  end
50
185
 
51
- subject { Ridley::NodeResource.new(connection) }
186
+ subject { node_resource }
187
+ let(:node_resource) { Ridley::NodeResource.new(connection) }
52
188
 
53
189
  describe "#set_chef_attribute" do
54
190
  it "sets an normal node attribute at the nested path" do
@@ -242,11 +378,42 @@ describe Ridley::NodeResource do
242
378
  end
243
379
 
244
380
  describe "#chef_client" do
245
- pending
381
+ subject { chef_client }
382
+ let(:chef_client) { node_resource.chef_client }
383
+ let(:worker) { double('worker', chef_client: response) }
384
+ let(:response) { [:ok, Ridley::HostConnector::Response.new(host)] }
385
+
386
+ before do
387
+ Ridley::HostConnector.stub(:best_connector_for).and_yield(Ridley::HostConnector::SSH)
388
+ Ridley::HostConnector::SSH.stub(:start).and_yield(worker)
389
+ end
390
+
391
+ it "returns a HostConnector::Response" do
392
+
393
+ chef_client.should be_a(Ridley::HostConnector::Response)
394
+ end
246
395
  end
247
396
 
248
397
  describe "#put_secret" do
249
- pending
398
+ subject { put_secret }
399
+ let(:put_secret) { node_resource.put_secret }
400
+ let(:worker) { double('worker', put_secret: response) }
401
+ let(:response) { [:ok, Ridley::HostConnector::Response.new(host)] }
402
+
403
+ before do
404
+ Ridley::HostConnector.stub(:best_connector_for).and_yield(Ridley::HostConnector::SSH)
405
+ Ridley::HostConnector::SSH.stub(:start).and_yield(worker)
406
+ end
407
+
408
+ context "when the client does not have an encrypted file" do
409
+ it "returns nil" do
410
+ put_secret.should be_nil
411
+ end
412
+ end
413
+
414
+ it "returns a HostConnector::Response" do
415
+ pending
416
+ end
250
417
  end
251
418
 
252
419
  describe "#merge_data" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ridley
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0.rc1
4
+ version: 0.10.0.rc2
5
5
  prerelease: 7
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-10 00:00:00.000000000 Z
12
+ date: 2013-04-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -321,6 +321,7 @@ files:
321
321
  - lib/ridley/host_connector/ssh.rb
322
322
  - lib/ridley/host_connector/ssh/worker.rb
323
323
  - lib/ridley/host_connector/winrm.rb
324
+ - lib/ridley/host_connector/winrm/command_uploader.rb
324
325
  - lib/ridley/host_connector/winrm/worker.rb
325
326
  - lib/ridley/log.rb
326
327
  - lib/ridley/logging.rb
@@ -391,6 +392,7 @@ files:
391
392
  - spec/unit/ridley/host_connector/response_set_spec.rb
392
393
  - spec/unit/ridley/host_connector/ssh/worker_spec.rb
393
394
  - spec/unit/ridley/host_connector/ssh_spec.rb
395
+ - spec/unit/ridley/host_connector/winrm/command_uploader_spec.rb
394
396
  - spec/unit/ridley/host_connector/winrm/worker_spec.rb
395
397
  - spec/unit/ridley/host_connector/winrm_spec.rb
396
398
  - spec/unit/ridley/host_connector_spec.rb
@@ -478,6 +480,7 @@ test_files:
478
480
  - spec/unit/ridley/host_connector/response_set_spec.rb
479
481
  - spec/unit/ridley/host_connector/ssh/worker_spec.rb
480
482
  - spec/unit/ridley/host_connector/ssh_spec.rb
483
+ - spec/unit/ridley/host_connector/winrm/command_uploader_spec.rb
481
484
  - spec/unit/ridley/host_connector/winrm/worker_spec.rb
482
485
  - spec/unit/ridley/host_connector/winrm_spec.rb
483
486
  - spec/unit/ridley/host_connector_spec.rb