puppet-library 0.9.1 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
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