puppet-library 0.9.1 → 0.10.0

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.
Files changed (37) hide show
  1. checksums.yaml +7 -7
  2. data/CHANGELOG.yml +1 -0
  3. data/README.md +9 -4
  4. data/Rakefile +44 -23
  5. data/TODO.yml +3 -4
  6. data/config.ru +28 -3
  7. data/lib/puppet_library/forge/cache.rb +19 -0
  8. data/lib/puppet_library/forge/directory.rb +16 -0
  9. data/lib/puppet_library/forge/git_repository.rb +57 -49
  10. data/lib/puppet_library/forge/proxy.rb +18 -4
  11. data/lib/puppet_library/forge/source.rb +10 -0
  12. data/lib/puppet_library/puppet_library.rb +1 -1
  13. data/lib/puppet_library/server.rb +12 -3
  14. data/lib/puppet_library/util/git.rb +103 -0
  15. data/lib/puppet_library/util/patches.rb +104 -0
  16. data/lib/puppet_library/util/temp_dir.rb +42 -0
  17. data/lib/puppet_library/util.rb +4 -70
  18. data/lib/puppet_library/version.rb +1 -1
  19. data/spec/archive/archive_reader_spec.rb +9 -2
  20. data/spec/archive/archiver_spec.rb +4 -0
  21. data/spec/forge/cache_spec.rb +4 -0
  22. data/spec/forge/directory_spec.rb +4 -0
  23. data/spec/forge/git_repository_spec.rb +5 -2
  24. data/spec/forge/source_spec.rb +4 -0
  25. data/spec/integration_test_helper.rb +42 -0
  26. data/spec/util/git_spec.rb +143 -0
  27. data/spec/util/patches_spec.rb +86 -0
  28. data/spec/util/temp_dir_spec.rb +35 -0
  29. data/test/directory_forge_integration_test.rb +96 -0
  30. data/test/offline_git_repo_forge_integration_test.rb +122 -0
  31. data/test/offline_proxy_forge_integration_test.rb +126 -0
  32. data/test/online_git_repo_forge_integration_test.rb +89 -0
  33. data/test/online_proxy_forge_integration_test.rb +93 -0
  34. data/test/source_forge_integration_test.rb +96 -0
  35. metadata +292 -118
  36. data/spec/util_spec.rb +0 -43
  37. data/test/librarian_puppet_integration_test.rb +0 -349
@@ -1,349 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- # Puppet Library
3
- # Copyright (C) 2014 drrb
4
- #
5
- # This program is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation, either version 3 of the License, or
8
- # (at your option) any later version.
9
- #
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License
16
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
-
18
- require 'spec_helper'
19
- require 'open-uri'
20
-
21
-
22
- RSpec::Matchers.define :be_cached do
23
- match do |mod_file|
24
- ! Dir[File.join(cache_dir, mod_file)].empty?
25
- end
26
- end
27
-
28
- RSpec::Matchers.define :be_installed do
29
- match do |mod_name|
30
- File.directory?(File.join(project_dir, "modules", mod_name))
31
- end
32
- end
33
-
34
- def write_puppetfile(content)
35
- File.open("#{project_dir}/Puppetfile", "w") do |puppetfile|
36
- puppetfile.puts content
37
- end
38
- end
39
-
40
- module PuppetLibrary
41
- describe "directory forge" do
42
- include ModuleSpecHelper
43
-
44
- let(:module_dir) { Tempdir.create("module_dir") }
45
- let(:project_dir) { Tempdir.create("project_dir") }
46
- let(:start_dir) { pwd }
47
- let(:disk_forge) { Forge::Directory.new(module_dir) }
48
- let(:disk_server) do
49
- Server.set_up do |server|
50
- server.forge disk_forge
51
- end
52
- end
53
- let(:disk_rack_server) do
54
- Rack::Server.new(
55
- :app => disk_server,
56
- :Host => "localhost",
57
- :Port => 9004,
58
- :server => "webrick"
59
- )
60
- end
61
- let(:disk_server_runner) do
62
- Thread.new do
63
- disk_rack_server.start
64
- end
65
- end
66
-
67
- before do
68
- # Initialize to catch wiring errors
69
- disk_rack_server
70
-
71
- # Start the servers
72
- disk_server_runner
73
- start_dir
74
- cd project_dir
75
- end
76
-
77
- after do
78
- rm_rf module_dir
79
- rm_rf project_dir
80
- cd start_dir
81
- end
82
-
83
- it "queries, downloads and searches from a directory" do
84
- add_module("puppetlabs", "apache", "1.0.0") do |metadata|
85
- metadata["dependencies"] << { "name" => "puppetlabs/concat", "version_requirement" => ">= 2.0.0" }
86
- metadata["dependencies"] << { "name" => "puppetlabs/stdlib", "version_requirement" => "~> 3.0.0" }
87
- end
88
- add_module("puppetlabs", "concat", "2.0.0")
89
- add_module("puppetlabs", "stdlib", "3.0.0")
90
-
91
- write_puppetfile <<-EOF
92
- forge 'http://localhost:9004'
93
- mod 'puppetlabs/apache'
94
- EOF
95
-
96
- # Install modules
97
- system "librarian-puppet install" or fail "call to puppet-library failed"
98
- expect("apache").to be_installed
99
- expect("concat").to be_installed
100
- expect("stdlib").to be_installed
101
-
102
- # Search
103
- search_results = JSON.parse(open("http://localhost:9004/modules.json").read)
104
- found_modules = Hash[search_results.map do |result|
105
- [ result["full_name"], result["version"] ]
106
- end]
107
- expect(found_modules["puppetlabs/apache"]).to eq "1.0.0"
108
- expect(found_modules["puppetlabs/concat"]).to eq "2.0.0"
109
- expect(found_modules["puppetlabs/stdlib"]).to eq "3.0.0"
110
- end
111
- end
112
-
113
- describe "source forge" do
114
- include ModuleSpecHelper
115
-
116
- let(:module_dir) { Tempdir.create("module_dir") }
117
- let(:project_dir) { Tempdir.create("project_dir") }
118
- let(:start_dir) { pwd }
119
- let(:source_forge) { Forge::Source.new(module_dir) }
120
- let(:source_server) do
121
- Server.set_up do |server|
122
- server.forge source_forge
123
- end
124
- end
125
- let(:source_rack_server) do
126
- Rack::Server.new(
127
- :app => source_server,
128
- :Host => "localhost",
129
- :Port => 9005,
130
- :server => "webrick"
131
- )
132
- end
133
- let(:source_server_runner) do
134
- Thread.new do
135
- source_rack_server.start
136
- end
137
- end
138
-
139
- before do
140
- # Initialize to catch wiring errors
141
- source_rack_server
142
-
143
- # Start the servers
144
- source_server_runner
145
- start_dir
146
- cd project_dir
147
- end
148
-
149
- after do
150
- rm_rf module_dir
151
- rm_rf project_dir
152
- cd start_dir
153
- end
154
-
155
- it "queries, downloads and searches from a directory" do
156
- add_file "Modulefile", <<-EOF
157
- name 'puppetlabs-ficticious'
158
- version '0.2.0'
159
- author 'puppetlabs'
160
- description 'Fake module'
161
- EOF
162
-
163
- write_puppetfile <<-EOF
164
- forge 'http://localhost:9005'
165
- mod 'puppetlabs/ficticious'
166
- EOF
167
-
168
- # Install modules
169
- system "librarian-puppet install" or fail "call to puppet-library failed"
170
- expect("ficticious").to be_installed
171
-
172
- # Search
173
- search_results = JSON.parse(open("http://localhost:9005/modules.json").read)
174
- found_modules = Hash[search_results.map do |result|
175
- [ result["full_name"], result["version"] ]
176
- end]
177
- expect(found_modules["puppetlabs/ficticious"]).to eq "0.2.0"
178
-
179
- # Download
180
- archive = open("http://localhost:9005/modules/puppetlabs-ficticious-0.2.0.tar.gz")
181
- expect(archive).to be_tgz_with /Modulefile/, /puppetlabs-ficticious/
182
- expect(archive).to be_tgz_with /metadata.json/, /puppetlabs-ficticious/
183
- end
184
- end
185
-
186
- describe "offline proxy", :no_1_8 => true do
187
- include ModuleSpecHelper
188
-
189
- let(:module_dir) { Tempdir.create("module_dir") }
190
- let(:project_dir) { Tempdir.create("project_dir") }
191
- let(:cache_dir) { Tempdir.create("cache_dir") }
192
- let(:start_dir) { pwd }
193
- let(:disk_forge) { Forge::Directory.new(module_dir) }
194
- let(:disk_server) do
195
- Server.set_up do |server|
196
- server.forge disk_forge
197
- end
198
- end
199
- let(:disk_rack_server) do
200
- Rack::Server.new(
201
- :app => disk_server,
202
- :Host => "localhost",
203
- :Port => 9000,
204
- :server => "webrick"
205
- )
206
- end
207
- let(:disk_server_runner) do
208
- Thread.new do
209
- disk_rack_server.start
210
- end
211
- end
212
- let(:proxy_forge) { Forge::Cache.new("http://localhost:9000", cache_dir) }
213
- let(:proxy_server) do
214
- Server.set_up do |server|
215
- server.forge proxy_forge
216
- end
217
- end
218
- let(:proxy_rack_server) do
219
- Rack::Server.new(
220
- :app => proxy_server,
221
- :Host => "localhost",
222
- :Port => 9001,
223
- :server => "webrick"
224
- )
225
- end
226
- let(:proxy_server_runner) do
227
- Thread.new do
228
- proxy_rack_server.start
229
- end
230
- end
231
-
232
- before do
233
- # Initialize to catch wiring errors
234
- disk_rack_server
235
- proxy_rack_server
236
-
237
- # Start the servers
238
- disk_server_runner
239
- proxy_server_runner
240
- start_dir
241
- cd project_dir
242
- end
243
-
244
- after do
245
- rm_rf module_dir
246
- rm_rf project_dir
247
- rm_rf cache_dir
248
- cd start_dir
249
- end
250
-
251
- it "queries, downloads and searches through a proxy to a directory" do
252
- add_module("puppetlabs", "apache", "1.0.0") do |metadata|
253
- metadata["dependencies"] << { "name" => "puppetlabs/concat", "version_requirement" => ">= 2.0.0" }
254
- metadata["dependencies"] << { "name" => "puppetlabs/stdlib", "version_requirement" => "~> 3.0.0" }
255
- end
256
- add_module("puppetlabs", "concat", "2.0.0")
257
- add_module("puppetlabs", "stdlib", "3.0.0")
258
-
259
- write_puppetfile <<-EOF
260
- forge 'http://localhost:9001'
261
- mod 'puppetlabs/apache'
262
- EOF
263
-
264
- # Install modules through the proxy
265
- system "librarian-puppet install" or fail "call to puppet-library failed"
266
- expect("apache").to be_installed
267
- expect("concat").to be_installed
268
- expect("stdlib").to be_installed
269
-
270
- expect("puppetlabs-apache-1.0.0.tar.gz").to be_cached
271
- expect("puppetlabs-concat-2.0.0.tar.gz").to be_cached
272
- expect("puppetlabs-stdlib-3.0.0.tar.gz").to be_cached
273
-
274
- # Search through the proxy
275
- search_results = JSON.parse(open("http://localhost:9001/modules.json").read)
276
- found_modules = Hash[search_results.map do |result|
277
- [ result["full_name"], result["version"] ]
278
- end]
279
- expect(found_modules["puppetlabs/apache"]).to eq "1.0.0"
280
- expect(found_modules["puppetlabs/concat"]).to eq "2.0.0"
281
- expect(found_modules["puppetlabs/stdlib"]).to eq "3.0.0"
282
- end
283
- end
284
-
285
- describe "online proxy", :online => true do
286
- include ModuleSpecHelper
287
-
288
- let(:project_dir) { Tempdir.create("project_dir") }
289
- let(:module_dir) { Tempdir.create("module_dir") }
290
- let(:cache_dir) { Tempdir.create("cache_dir") }
291
- let(:start_dir) { pwd }
292
- let(:proxy_server) do
293
- Server.set_up do |server|
294
- server.forge Forge::Directory.new(module_dir)
295
- server.forge Forge::Cache.new("http://forge.puppetlabs.com", cache_dir)
296
- end
297
- end
298
- let(:proxy_rack_server) do
299
- Rack::Server.new(
300
- :app => proxy_server,
301
- :Host => "localhost",
302
- :Port => 9002,
303
- :server => "webrick"
304
- )
305
- end
306
- let(:proxy_server_runner) do
307
- Thread.new do
308
- proxy_rack_server.start
309
- end
310
- end
311
-
312
- before do
313
- # Initialize to catch wiring errors
314
- proxy_rack_server
315
-
316
- # Start the server
317
- proxy_server_runner
318
- start_dir
319
- cd project_dir
320
- end
321
-
322
- after do
323
- rm_rf module_dir
324
- rm_rf project_dir
325
- rm_rf cache_dir
326
- cd start_dir
327
- end
328
-
329
- it "queries, downloads and searches through a proxy to a directory" do
330
- add_module("drrb", "tomcat", "1.0.0") do |metadata|
331
- metadata["dependencies"] << { "name" => "puppetlabs/apache", "version_requirement" => "0.9.0" }
332
- end
333
-
334
- write_puppetfile <<-EOF
335
- forge 'http://localhost:9002'
336
- mod 'drrb/tomcat'
337
- EOF
338
-
339
- # Install modules through the proxy
340
- system "librarian-puppet install" or fail "call to puppet-library failed"
341
- expect("tomcat").to be_installed
342
- expect("apache").to be_installed
343
- expect("concat").to be_installed
344
- expect("stdlib").to be_installed
345
-
346
- expect("puppetlabs-apache-*.tar.gz").to be_cached
347
- end
348
- end
349
- end