simple_deploy 0.7.2 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. data/.gitignore +3 -0
  2. data/CHANGELOG.md +6 -0
  3. data/lib/simple_deploy/aws/cloud_formation/error.rb +32 -0
  4. data/lib/simple_deploy/aws/cloud_formation.rb +76 -0
  5. data/lib/simple_deploy/aws/instance_reader.rb +59 -0
  6. data/lib/simple_deploy/aws/simpledb.rb +52 -0
  7. data/lib/simple_deploy/aws.rb +4 -0
  8. data/lib/simple_deploy/cli/attributes.rb +7 -18
  9. data/lib/simple_deploy/cli/clone.rb +9 -19
  10. data/lib/simple_deploy/cli/create.rb +5 -14
  11. data/lib/simple_deploy/cli/deploy.rb +8 -11
  12. data/lib/simple_deploy/cli/destroy.rb +4 -10
  13. data/lib/simple_deploy/cli/environments.rb +1 -1
  14. data/lib/simple_deploy/cli/events.rb +5 -11
  15. data/lib/simple_deploy/cli/execute.rb +6 -9
  16. data/lib/simple_deploy/cli/instances.rb +4 -9
  17. data/lib/simple_deploy/cli/list.rb +5 -10
  18. data/lib/simple_deploy/cli/outputs.rb +5 -11
  19. data/lib/simple_deploy/cli/parameters.rb +5 -11
  20. data/lib/simple_deploy/cli/protect.rb +5 -10
  21. data/lib/simple_deploy/cli/resources.rb +5 -11
  22. data/lib/simple_deploy/cli/shared.rb +6 -6
  23. data/lib/simple_deploy/cli/status.rb +5 -11
  24. data/lib/simple_deploy/cli/template.rb +8 -13
  25. data/lib/simple_deploy/cli/update.rb +6 -10
  26. data/lib/simple_deploy/configuration.rb +102 -0
  27. data/lib/simple_deploy/entry.rb +71 -0
  28. data/lib/simple_deploy/entry_lister.rb +30 -0
  29. data/lib/simple_deploy/exceptions.rb +8 -0
  30. data/lib/simple_deploy/misc/attribute_merger.rb +2 -5
  31. data/lib/simple_deploy/notifier/campfire.rb +15 -12
  32. data/lib/simple_deploy/notifier.rb +6 -11
  33. data/lib/simple_deploy/stack/deployment/status.rb +5 -3
  34. data/lib/simple_deploy/stack/deployment.rb +8 -10
  35. data/lib/simple_deploy/stack/execute.rb +2 -3
  36. data/lib/simple_deploy/stack/output_mapper.rb +1 -4
  37. data/lib/simple_deploy/stack/ssh.rb +4 -4
  38. data/lib/simple_deploy/stack/{stack_attribute_formater.rb → stack_attribute_formatter.rb} +4 -6
  39. data/lib/simple_deploy/stack/stack_creator.rb +46 -0
  40. data/lib/simple_deploy/stack/stack_destroyer.rb +19 -0
  41. data/lib/simple_deploy/stack/stack_formatter.rb +25 -0
  42. data/lib/simple_deploy/stack/stack_lister.rb +18 -0
  43. data/lib/simple_deploy/stack/stack_reader.rb +56 -0
  44. data/lib/simple_deploy/stack/stack_updater.rb +67 -0
  45. data/lib/simple_deploy/stack/status.rb +53 -0
  46. data/lib/simple_deploy/stack.rb +89 -37
  47. data/lib/simple_deploy/version.rb +1 -1
  48. data/lib/simple_deploy.rb +31 -1
  49. data/simple_deploy.gemspec +6 -3
  50. data/spec/aws/cloud_formation/error_spec.rb +50 -0
  51. data/spec/aws/cloud_formation_spec.rb +207 -0
  52. data/spec/aws/instance_reader_spec.rb +96 -0
  53. data/spec/aws/simpledb_spec.rb +89 -0
  54. data/spec/cli/attributes_spec.rb +5 -15
  55. data/spec/cli/clone_spec.rb +14 -27
  56. data/spec/cli/create_spec.rb +11 -18
  57. data/spec/cli/deploy_spec.rb +24 -63
  58. data/spec/cli/destroy_spec.rb +7 -25
  59. data/spec/cli/outputs_spec.rb +12 -17
  60. data/spec/cli/protect_spec.rb +68 -106
  61. data/spec/cli/shared_spec.rb +12 -15
  62. data/spec/cli/update_spec.rb +9 -27
  63. data/spec/config_spec.rb +47 -14
  64. data/spec/contexts/config_contexts.rb +28 -0
  65. data/spec/contexts/logger_contexts.rb +9 -0
  66. data/spec/contexts/stack_contexts.rb +40 -0
  67. data/spec/entry_lister_spec.rb +31 -0
  68. data/spec/entry_spec.rb +86 -0
  69. data/spec/misc/attribute_merger_spec.rb +3 -8
  70. data/spec/notifier/campfire_spec.rb +21 -61
  71. data/spec/notifier_spec.rb +18 -40
  72. data/spec/spec_helper.rb +10 -0
  73. data/spec/stack/deployment/status_spec.rb +13 -13
  74. data/spec/stack/deployment_spec.rb +26 -21
  75. data/spec/stack/execute_spec.rb +7 -3
  76. data/spec/stack/output_mapper_spec.rb +3 -15
  77. data/spec/stack/ssh_spec.rb +14 -13
  78. data/spec/stack/{stack_attribute_formater_spec.rb → stack_attribute_formatter_spec.rb} +19 -16
  79. data/spec/stack/stack_creator_spec.rb +46 -0
  80. data/spec/stack/stack_destroyer_spec.rb +18 -0
  81. data/spec/stack/stack_formatter_spec.rb +37 -0
  82. data/spec/stack/stack_lister_spec.rb +17 -0
  83. data/spec/stack/stack_reader_spec.rb +81 -0
  84. data/spec/stack/stack_updater_spec.rb +79 -0
  85. data/spec/stack/status_spec.rb +106 -0
  86. data/spec/stack_spec.rb +160 -133
  87. metadata +112 -19
  88. data/.rvmrc +0 -1
  89. data/lib/simple_deploy/config.rb +0 -87
@@ -0,0 +1,106 @@
1
+ require 'spec_helper'
2
+
3
+ describe SimpleDeploy::Status do
4
+ include_context 'stubbed config'
5
+ include_context 'double stubbed logger'
6
+
7
+ before do
8
+ @stack_reader_mock = mock 'stack reader mock'
9
+ SimpleDeploy::StackReader.should_receive(:new).
10
+ and_return @stack_reader_mock
11
+ @status = SimpleDeploy::Status.new :name => 'test-stack'
12
+ end
13
+
14
+ after do
15
+ SimpleDeploy.release_config
16
+ end
17
+
18
+ it "should return true if the stack is in complete state" do
19
+ @stack_reader_mock.should_receive(:status).
20
+ and_return 'UPDATE_COMPLETE'
21
+ @status.complete?.should == true
22
+ end
23
+
24
+ it "should return false if the stack is not in complete state" do
25
+ @stack_reader_mock.should_receive(:status).
26
+ and_return 'UPDATE_IN_PROGRESS'
27
+ @status.complete?.should == false
28
+ end
29
+
30
+ it "should return true if the stack is in a failed state" do
31
+ @stack_reader_mock.should_receive(:status).
32
+ and_return 'DELETE_FAILED'
33
+ @status.failed?.should == true
34
+ end
35
+
36
+ it "should return false if the stack is not in a failed state" do
37
+ @stack_reader_mock.should_receive(:status).
38
+ and_return 'UPDATE_IN_PROGRESS'
39
+ @status.failed?.should == false
40
+ end
41
+
42
+ it "should return true if the stack is in an in_progress state" do
43
+ @stack_reader_mock.should_receive(:status).exactly(2).times.
44
+ and_return 'UPDATE_IN_PROGRESS'
45
+ @status.in_progress?.should == true
46
+ end
47
+
48
+ it "should return false if the stack is not in an in_progress state" do
49
+ @stack_reader_mock.should_receive(:status).exactly(2).times.
50
+ and_return 'UPDATE_COMPLETE_CLEANUP_IN_PROGRESS'
51
+ @status.in_progress?.should == false
52
+ end
53
+
54
+ it "should return true if the stack is cleaning up" do
55
+ @stack_reader_mock.should_receive(:status).
56
+ and_return 'UPDATE_COMPLETE_CLEANUP_IN_PROGRESS'
57
+ @status.cleanup_in_progress?.should == true
58
+ end
59
+
60
+ it "should return false if the stack is not in a cleaning up state" do
61
+ @stack_reader_mock.should_receive(:status).
62
+ and_return 'UPDATE_IN_PROGRESS'
63
+ @status.cleanup_in_progress?.should == false
64
+ end
65
+
66
+ it "should return true if the stack is in a complete state" do
67
+ @stack_reader_mock.should_receive(:status).exactly(2).times.
68
+ and_return 'UPDATE_COMPLETE'
69
+ @status.stable?.should == true
70
+ end
71
+
72
+ it "should return true if the stack is in a failed state" do
73
+ @stack_reader_mock.should_receive(:status).exactly(3).times.
74
+ and_return 'UPDATE_FAILED'
75
+ @status.stable?.should == true
76
+ end
77
+
78
+ it "should return true if the stack is in an in progress state" do
79
+ @stack_reader_mock.should_receive(:status).exactly(2).times.
80
+ and_return 'IN_PROGRESS'
81
+ @status.stable?.should == false
82
+ end
83
+
84
+ it "should return false if the stack creation failed" do
85
+ @stack_reader_mock.should_receive(:status).exactly(3).times.
86
+ and_return 'CREATE_FAILED'
87
+ @status.stable?.should == false
88
+ end
89
+
90
+ it "should return true when the stack is in a stable state" do
91
+ @stack_reader_mock.should_receive(:status).exactly(4).times.
92
+ and_return 'CREATE_COMPLETE'
93
+ @status.wait_for_stable.should == true
94
+ end
95
+
96
+ it "should sleep 2 times and return false when the stack is in an unstable state" do
97
+ Kernel.stub!(:sleep)
98
+ Kernel.should_receive(:sleep).with(1)
99
+ Kernel.should_receive(:sleep).with(4)
100
+
101
+ @stack_reader_mock.should_receive(:status).exactly(11).times.
102
+ and_return 'CREATE_FAILED'
103
+ @status.wait_for_stable(2).should == false
104
+ end
105
+
106
+ end
data/spec/stack_spec.rb CHANGED
@@ -1,91 +1,104 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe SimpleDeploy do
3
+ describe SimpleDeploy::Stack do
4
+ include_context 'double stubbed config', :access_key => 'access',
5
+ :secret_key => 'secret',
6
+ :region => 'us-west-1'
7
+ include_context 'double stubbed logger'
8
+
4
9
 
5
10
  before do
6
- @logger_stub = stub 'logger stub', :info => 'true', :warn => 'true'
7
11
  @environment_config_mock = mock 'environment config mock'
8
12
 
9
- @config_stub = stub 'config stub', :region => 'us-west-1', :logger => @logger_stub
10
13
  @config_stub.stub(:environment).and_return(@environment_config_mock)
11
14
  @config_stub.stub(:artifacts).and_return(['chef_repo', 'cookbooks', 'app'])
12
15
  @config_stub.stub(:artifact_cloud_formation_url).and_return('CookBooksURL')
13
16
 
14
- SimpleDeploy::Config.should_receive(:new).
15
- at_least(:once).
16
- with(:logger => 'my-logger').
17
- and_return @config_stub
18
- @stack = SimpleDeploy::Stack.new :name => 'test-stack',
19
- :logger => 'my-logger',
20
- :config => @config_stub
21
-
22
- @main_attributes = {
23
- 'chef_repo_bucket_prefix' => 'test-prefix',
24
- 'chef_repo_domain' => 'test-domain'
25
- }
26
-
27
- @stack_mock = mock 'stackster stack'
17
+ @entry_mock = mock 'entry mock'
18
+ SimpleDeploy::Entry.should_receive(:new).
19
+ at_least(:once).
20
+ with(:name => 'test-stack').
21
+ and_return @entry_mock
28
22
 
29
- @expected_attributes = [
30
- { 'chef_repo' => 'test123' },
31
- { 'CookBooksURL' => 's3://test-prefix-us-west-1/test-domain/test123.tar.gz' }
32
- ]
23
+ @stack = SimpleDeploy::Stack.new :name => 'test-stack',
24
+ :environment => 'test-env'
33
25
  end
34
26
 
35
27
  describe "creating a stack" do
36
28
  before do
37
- @stack_mock.stub(:attributes).and_return({})
29
+ @stack_creator_mock = mock 'stack creator'
30
+ @new_attributes = [
31
+ { 'chef_repo' => 'test123' },
32
+ { 'chef_repo_bucket_prefix' => 'test-prefix' },
33
+ { 'chef_repo_domain' => 'test-domain' }
34
+ ]
35
+
36
+ @expected_attributes = @new_attributes +
37
+ [{ 'CookBooksURL' => 's3://test-prefix-us-west-1/test-domain/test123.tar.gz' }]
38
38
  end
39
39
 
40
40
  it "should set the attributes using what is passed to the create command" do
41
- Stackster::Stack.should_receive(:new).with(:name => 'test-stack',
42
- :config => @environment_config_mock,
43
- :logger => @logger_stub).
44
- and_return @stack_mock
41
+ @entry_mock.should_receive(:attributes).and_return({})
42
+ @entry_mock.should_receive(:set_attributes).with(@expected_attributes)
43
+ @entry_mock.should_receive(:save).and_return(true)
44
+
45
+ SimpleDeploy::StackCreator.should_receive(:new).
46
+ with(:name => 'test-stack',
47
+ :entry => @entry_mock,
48
+ :template_file => 'some_json').
49
+ and_return @stack_creator_mock
50
+ @stack_creator_mock.should_receive(:create)
51
+
52
+ @stack.create :attributes => @new_attributes, :template => 'some_json'
53
+ end
54
+ end
45
55
 
46
- expecteds = [
56
+ describe "updating a stack" do
57
+ before do
58
+ @stack_updater_mock = mock 'stack updater'
59
+ @stack_reader_mock = mock 'stack reader'
60
+ @new_attributes = [
47
61
  { 'chef_repo' => 'test123' },
48
62
  { 'chef_repo_bucket_prefix' => 'test-prefix' },
49
- { 'chef_repo_domain' => 'test-domain' },
50
- { 'CookBooksURL' => 's3://test-prefix-us-west-1/test-domain/test123.tar.gz' }
63
+ { 'chef_repo_domain' => 'test-domain' }
51
64
  ]
52
- @stack_mock.should_receive(:create).with :attributes => expecteds,
53
- :template => 'some_json'
54
65
 
55
- attributes = [
66
+ @expected_attributes = [
56
67
  { 'chef_repo' => 'test123' },
57
68
  { 'chef_repo_bucket_prefix' => 'test-prefix' },
58
- { 'chef_repo_domain' => 'test-domain' }
69
+ { 'chef_repo_domain' => 'test-domain' },
70
+ { 'CookBooksURL' => 's3://test-prefix-us-west-1/test-domain/test123.tar.gz' }
59
71
  ]
60
-
61
- @stack.create :attributes => attributes, :template => 'some_json'
62
- end
63
- end
64
-
65
- describe "updating a stack" do
66
- before do
67
- @stack_mock.stub(:attributes).and_return(@main_attributes)
68
72
  end
69
73
 
70
74
  it "should update when the deployment is not locked" do
71
75
  deployment_stub = stub 'deployment', :clear_for_deployment? => true
72
76
  @stack.stub(:deployment).and_return(deployment_stub)
73
77
 
74
- Stackster::Stack.should_receive(:new).with(:name => 'test-stack',
75
- :config => @environment_config_mock,
76
- :logger => @logger_stub).
77
- and_return @stack_mock
78
- @stack_mock.should_receive(:update).with :attributes => @expected_attributes
79
-
80
- @stack.update(:attributes => [{ 'chef_repo' => 'test123' }]).should be_true
78
+ @entry_mock.should_receive(:set_attributes).with(@expected_attributes)
79
+ @entry_mock.should_receive(:save).and_return(true)
80
+
81
+ SimpleDeploy::StackUpdater.should_receive(:new).
82
+ with(:name => 'test-stack',
83
+ :entry => @entry_mock,
84
+ :template_body => 'some_json').
85
+ and_return @stack_updater_mock
86
+ @stack_updater_mock.should_receive(:update_stack_if_parameters_changed).
87
+ and_return(true)
88
+ SimpleDeploy::StackReader.should_receive(:new).
89
+ with(:name => 'test-stack').
90
+ and_return @stack_reader_mock
91
+ @stack_reader_mock.should_receive(:attributes).and_return({})
92
+ @stack_reader_mock.should_receive(:template).and_return('some_json')
93
+
94
+ @stack.update(:attributes => @new_attributes).should be_true
81
95
  end
82
96
 
83
97
  it "should not update when the deployment is locked and force is not set" do
84
98
  deployment_stub = stub 'deployment', :clear_for_deployment? => false
85
99
  @stack.stub(:deployment).and_return(deployment_stub)
86
100
 
87
- SimpleDeploy::StackAttributeFormater.should_not_receive(:new)
88
- Stackster::Stack.should_not_receive(:new)
101
+ SimpleDeploy::StackAttributeFormatter.should_not_receive(:new)
89
102
 
90
103
  @stack.update(:attributes => { 'arg1' => 'val' }).should_not be_true
91
104
  end
@@ -97,60 +110,79 @@ describe SimpleDeploy do
97
110
  @stack.stub(:deployment).and_return(deployment_mock)
98
111
  @stack.stub(:sleep).and_return(false)
99
112
 
100
- Stackster::Stack.should_receive(:new).with(:name => 'test-stack',
101
- :config => @environment_config_mock,
102
- :logger => @logger_stub).
103
- and_return @stack_mock
104
- @stack_mock.should_receive(:update).with :attributes => @expected_attributes
105
-
106
- @stack.update(:force => true, :attributes => [{ 'chef_repo' => 'test123' }]).should be_true
113
+ @entry_mock.should_receive(:set_attributes).with(@expected_attributes)
114
+ @entry_mock.should_receive(:save).and_return(true)
115
+
116
+ SimpleDeploy::StackUpdater.should_receive(:new).
117
+ with(:name => 'test-stack',
118
+ :entry => @entry_mock,
119
+ :template_body => 'some_json').
120
+ and_return @stack_updater_mock
121
+ @stack_updater_mock.should_receive(:update_stack_if_parameters_changed).
122
+ and_return(true)
123
+ SimpleDeploy::StackReader.should_receive(:new).
124
+ with(:name => 'test-stack').
125
+ and_return @stack_reader_mock
126
+ @stack_reader_mock.should_receive(:attributes).and_return({})
127
+ @stack_reader_mock.should_receive(:template).and_return('some_json')
128
+
129
+ @stack.update(:force => true, :attributes => @new_attributes).should be_true
107
130
  end
108
131
 
109
132
  it "should not update when the deployment is locked and force is set false" do
110
133
  deployment_stub = stub 'deployment', :clear_for_deployment? => false
111
134
  @stack.stub(:deployment).and_return(deployment_stub)
112
135
 
113
- SimpleDeploy::StackAttributeFormater.should_not_receive(:new)
114
- Stackster::Stack.should_not_receive(:new)
136
+ SimpleDeploy::StackAttributeFormatter.should_not_receive(:new)
115
137
 
116
138
  @stack.update(:force => false, :attributes => { 'arg1' => 'val' }).should_not be_true
117
139
  end
118
140
  end
119
141
 
120
142
  describe "destroying a stack" do
143
+ before do
144
+ @stack_reader_mock = mock 'stack reader'
145
+ @stack_destroyer_mock = mock 'stack destroyer'
146
+ end
147
+
121
148
  it "should destroy if the stack is not protected" do
122
- stack_mock = mock 'stackster stack mock', :attributes => { 'protection' => 'off' }
123
- @stack.stub(:stack) { stack_mock }
149
+ @entry_mock.should_receive(:delete_attributes)
124
150
 
125
- stack_mock.should_receive(:destroy)
151
+ SimpleDeploy::StackReader.should_receive(:new).
152
+ with(:name => 'test-stack').
153
+ and_return @stack_reader_mock
154
+ @stack_reader_mock.should_receive(:attributes).and_return('protection' => 'off')
155
+ SimpleDeploy::StackDestroyer.should_receive(:new).
156
+ with(:name => 'test-stack').
157
+ and_return @stack_destroyer_mock
158
+ @stack_destroyer_mock.should_receive(:destroy).and_return(true)
126
159
 
127
160
  @stack.destroy.should be_true
128
161
  end
129
162
 
130
163
  it "should not destroy if the stack is protected" do
131
- stack_mock = mock 'stackster stack mock', :attributes => { 'protection' => 'on' }
132
- @stack.stub(:stack) { stack_mock }
164
+ @entry_mock.should_receive(:delete_attributes).never
133
165
 
134
- stack_mock.should_not_receive(:destroy)
166
+ SimpleDeploy::StackReader.should_receive(:new).
167
+ with(:name => 'test-stack').
168
+ and_return @stack_reader_mock
169
+ @stack_reader_mock.should_receive(:attributes).and_return('protection' => 'on')
170
+ SimpleDeploy::StackDestroyer.should_receive(:new).never
135
171
 
136
172
  @stack.destroy.should_not be_true
137
173
  end
138
174
 
139
175
  it "should destroy if protection is undefined" do
140
- stack_mock = mock 'stackster stack mock', :attributes => {}
141
- @stack.stub(:stack) { stack_mock }
142
-
143
- stack_mock.should_receive(:destroy)
144
-
145
- @stack.destroy.should be_true
146
- end
176
+ @entry_mock.should_receive(:delete_attributes)
147
177
 
148
- it "should not create a deployment" do
149
- @stack.should_not_receive(:deployment)
150
-
151
- stack_mock = mock 'stackster stack mock', :attributes => { 'protection' => 'off' }
152
- @stack.stub(:stack) { stack_mock }
153
- stack_mock.should_receive(:destroy)
178
+ SimpleDeploy::StackReader.should_receive(:new).
179
+ with(:name => 'test-stack').
180
+ and_return @stack_reader_mock
181
+ @stack_reader_mock.should_receive(:attributes).and_return({})
182
+ SimpleDeploy::StackDestroyer.should_receive(:new).
183
+ with(:name => 'test-stack').
184
+ and_return @stack_destroyer_mock
185
+ @stack_destroyer_mock.should_receive(:destroy).and_return(true)
154
186
 
155
187
  @stack.destroy.should be_true
156
188
  end
@@ -158,46 +190,45 @@ describe SimpleDeploy do
158
190
 
159
191
  describe 'instances' do
160
192
  before do
161
- @instances = [{ 'instancesSet' => [{ 'ipAddress' => '50.40.30.20', 'privateIpAddress' => '10.1.2.3' }] }]
162
- @environment_config_mock.stub(:[])
193
+ @stack_reader_mock = mock 'stack reader'
194
+
195
+ @instances = [
196
+ { 'instancesSet' => [{ 'ipAddress' => '50.40.30.20',
197
+ 'privateIpAddress' => '10.1.2.3' }] }
198
+ ]
163
199
  end
164
200
 
165
201
  it 'should use the private IP when vpc' do
166
- stack = SimpleDeploy::Stack.new :environment => 'test-env',
167
- :name => 'test-stack',
168
- :logger => 'my-logger',
169
- :config => @config_stub,
170
- :internal => false
171
- stack.stub(:stack) { @stack_mock }
172
-
173
202
  @instances.first['instancesSet'].first['vpcId'] = 'my-vpc'
174
- @stack_mock.stub(:instances).and_return(@instances)
175
203
 
176
- stack.instances.should == ['10.1.2.3']
204
+ SimpleDeploy::StackReader.should_receive(:new).
205
+ with(:name => 'test-stack').
206
+ and_return @stack_reader_mock
207
+ @stack_reader_mock.should_receive(:instances).and_return(@instances)
208
+
209
+ @stack.instances.should == ['10.1.2.3']
177
210
  end
178
211
 
179
212
  it 'should use the private IP when internal' do
180
- stack = SimpleDeploy::Stack.new :environment => 'test-env',
181
- :name => 'test-stack',
182
- :logger => 'my-logger',
183
- :config => @config_stub,
213
+ stack = SimpleDeploy::Stack.new :name => 'test-stack',
214
+ :environment => 'test-env',
184
215
  :internal => true
185
- stack.stub(:stack) { @stack_mock }
186
- @stack_mock.stub(:instances).and_return(@instances)
216
+
217
+ SimpleDeploy::StackReader.should_receive(:new).
218
+ with(:name => 'test-stack').
219
+ and_return @stack_reader_mock
220
+ @stack_reader_mock.should_receive(:instances).and_return(@instances)
187
221
 
188
222
  stack.instances.should == ['10.1.2.3']
189
223
  end
190
224
 
191
225
  it 'should use the public IP when not vpc and not internal' do
192
- stack = SimpleDeploy::Stack.new :environment => 'test-env',
193
- :name => 'test-stack',
194
- :logger => 'my-logger',
195
- :config => @config_stub,
196
- :internal => false
197
- stack.stub(:stack) { @stack_mock }
198
- @stack_mock.stub(:instances).and_return(@instances)
199
-
200
- stack.instances.should == ['50.40.30.20']
226
+ SimpleDeploy::StackReader.should_receive(:new).
227
+ with(:name => 'test-stack').
228
+ and_return @stack_reader_mock
229
+ @stack_reader_mock.should_receive(:instances).and_return(@instances)
230
+
231
+ @stack.instances.should == ['50.40.30.20']
201
232
  end
202
233
 
203
234
  it 'should handle instanceSets with multiple intances' do
@@ -205,15 +236,12 @@ describe SimpleDeploy do
205
236
  { 'ipAddress' => '50.40.30.20', 'privateIpAddress' => '10.1.2.3' },
206
237
  { 'ipAddress' => '50.40.30.21', 'privateIpAddress' => '10.1.2.4' }] }]
207
238
 
208
- stack = SimpleDeploy::Stack.new :environment => 'test-env',
209
- :name => 'test-stack',
210
- :logger => 'my-logger',
211
- :config => @config_stub,
212
- :internal => false
213
- stack.stub(:stack) { @stack_mock }
214
- @stack_mock.stub(:instances).and_return(@instances)
239
+ SimpleDeploy::StackReader.should_receive(:new).
240
+ with(:name => 'test-stack').
241
+ and_return @stack_reader_mock
242
+ @stack_reader_mock.should_receive(:instances).and_return(@instances)
215
243
 
216
- stack.instances.should == ['50.40.30.20', '50.40.30.21']
244
+ @stack.instances.should == ['50.40.30.20', '50.40.30.21']
217
245
  end
218
246
  end
219
247
 
@@ -221,7 +249,6 @@ describe SimpleDeploy do
221
249
  before do
222
250
  @stack = SimpleDeploy::Stack.new :environment => 'test-env',
223
251
  :name => 'test-stack',
224
- :logger => 'my-logger',
225
252
  :config => @config_stub,
226
253
  :internal => false
227
254
  @deployment_mock = mock "deployment"
@@ -248,7 +275,6 @@ describe SimpleDeploy do
248
275
  before do
249
276
  @stack = SimpleDeploy::Stack.new :environment => 'test-env',
250
277
  :name => 'test-stack',
251
- :logger => 'my-logger',
252
278
  :config => @config_stub,
253
279
  :internal => false
254
280
  @execute_mock = mock "execute"
@@ -270,46 +296,47 @@ describe SimpleDeploy do
270
296
 
271
297
  describe "wait_for_stable" do
272
298
  before do
299
+ @status_mock = mock 'status'
273
300
  @stack = SimpleDeploy::Stack.new :name => 'test-stack',
274
- :logger => 'my-logger',
275
301
  :config => @config_stub,
276
302
  :internal => false
277
- @stack_mock.stub(:attributes).and_return({})
278
- Stackster::Stack.should_receive(:new).
279
- with(:name => 'test-stack',
280
- :config => @environment_config_mock,
281
- :logger => @logger_stub).
282
- and_return @stack_mock
283
303
  end
284
304
 
285
- it "should call wait_for_stable on stackster stack" do
286
- @stack_mock.should_receive(:wait_for_stable)
305
+ it "should call wait_for_stable on status" do
306
+ SimpleDeploy::Status.should_receive(:new).
307
+ with(:name => 'test-stack').
308
+ and_return @status_mock
309
+ @status_mock.should_receive(:wait_for_stable)
310
+
287
311
  @stack.wait_for_stable
288
312
  end
289
313
  end
290
314
 
291
315
  describe "exists?" do
292
316
  before do
317
+ @stack_reader_mock = mock 'stack reader'
293
318
  @stack = SimpleDeploy::Stack.new :name => 'test-stack',
294
- :logger => 'my-logger',
295
319
  :config => @config_stub,
296
320
  :internal => false
297
- @stack_mock.stub(:attributes).and_return({})
298
- Stackster::Stack.should_receive(:new).
299
- with(:name => 'test-stack',
300
- :config => @environment_config_mock,
301
- :logger => @logger_stub).
302
- and_return @stack_mock
303
321
  end
304
322
 
305
323
  it "should return true if stack exists" do
306
- @stack_mock.stub :status => 'CREATE_COMPLTE'
324
+ SimpleDeploy::StackReader.should_receive(:new).
325
+ with(:name => 'test-stack').
326
+ and_return @stack_reader_mock
327
+ @stack_reader_mock.should_receive(:status).and_return('CREATE_COMPLETE')
328
+
307
329
  @stack.exists?.should be_true
308
330
  end
309
331
 
310
332
  it "should return false if the stack does not exist" do
311
- @stack_mock.should_receive(:status).
312
- and_raise Stackster::Exceptions::UnknownStack.new 'Stack:test-stack does not exist'
333
+ SimpleDeploy::StackReader.should_receive(:new).
334
+ with(:name => 'test-stack').
335
+ and_return @stack_reader_mock
336
+ @stack_reader_mock.should_receive(:status).
337
+ and_raise(SimpleDeploy::Exceptions::UnknownStack.new(
338
+ 'Stack:test-stack does not exist'))
339
+
313
340
  @stack.exists?.should be_false
314
341
  end
315
342
  end