berkshelf 2.0.18 → 3.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- data/.ruby-version +1 -1
- data/.travis.yml +4 -1
- data/CHANGELOG.md +2 -26
- data/Gemfile +12 -2
- data/README.md +9 -1
- data/berkshelf.gemspec +9 -18
- data/bin/berks +3 -13
- data/features/apply_command.feature +11 -9
- data/features/berksfile.feature +8 -10
- data/features/config.feature +1 -2
- data/features/configure_command.feature +13 -14
- data/features/contingent_command.feature +13 -1
- data/features/cookbook_command.feature +2 -4
- data/features/groups_install.feature +10 -2
- data/features/help.feature +1 -1
- data/features/init_command.feature +5 -7
- data/features/install_command.feature +157 -228
- data/features/json_formatter.feature +27 -15
- data/features/licenses.feature +18 -12
- data/features/list_command.feature +6 -1
- data/features/lockfile.feature +116 -72
- data/features/outdated_command.feature +3 -47
- data/features/package_command.feature +10 -7
- data/features/shelf/show.feature +2 -2
- data/features/shelf/uninstall.feature +2 -2
- data/features/show_command.feature +10 -3
- data/features/step_definitions/chef/config_steps.rb +12 -0
- data/features/step_definitions/chef_server_steps.rb +16 -16
- data/features/step_definitions/cli_steps.rb +3 -79
- data/features/step_definitions/config_steps.rb +43 -0
- data/features/step_definitions/environment_steps.rb +7 -0
- data/features/step_definitions/filesystem_steps.rb +12 -57
- data/features/step_definitions/gem_steps.rb +1 -2
- data/features/step_definitions/json_steps.rb +3 -1
- data/features/step_definitions/lockfile_steps.rb +4 -0
- data/features/step_definitions/utility_steps.rb +0 -19
- data/features/support/aruba.rb +12 -0
- data/features/support/env.rb +52 -57
- data/features/update_command.feature +37 -23
- data/features/upload_command.feature +96 -160
- data/generator_files/Berksfile.erb +2 -1
- data/generator_files/Vagrantfile.erb +3 -0
- data/generator_files/default_test.rb.erb +1 -1
- data/generator_files/helpers.rb.erb +1 -1
- data/lib/berkshelf.rb +43 -24
- data/lib/berkshelf/api_client.rb +67 -0
- data/lib/berkshelf/api_client/remote_cookbook.rb +42 -0
- data/lib/berkshelf/berksfile.rb +232 -420
- data/lib/berkshelf/cached_cookbook.rb +22 -10
- data/lib/berkshelf/chef/config.rb +1 -0
- data/lib/berkshelf/cli.rb +66 -68
- data/lib/berkshelf/commands/shelf.rb +1 -1
- data/lib/berkshelf/community_rest.rb +10 -17
- data/lib/berkshelf/config.rb +23 -27
- data/lib/berkshelf/cookbook_generator.rb +3 -4
- data/lib/berkshelf/cookbook_store.rb +74 -17
- data/lib/berkshelf/core_ext/file.rb +2 -2
- data/lib/berkshelf/core_ext/pathname.rb +7 -5
- data/lib/berkshelf/{cookbook_source.rb → dependency.rb} +47 -67
- data/lib/berkshelf/downloader.rb +49 -106
- data/lib/berkshelf/errors.rb +64 -71
- data/lib/berkshelf/formatters.rb +11 -9
- data/lib/berkshelf/formatters/human_readable.rb +9 -9
- data/lib/berkshelf/formatters/json.rb +14 -4
- data/lib/berkshelf/init_generator.rb +3 -3
- data/lib/berkshelf/installer.rb +136 -0
- data/lib/berkshelf/location.rb +91 -131
- data/lib/berkshelf/locations/git_location.rb +9 -11
- data/lib/berkshelf/locations/github_location.rb +1 -1
- data/lib/berkshelf/locations/path_location.rb +10 -27
- data/lib/berkshelf/lockfile.rb +92 -70
- data/lib/berkshelf/logger.rb +4 -7
- data/lib/berkshelf/mixin/config.rb +21 -4
- data/lib/berkshelf/resolver.rb +60 -150
- data/lib/berkshelf/resolver/graph.rb +44 -0
- data/lib/berkshelf/source.rb +55 -0
- data/lib/berkshelf/source_uri.rb +38 -0
- data/lib/berkshelf/version.rb +1 -1
- data/spec/config/knife.rb +1 -1
- data/spec/fixtures/cassettes/Berkshelf_Resolver/_initialize/adds_the_dependencies_of_the_dependency_as_dependencies.yml +3694 -0
- data/spec/fixtures/cookbooks/example_cookbook/Berksfile.lock +1 -1
- data/spec/fixtures/lockfiles/default.lock +1 -1
- data/spec/spec_helper.rb +20 -121
- data/spec/support/chef_api.rb +3 -4
- data/spec/support/chef_server.rb +20 -11
- data/spec/support/git.rb +127 -0
- data/spec/support/kitchen.rb +12 -0
- data/spec/support/path_helpers.rb +69 -0
- data/spec/unit/berkshelf/api_client/remote_cookbook_spec.rb +23 -0
- data/spec/unit/berkshelf/api_client_spec.rb +57 -0
- data/spec/unit/berkshelf/berksfile_spec.rb +206 -324
- data/spec/unit/berkshelf/cached_cookbook_spec.rb +73 -38
- data/spec/unit/berkshelf/community_rest_spec.rb +30 -71
- data/spec/unit/berkshelf/config_spec.rb +3 -14
- data/spec/unit/berkshelf/cookbook_generator_spec.rb +1 -2
- data/spec/unit/berkshelf/cookbook_store_spec.rb +12 -7
- data/spec/unit/berkshelf/dependency_spec.rb +285 -0
- data/spec/unit/berkshelf/downloader_spec.rb +4 -183
- data/spec/unit/berkshelf/formatters/null_spec.rb +1 -1
- data/spec/unit/berkshelf/formatters_spec.rb +4 -2
- data/spec/unit/berkshelf/git_spec.rb +15 -15
- data/spec/unit/berkshelf/installer_spec.rb +39 -0
- data/spec/unit/berkshelf/location_spec.rb +87 -114
- data/spec/unit/berkshelf/locations/git_location_spec.rb +41 -53
- data/spec/unit/berkshelf/locations/path_location_spec.rb +13 -23
- data/spec/unit/berkshelf/lockfile_spec.rb +38 -40
- data/spec/unit/berkshelf/resolver/graph_spec.rb +44 -0
- data/spec/unit/berkshelf/resolver_spec.rb +34 -83
- data/spec/unit/berkshelf/source_spec.rb +23 -0
- data/spec/unit/berkshelf/source_uri_spec.rb +29 -0
- metadata +149 -188
- checksums.yaml +0 -7
- data/features/default_locations.feature +0 -127
- data/features/step_definitions/berksfile_steps.rb +0 -8
- data/features/step_definitions/configure_cli_steps.rb +0 -19
- data/features/vendor_install.feature +0 -19
- data/lib/berkshelf/core_ext/openuri.rb +0 -36
- data/lib/berkshelf/core_ext/rbzip2.rb +0 -8
- data/lib/berkshelf/locations/chef_api_location.rb +0 -228
- data/lib/berkshelf/locations/site_location.rb +0 -92
- data/lib/berkshelf/test.rb +0 -35
- data/spec/knife.rb.sample +0 -12
- data/spec/support/test_generators.rb +0 -27
- data/spec/unit/berkshelf/cli_spec.rb +0 -16
- data/spec/unit/berkshelf/cookbook_source_spec.rb +0 -358
- data/spec/unit/berkshelf/core_ext/pathname_spec.rb +0 -46
- data/spec/unit/berkshelf/locations/chef_api_location_spec.rb +0 -139
- data/spec/unit/berkshelf/locations/site_location_spec.rb +0 -19
data/features/help.feature
CHANGED
@@ -17,4 +17,4 @@ Feature: Appending -h or --help to a command
|
|
17
17
|
|
18
18
|
Scenario: Specifying the -h option to a sub-command
|
19
19
|
Given I successfully run `berks cookbook -h`
|
20
|
-
Then the output should be the same as `berks help cookbook`
|
20
|
+
Then the output should be the same as `berks help cookbook`
|
@@ -5,7 +5,7 @@ Feature: initialize command
|
|
5
5
|
|
6
6
|
Scenario: initializing a path containing a cookbook
|
7
7
|
Given a cookbook named "sparkle_motion"
|
8
|
-
When I run
|
8
|
+
When I successfully run `berks init sparkle_motion`
|
9
9
|
Then the cookbook "sparkle_motion" should have the following files:
|
10
10
|
| Berksfile |
|
11
11
|
| chefignore |
|
@@ -18,7 +18,7 @@ Feature: initialize command
|
|
18
18
|
|
19
19
|
Scenario: initializing a path that does not contain a cookbook
|
20
20
|
Given a directory named "not_a_cookbook"
|
21
|
-
When I run
|
21
|
+
When I successfully run `berks init not_a_cookbook`
|
22
22
|
Then the directory "not_a_cookbook" should have the following files:
|
23
23
|
| Berksfile |
|
24
24
|
And the directory "not_a_cookbook" should not have the following files:
|
@@ -31,10 +31,8 @@ Feature: initialize command
|
|
31
31
|
And the exit status should be 0
|
32
32
|
|
33
33
|
Scenario: initializing with no value given for target
|
34
|
-
When I run
|
34
|
+
When I successfully run `berks init`
|
35
35
|
Then the output should contain "Successfully initialized"
|
36
|
-
And
|
37
|
-
|
38
|
-
And the current directory should not have the following files:
|
39
|
-
| chefignore |
|
36
|
+
And a file named "Berksfile" should exist
|
37
|
+
And a file named "chefignore" should not exist
|
40
38
|
And the exit status should be 0
|
@@ -1,211 +1,233 @@
|
|
1
1
|
Feature: install cookbooks from a Berksfile
|
2
2
|
As a user with a Berksfile
|
3
|
-
I want to
|
4
|
-
So
|
3
|
+
I want a command to install the cookbooks defined in my Berksfile and their recursive dependencies
|
4
|
+
So I don't have to download those cookbooks and their all of their dependencies manually
|
5
5
|
|
6
|
-
|
6
|
+
Background:
|
7
|
+
Given the Berkshelf API server's cache is empty
|
8
|
+
And the Chef Server is empty
|
9
|
+
And the cookbook store is empty
|
10
|
+
|
11
|
+
Scenario: installing the version that best satisfies our demand
|
7
12
|
Given I write to "Berksfile" with:
|
8
13
|
"""
|
9
|
-
|
14
|
+
source "http://localhost:26210"
|
15
|
+
|
16
|
+
cookbook 'berkshelf'
|
10
17
|
"""
|
18
|
+
And the Chef Server has cookbooks:
|
19
|
+
| berkshelf | 1.0.0 |
|
20
|
+
| berkshelf | 2.0.0 |
|
21
|
+
And the Berkshelf API server cache is up to date
|
11
22
|
When I successfully run `berks install`
|
12
|
-
Then the
|
13
|
-
| berkshelf-cookbook-fixture | 1.0.0 |
|
14
|
-
And the output should contain:
|
23
|
+
Then the output should contain:
|
15
24
|
"""
|
16
|
-
Installing berkshelf
|
25
|
+
Installing berkshelf (2.0.0)
|
17
26
|
"""
|
18
|
-
And the
|
27
|
+
And the cookbook store should have the cookbooks:
|
28
|
+
| berkshelf | 2.0.0 |
|
19
29
|
|
20
|
-
Scenario: installing
|
21
|
-
Given
|
22
|
-
| berkshelf-cookbook-fixture | 1.0.0 |
|
23
|
-
And I write to "Berksfile" with:
|
30
|
+
Scenario: installing an explicit version demand
|
31
|
+
Given I write to "Berksfile" with:
|
24
32
|
"""
|
25
|
-
|
33
|
+
source "http://localhost:26210"
|
34
|
+
|
35
|
+
cookbook 'berkshelf', '1.0.0'
|
26
36
|
"""
|
37
|
+
And the Chef Server has cookbooks:
|
38
|
+
| berkshelf | 1.0.0 |
|
39
|
+
| berkshelf | 2.0.0 |
|
40
|
+
And the Berkshelf API server cache is up to date
|
27
41
|
When I successfully run `berks install`
|
28
42
|
Then the output should contain:
|
29
43
|
"""
|
30
|
-
|
44
|
+
Installing berkshelf (1.0.0)
|
31
45
|
"""
|
32
|
-
And the
|
46
|
+
And the cookbook store should have the cookbooks:
|
47
|
+
| berkshelf | 1.0.0 |
|
33
48
|
|
34
|
-
Scenario: installing
|
35
|
-
Given
|
36
|
-
| berkshelf-cookbook-fixture | 1.0.0 |
|
37
|
-
And I write to "Berksfile" with:
|
49
|
+
Scenario: installing demands from all groups
|
50
|
+
Given I write to "Berksfile" with:
|
38
51
|
"""
|
39
|
-
|
40
|
-
|
52
|
+
source "http://localhost:26210"
|
53
|
+
|
54
|
+
group :one do
|
55
|
+
cookbook 'ruby'
|
41
56
|
end
|
42
57
|
|
43
|
-
group :
|
44
|
-
cookbook '
|
58
|
+
group :two do
|
59
|
+
cookbook 'elixir'
|
45
60
|
end
|
46
61
|
"""
|
62
|
+
And the Chef Server has cookbooks:
|
63
|
+
| ruby | 1.0.0 |
|
64
|
+
| elixir | 1.0.0 |
|
65
|
+
And the Berkshelf API server cache is up to date
|
47
66
|
When I successfully run `berks install`
|
48
|
-
Then the output should contain
|
49
|
-
|
67
|
+
Then the output should contain:
|
68
|
+
"""
|
69
|
+
Installing ruby (1.0.0)
|
70
|
+
Installing elixir (1.0.0)
|
71
|
+
"""
|
72
|
+
And the cookbook store should have the cookbooks:
|
73
|
+
| ruby | 1.0.0 |
|
74
|
+
| elixir | 1.0.0 |
|
50
75
|
|
51
|
-
Scenario: installing a
|
52
|
-
Given
|
76
|
+
Scenario: installing a demand that has already been installed
|
77
|
+
Given I write to "Berksfile" with:
|
78
|
+
"""
|
79
|
+
source "http://localhost:26210"
|
80
|
+
|
81
|
+
cookbook 'berkshelf-cookbook-fixture', github: 'RiotGames/berkshelf-cookbook-fixture', branch: 'deps'
|
82
|
+
"""
|
83
|
+
And the cookbook store contains a cookbook "berkshelf" "1.0.0" with dependencies:
|
53
84
|
| hostsfile | = 1.0.1 |
|
54
85
|
And the cookbook store has the cookbooks:
|
55
86
|
| hostsfile | 1.0.1 |
|
56
|
-
And
|
57
|
-
"""
|
58
|
-
cookbook 'berkshelf-cookbook-fixture', '1.0.0', github: 'RiotGames/berkshelf-cookbook-fixture', branch: 'deps'
|
59
|
-
"""
|
87
|
+
And the Berkshelf API server cache is up to date
|
60
88
|
When I successfully run `berks install`
|
61
89
|
Then the output should contain:
|
62
90
|
"""
|
63
91
|
Using hostsfile (1.0.1)
|
64
92
|
"""
|
65
|
-
And the exit status should be 0
|
66
93
|
|
67
|
-
Scenario: installing a
|
68
|
-
Given
|
69
|
-
|
94
|
+
Scenario: installing a demand from a path location
|
95
|
+
Given I write to "Berksfile" with:
|
96
|
+
"""
|
97
|
+
source "http://localhost:26210"
|
98
|
+
|
99
|
+
cookbook 'example_cookbook', path: '../../spec/fixtures/cookbooks/example_cookbook-0.5.0'
|
100
|
+
"""
|
101
|
+
And the Berkshelf API server cache is up to date
|
70
102
|
When I successfully run `berks install`
|
71
103
|
Then the output should contain:
|
72
104
|
"""
|
73
|
-
Using example_cookbook (0.5.0)
|
105
|
+
Using example_cookbook (0.5.0) path: '
|
74
106
|
"""
|
75
|
-
And the exit status should be 0
|
76
107
|
|
77
108
|
Scenario: installing a Berksfile from a remote directory that contains a path location
|
78
109
|
Given I write to "tmp_berks/Berksfile" with:
|
79
110
|
"""
|
111
|
+
source "http://localhost:26210"
|
112
|
+
|
80
113
|
cookbook 'example_cookbook', path: '../../../spec/fixtures/cookbooks/example_cookbook-0.5.0'
|
81
114
|
"""
|
82
115
|
When I successfully run `berks install -b ./tmp_berks/Berksfile`
|
83
116
|
Then the output should contain:
|
84
117
|
"""
|
85
|
-
Using example_cookbook (0.5.0)
|
118
|
+
Using example_cookbook (0.5.0) path: '
|
86
119
|
"""
|
87
|
-
And the exit status should be 0
|
88
120
|
|
89
|
-
Scenario: installing a
|
121
|
+
Scenario: installing a demand from a Git location
|
90
122
|
Given I write to "Berksfile" with:
|
91
123
|
"""
|
124
|
+
source "http://localhost:26210"
|
125
|
+
|
92
126
|
cookbook "berkshelf-cookbook-fixture", git: "git://github.com/RiotGames/berkshelf-cookbook-fixture.git"
|
93
127
|
"""
|
94
128
|
When I successfully run `berks install`
|
95
|
-
Then the cookbook store should have the cookbooks
|
129
|
+
Then the cookbook store should have the git cookbooks:
|
96
130
|
| berkshelf-cookbook-fixture | 1.0.0 | a97b9447cbd41a5fe58eee2026e48ccb503bd3bc |
|
97
131
|
And the output should contain:
|
98
132
|
"""
|
99
|
-
|
133
|
+
Fetching 'berkshelf-cookbook-fixture' from git: 'git://github.com/RiotGames/berkshelf-cookbook-fixture.git' with branch: 'master'
|
134
|
+
building universe...
|
135
|
+
Using berkshelf-cookbook-fixture (1.0.0) git: 'git://github.com/RiotGames/berkshelf-cookbook-fixture.git' with branch: 'master'
|
100
136
|
"""
|
101
|
-
And the exit status should be 0
|
102
137
|
|
103
|
-
Scenario: installing a
|
138
|
+
Scenario: installing a demand from a Git location that has already been installed
|
104
139
|
Given I write to "Berksfile" with:
|
105
140
|
"""
|
141
|
+
source "http://localhost:26210"
|
142
|
+
|
106
143
|
cookbook "berkshelf-cookbook-fixture", git: "git://github.com/RiotGames/berkshelf-cookbook-fixture.git"
|
107
144
|
"""
|
108
|
-
And the cookbook store has the cookbooks
|
145
|
+
And the cookbook store has the git cookbooks:
|
109
146
|
| berkshelf-cookbook-fixture | 1.0.0 | a97b9447cbd41a5fe58eee2026e48ccb503bd3bc |
|
110
|
-
And I successfully run `berks install`
|
111
147
|
When I successfully run `berks install`
|
112
|
-
Then the
|
148
|
+
Then the output should contain:
|
149
|
+
"""
|
150
|
+
Using berkshelf-cookbook-fixture (1.0.0) git: 'git://github.com/RiotGames/berkshelf-cookbook-fixture.git' with branch: 'master'
|
151
|
+
"""
|
113
152
|
|
114
153
|
Scenario: installing a Berksfile that contains a Git location with a rel
|
115
154
|
Given I write to "Berksfile" with:
|
116
155
|
"""
|
156
|
+
source "http://localhost:26210"
|
157
|
+
|
117
158
|
cookbook "berkshelf-cookbook-fixture", github: 'RiotGames/berkshelf-cookbook-fixture', branch: 'rel', rel: 'cookbooks/berkshelf-cookbook-fixture'
|
118
159
|
"""
|
119
160
|
When I successfully run `berks install`
|
120
|
-
Then the cookbook store should have the cookbooks
|
161
|
+
Then the cookbook store should have the git cookbooks:
|
121
162
|
| berkshelf-cookbook-fixture | 1.0.0 | 93f5768b7d14df45e10d16c8bf6fe98ba3ff809a |
|
122
163
|
And the output should contain:
|
123
164
|
"""
|
124
|
-
|
165
|
+
Fetching 'berkshelf-cookbook-fixture' from github: 'RiotGames/berkshelf-cookbook-fixture' with branch: 'rel' over protocol: 'git'
|
166
|
+
building universe...
|
167
|
+
Using berkshelf-cookbook-fixture (1.0.0) github: 'RiotGames/berkshelf-cookbook-fixture' with branch: 'rel' over protocol: 'git'
|
125
168
|
"""
|
126
|
-
And the exit status should be 0
|
127
|
-
|
128
|
-
Scenario: installing a Berksfile that contains a Git location with a rel that has already been downloaded
|
129
|
-
Given I write to "Berksfile" with:
|
130
|
-
"""
|
131
|
-
site :opscode
|
132
|
-
cookbook 'berkshelf-cookbook-fixture', github: 'RiotGames/berkshelf-cookbook-fixture', branch: 'rel', rel: 'cookbooks/berkshelf-cookbook-fixture'
|
133
|
-
"""
|
134
|
-
And the cookbook store has the cookbooks installed by git:
|
135
|
-
| berkshelf-cookbook-fixture | 1.0.0 | 93f5768b7d14df45e10d16c8bf6fe98ba3ff809a |
|
136
|
-
And I successfully run `berks install`
|
137
|
-
When I run `berks install`
|
138
|
-
Then the output should contain:
|
139
|
-
"""
|
140
|
-
Installing berkshelf-cookbook-fixture (1.0.0)
|
141
|
-
"""
|
142
|
-
And the exit status should be 0
|
143
169
|
|
144
170
|
Scenario: installing a Berksfile that contains a Git location with a tag
|
145
171
|
Given I write to "Berksfile" with:
|
146
172
|
"""
|
173
|
+
source "http://localhost:26210"
|
174
|
+
|
147
175
|
cookbook "berkshelf-cookbook-fixture", git: "git://github.com/RiotGames/berkshelf-cookbook-fixture.git", tag: "v0.2.0"
|
148
176
|
"""
|
149
177
|
When I successfully run `berks install`
|
150
|
-
Then the cookbook store should have the cookbooks
|
178
|
+
Then the cookbook store should have the git cookbooks:
|
151
179
|
| berkshelf-cookbook-fixture | 0.2.0 | 70a527e17d91f01f031204562460ad1c17f972ee |
|
152
180
|
And the output should contain:
|
153
181
|
"""
|
154
|
-
|
182
|
+
Fetching 'berkshelf-cookbook-fixture' from git: 'git://github.com/RiotGames/berkshelf-cookbook-fixture.git' with branch: 'v0.2.0'
|
183
|
+
building universe...
|
184
|
+
Using berkshelf-cookbook-fixture (0.2.0) git: 'git://github.com/RiotGames/berkshelf-cookbook-fixture.git' with branch: 'v0.2.0' at ref: '70a527e17d91f01f031204562460ad1c17f972ee'
|
155
185
|
"""
|
156
|
-
And the exit status should be 0
|
157
186
|
|
158
187
|
Scenario: installing a Berksfile that contains a GitHub location
|
159
188
|
Given I write to "Berksfile" with:
|
160
189
|
"""
|
161
|
-
|
162
|
-
"""
|
163
|
-
When I successfully run `berks install`
|
164
|
-
Then the cookbook store should have the cookbooks installed by git:
|
165
|
-
| berkshelf-cookbook-fixture | 0.2.0 | 70a527e17d91f01f031204562460ad1c17f972ee |
|
166
|
-
And the output should contain:
|
167
|
-
"""
|
168
|
-
Installing berkshelf-cookbook-fixture (0.2.0) from github: 'RiotGames/berkshelf-cookbook-fixture' with branch: 'v0.2.0'
|
169
|
-
"""
|
170
|
-
And the exit status should be 0
|
190
|
+
source "http://localhost:26210"
|
171
191
|
|
172
|
-
Scenario: installing a Berksfile that contains a Github location and the default protocol
|
173
|
-
Given I write to "Berksfile" with:
|
174
|
-
"""
|
175
192
|
cookbook "berkshelf-cookbook-fixture", github: "RiotGames/berkshelf-cookbook-fixture", tag: "v0.2.0"
|
176
193
|
"""
|
177
194
|
When I successfully run `berks install`
|
178
|
-
Then the cookbook store should have the cookbooks
|
195
|
+
Then the cookbook store should have the git cookbooks:
|
179
196
|
| berkshelf-cookbook-fixture | 0.2.0 | 70a527e17d91f01f031204562460ad1c17f972ee |
|
180
197
|
And the output should contain:
|
181
198
|
"""
|
182
|
-
|
199
|
+
Fetching 'berkshelf-cookbook-fixture' from github: 'RiotGames/berkshelf-cookbook-fixture' with branch: 'v0.2.0' over protocol: 'git'
|
200
|
+
building universe...
|
201
|
+
Using berkshelf-cookbook-fixture (0.2.0) github: 'RiotGames/berkshelf-cookbook-fixture' with branch: 'v0.2.0' over protocol: 'git'
|
183
202
|
"""
|
184
|
-
And the exit status should be 0
|
185
203
|
|
186
204
|
Scenario Outline: installing a Berksfile that contains a Github location and specific protocol
|
187
205
|
Given I write to "Berksfile" with:
|
188
206
|
"""
|
207
|
+
source "http://localhost:26210"
|
208
|
+
|
189
209
|
cookbook "berkshelf-cookbook-fixture", github: "RiotGames/berkshelf-cookbook-fixture", tag: "v1.0.0", protocol: "<protocol>"
|
190
210
|
"""
|
191
211
|
When I successfully run `berks install`
|
192
|
-
Then the cookbook store should have the cookbooks
|
212
|
+
Then the cookbook store should have the git cookbooks:
|
193
213
|
| berkshelf-cookbook-fixture | 1.0.0 | b4f968c9001ad8de30f564a2107fab9cfa91f771 |
|
194
214
|
And the output should contain:
|
195
215
|
"""
|
196
|
-
|
216
|
+
Fetching 'berkshelf-cookbook-fixture' from github: 'RiotGames/berkshelf-cookbook-fixture' with branch: 'v1.0.0' over protocol: '<protocol>'
|
217
|
+
building universe...
|
218
|
+
Using berkshelf-cookbook-fixture (1.0.0) github: 'RiotGames/berkshelf-cookbook-fixture' with branch: 'v1.0.0' over protocol: '<protocol>'
|
197
219
|
"""
|
198
|
-
And the exit status should be 0
|
199
220
|
|
200
221
|
Examples:
|
201
222
|
| protocol |
|
202
|
-
# | ssh | # GitHub over ssh requires push authorization. Nonpushers will get a test failure here.
|
203
223
|
| git |
|
204
224
|
| https |
|
205
225
|
|
206
226
|
Scenario: installing a Berksfile that contains a Github location and an unsupported protocol
|
207
227
|
Given I write to "Berksfile" with:
|
208
228
|
"""
|
229
|
+
source "http://localhost:26210"
|
230
|
+
|
209
231
|
cookbook "berkshelf-cookbook-fixture", github: "RiotGames/berkshelf-cookbook-fixture", tag: "v0.2.0", protocol: "somethingabsurd"
|
210
232
|
"""
|
211
233
|
When I run `berks install`
|
@@ -213,76 +235,65 @@ Feature: install cookbooks from a Berksfile
|
|
213
235
|
"""
|
214
236
|
'somethingabsurd' is not supported for the 'github' location key - please use 'git' instead
|
215
237
|
"""
|
216
|
-
And the exit status should be
|
217
|
-
|
218
|
-
Scenario: installing a Berksfile that contains an explicit site location
|
219
|
-
Given I write to "Berksfile" with:
|
220
|
-
"""
|
221
|
-
cookbook 'berkshelf-cookbook-fixture', '1.0.0', site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
|
222
|
-
"""
|
223
|
-
When I successfully run `berks install`
|
224
|
-
Then the cookbook store should have the cookbooks:
|
225
|
-
| berkshelf-cookbook-fixture | 1.0.0 |
|
226
|
-
And the output should contain:
|
227
|
-
"""
|
228
|
-
Installing berkshelf-cookbook-fixture (1.0.0) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks'
|
229
|
-
"""
|
230
|
-
And the exit status should be 0
|
238
|
+
And the exit status should be "InvalidGitURI"
|
231
239
|
|
232
240
|
Scenario: running install when current project is a cookbook and the 'metadata' is specified
|
233
241
|
Given a cookbook named "sparkle_motion"
|
234
242
|
And the cookbook "sparkle_motion" has the file "Berksfile" with:
|
235
243
|
"""
|
244
|
+
source "http://localhost:26210"
|
245
|
+
|
236
246
|
metadata
|
237
247
|
"""
|
238
248
|
When I cd to "sparkle_motion"
|
239
249
|
And I successfully run `berks install`
|
240
|
-
Then the
|
250
|
+
Then the output should contain:
|
241
251
|
"""
|
242
|
-
Using sparkle_motion (0.0.0)
|
243
|
-
|
252
|
+
Using sparkle_motion (0.0.0)
|
244
253
|
"""
|
245
|
-
And the exit status should be 0
|
246
254
|
|
247
255
|
Scenario: running install when current project is a cookbook and the 'metadata' is specified with a path
|
248
256
|
Given a cookbook named "fake"
|
249
257
|
And I write to "Berksfile" with:
|
250
258
|
"""
|
259
|
+
source "http://localhost:26210"
|
260
|
+
|
251
261
|
metadata path: './fake'
|
252
262
|
"""
|
253
263
|
When I successfully run `berks install`
|
254
|
-
Then the
|
264
|
+
Then the output should contain:
|
255
265
|
"""
|
256
|
-
Using fake (0.0.0)
|
257
|
-
|
266
|
+
Using fake (0.0.0)
|
258
267
|
"""
|
259
|
-
And the exit status should be 0
|
260
268
|
|
261
269
|
Scenario: running install with no Berksfile or Berksfile.lock
|
262
|
-
Given I do not have a Berksfile
|
263
|
-
And I do not have a Berksfile.lock
|
264
270
|
When I run `berks install`
|
265
271
|
Then the output should contain:
|
266
272
|
"""
|
267
|
-
No Berksfile or Berksfile.lock found at
|
273
|
+
No Berksfile or Berksfile.lock found at:
|
268
274
|
"""
|
269
|
-
And the
|
275
|
+
And the exit status should be "BerksfileNotFound"
|
270
276
|
|
271
277
|
Scenario: running install when the Cookbook is not found on the remote site
|
272
278
|
Given I write to "Berksfile" with:
|
273
279
|
"""
|
280
|
+
source "http://localhost:26210"
|
281
|
+
|
274
282
|
cookbook 'doesntexist'
|
283
|
+
cookbook 'other-failure'
|
275
284
|
"""
|
276
285
|
And I run `berks install`
|
277
286
|
Then the output should contain:
|
278
287
|
"""
|
279
|
-
|
288
|
+
Unable to find a solution for demands: doesntexist (>= 0.0.0), other-failure (>= 0.0.0)
|
280
289
|
"""
|
281
|
-
And the
|
290
|
+
And the exit status should be "NoSolutionError"
|
282
291
|
|
283
292
|
Scenario: installing a Berksfile that has a Git location source with an invalid Git URI
|
284
293
|
Given I write to "Berksfile" with:
|
285
294
|
"""
|
295
|
+
source "http://localhost:26210"
|
296
|
+
|
286
297
|
cookbook 'nginx', git: '/something/on/disk'
|
287
298
|
"""
|
288
299
|
When I run `berks install`
|
@@ -290,75 +301,43 @@ Feature: install cookbooks from a Berksfile
|
|
290
301
|
"""
|
291
302
|
'/something/on/disk' is not a valid Git URI
|
292
303
|
"""
|
293
|
-
And the
|
304
|
+
And the exit status should be "InvalidGitURI"
|
294
305
|
|
295
306
|
Scenario: installing when there are sources with duplicate names defined in the same group
|
296
307
|
Given I write to "Berksfile" with:
|
297
308
|
"""
|
309
|
+
source "http://localhost:26210"
|
310
|
+
|
298
311
|
cookbook 'berkshelf-cookbook-fixture'
|
299
312
|
cookbook 'berkshelf-cookbook-fixture'
|
300
313
|
"""
|
301
314
|
When I run `berks install`
|
302
315
|
Then the output should contain:
|
303
316
|
"""
|
304
|
-
Berksfile contains multiple
|
317
|
+
Berksfile contains multiple entries named 'berkshelf-cookbook-fixture'. Use only one, or put them in different groups.
|
305
318
|
"""
|
306
|
-
And the
|
319
|
+
And the exit status should be "DuplicateDependencyDefined"
|
307
320
|
|
308
|
-
Scenario:
|
309
|
-
Given
|
310
|
-
And I write to "Berksfile" with:
|
311
|
-
"""
|
312
|
-
site :opscode
|
313
|
-
cookbook 'fake', path: './fake'
|
314
|
-
"""
|
315
|
-
And the cookbook "fake" has the file "metadata.rb" with:
|
316
|
-
"""
|
317
|
-
name 'fake'
|
318
|
-
version '1.0.0'
|
319
|
-
|
320
|
-
depends 'berkshelf-cookbook-fixture', '~> 0.2.0'
|
321
|
-
"""
|
322
|
-
And the cookbook store has the cookbooks:
|
323
|
-
| berkshelf-cookbook-fixture | 0.2.0 |
|
324
|
-
And I successfully run `berks install`
|
325
|
-
And the cookbook "fake" has the file "metadata.rb" with:
|
321
|
+
Scenario: when a Git demand points to a branch that does not satisfy the version constraint
|
322
|
+
Given I write to "Berksfile" with:
|
326
323
|
"""
|
327
|
-
|
328
|
-
version '1.0.0'
|
324
|
+
source "http://localhost:26210"
|
329
325
|
|
330
|
-
|
326
|
+
cookbook "berkshelf-cookbook-fixture", "1.0.0", git: "git://github.com/RiotGames/berkshelf-cookbook-fixture.git", tag: "v0.2.0"
|
331
327
|
"""
|
332
|
-
When I
|
328
|
+
When I run `berks install`
|
333
329
|
Then the output should contain:
|
334
330
|
"""
|
335
|
-
|
331
|
+
Fetching 'berkshelf-cookbook-fixture' from git: 'git://github.com/RiotGames/berkshelf-cookbook-fixture.git' with branch: 'v0.2.0'
|
332
|
+
The cookbook downloaded for berkshelf-cookbook-fixture (= 1.0.0) did not satisfy the constraint.
|
336
333
|
"""
|
337
|
-
And the
|
338
|
-
| berkshelf-cookbook-fixture | 1.0.0 |
|
339
|
-
And the exit status should be 0
|
334
|
+
And the exit status should be "CookbookValidationFailure"
|
340
335
|
|
341
|
-
Scenario:
|
336
|
+
Scenario: when a Git demand is defined and a cookbook of the same name and version is already in the cookbook store
|
342
337
|
Given I write to "Berksfile" with:
|
343
338
|
"""
|
344
|
-
|
345
|
-
"""
|
346
|
-
When I run `berks install`
|
347
|
-
Then the output should match multiline:
|
348
|
-
"""
|
349
|
-
The cookbook downloaded from git: 'git://github\.com/RiotGames/berkshelf-cookbook-fixture\.git' with branch: 'v0\.2\.0' at ref: '.+':
|
350
|
-
berkshelf-cookbook-fixture \(.+\)
|
339
|
+
source "http://localhost:26210"
|
351
340
|
|
352
|
-
does not satisfy the version constraint:
|
353
|
-
berkshelf-cookbook-fixture \(= 1.0.0\)
|
354
|
-
|
355
|
-
This occurs when the Chef Server has a cookbook with a missing/mis-matched version number in its `metadata.rb`
|
356
|
-
"""
|
357
|
-
And the CLI should exit with the status code for error "CookbookValidationFailure"
|
358
|
-
|
359
|
-
Scenario: when a git location source is defined and a cookbook of the same name is already cached in the cookbook store
|
360
|
-
Given I write to "Berksfile" with:
|
361
|
-
"""
|
362
341
|
cookbook "berkshelf-cookbook-fixture", git: "git://github.com/RiotGames/berkshelf-cookbook-fixture.git", tag: "v1.0.0"
|
363
342
|
"""
|
364
343
|
And the cookbook store has the cookbooks:
|
@@ -366,87 +345,37 @@ Feature: install cookbooks from a Berksfile
|
|
366
345
|
When I successfully run `berks install`
|
367
346
|
Then the output should contain:
|
368
347
|
"""
|
369
|
-
|
348
|
+
Fetching 'berkshelf-cookbook-fixture' from git: 'git://github.com/RiotGames/berkshelf-cookbook-fixture.git' with branch: 'v1.0.0'
|
349
|
+
building universe...
|
350
|
+
Using berkshelf-cookbook-fixture (1.0.0) git: 'git://github.com/RiotGames/berkshelf-cookbook-fixture.git' with branch: 'v1.0.0' at ref: 'b4f968c9001ad8de30f564a2107fab9cfa91f771'
|
370
351
|
"""
|
371
|
-
And the exit status should be 0
|
372
352
|
|
373
353
|
Scenario: with a cookbook definition containing an invalid option
|
374
354
|
Given I write to "Berksfile" with:
|
375
355
|
"""
|
356
|
+
source "http://localhost:26210"
|
357
|
+
|
376
358
|
cookbook "berkshelf-cookbook-fixture", whatisthis: "I don't even know", anotherwat: "isthat"
|
377
359
|
"""
|
378
360
|
When I run `berks install`
|
379
361
|
Then the output should contain:
|
380
362
|
"""
|
381
|
-
Invalid options for
|
382
|
-
"""
|
383
|
-
And the CLI should exit with the status code for error "InternalError"
|
384
|
-
|
385
|
-
@chef_server
|
386
|
-
Scenario: with a cookbook definition containing a chef_api source location
|
387
|
-
Given I write to "Berksfile" with:
|
388
|
-
"""
|
389
|
-
cookbook 'berkshelf-cookbook-fixture', '1.0.0', chef_api: :config
|
390
|
-
"""
|
391
|
-
And the Chef server has cookbooks:
|
392
|
-
| berkshelf-cookbook-fixture | 1.0.0 |
|
393
|
-
When I successfully run `berks install`
|
394
|
-
Then the output should contain:
|
395
|
-
"""
|
396
|
-
Installing berkshelf-cookbook-fixture (1.0.0) from chef_api:
|
397
|
-
"""
|
398
|
-
And the cookbook store should have the cookbooks:
|
399
|
-
| berkshelf-cookbook-fixture | 1.0.0 |
|
400
|
-
And the exit status should be 0
|
401
|
-
|
402
|
-
Scenario: when the :site is not defined
|
403
|
-
Given I write to "Berksfile" with:
|
404
|
-
"""
|
405
|
-
cookbook 'berkshelf-cookbook-fixture', '1.0.0', site: nil
|
406
|
-
"""
|
407
|
-
When I successfully run `berks install`
|
408
|
-
Then the output should contain:
|
409
|
-
"""
|
410
|
-
Installing berkshelf-cookbook-fixture (1.0.0) from site:
|
411
|
-
"""
|
412
|
-
And the cookbook store should have the cookbooks:
|
413
|
-
| berkshelf-cookbook-fixture | 1.0.0 |
|
414
|
-
And the exit status should be 0
|
415
|
-
|
416
|
-
Scenario: with a chef_api source location specifying :config when a Berkshelf config is not found at the given path
|
417
|
-
Given I write to "Berksfile" with:
|
418
|
-
"""
|
419
|
-
cookbook 'berkshelf-cookbook-fixture', chef_api: :config
|
420
|
-
"""
|
421
|
-
When I run the install command with flags:
|
422
|
-
| -c /tmp/notthere.lol |
|
423
|
-
Then the output should contain:
|
424
|
-
"""
|
425
|
-
No Berkshelf config file found at: '/tmp/notthere.lol'!
|
363
|
+
Invalid options for dependency: 'whatisthis', 'anotherwat'.
|
426
364
|
"""
|
427
|
-
And the
|
365
|
+
And the exit status should be "InternalError"
|
428
366
|
|
429
367
|
Scenario: with a git error during download
|
430
368
|
Given I write to "Berksfile" with:
|
431
369
|
"""
|
370
|
+
source "http://localhost:26210"
|
371
|
+
|
432
372
|
cookbook 'berkshelf-cookbook-fixture', '1.0.0'
|
433
373
|
cookbook "doesntexist", git: "git://github.com/asdjhfkljashflkjashfakljsf"
|
434
374
|
"""
|
435
375
|
When I run `berks install`
|
436
376
|
Then the output should contain:
|
437
377
|
"""
|
438
|
-
|
439
|
-
|
440
|
-
And the CLI should exit with the status code for error "CookbookNotFound"
|
441
|
-
|
442
|
-
Scenario: invalid site symbol
|
443
|
-
Given I write to "Berksfile" with:
|
444
|
-
"""
|
445
|
-
site :somethingabsurd
|
446
|
-
cookbook 'berkshelf-cookbook-fixture'
|
447
|
-
"""
|
448
|
-
When I run `berks install`
|
449
|
-
Then the output should contain:
|
450
|
-
"""
|
451
|
-
Unknown site shortname 'somethingabsurd' - supported shortnames are:
|
378
|
+
Fetching 'doesntexist' from git: 'git://github.com/asdjhfkljashflkjashfakljsf' with branch: 'master'
|
379
|
+
An error occurred during Git execution:
|
452
380
|
"""
|
381
|
+
And the exit status should be "GitError"
|