berkshelf 2.0.18 → 3.0.0.beta1
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.
- 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"
|