knife-essentials 0.8.1 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,314 @@
1
+ require 'support/integration_helper'
2
+ require 'chef/knife/deps_essentials'
3
+
4
+ describe 'knife deps' do
5
+ extend IntegrationSupport
6
+ include KnifeSupport
7
+
8
+ context 'remote' do
9
+ when_the_chef_server 'has a role with no run_list' do
10
+ role 'starring', {}
11
+ it 'knife deps reports no dependencies' do
12
+ knife('deps --remote /roles/starring.json').should_succeed "/roles/starring.json\n"
13
+ end
14
+ end
15
+
16
+ when_the_chef_server 'has a role with a default run_list' do
17
+ role 'starring', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) }
18
+ role 'minor', {}
19
+ cookbook 'quiche', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'default.rb' => '' } }
20
+ cookbook 'soup', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'chicken.rb' => '' } }
21
+ it 'knife deps reports all dependencies' do
22
+ knife('deps --remote /roles/starring.json').should_succeed <<EOM
23
+ /roles/minor.json
24
+ /cookbooks/quiche
25
+ /cookbooks/soup
26
+ /roles/starring.json
27
+ EOM
28
+ end
29
+ end
30
+
31
+ when_the_chef_server 'has a role with an env_run_list' do
32
+ role 'starring', { 'env_run_lists' => { 'desert' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) } }
33
+ role 'minor', {}
34
+ cookbook 'quiche', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'default.rb' => '' } }
35
+ cookbook 'soup', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'chicken.rb' => '' } }
36
+ it 'knife deps reports all dependencies' do
37
+ knife('deps --remote /roles/starring.json').should_succeed <<EOM
38
+ /roles/minor.json
39
+ /cookbooks/quiche
40
+ /cookbooks/soup
41
+ /roles/starring.json
42
+ EOM
43
+ end
44
+ end
45
+
46
+ when_the_chef_server 'has a node with no environment or run_list' do
47
+ node 'mort', {}
48
+ it 'knife deps reports just the node' do
49
+ knife('deps --remote --repo-mode=everything /nodes/mort.json').should_succeed "/nodes/mort.json\n"
50
+ end
51
+ end
52
+ when_the_chef_server 'has a node with an environment' do
53
+ environment 'desert', {}
54
+ node 'mort', { 'chef_environment' => 'desert' }
55
+ it 'knife deps reports just the node' do
56
+ knife('deps --remote --repo-mode=everything /nodes/mort.json').should_succeed "/environments/desert.json\n/nodes/mort.json\n"
57
+ end
58
+ end
59
+ when_the_chef_server 'has a node with roles and recipes in its run_list' do
60
+ role 'minor', {}
61
+ cookbook 'quiche', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'default.rb' => '' } }
62
+ cookbook 'soup', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'chicken.rb' => '' } }
63
+ node 'mort', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) }
64
+ it 'knife deps reports just the node' do
65
+ knife('deps --remote --repo-mode=everything /nodes/mort.json').should_succeed <<EOM
66
+ /roles/minor.json
67
+ /cookbooks/quiche
68
+ /cookbooks/soup
69
+ /nodes/mort.json
70
+ EOM
71
+ end
72
+ end
73
+ when_the_chef_server 'has a cookbook with no dependencies' do
74
+ cookbook 'quiche', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'default.rb' => '' } }
75
+ it 'knife deps reports just the cookbook' do
76
+ knife('deps --remote /cookbooks/quiche').should_succeed "/cookbooks/quiche\n"
77
+ end
78
+ end
79
+ when_the_chef_server 'has a cookbook with dependencies' do
80
+ cookbook 'kettle', '1.0.0', { 'metadata.rb' => '' }
81
+ cookbook 'quiche', '1.0.0', { 'metadata.rb' => 'depends "kettle"', 'recipes' => { 'default.rb' => '' } }
82
+ it 'knife deps reports just the cookbook' do
83
+ knife('deps --remote /cookbooks/quiche').should_succeed "/cookbooks/kettle\n/cookbooks/quiche\n"
84
+ end
85
+ end
86
+ when_the_chef_server 'has a data bag' do
87
+ data_bag 'bag', { 'item' => {} }
88
+ it 'knife deps reports just the data bag' do
89
+ knife('deps --remote /data_bags/bag/item.json').should_succeed "/data_bags/bag/item.json\n"
90
+ end
91
+ end
92
+ when_the_chef_server 'has an environment' do
93
+ environment 'desert', {}
94
+ it 'knife deps reports just the environment' do
95
+ knife('deps --remote /environments/desert.json').should_succeed "/environments/desert.json\n"
96
+ end
97
+ end
98
+ when_the_chef_server 'has a deep dependency tree' do
99
+ role 'starring', { 'run_list' => %w(role[minor] recipe[quiche] recipe[soup::chicken]) }
100
+ role 'minor', {}
101
+ cookbook 'quiche', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'default.rb' => '' } }
102
+ cookbook 'soup', '1.0.0', { 'metadata.rb' => '', 'recipes' => { 'chicken.rb' => '' } }
103
+ environment 'desert', {}
104
+ node 'mort', { 'chef_environment' => 'desert', 'run_list' => [ 'role[starring]' ] }
105
+ node 'bart', { 'run_list' => [ 'role[minor]' ] }
106
+
107
+ it 'knife deps reports all dependencies' do
108
+ knife('deps --remote --repo-mode=everything /nodes/mort.json').should_succeed <<EOM
109
+ /environments/desert.json
110
+ /roles/minor.json
111
+ /cookbooks/quiche
112
+ /cookbooks/soup
113
+ /roles/starring.json
114
+ /nodes/mort.json
115
+ EOM
116
+ end
117
+ it 'knife deps * reports all dependencies of all things' do
118
+ knife('deps --remote --repo-mode=everything /nodes/*').should_succeed <<EOM
119
+ /roles/minor.json
120
+ /nodes/bart.json
121
+ /environments/desert.json
122
+ /cookbooks/quiche
123
+ /cookbooks/soup
124
+ /roles/starring.json
125
+ /nodes/mort.json
126
+ EOM
127
+ end
128
+ it 'knife deps a b reports all dependencies of a and b' do
129
+ knife('deps --remote --repo-mode=everything /nodes/bart.json /nodes/mort.json').should_succeed <<EOM
130
+ /roles/minor.json
131
+ /nodes/bart.json
132
+ /environments/desert.json
133
+ /cookbooks/quiche
134
+ /cookbooks/soup
135
+ /roles/starring.json
136
+ /nodes/mort.json
137
+ EOM
138
+ end
139
+ it 'knife deps --tree /* shows dependencies in a tree' do
140
+ knife('deps --remote --tree --repo-mode=everything /nodes/*').should_succeed <<EOM
141
+ /nodes/bart.json
142
+ /roles/minor.json
143
+ /nodes/mort.json
144
+ /environments/desert.json
145
+ /roles/starring.json
146
+ /roles/minor.json
147
+ /cookbooks/quiche
148
+ /cookbooks/soup
149
+ EOM
150
+ end
151
+ it 'knife deps --tree --no-recurse shows only the first level of dependencies' do
152
+ knife('deps --remote --tree --no-recurse --repo-mode=everything /nodes/*').should_succeed <<EOM
153
+ /nodes/bart.json
154
+ /roles/minor.json
155
+ /nodes/mort.json
156
+ /environments/desert.json
157
+ /roles/starring.json
158
+ EOM
159
+ end
160
+ end
161
+
162
+ context 'circular dependencies' do
163
+ when_the_chef_server 'has cookbooks with circular dependencies' do
164
+ cookbook 'foo', '1.0.0', { 'metadata.rb' => 'depends "bar"' }
165
+ cookbook 'bar', '1.0.0', { 'metadata.rb' => 'depends "baz"' }
166
+ cookbook 'baz', '1.0.0', { 'metadata.rb' => 'depends "foo"' }
167
+ cookbook 'self', '1.0.0', { 'metadata.rb' => 'depends "self"' }
168
+ it 'knife deps prints each once' do
169
+ knife('deps --remote /cookbooks/foo /cookbooks/self').should_succeed <<EOM
170
+ /cookbooks/baz
171
+ /cookbooks/bar
172
+ /cookbooks/foo
173
+ /cookbooks/self
174
+ EOM
175
+ end
176
+ it 'knife deps --tree prints each once' do
177
+ knife('deps --remote --tree /cookbooks/foo /cookbooks/self').should_succeed <<EOM
178
+ /cookbooks/foo
179
+ /cookbooks/bar
180
+ /cookbooks/baz
181
+ /cookbooks/foo
182
+ /cookbooks/self
183
+ /cookbooks/self
184
+ EOM
185
+ end
186
+ end
187
+ when_the_chef_server 'has roles with circular dependencies' do
188
+ role 'foo', { 'run_list' => [ 'role[bar]' ] }
189
+ role 'bar', { 'run_list' => [ 'role[baz]' ] }
190
+ role 'baz', { 'run_list' => [ 'role[foo]' ] }
191
+ role 'self', { 'run_list' => [ 'role[self]' ] }
192
+ it 'knife deps prints each once' do
193
+ knife('deps --remote /roles/foo.json /roles/self.json').should_succeed <<EOM
194
+ /roles/baz.json
195
+ /roles/bar.json
196
+ /roles/foo.json
197
+ /roles/self.json
198
+ EOM
199
+ end
200
+ it 'knife deps --tree prints each once' do
201
+ knife('deps --remote --tree /roles/foo.json /roles/self.json') do
202
+ stdout.should == "/roles/foo.json\n /roles/bar.json\n /roles/baz.json\n /roles/foo.json\n/roles/self.json\n /roles/self.json\n"
203
+ stderr.should == "WARNING: No knife configuration file found\n"
204
+ end
205
+ end
206
+ end
207
+ end
208
+
209
+ context 'missing objects' do
210
+ when_the_chef_server 'is empty' do
211
+ it 'knife deps /blah reports an error' do
212
+ knife('deps --remote /blah').should_fail(
213
+ :exit_code => 2,
214
+ :stdout => "/blah\n",
215
+ :stderr => "ERROR: /blah: No such file or directory\n"
216
+ )
217
+ end
218
+ it 'knife deps /roles/x.json reports an error' do
219
+ knife('deps --remote /roles/x.json').should_fail(
220
+ :exit_code => 2,
221
+ :stdout => "/roles/x.json\n",
222
+ :stderr => "ERROR: /roles/x.json: No such file or directory\n"
223
+ )
224
+ end
225
+ it 'knife deps /nodes/x.json reports an error' do
226
+ knife('deps --remote --repo-mode=everything /nodes/x.json').should_fail(
227
+ :exit_code => 2,
228
+ :stdout => "/nodes/x.json\n",
229
+ :stderr => "ERROR: /nodes/x.json: No such file or directory\n"
230
+ )
231
+ end
232
+ it 'knife deps /environments/x.json reports an error' do
233
+ knife('deps --remote /environments/x.json').should_fail(
234
+ :exit_code => 2,
235
+ :stdout => "/environments/x.json\n",
236
+ :stderr => "ERROR: /environments/x.json: No such file or directory\n"
237
+ )
238
+ end
239
+ it 'knife deps /cookbooks/x reports an error' do
240
+ knife('deps --remote /cookbooks/x').should_fail(
241
+ :exit_code => 2,
242
+ :stdout => "/cookbooks/x\n",
243
+ :stderr => "ERROR: /cookbooks/x: No such file or directory\n"
244
+ )
245
+ end
246
+ it 'knife deps /data_bags/bag/item reports an error' do
247
+ knife('deps --remote /data_bags/bag/item').should_fail(
248
+ :exit_code => 2,
249
+ :stdout => "/data_bags/bag/item\n",
250
+ :stderr => "ERROR: /data_bags/bag/item: No such file or directory\n"
251
+ )
252
+ end
253
+ end
254
+ when_the_chef_server 'is missing a dependent cookbook' do
255
+ role 'starring', { 'run_list' => [ 'recipe[quiche]'] }
256
+ it 'knife deps reports the cookbook, along with an error' do
257
+ knife('deps --remote /roles/starring.json').should_fail(
258
+ :exit_code => 2,
259
+ :stdout => "/cookbooks/quiche\n/roles/starring.json\n",
260
+ :stderr => "ERROR: /cookbooks/quiche: No such file or directory\n"
261
+ )
262
+ end
263
+ end
264
+ when_the_chef_server 'is missing a dependent environment' do
265
+ node 'mort', { 'chef_environment' => 'desert' }
266
+ it 'knife deps reports the environment, along with an error' do
267
+ knife('deps --remote --repo-mode=everything /nodes/mort.json').should_fail(
268
+ :exit_code => 2,
269
+ :stdout => "/environments/desert.json\n/nodes/mort.json\n",
270
+ :stderr => "ERROR: /environments/desert.json: No such file or directory\n"
271
+ )
272
+ end
273
+ end
274
+ when_the_chef_server 'is missing a dependent role' do
275
+ role 'starring', { 'run_list' => [ 'role[minor]'] }
276
+ it 'knife deps reports the role, along with an error' do
277
+ knife('deps --remote /roles/starring.json').should_fail(
278
+ :exit_code => 2,
279
+ :stdout => "/roles/minor.json\n/roles/starring.json\n",
280
+ :stderr => "ERROR: /roles/minor.json: No such file or directory\n"
281
+ )
282
+ end
283
+ end
284
+ end
285
+ context 'invalid objects' do
286
+ when_the_chef_server 'is empty' do
287
+ it 'knife deps / reports an error' do
288
+ knife('deps --remote /').should_succeed("/\n")
289
+ end
290
+ it 'knife deps /roles reports an error' do
291
+ knife('deps --remote /roles').should_succeed("/roles\n")
292
+ end
293
+ end
294
+ when_the_chef_server 'has a data bag' do
295
+ data_bag 'bag', { 'item' => {} }
296
+ it 'knife deps /data_bags/bag shows no dependencies' do
297
+ knife('deps --remote /data_bags/bag').should_succeed("/data_bags/bag\n")
298
+ end
299
+ end
300
+ when_the_chef_server 'has a cookbook' do
301
+ cookbook 'blah', '1.0.0', { 'metadata.rb' => '' }
302
+ it 'knife deps on a cookbook file shows no dependencies' do
303
+ knife('deps --remote /cookbooks/blah/metadata.rb').should_succeed(
304
+ "/cookbooks/blah/metadata.rb\n"
305
+ )
306
+ end
307
+ end
308
+ end
309
+
310
+ it 'knife deps --no-recurse reports an error' do
311
+ knife('deps --no-recurse /').should_fail("ERROR: --no-recurse requires --tree\n")
312
+ end
313
+ end
314
+ end
@@ -0,0 +1,315 @@
1
+ require 'support/integration_helper'
2
+ require 'chef/knife/list_essentials'
3
+
4
+ describe 'knife list' do
5
+ extend IntegrationSupport
6
+ include KnifeSupport
7
+
8
+ when_the_chef_server "is empty" do
9
+ it "knife list / returns all top level directories" do
10
+ knife('list /').should_succeed <<EOM
11
+ /cookbooks
12
+ /data_bags
13
+ /environments
14
+ /roles
15
+ EOM
16
+ end
17
+
18
+ it "knife list -R / returns everything" do
19
+ knife('list -R /').should_succeed <<EOM
20
+ /:
21
+ cookbooks
22
+ data_bags
23
+ environments
24
+ roles
25
+
26
+ /cookbooks:
27
+
28
+ /data_bags:
29
+
30
+ /environments:
31
+ _default.json
32
+
33
+ /roles:
34
+ EOM
35
+ end
36
+ end
37
+
38
+ when_the_chef_server "has plenty of stuff in it" do
39
+ client 'client1', {}
40
+ client 'client2', {}
41
+ cookbook 'cookbook1', '1.0.0', { 'metadata.rb' => '' }
42
+ cookbook 'cookbook2', '1.0.1', { 'metadata.rb' => '', 'recipes' => { 'default.rb' => '' } }
43
+ data_bag 'bag1', { 'item1' => {}, 'item2' => {} }
44
+ data_bag 'bag2', { 'item1' => {}, 'item2' => {} }
45
+ environment 'environment1', {}
46
+ environment 'environment2', {}
47
+ node 'node1', {}
48
+ node 'node2', {}
49
+ role 'role1', {}
50
+ role 'role2', {}
51
+ user 'user1', {}
52
+ user 'user2', {}
53
+
54
+ it "knife list / returns all top level directories" do
55
+ knife('list /').should_succeed <<EOM
56
+ /cookbooks
57
+ /data_bags
58
+ /environments
59
+ /roles
60
+ EOM
61
+ end
62
+
63
+ it "knife list -R / returns everything" do
64
+ knife('list -R /').should_succeed <<EOM
65
+ /:
66
+ cookbooks
67
+ data_bags
68
+ environments
69
+ roles
70
+
71
+ /cookbooks:
72
+ cookbook1
73
+ cookbook2
74
+
75
+ /cookbooks/cookbook1:
76
+ metadata.rb
77
+
78
+ /cookbooks/cookbook2:
79
+ metadata.rb
80
+ recipes
81
+
82
+ /cookbooks/cookbook2/recipes:
83
+ default.rb
84
+
85
+ /data_bags:
86
+ bag1
87
+ bag2
88
+
89
+ /data_bags/bag1:
90
+ item1.json
91
+ item2.json
92
+
93
+ /data_bags/bag2:
94
+ item1.json
95
+ item2.json
96
+
97
+ /environments:
98
+ _default.json
99
+ environment1.json
100
+ environment2.json
101
+
102
+ /roles:
103
+ role1.json
104
+ role2.json
105
+ EOM
106
+ end
107
+
108
+ it "knife list -R --flat / returns everything" do
109
+ knife('list -R --flat /').should_succeed <<EOM
110
+ /cookbooks
111
+ /cookbooks/cookbook1
112
+ /cookbooks/cookbook1/metadata.rb
113
+ /cookbooks/cookbook2
114
+ /cookbooks/cookbook2/metadata.rb
115
+ /cookbooks/cookbook2/recipes
116
+ /cookbooks/cookbook2/recipes/default.rb
117
+ /data_bags
118
+ /data_bags/bag1
119
+ /data_bags/bag1/item1.json
120
+ /data_bags/bag1/item2.json
121
+ /data_bags/bag2
122
+ /data_bags/bag2/item1.json
123
+ /data_bags/bag2/item2.json
124
+ /environments
125
+ /environments/_default.json
126
+ /environments/environment1.json
127
+ /environments/environment2.json
128
+ /roles
129
+ /roles/role1.json
130
+ /roles/role2.json
131
+ EOM
132
+ end
133
+
134
+ it "knife list -Rp --flat / returns everything" do
135
+ knife('list -Rp --flat /').should_succeed <<EOM
136
+ /cookbooks/
137
+ /cookbooks/cookbook1/
138
+ /cookbooks/cookbook1/metadata.rb
139
+ /cookbooks/cookbook2/
140
+ /cookbooks/cookbook2/metadata.rb
141
+ /cookbooks/cookbook2/recipes/
142
+ /cookbooks/cookbook2/recipes/default.rb
143
+ /data_bags/
144
+ /data_bags/bag1/
145
+ /data_bags/bag1/item1.json
146
+ /data_bags/bag1/item2.json
147
+ /data_bags/bag2/
148
+ /data_bags/bag2/item1.json
149
+ /data_bags/bag2/item2.json
150
+ /environments/
151
+ /environments/_default.json
152
+ /environments/environment1.json
153
+ /environments/environment2.json
154
+ /roles/
155
+ /roles/role1.json
156
+ /roles/role2.json
157
+ EOM
158
+ end
159
+
160
+ it "knife list /cookbooks returns the list of cookbooks" do
161
+ knife('list /cookbooks').should_succeed <<EOM
162
+ /cookbooks/cookbook1
163
+ /cookbooks/cookbook2
164
+ EOM
165
+ end
166
+
167
+ it "knife list /cookbooks/*2/*/*.rb returns the one file" do
168
+ knife('list /cookbooks/*2/*/*.rb').should_succeed "/cookbooks/cookbook2/recipes/default.rb\n"
169
+ end
170
+
171
+ it "knife list /**.rb returns all ruby files" do
172
+ knife('list /**.rb').should_succeed <<EOM
173
+ /cookbooks/cookbook1/metadata.rb
174
+ /cookbooks/cookbook2/metadata.rb
175
+ /cookbooks/cookbook2/recipes/default.rb
176
+ EOM
177
+ end
178
+
179
+ it "knife list /cookbooks/**.rb returns all ruby files" do
180
+ knife('list /cookbooks/**.rb').should_succeed <<EOM
181
+ /cookbooks/cookbook1/metadata.rb
182
+ /cookbooks/cookbook2/metadata.rb
183
+ /cookbooks/cookbook2/recipes/default.rb
184
+ EOM
185
+ end
186
+
187
+ it "knife list /**.json returns all json files" do
188
+ knife('list /**.json').should_succeed <<EOM
189
+ /data_bags/bag1/item1.json
190
+ /data_bags/bag1/item2.json
191
+ /data_bags/bag2/item1.json
192
+ /data_bags/bag2/item2.json
193
+ /environments/_default.json
194
+ /environments/environment1.json
195
+ /environments/environment2.json
196
+ /roles/role1.json
197
+ /roles/role2.json
198
+ EOM
199
+ end
200
+
201
+ it "knife list /data**.json returns all data bag json files" do
202
+ knife('list /data**.json').should_succeed <<EOM
203
+ /data_bags/bag1/item1.json
204
+ /data_bags/bag1/item2.json
205
+ /data_bags/bag2/item1.json
206
+ /data_bags/bag2/item2.json
207
+ EOM
208
+ end
209
+
210
+ it "knife list /environments/missing_file.json reports missing file" do
211
+ knife('list /environments/missing_file.json').should_fail "ERROR: /environments/missing_file.json: No such file or directory\n"
212
+ end
213
+
214
+ context "missing file/directory exact match tests" do
215
+ it "knife list /blarghle reports missing directory" do
216
+ knife('list /blarghle').should_fail "ERROR: /blarghle: No such file or directory\n"
217
+ end
218
+
219
+ it "knife list /roles/blarghle reports missing directory" do
220
+ knife('list /roles/blarghle').should_fail "ERROR: /roles/blarghle: No such file or directory\n"
221
+ end
222
+
223
+ it "knife list /roles/blarghle/blorghle reports missing directory" do
224
+ knife('list /roles/blarghle/blorghle').should_fail "ERROR: /roles/blarghle/blorghle: No such file or directory\n"
225
+ end
226
+ end
227
+
228
+ # TODO different cwd
229
+ end
230
+
231
+ context "--local" do
232
+ when_the_repository "is empty" do
233
+ it "knife list --local / returns nothing" do
234
+ knife('list --local /').should_succeed ""
235
+ end
236
+
237
+ it "knife list /roles returns nothing" do
238
+ knife('list --local /roles').should_fail "ERROR: /roles: No such file or directory\n"
239
+ end
240
+ end
241
+
242
+ when_the_repository "has a bunch of stuff" do
243
+ file 'clients/client1.json', {}
244
+ file 'clients/client2.json', {}
245
+
246
+ directory 'cookbooks/cookbook1' do
247
+ file 'metadata.rb', ''
248
+ end
249
+ directory 'cookbooks/cookbook2' do
250
+ file 'metadata.rb', ''
251
+ file 'recipes/default.rb', ''
252
+ end
253
+
254
+ directory 'data_bags' do
255
+ directory 'bag1' do
256
+ file 'item1.json', {}
257
+ file 'item2.json', {}
258
+ end
259
+ directory 'bag2' do
260
+ file 'item1.json', {}
261
+ file 'item2.json', {}
262
+ end
263
+ end
264
+
265
+ file 'environments/environment1.json', {}
266
+ file 'environments/environment2.json', {}
267
+ file 'nodes/node1.json', {}
268
+ file 'nodes/node2.json', {}
269
+ file 'roles/role1.json', {}
270
+ file 'roles/role2.json', {}
271
+ file 'users/user1.json', {}
272
+ file 'users/user2.json', {}
273
+
274
+ it "knife list -Rp --flat / returns everything" do
275
+ knife('list -Rp --local --flat /').should_succeed <<EOM
276
+ /cookbooks/
277
+ /cookbooks/cookbook1/
278
+ /cookbooks/cookbook1/metadata.rb
279
+ /cookbooks/cookbook2/
280
+ /cookbooks/cookbook2/metadata.rb
281
+ /cookbooks/cookbook2/recipes/
282
+ /cookbooks/cookbook2/recipes/default.rb
283
+ /data_bags/
284
+ /data_bags/bag1/
285
+ /data_bags/bag1/item1.json
286
+ /data_bags/bag1/item2.json
287
+ /data_bags/bag2/
288
+ /data_bags/bag2/item1.json
289
+ /data_bags/bag2/item2.json
290
+ /environments/
291
+ /environments/environment1.json
292
+ /environments/environment2.json
293
+ /roles/
294
+ /roles/role1.json
295
+ /roles/role2.json
296
+ EOM
297
+ end
298
+
299
+ context "missing file/directory tests" do
300
+ it "knife list --local /blarghle reports missing directory" do
301
+ knife('list --local /blarghle').should_fail "ERROR: /blarghle: No such file or directory\n"
302
+ end
303
+
304
+ it "knife list /roles/blarghle reports missing directory" do
305
+ knife('list --local /roles/blarghle').should_fail "ERROR: /roles/blarghle: No such file or directory\n"
306
+ end
307
+
308
+ it "knife list /roles/blarghle/blorghle reports missing directory" do
309
+ knife('list --local /roles/blarghle/blorghle').should_fail "ERROR: /roles/blarghle/blorghle: No such file or directory\n"
310
+ end
311
+ end
312
+ end
313
+ # TODO different cwd
314
+ end
315
+ end