cfndk 0.0.7 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,146 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'CFnDK', type: :aruba do
4
+ before(:each) { set_environment_variable('AWS_REGION', ENV['AWS_REGION']) }
5
+ before(:each) { set_environment_variable('AWS_PROFILE', ENV['AWS_PROFILE']) }
6
+ describe 'bin/cfndk' do
7
+ before(:each) { setup_aruba }
8
+ let(:file) { 'cfndk.yml' }
9
+ let(:file2) { 'cfndk2.yml' }
10
+ let(:pem) { 'test.pem' }
11
+ let(:uuid) { '38437346-c75c-47c5-83b4-d504f85e275b' }
12
+
13
+ describe 'destroy', destroy: true do
14
+ context 'without cfndk.yml' do
15
+ before(:each) { run_command('cfndk destroy -f') }
16
+ it 'displays file does not exist error and status code = 1' do
17
+ aggregate_failures do
18
+ expect(last_command_started).to have_exit_status(1)
19
+ expect(last_command_started).to have_output(/ ERROR \(RuntimeError\) File does not exist./)
20
+ end
21
+ end
22
+ end
23
+ context 'with cfndk2.yml' do
24
+ context 'when -c cfndk2.yml and empty stacks' do
25
+ yaml = <<-"YAML"
26
+ stacks:
27
+ YAML
28
+ before(:each) { write_file(file2, yaml) }
29
+ before(:each) { run_command("cfndk destroy -f -c=#{file2}") }
30
+ it do
31
+ aggregate_failures do
32
+ expect(last_command_started).to be_successfully_executed
33
+ expect(last_command_started).to have_output(/INFO destroy.../)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ context 'with cfndk.yml' do
39
+ context 'when cfndk.yml is empty' do
40
+ before(:each) { touch(file) }
41
+ before(:each) { run_command('cfndk destroy -f') }
42
+ it 'displays File is empty error and status code = 1' do
43
+ aggregate_failures do
44
+ expect(last_command_started).to have_exit_status(1)
45
+ expect(last_command_started).to have_output(/ERROR File is empty./)
46
+ end
47
+ end
48
+ end
49
+ context 'when enter no' do
50
+ yaml = <<-"YAML"
51
+ keypairs:
52
+ Test1:
53
+ stacks:
54
+ Test:
55
+ template_file: vpc.yaml
56
+ parameter_input: vpc.json
57
+ parameters:
58
+ VpcName: sample<%= append_uuid%>
59
+ timeout_in_minutes: 2
60
+ YAML
61
+ before(:each) { write_file(file, yaml) }
62
+ before(:each) { copy('%/vpc.yaml', 'vpc.yaml') }
63
+ before(:each) { copy('%/vpc.json', 'vpc.json') }
64
+ before(:each) { run_command('cfndk destroy') }
65
+ before(:each) { type('no') }
66
+ it 'displays confirm message and cancel message and status code = 2' do
67
+ aggregate_failures do
68
+ expect(last_command_started).to have_exit_status(2)
69
+ expect(last_command_started).to have_output(/INFO destroy../)
70
+ expect(last_command_started).to have_output(%r{Are you sure you want to destroy\? \(y/n\)})
71
+ expect(last_command_started).to have_output(/INFO destroy command was canceled/)
72
+ expect(last_command_started).not_to have_output(/INFO deleting stack:/)
73
+ expect(last_command_started).not_to have_output(/INFO deleted stack:/)
74
+ expect(last_command_started).not_to have_output(/INFO do not delete keypair: Test1$/)
75
+ expect(last_command_started).not_to have_output(/INFO do not delete stack: Test$/)
76
+ end
77
+ end
78
+ end
79
+ context 'when enter yes' do
80
+ context 'when keyparis and stacks do not exist' do
81
+ yaml = <<-"YAML"
82
+ keypairs:
83
+ Test1:
84
+ stacks:
85
+ Test:
86
+ template_file: vpc.yaml
87
+ parameter_input: vpc.json
88
+ parameters:
89
+ VpcName: sample<%= append_uuid%>
90
+ timeout_in_minutes: 2
91
+ YAML
92
+ before(:each) { write_file(file, yaml) }
93
+ before(:each) { copy('%/vpc.yaml', 'vpc.yaml') }
94
+ before(:each) { copy('%/vpc.json', 'vpc.json') }
95
+ before(:each) { run_command('cfndk destroy -f') }
96
+ before(:each) { stop_all_commands }
97
+ before(:each) { run_command('cfndk destroy') }
98
+ before(:each) { type('yes') }
99
+ before(:each) { stop_all_commands }
100
+ it 'displays confirm message and do not delete message' do
101
+ aggregate_failures do
102
+ expect(last_command_started).to be_successfully_executed
103
+ expect(last_command_started).to have_output(/INFO destroy../)
104
+ expect(last_command_started).to have_output(%r{Are you sure you want to destroy\? \(y/n\)})
105
+ expect(last_command_started).to have_output(/INFO do not delete keypair: Test1$/)
106
+ expect(last_command_started).to have_output(/INFO do not delete stack: Test$/)
107
+ end
108
+ end
109
+ end
110
+ context 'when keyparis and stacks exist', aaa: true do
111
+ yaml = <<-"YAML"
112
+ keypairs:
113
+ Test1:
114
+ stacks:
115
+ Test:
116
+ template_file: vpc.yaml
117
+ parameter_input: vpc.json
118
+ parameters:
119
+ VpcName: sample<%= append_uuid%>
120
+ timeout_in_minutes: 2
121
+ YAML
122
+ before(:each) { write_file(file, yaml) }
123
+ before(:each) { copy('%/vpc.yaml', 'vpc.yaml') }
124
+ before(:each) { copy('%/vpc.json', 'vpc.json') }
125
+ before(:each) { run_command('cfndk create') }
126
+ before(:each) { stop_all_commands }
127
+ before(:each) { run_command('cfndk destroy') }
128
+ before(:each) { type('yes') }
129
+ before(:each) { stop_all_commands }
130
+ it 'displays confirm message and delete message and stack was deleted' do
131
+ aggregate_failures do
132
+ expect(last_command_started).to be_successfully_executed
133
+ expect(last_command_started).to have_output(/INFO destroy../)
134
+ expect(last_command_started).to have_output(%r{Are you sure you want to destroy\? \(y/n\)})
135
+ expect(last_command_started).to have_output(/INFO deleted keypair: Test1$/)
136
+ expect(last_command_started).to have_output(/INFO deleted stack: Test$/)
137
+ expect{cloudformation_stack('Test').exist}.to raise_error(Aws::CloudFormation::Errors::ValidationError)
138
+ end
139
+ end
140
+ after(:each) { run_command('cfndk destroy -f') }
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,395 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'CFnDK', type: :aruba do
4
+ before(:each) { set_environment_variable('AWS_REGION', ENV['AWS_REGION']) }
5
+ before(:each) { set_environment_variable('AWS_PROFILE', ENV['AWS_PROFILE']) }
6
+ describe 'bin/cfndk' do
7
+ before(:each) { setup_aruba }
8
+ let(:file) { 'cfndk.yml' }
9
+ let(:file2) { 'cfndk2.yml' }
10
+ let(:pem) { 'test.pem' }
11
+ let(:uuid) { '38437346-c75c-47c5-83b4-d504f85e275b' }
12
+
13
+ describe 'keypair' do
14
+ context 'without subcommand', help: true do
15
+ before(:each) { run_command('cfndk keypair') }
16
+ it 'displays help and status code = 2' do
17
+ aggregate_failures do
18
+ expect(last_command_started).to have_exit_status(2)
19
+ end
20
+ end
21
+ end
22
+
23
+ describe 'help', help: true do
24
+ context 'without subsubcommand' do
25
+ before(:each) { run_command('cfndk keypair help') }
26
+ it 'displays help and status code = 2' do
27
+ aggregate_failures do
28
+ expect(last_command_started).to have_exit_status(2)
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ describe 'create' do
35
+ context 'without cfndk.yml' do
36
+ before(:each) { run_command('cfndk keypair create') }
37
+ it 'displays file does not exist error and status code = 1' do
38
+ aggregate_failures do
39
+ expect(last_command_started).to have_exit_status(1)
40
+ expect(last_command_started).to have_output(/ERROR File does not exist./)
41
+ end
42
+ end
43
+ end
44
+
45
+ context 'with cfndk2.yml' do
46
+ yaml = <<-"YAML"
47
+ keypairs:
48
+ YAML
49
+ before(:each) { write_file(file2, yaml) }
50
+ context 'when -c cfndk2.yml and empty keypairs' do
51
+ before(:each) { run_command("cfndk keypair create -c=#{file2}") }
52
+ it 'displays empty keypair log' do
53
+ aggregate_failures do
54
+ expect(last_command_started).to be_successfully_executed
55
+ expect(last_command_started).to have_output(/INFO create.../)
56
+ end
57
+ end
58
+ end
59
+
60
+ context 'when --config-path cfndk2.yml and empty keypairs' do
61
+ before(:each) { run_command("cfndk keypair create --config-path=#{file2}") }
62
+ it 'displays empty keypair log' do
63
+ aggregate_failures do
64
+ expect(last_command_started).to be_successfully_executed
65
+ expect(last_command_started).to have_output(/INFO create.../)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ context 'with cfndk.yml' do
71
+ context 'when cfndk.yml is empty' do
72
+ before(:each) { touch(file) }
73
+ before(:each) { run_command('cfndk keypair create') }
74
+ it 'displays File is empty error and status code = 1' do
75
+ aggregate_failures do
76
+ expect(last_command_started).to have_exit_status(1)
77
+ expect(last_command_started).to have_output(/ERROR File is empty./)
78
+ end
79
+ end
80
+ end
81
+
82
+ context 'with keyparis:', keypairs: true do
83
+ context 'without keypair' do
84
+ before(:each) { write_file(file, 'keypairs:') }
85
+ before(:each) { run_command('cfndk keypair create') }
86
+ it do
87
+ aggregate_failures do
88
+ expect(last_command_started).to be_successfully_executed
89
+ expect(last_command_started).to have_output(/INFO create.../)
90
+ end
91
+ end
92
+ end
93
+
94
+ context 'with stacks:' do
95
+ before(:each) { write_file(file, 'stacks:') }
96
+ before(:each) { run_command('cfndk keypair create') }
97
+ it do
98
+ aggregate_failures do
99
+ expect(last_command_started).to be_successfully_executed
100
+ expect(last_command_started).to have_output(/INFO create.../)
101
+ end
102
+ end
103
+ end
104
+
105
+ context 'with a keypair' do
106
+ yaml = <<-"YAML"
107
+ keypairs:
108
+ Test:
109
+ YAML
110
+ before(:each) { write_file(file, yaml) }
111
+ before(:each) { run_command('cfndk keypair create') }
112
+ it do
113
+ aggregate_failures do
114
+ expect(last_command_started).to be_successfully_executed
115
+ expect(last_command_started).to have_output(/INFO creating keypair: Test/)
116
+ expect(last_command_started).to have_output(/INFO created keypair: Test/)
117
+ end
118
+ end
119
+ after(:each) { run_command('cfndk destroy -f') }
120
+ end
121
+
122
+ context 'with two keypairs' do
123
+ yaml = <<-"YAML"
124
+ keypairs:
125
+ Foo:
126
+ Bar:
127
+ YAML
128
+ before(:each) { write_file(file, yaml) }
129
+ before(:each) { run_command('cfndk keypair create') }
130
+ it do
131
+ aggregate_failures do
132
+ expect(last_command_started).to be_successfully_executed
133
+ expect(last_command_started).to have_output(/INFO creating keypair: Foo/)
134
+ expect(last_command_started).to have_output(/INFO created keypair: Foo/)
135
+ expect(last_command_started).to have_output(/INFO creating keypair: Bar/)
136
+ expect(last_command_started).to have_output(/INFO created keypair: Bar/)
137
+ end
138
+ end
139
+ after(:each) { run_command('cfndk destroy -f') }
140
+ end
141
+
142
+ context 'with a keypair and a key_file' do
143
+ context 'without UUID', uuid: true do
144
+ context 'without append_uuid' do
145
+ yaml = <<-"YAML"
146
+ keypairs:
147
+ Test:
148
+ key_file: test.pem
149
+ YAML
150
+ before(:each) { write_file(file, yaml) }
151
+ before(:each) { run_command('cfndk keypair create') }
152
+ it do
153
+ aggregate_failures do
154
+ expect(last_command_started).to be_successfully_executed
155
+ expect(last_command_started).to have_output(/INFO create.../)
156
+ expect(last_command_started).to have_output(/INFO creating keypair: Test$/)
157
+ expect(last_command_started).to have_output(/INFO created keypair: Test$/)
158
+ expect(last_command_started).to have_output(/create key file: #{pem}$/)
159
+ expect(pem).to be_an_existing_file
160
+ expect(pem).to have_file_content(/-----END RSA PRIVATE KEY-----/)
161
+ end
162
+ end
163
+ after(:each) { run_command('cfndk destroy -f') }
164
+ end
165
+
166
+ context 'with append_uuid' do
167
+ yaml = <<-"YAML"
168
+ keypairs:
169
+ Test:
170
+ key_file: test<%= append_uuid %>.pem
171
+ YAML
172
+ before(:each) { write_file(file, yaml) }
173
+ before(:each) { run_command('cfndk keypair create') }
174
+ it do
175
+ aggregate_failures do
176
+ expect(last_command_started).to be_successfully_executed
177
+ expect(last_command_started).to have_output(/INFO create.../)
178
+ expect(last_command_started).to have_output(/INFO creating keypair: Test$/)
179
+ expect(last_command_started).to have_output(/INFO created keypair: Test$/)
180
+ expect(last_command_started).to have_output(/create key file: #{pem}/)
181
+ expect(pem).to be_an_existing_file
182
+ expect(pem).to have_file_content(/-----END RSA PRIVATE KEY-----/)
183
+ end
184
+ end
185
+ after(:each) { run_command('cfndk destroy -f') }
186
+ end
187
+ end
188
+
189
+ context 'with UUID', uuid: true do
190
+ yaml = <<-"YAML"
191
+ keypairs:
192
+ Test:
193
+ key_file: test<%= append_uuid %>.pem
194
+ YAML
195
+ before(:each) { write_file(file, yaml) }
196
+ context 'when -u 38437346-c75c-47c5-83b4-d504f85e275b' do
197
+ before(:each) { run_command("cfndk keypair create -u=#{uuid}") }
198
+ it do
199
+ aggregate_failures do
200
+ expect(last_command_started).to be_successfully_executed
201
+ expect(last_command_started).to have_output(/INFO create.../)
202
+ expect(last_command_started).to have_output(/INFO creating keypair: Test-#{uuid}/)
203
+ expect(last_command_started).to have_output(/INFO created keypair: Test-#{uuid}/)
204
+ expect(last_command_started).to have_output(/create key file: test-#{uuid}.pem/)
205
+ expect("test-#{uuid}.pem").to be_an_existing_file
206
+ expect("test-#{uuid}.pem").to have_file_content(/-----END RSA PRIVATE KEY-----/)
207
+ end
208
+ end
209
+ after(:each) { run_command("cfndk destroy -u=#{uuid} -f") }
210
+ end
211
+
212
+ context 'when env CFNDK_UUID=38437346-c75c-47c5-83b4-d504f85e275b' do
213
+ before(:each) { set_environment_variable('CFNDK_UUID', uuid) }
214
+ before(:each) { run_command('cfndk keypair create') }
215
+ it 'runs the command with the expected results' do
216
+ aggregate_failures do
217
+ expect(last_command_started).to be_successfully_executed
218
+ expect(last_command_started).to have_output(/INFO create.../)
219
+ expect(last_command_started).to have_output(/INFO creating keypair: Test-#{uuid}/)
220
+ expect(last_command_started).to have_output(/INFO created keypair: Test-#{uuid}/)
221
+ expect(last_command_started).to have_output(/create key file: test-#{uuid}.pem/)
222
+ expect("test-#{uuid}.pem").to be_an_existing_file
223
+ expect("test-#{uuid}.pem").to have_file_content(/-----END RSA PRIVATE KEY-----/)
224
+ end
225
+ end
226
+ after(:each) { run_command('cfndk destroy -f') }
227
+ end
228
+ end
229
+ end
230
+ context 'with keypairs' do
231
+ yaml = <<-"YAML"
232
+ keypairs:
233
+ Test1:
234
+ Test2:
235
+ Test3:
236
+ YAML
237
+ before(:each) { write_file(file, yaml) }
238
+ context 'when --keypair-names=Test1 Test3' do
239
+ context 'without UUID' do
240
+ before(:each) { run_command('cfndk keypair create --keypair-names=Test1 Test3') }
241
+ it do
242
+ aggregate_failures do
243
+ expect(last_command_started).to be_successfully_executed
244
+ expect(last_command_started).to have_output(/INFO create.../)
245
+ expect(last_command_started).to have_output(/INFO creating keypair: Test1/)
246
+ expect(last_command_started).to have_output(/INFO created keypair: Test1/)
247
+ expect(last_command_started).not_to have_output(/INFO creating keypair: Test2/)
248
+ expect(last_command_started).not_to have_output(/INFO created keypair: Test2/)
249
+ expect(last_command_started).to have_output(/INFO creating keypair: Test3/)
250
+ expect(last_command_started).to have_output(/INFO created keypair: Test3/)
251
+ end
252
+ end
253
+ after(:each) { run_command('cfndk destroy -f') }
254
+ end
255
+ context 'with UUID' do
256
+ context 'when env CFNDK_UUID=38437346-c75c-47c5-83b4-d504f85e275b' do
257
+ before(:each) { set_environment_variable('CFNDK_UUID', uuid) }
258
+ before(:each) { run_command('cfndk keypair create --keypair-names=Test1 Test3') }
259
+ it do
260
+ aggregate_failures do
261
+ expect(last_command_started).to be_successfully_executed
262
+ expect(last_command_started).to have_output(/INFO create.../)
263
+ expect(last_command_started).to have_output(/INFO creating keypair: Test1-#{uuid}/)
264
+ expect(last_command_started).to have_output(/INFO created keypair: Test1-#{uuid}/)
265
+ expect(last_command_started).not_to have_output(/INFO creating keypair: Test2-#{uuid}/)
266
+ expect(last_command_started).not_to have_output(/INFO created keypair: Test2-#{uuid}/)
267
+ expect(last_command_started).to have_output(/INFO creating keypair: Test3-#{uuid}/)
268
+ expect(last_command_started).to have_output(/INFO created keypair: Test3-#{uuid}/)
269
+ end
270
+ end
271
+ after(:each) { run_command('cfndk destroy -f') }
272
+ end
273
+ end
274
+ end
275
+ end
276
+ end
277
+ end
278
+ end
279
+
280
+ describe 'destroy' do
281
+ context 'without cfndk.yml' do
282
+ before(:each) { run_command('cfndk keypair destroy') }
283
+ it 'displays file does not exist error and status code = 1' do
284
+ aggregate_failures do
285
+ expect(last_command_started).to have_exit_status(1)
286
+ expect(last_command_started).to have_output(/ERROR File does not exist./)
287
+ end
288
+ end
289
+ end
290
+ context 'with cfndk.yml' do
291
+ context 'when cfndk.yml is empty' do
292
+ before(:each) { touch(file) }
293
+ before(:each) { run_command('cfndk keypair destroy -f') }
294
+ it 'displays File is empty error and status code = 1' do
295
+ aggregate_failures do
296
+ expect(last_command_started).to have_exit_status(1)
297
+ expect(last_command_started).to have_output(/ERROR File is empty./)
298
+ end
299
+ end
300
+ end
301
+ context 'when enter no' do
302
+ yaml = <<-"YAML"
303
+ keypairs:
304
+ Test1:
305
+ stacks:
306
+ Test:
307
+ template_file: vpc.yaml
308
+ parameter_input: vpc.json
309
+ parameters:
310
+ VpcName: sample<%= append_uuid%>
311
+ timeout_in_minutes: 2
312
+ YAML
313
+ before(:each) { write_file(file, yaml) }
314
+ before(:each) { copy('%/vpc.yaml', 'vpc.yaml') }
315
+ before(:each) { copy('%/vpc.json', 'vpc.json') }
316
+ before(:each) { run_command('cfndk keypair destroy') }
317
+ before(:each) { type('no') }
318
+ it 'displays confirm message and cancel message and status code = 2' do
319
+ aggregate_failures do
320
+ expect(last_command_started).to have_exit_status(2)
321
+ expect(last_command_started).to have_output(/INFO destroy../)
322
+ expect(last_command_started).to have_output(%r{Are you sure you want to destroy\? \(y/n\)})
323
+ expect(last_command_started).to have_output(/INFO destroy command was canceled/)
324
+ expect(last_command_started).not_to have_output(/INFO deleting stack:/)
325
+ expect(last_command_started).not_to have_output(/INFO deleted stack:/)
326
+ expect(last_command_started).not_to have_output(/INFO do not delete keypair: Test1$/)
327
+ expect(last_command_started).not_to have_output(/INFO do not delete stack: Test$/)
328
+ end
329
+ end
330
+ end
331
+ context 'when enter yes' do
332
+ context 'when keyparis do not exist' do
333
+ yaml = <<-"YAML"
334
+ keypairs:
335
+ Test1:
336
+ stacks:
337
+ Test:
338
+ template_file: vpc.yaml
339
+ parameter_input: vpc.json
340
+ parameters:
341
+ VpcName: sample<%= append_uuid%>
342
+ timeout_in_minutes: 2
343
+ YAML
344
+ before(:each) { write_file(file, yaml) }
345
+ before(:each) { copy('%/vpc.yaml', 'vpc.yaml') }
346
+ before(:each) { copy('%/vpc.json', 'vpc.json') }
347
+ before(:each) { run_command_and_stop('cfndk destroy -f') }
348
+ before(:each) { run_command('cfndk keypair destroy') }
349
+ before(:each) { type('yes') }
350
+ it 'displays confirm message and do not delete message' do
351
+ aggregate_failures do
352
+ expect(last_command_started).to be_successfully_executed
353
+ expect(last_command_started).to have_output(/INFO destroy../)
354
+ expect(last_command_started).to have_output(%r{Are you sure you want to destroy\? \(y/n\)})
355
+ expect(last_command_started).to have_output(/INFO do not delete keypair: Test1$/)
356
+ expect(last_command_started).not_to have_output(/INFO do not delete stack: Test$/)
357
+ end
358
+ end
359
+ end
360
+ context 'when keyparis and stacks exist' do
361
+ yaml = <<-"YAML"
362
+ keypairs:
363
+ Test1:
364
+ stacks:
365
+ Test:
366
+ template_file: vpc.yaml
367
+ parameter_input: vpc.json
368
+ parameters:
369
+ VpcName: sample<%= append_uuid%>
370
+ timeout_in_minutes: 2
371
+ YAML
372
+ before(:each) { write_file(file, yaml) }
373
+ before(:each) { copy('%/vpc.yaml', 'vpc.yaml') }
374
+ before(:each) { copy('%/vpc.json', 'vpc.json') }
375
+ before(:each) { run_command('cfndk create') }
376
+ before(:each) { stop_all_commands }
377
+ before(:each) { run_command('cfndk keypair destroy') }
378
+ before(:each) { type('yes') }
379
+ it 'displays confirm message and delete message' do
380
+ aggregate_failures do
381
+ expect(last_command_started).to be_successfully_executed
382
+ expect(last_command_started).to have_output(/INFO destroy../)
383
+ expect(last_command_started).to have_output(%r{Are you sure you want to destroy\? \(y/n\)})
384
+ expect(last_command_started).to have_output(/INFO deleted keypair: Test1$/)
385
+ expect(last_command_started).not_to have_output(/INFO deleted stack: Test$/)
386
+ end
387
+ end
388
+ after(:each) { run_command('cfndk destroy -f') }
389
+ end
390
+ end
391
+ end
392
+ end
393
+ end
394
+ end
395
+ end