knife-essentials 0.8.1 → 0.8.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.
@@ -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