autoproj 2.0.0.b7 → 2.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +1 -0
  3. data/.gitignore +8 -0
  4. data/.travis.yml +5 -0
  5. data/Gemfile +6 -0
  6. data/README.md +4 -0
  7. data/Rakefile +40 -81
  8. data/autoproj.gemspec +29 -0
  9. data/lib/autoproj/cli/cache.rb +7 -2
  10. data/lib/autoproj/cli/main.rb +46 -25
  11. data/lib/autoproj/cli/main_test.rb +6 -4
  12. data/lib/autoproj/cli/status.rb +2 -2
  13. data/lib/autoproj/configuration.rb +5 -0
  14. data/lib/autoproj/git_server_configuration.rb +117 -0
  15. data/lib/autoproj/osdeps.rb +14 -914
  16. data/lib/autoproj/package_managers/apt_dpkg_manager.rb +70 -0
  17. data/lib/autoproj/package_managers/emerge_manager.rb +14 -0
  18. data/lib/autoproj/package_managers/gem_manager.rb +313 -0
  19. data/lib/autoproj/package_managers/homebrew_manager.rb +44 -0
  20. data/lib/autoproj/package_managers/manager.rb +45 -0
  21. data/lib/autoproj/package_managers/pacman_manager.rb +14 -0
  22. data/lib/autoproj/package_managers/pip_manager.rb +86 -0
  23. data/lib/autoproj/package_managers/pkg_manager.rb +14 -0
  24. data/lib/autoproj/package_managers/port_manager.rb +14 -0
  25. data/lib/autoproj/package_managers/shell_script_manager.rb +207 -0
  26. data/lib/autoproj/package_managers/unknown_os_manager.rb +42 -0
  27. data/lib/autoproj/package_managers/yum_manager.rb +56 -0
  28. data/lib/autoproj/package_managers/zypper_manager.rb +43 -0
  29. data/lib/autoproj/package_manifest.rb +1 -1
  30. data/lib/autoproj/test.rb +13 -14
  31. data/lib/autoproj/variable_expansion.rb +4 -2
  32. data/lib/autoproj/version.rb +1 -1
  33. data/lib/autoproj/workspace.rb +5 -1
  34. data/manifest.xml +20 -0
  35. metadata +73 -87
  36. data/.gemtest +0 -0
  37. data/Manifest.txt +0 -105
  38. data/test/data/empty_manifest.xml +0 -2
  39. data/test/data/full_manifest.xml +0 -19
  40. data/test/data/invalid_manifest.xml +0 -3
  41. data/test/data/os_release.with_complex_version_field +0 -3
  42. data/test/data/os_release.with_duplicate_values +0 -3
  43. data/test/data/os_release.with_missing_optional_fields +0 -2
  44. data/test/data/os_release.with_quoted_and_unquoted_fields +0 -2
  45. data/test/data/test_manifest/autoproj/local_set/local.autobuild +0 -0
  46. data/test/data/test_manifest/autoproj/local_set/source.yml +0 -1
  47. data/test/data/test_manifest/autoproj/manifest +0 -7
  48. data/test/ops/test_configuration.rb +0 -20
  49. data/test/ops/test_snapshot.rb +0 -26
  50. data/test/package_managers/apt-dpkg-status +0 -41
  51. data/test/package_managers/apt-dpkg-status.installed-last +0 -27
  52. data/test/package_managers/apt-dpkg-status.noninstalled-last +0 -12
  53. data/test/package_managers/test_apt_dpkg_manager.rb +0 -41
  54. data/test/package_managers/test_gem.rb +0 -156
  55. data/test/package_managers/test_pip.rb +0 -42
  56. data/test/test_manifest.rb +0 -48
  57. data/test/test_os_dependencies.rb +0 -586
  58. data/test/test_package.rb +0 -30
  59. data/test/test_package_manifest.rb +0 -65
  60. data/test/test_vcs_definition.rb +0 -46
@@ -1,42 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path('../lib', File.dirname(__FILE__))
2
- require 'test/unit'
3
- require 'autoproj'
4
- require 'flexmock/test_unit'
5
-
6
- class TC_OSDependencies_Pip < Test::Unit::TestCase
7
- include Autoproj
8
-
9
- attr_reader :pip_manager
10
-
11
- def setup
12
- Autoproj::OSDependencies.operating_system = [['test', 'debian', 'default'], ['v1.0', 'v1', 'default']]
13
-
14
- @pip_manager = PackageManagers::PipManager.new
15
- Autobuild.programs['pip'] = 'mypip'
16
- super
17
- end
18
-
19
- def teardown
20
- super
21
- Autobuild.programs['pip'] = nil
22
- end
23
-
24
- def test_install_packages
25
- subprocess = flexmock(Autobuild::Subprocess)
26
-
27
- packages = ['pkg0', 'pkg1', 'pkg2']
28
- subprocess.should_receive(:run).
29
- with(any, any, 'mypip', 'install', '--user', 'pkg0', 'pkg1','pkg2').once
30
- pip_manager.install(packages)
31
- end
32
-
33
- def test_install_packaes_disabled_and_not_silent
34
- subprocess = flexmock(Autobuild::Subprocess)
35
-
36
- pip_manager.enabled = false
37
- pip_manager.silent = false
38
- subprocess.should_receive(:run).never
39
- flexmock(STDIN).should_receive(:readline).once.and_return
40
- pip_manager.install([['pkg0']])
41
- end
42
- end
@@ -1,48 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path('../lib', File.dirname(__FILE__))
2
- require 'test/unit'
3
- require 'autoproj'
4
- require 'flexmock/test_unit'
5
- require 'set'
6
-
7
- class TC_Manifest < Test::Unit::TestCase
8
- DATA_DIR = File.expand_path('data', File.dirname(__FILE__))
9
- include Autoproj
10
-
11
- def test_each_package_set
12
- Dir.chdir(File.join(DATA_DIR, 'test_manifest', 'autoproj')) do
13
- manifest = Manifest.load(File.join(DATA_DIR, 'test_manifest', 'autoproj', 'manifest'))
14
- sources = manifest.each_package_set(false).to_set
15
-
16
- test_data = "#{DATA_DIR}/test_manifest"
17
- test_data_name = test_data.gsub '/', '_'
18
-
19
- local_set = sources.find { |pkg_set| pkg_set.name == 'local_set' }
20
- assert local_set
21
- assert_equal "#{test_data}/autoproj/local_set", local_set.raw_local_dir
22
- assert local_set.local?
23
-
24
- remote_set = sources.find { |pkg_set| pkg_set.name == "git:remote2.git branch=next"}
25
- assert remote_set, "available package sets: #{sources.map(&:name)}"
26
- assert_equal "#{test_data}/.remotes/git__home_doudou_dev_rock_master_tools_autoproj_test_data_test_manifest_remote2_git", remote_set.raw_local_dir
27
- end
28
- end
29
-
30
- def test_single_expansion_uses_provided_definitions
31
- flexmock(Autoproj).should_receive(:user_config).never
32
- assert_equal "a_variable=val", Autoproj.single_expansion("a_variable=$CONST", 'CONST' => 'val')
33
- assert_equal "val", Autoproj.single_expansion("$CONST", 'CONST' => 'val')
34
- end
35
-
36
- def test_single_expansion_uses_user_config
37
- flexmock(Autoproj).should_receive(:user_config).with("CONST").and_return("val")
38
- assert_equal "a_variable=val", Autoproj.single_expansion("a_variable=$CONST", Hash.new)
39
- assert_equal "val", Autoproj.single_expansion("$CONST", Hash.new)
40
- end
41
-
42
- def test_single_expansion_handle_quoted_dollar_sign
43
- flexmock(Autoproj).should_receive(:user_config).with("CONST").and_return("val")
44
- assert_equal "a_variable=$CONST", Autoproj.single_expansion("a_variable=\\$CONST", Hash.new)
45
- assert_equal "$CONST", Autoproj.single_expansion("\\$CONST", Hash.new)
46
- end
47
- end
48
-
@@ -1,586 +0,0 @@
1
- $LOAD_PATH.unshift File.expand_path('../lib', File.dirname(__FILE__))
2
- $LOAD_PATH.unshift File.expand_path('../', File.dirname(__FILE__))
3
- require 'test/unit'
4
- require 'autoproj'
5
- require 'flexmock/test_unit'
6
-
7
- require 'test/package_managers/test_gem'
8
-
9
- class TC_OSDependencies < Test::Unit::TestCase
10
- include Autoproj
11
- FOUND_PACKAGES = Autoproj::OSDependencies::FOUND_PACKAGES
12
- FOUND_NONEXISTENT = Autoproj::OSDependencies::FOUND_NONEXISTENT
13
-
14
- def setup
15
- Autoproj::OSDependencies.operating_system = [['test', 'debian', 'default'], ['v1.0', 'v1', 'default']]
16
- end
17
-
18
- def test_supported_operating_system
19
- Autoproj::OSDependencies.operating_system = [['test', 'debian', 'default'], ['v1.0', 'v1', 'default']]
20
- assert(Autoproj::OSDependencies.supported_operating_system?)
21
- Autoproj::OSDependencies.operating_system = [['test', 'default'], ['v1.0', 'v1', 'default']]
22
- assert(!Autoproj::OSDependencies.supported_operating_system?)
23
- end
24
-
25
- def create_osdep(data)
26
- osdeps = OSDependencies.new(data)
27
- # Mock the package handlers
28
- osdeps.os_package_handler = flexmock(PackageManagers::Manager.new(['apt-dpkg']))
29
- osdeps.package_handlers.clear
30
- osdeps.package_handlers['apt-dpkg'] = osdeps.os_package_handler
31
- osdeps.package_handlers['gem'] = flexmock(PackageManagers::Manager.new(['gem']))
32
- osdeps.package_handlers['pip'] = flexmock(PackageManagers::Manager.new(['pip']))
33
- flexmock(osdeps)
34
- end
35
-
36
- def test_resolve_package_calls_specific_formatting
37
- data = { 'pkg' => {
38
- 'test' => {
39
- 'v1.0' => 'pkg1.0 blabla',
40
- 'v1.1' => 'pkg1.1 bloblo',
41
- 'default' => 'pkgdef'
42
- }
43
- } }
44
- osdeps = create_osdep(data)
45
- osdeps.os_package_handler.should_receive(:parse_package_entry).
46
- and_return { |arg| arg.split(" ") }.once
47
-
48
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, [['pkg1.0', 'blabla']]]]
49
- assert_equal expected, osdeps.resolve_package('pkg')
50
- end
51
-
52
- def test_resolve_package_applies_aliases
53
- data = { 'pkg' => {
54
- 'test' => {
55
- 'v1.0' => 'pkg1.0',
56
- 'v1.1' => 'pkg1.1',
57
- 'default' => 'pkgdef'
58
- }
59
- } }
60
- Autoproj::OSDependencies.alias('pkg', 'bla')
61
- osdeps = create_osdep(data)
62
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkg1.0']]]
63
- assert_equal expected, osdeps.resolve_package('bla')
64
- end
65
-
66
- def test_resolve_specific_os_name_and_version_single_package
67
- data = { 'pkg' => {
68
- 'test' => {
69
- 'v1.0' => 'pkg1.0',
70
- 'v1.1' => 'pkg1.1',
71
- 'default' => 'pkgdef'
72
- }
73
- } }
74
- osdeps = create_osdep(data)
75
-
76
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkg1.0']]]
77
- assert_equal expected, osdeps.resolve_package('pkg')
78
- end
79
-
80
- def test_resolve_specific_os_name_and_version_package_list
81
- data = { 'pkg' => {
82
- 'test' => {
83
- 'v1.0' => ['pkg1.0', 'other_pkg'],
84
- 'v1.1' => 'pkg1.1',
85
- 'default' => 'pkgdef'
86
- }
87
- } }
88
- osdeps = create_osdep(data)
89
-
90
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkg1.0', 'other_pkg']]]
91
- assert_equal expected, osdeps.resolve_package('pkg')
92
- end
93
-
94
- def test_resolve_specific_os_name_and_version_ignore
95
- data = { 'pkg' => {
96
- 'test' => {
97
- 'v1.0' => 'ignore',
98
- 'v1.1' => 'pkg1.1',
99
- 'default' => 'pkgdef'
100
- }
101
- } }
102
- osdeps = create_osdep(data)
103
-
104
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, []]]
105
- assert_equal expected, osdeps.resolve_package('pkg')
106
- end
107
-
108
- def test_resolve_specific_os_name_and_version_fallback
109
- data = { 'pkg' =>
110
- { 'test' =>
111
- { 'v1.1' => 'pkg1.1',
112
- 'default' => 'pkgdef'
113
- }
114
- }
115
- }
116
- osdeps = create_osdep(data)
117
-
118
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkgdef']]]
119
- assert_equal expected, osdeps.resolve_package('pkg')
120
- end
121
-
122
- def test_resolve_specific_os_name_and_version_nonexistent
123
- data = { 'pkg' => {
124
- 'test' => {
125
- 'v1.0' => 'nonexistent',
126
- 'v1.1' => 'pkg1.1',
127
- 'default' => 'pkgdef'
128
- }
129
- } }
130
- osdeps = create_osdep(data)
131
-
132
- expected = [[osdeps.os_package_handler, FOUND_NONEXISTENT, []]]
133
- assert_equal expected, osdeps.resolve_package('pkg')
134
- end
135
-
136
- def test_resolve_specific_os_name_and_version_not_found
137
- data = { 'pkg' => {
138
- 'test' => { 'v1.1' => 'pkg1.1', }
139
- } }
140
- osdeps = create_osdep(data)
141
- assert_equal [], osdeps.resolve_package('pkg')
142
- end
143
-
144
- def test_resolve_specific_os_name_single_package
145
- data = { 'pkg' => { 'test' => 'pkg1.0', 'other_test' => 'pkg1.1', 'default' => 'pkgdef' } }
146
- osdeps = create_osdep(data)
147
-
148
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkg1.0']]]
149
- assert_equal expected, osdeps.resolve_package('pkg')
150
- end
151
-
152
- def test_resolve_specific_os_name_package_list
153
- data = { 'pkg' => { 'test' => ['pkg1.0', 'other_pkg'], 'other_test' => 'pkg1.1', 'default' => 'pkgdef' } }
154
- osdeps = create_osdep(data)
155
-
156
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkg1.0', 'other_pkg']]]
157
- assert_equal expected, osdeps.resolve_package('pkg')
158
- end
159
-
160
- def test_resolve_specific_os_name_ignore
161
- data = { 'pkg' => { 'test' => 'ignore', 'other_test' => 'pkg1.1', 'default' => 'pkgdef' } }
162
- osdeps = create_osdep(data)
163
-
164
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, []]]
165
- assert_equal expected, osdeps.resolve_package('pkg')
166
- end
167
-
168
- def test_resolve_specific_os_name_fallback
169
- data = { 'pkg' => { 'other_test' => 'pkg1.1', 'default' => 'pkgdef' } }
170
- osdeps = create_osdep(data)
171
-
172
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkgdef']]]
173
- assert_equal expected, osdeps.resolve_package('pkg')
174
- end
175
-
176
- def test_resolve_specific_os_name_and_version_nonexistent
177
- data = { 'pkg' => { 'test' => 'nonexistent', 'other_test' => 'pkg1.1' } }
178
- osdeps = create_osdep(data)
179
-
180
- expected = [[osdeps.os_package_handler, FOUND_NONEXISTENT, []]]
181
- assert_equal expected, osdeps.resolve_package('pkg')
182
- end
183
-
184
- def test_resolve_specific_os_name_and_version_not_found
185
- data = { 'pkg' => { 'other_test' => 'pkg1.1' } }
186
- osdeps = create_osdep(data)
187
-
188
- assert_equal [], osdeps.resolve_package('pkg')
189
- end
190
-
191
- def test_resolve_os_name_global_and_specific_packages
192
- data = { 'pkg' => [
193
- 'global_pkg1', 'global_pkg2',
194
- { 'test' => 'pkg1.1',
195
- 'other_test' => 'pkg1.1',
196
- 'default' => 'nonexistent'
197
- }
198
- ]}
199
- osdeps = create_osdep(data)
200
-
201
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, ['global_pkg1', 'global_pkg2', 'pkg1.1']]]
202
- assert_equal expected, osdeps.resolve_package('pkg')
203
- end
204
-
205
- def test_resolve_os_name_global_and_specific_does_not_exist
206
- data = { 'pkg' => [
207
- 'global_pkg1', 'global_pkg2',
208
- {
209
- 'other_test' => 'pkg1.1',
210
- }
211
- ]}
212
- osdeps = create_osdep(data)
213
-
214
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, ['global_pkg1', 'global_pkg2']]]
215
- assert_equal expected, osdeps.resolve_package('pkg')
216
- end
217
-
218
- def test_resolve_os_name_global_and_nonexistent
219
- data = { 'pkg' => [
220
- 'global_pkg1', 'global_pkg2',
221
- { 'test' => 'nonexistent',
222
- 'other_test' => 'pkg1.1'
223
- }
224
- ]}
225
- osdeps = create_osdep(data)
226
-
227
- expected = [[osdeps.os_package_handler, FOUND_NONEXISTENT, ['global_pkg1', 'global_pkg2']]]
228
- assert_equal expected, osdeps.resolve_package('pkg')
229
- end
230
-
231
- def test_resolve_os_name_global_and_ignore
232
- data = { 'pkg' => [
233
- 'global_pkg1', 'global_pkg2',
234
- { 'test' => 'ignore',
235
- 'other_test' => 'pkg1.1'
236
- }
237
- ]}
238
- osdeps = create_osdep(data)
239
-
240
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, ['global_pkg1', 'global_pkg2']]]
241
- assert_equal expected, osdeps.resolve_package('pkg')
242
- end
243
-
244
- def test_resolve_os_version_global_and_specific_packages
245
- data = { 'pkg' => [
246
- 'global_pkg1', 'global_pkg2',
247
- { 'test' => ['pkg0', 'pkg1', { 'v1.0' => 'pkg1.0' }],
248
- 'other_test' => 'pkg1.1',
249
- 'default' => 'nonexistent'
250
- }
251
- ]}
252
- osdeps = create_osdep(data)
253
-
254
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, ['global_pkg1', 'global_pkg2', 'pkg0', 'pkg1', 'pkg1.0']]]
255
- assert_equal expected, osdeps.resolve_package('pkg')
256
- end
257
-
258
- def test_resolve_os_version_global_and_specific_nonexistent
259
- data = { 'pkg' => [
260
- 'global_pkg1', 'global_pkg2',
261
- { 'test' => ['pkg0', 'pkg1', { 'v1.0' => 'nonexistent' }],
262
- 'other_test' => 'pkg1.1',
263
- 'default' => 'nonexistent'
264
- }
265
- ]}
266
- osdeps = create_osdep(data)
267
-
268
- expected = [[osdeps.os_package_handler, FOUND_NONEXISTENT, ['global_pkg1', 'global_pkg2', 'pkg0', 'pkg1']]]
269
- assert_equal expected, osdeps.resolve_package('pkg')
270
- end
271
-
272
- def test_resolve_os_version_global_and_specific_ignore
273
- data = { 'pkg' => [
274
- 'global_pkg1', 'global_pkg2',
275
- { 'test' => ['pkg0', 'pkg1', { 'v1.0' => 'ignore' }],
276
- 'other_test' => 'pkg1.1',
277
- 'default' => 'nonexistent'
278
- }
279
- ]}
280
- osdeps = create_osdep(data)
281
-
282
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, ['global_pkg1', 'global_pkg2', 'pkg0', 'pkg1']]]
283
- assert_equal expected, osdeps.resolve_package('pkg')
284
- end
285
-
286
- def test_resolve_os_version_global_and_specific_does_not_exist
287
- data = { 'pkg' => [
288
- 'global_pkg1', 'global_pkg2',
289
- { 'test' => ['pkg0', 'pkg1', { 'v1.1' => 'pkg1.1' }],
290
- 'other_test' => 'pkg1.1',
291
- 'default' => 'nonexistent'
292
- }
293
- ]}
294
- osdeps = create_osdep(data)
295
-
296
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, ['global_pkg1', 'global_pkg2', 'pkg0', 'pkg1']]]
297
- assert_equal expected, osdeps.resolve_package('pkg')
298
- end
299
-
300
- def test_resolve_osindep_packages_global
301
- data = { 'pkg' => 'gem' }
302
- osdeps = create_osdep(data)
303
- expected = [[osdeps.package_handlers['gem'], FOUND_PACKAGES, ['pkg']]]
304
- assert_equal expected, osdeps.resolve_package('pkg')
305
-
306
- data = { 'pkg' => { 'gem' => 'gempkg' }}
307
- osdeps = create_osdep(data)
308
- expected = [[osdeps.package_handlers['gem'], FOUND_PACKAGES, ['gempkg']]]
309
- assert_equal expected, osdeps.resolve_package('pkg')
310
-
311
- data = { 'pkg' => { 'gem' => ['gempkg', 'gempkg1'] }}
312
- osdeps = create_osdep(data)
313
- expected = [[osdeps.package_handlers['gem'], FOUND_PACKAGES, ['gempkg', 'gempkg1']]]
314
- assert_equal expected, osdeps.resolve_package('pkg')
315
-
316
- data = { 'pkg' => 'pip' }
317
- osdeps = create_osdep(data)
318
- expected = [[osdeps.package_handlers['pip'], FOUND_PACKAGES, ['pkg']]]
319
- assert_equal expected, osdeps.resolve_package('pkg')
320
- end
321
-
322
- def test_resolve_osindep_packages_specific
323
- data = { 'pkg' => ['gem', { 'test' => { 'gem' => 'gempkg' } } ] }
324
- osdeps = create_osdep(data)
325
- expected = [[osdeps.package_handlers['gem'], FOUND_PACKAGES, ['pkg', 'gempkg']]]
326
- assert_equal expected, osdeps.resolve_package('pkg')
327
- end
328
-
329
- def test_specific_os_version_supersedes_nonspecific_one
330
- data = { 'pkg' =>
331
- {
332
- 'debian' => 'binary_package',
333
- 'test' => { 'gem' => 'gempkg' }
334
- }
335
- }
336
- osdeps = create_osdep(data)
337
- expected = [[osdeps.package_handlers['gem'], FOUND_PACKAGES, ['gempkg']]]
338
- assert_equal expected, osdeps.resolve_package('pkg')
339
-
340
- data = { 'pkg' =>
341
- {
342
- 'default' => { 'gem' => 'gem_package' },
343
- 'test' => 'binary_package'
344
- }
345
- }
346
- osdeps = create_osdep(data)
347
- expected = [[osdeps.os_package_handler, FOUND_PACKAGES, ['binary_package']]]
348
- assert_equal expected, osdeps.resolve_package('pkg')
349
- end
350
-
351
- def test_resolve_mixed_os_and_osindep_dependencies
352
- data = { 'pkg' =>
353
- { 'test' => { 'default' => 'ospkg', 'gem' => 'gempkg' }
354
- }
355
- }
356
-
357
- osdeps = create_osdep(data)
358
- expected = [
359
- [osdeps.os_package_handler, FOUND_PACKAGES, ['ospkg']],
360
- [osdeps.package_handlers['gem'], FOUND_PACKAGES, ['gempkg']]
361
- ].to_set
362
- assert_equal expected, osdeps.resolve_package('pkg').to_set
363
- end
364
-
365
- def test_availability_of
366
- osdeps = flexmock(OSDependencies.new)
367
- osdeps.should_receive(:resolve_package).with('pkg0').once.and_return(
368
- [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkg1']],
369
- [osdeps.package_handlers['gem'], FOUND_PACKAGES, ['gempkg1']]])
370
- assert_equal OSDependencies::AVAILABLE, osdeps.availability_of('pkg0')
371
-
372
- osdeps.should_receive(:resolve_package).with('pkg0').once.and_return(
373
- [[osdeps.os_package_handler, FOUND_PACKAGES, []],
374
- [osdeps.package_handlers['gem'], FOUND_PACKAGES, ['gempkg1']]])
375
- assert_equal OSDependencies::AVAILABLE, osdeps.availability_of('pkg0')
376
-
377
- osdeps.should_receive(:resolve_package).with('pkg0').once.and_return(
378
- [[osdeps.os_package_handler, FOUND_PACKAGES, []],
379
- [osdeps.package_handlers['gem'], FOUND_PACKAGES, []]])
380
- assert_equal OSDependencies::IGNORE, osdeps.availability_of('pkg0')
381
-
382
- osdeps.should_receive(:resolve_package).with('pkg0').once.and_return(
383
- [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkg1']],
384
- [osdeps.package_handlers['gem'], FOUND_NONEXISTENT, []]])
385
- assert_equal OSDependencies::NONEXISTENT, osdeps.availability_of('pkg0')
386
-
387
- osdeps.should_receive(:resolve_package).with('pkg0').once.and_return([])
388
- assert_equal OSDependencies::WRONG_OS, osdeps.availability_of('pkg0')
389
-
390
- osdeps.should_receive(:resolve_package).with('pkg0').once.and_return(nil)
391
- assert_equal OSDependencies::NO_PACKAGE, osdeps.availability_of('pkg0')
392
- end
393
-
394
- def test_has_p
395
- osdeps = flexmock(OSDependencies.new)
396
- osdeps.should_receive(:availability_of).with('pkg0').once.
397
- and_return(OSDependencies::AVAILABLE)
398
- assert(osdeps.has?('pkg0'))
399
-
400
- osdeps.should_receive(:availability_of).with('pkg0').once.
401
- and_return(OSDependencies::IGNORE)
402
- assert(osdeps.has?('pkg0'))
403
-
404
- osdeps.should_receive(:availability_of).with('pkg0').once.
405
- and_return(OSDependencies::UNKNOWN_OS)
406
- assert(!osdeps.has?('pkg0'))
407
-
408
- osdeps.should_receive(:availability_of).with('pkg0').once.
409
- and_return(OSDependencies::WRONG_OS)
410
- assert(!osdeps.has?('pkg0'))
411
-
412
- osdeps.should_receive(:availability_of).with('pkg0').once.
413
- and_return(OSDependencies::NONEXISTENT)
414
- assert(!osdeps.has?('pkg0'))
415
-
416
- osdeps.should_receive(:availability_of).with('pkg0').once.
417
- and_return(OSDependencies::NO_PACKAGE)
418
- assert(!osdeps.has?('pkg0'))
419
- end
420
-
421
- def test_resolve_os_dependencies
422
- osdeps = flexmock(OSDependencies.new)
423
- osdeps.should_receive(:resolve_package).with('pkg0').once.and_return(
424
- [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkg0']]])
425
- osdeps.should_receive(:resolve_package).with('pkg1').once.and_return(
426
- [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkg1']],
427
- [osdeps.package_handlers['gem'], FOUND_PACKAGES, ['gempkg1']]])
428
- osdeps.should_receive(:resolve_package).with('pkg2').once.and_return(
429
- [[osdeps.package_handlers['gem'], FOUND_PACKAGES, ['gempkg2']]])
430
- expected =
431
- [[osdeps.os_package_handler, ['pkg0', 'pkg1']],
432
- [osdeps.package_handlers['gem'], ['gempkg1', 'gempkg2']]]
433
- assert_equal expected, osdeps.resolve_os_dependencies(['pkg0', 'pkg1', 'pkg2'])
434
-
435
- osdeps.should_receive(:resolve_package).with('pkg0').once.and_return(
436
- [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkg0']]])
437
- osdeps.should_receive(:resolve_package).with('pkg1').once.and_return(
438
- [[osdeps.os_package_handler, FOUND_PACKAGES, []]])
439
- osdeps.should_receive(:resolve_package).with('pkg2').once.and_return(
440
- [[osdeps.package_handlers['gem'], FOUND_PACKAGES, ['gempkg2']]])
441
- expected =
442
- [[osdeps.os_package_handler, ['pkg0']],
443
- [osdeps.package_handlers['gem'], ['gempkg2']]]
444
- assert_equal expected, osdeps.resolve_os_dependencies(['pkg0', 'pkg1', 'pkg2'])
445
-
446
- osdeps.should_receive(:resolve_package).with('pkg0').once.and_return(nil)
447
- osdeps.should_receive(:resolve_package).with('pkg1').never
448
- osdeps.should_receive(:resolve_package).with('pkg2').never
449
- assert_raises(Autoproj::OSDependencies::MissingOSDep) { osdeps.resolve_os_dependencies(['pkg0', 'pkg1', 'pkg2']) }
450
-
451
- osdeps.should_receive(:resolve_package).with('pkg0').once.and_return(
452
- [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkg0']]])
453
- osdeps.should_receive(:resolve_package).with('pkg1').once.and_return(
454
- [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkg1']],
455
- [osdeps.package_handlers['gem'], FOUND_PACKAGES, ['gempkg1']]])
456
- osdeps.should_receive(:resolve_package).with('pkg2').once.and_return(nil)
457
- expected =
458
- [[osdeps.os_package_handler, ['pkg0']],
459
- [osdeps.package_handlers['gem'], ['gempkg1', 'gempkg2']]]
460
- assert_raises(Autoproj::OSDependencies::MissingOSDep) { osdeps.resolve_os_dependencies(['pkg0', 'pkg1', 'pkg2']) }
461
-
462
- osdeps.should_receive(:resolve_package).with('pkg0').once.and_return(
463
- [[osdeps.os_package_handler, FOUND_NONEXISTENT, ['pkg0']]])
464
- osdeps.should_receive(:resolve_package).with('pkg1').never
465
- osdeps.should_receive(:resolve_package).with('pkg2').never
466
- assert_raises(Autoproj::OSDependencies::MissingOSDep) { osdeps.resolve_os_dependencies(['pkg0', 'pkg1', 'pkg2']) }
467
-
468
- osdeps.should_receive(:resolve_package).with('pkg0').once.and_return(
469
- [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkg0']]])
470
- osdeps.should_receive(:resolve_package).with('pkg1').once.and_return(
471
- [[osdeps.os_package_handler, FOUND_PACKAGES, ['pkg1']],
472
- [osdeps.package_handlers['gem'], FOUND_NONEXISTENT, ['gempkg1']]])
473
- osdeps.should_receive(:resolve_package).with('pkg2').never
474
- assert_raises(Autoproj::OSDependencies::MissingOSDep) { osdeps.resolve_os_dependencies(['pkg0', 'pkg1', 'pkg2']) }
475
- end
476
-
477
- def test_install
478
- osdeps = create_osdep(Hash.new)
479
- osdeps.should_receive(:resolve_os_dependencies).
480
- once.with(['pkg0', 'pkg1', 'pkg2'].to_set).
481
- and_return([[osdeps.os_package_handler, ['os0.1', 'os0.2', 'os1']],
482
- [osdeps.package_handlers['gem'], [['gem2', '>= 0.9']]]])
483
- osdeps.os_package_handler.should_receive(:filter_uptodate_packages).
484
- with(['os0.1', 'os0.2', 'os1']).and_return(['os0.1', 'os1']).once
485
- # Do not add filter_uptodate_packages to the gem handler to check that
486
- # #install deals with that just fine
487
- osdeps.os_package_handler.should_receive(:install).
488
- with(['os0.1', 'os1'])
489
- osdeps.package_handlers['gem'].should_receive(:install).
490
- with([['gem2', '>= 0.9']])
491
-
492
- osdeps.osdeps_mode = 'all'
493
- osdeps.install(['pkg0', 'pkg1', 'pkg2'])
494
- end
495
-
496
- def test_resolve_os_dependencies_unsupported_os_non_existent_dependency
497
- osdeps = create_osdep(Hash.new)
498
- flexmock(OSDependencies).should_receive(:supported_operating_system?).and_return(false)
499
- assert_raises(OSDependencies::MissingOSDep) { osdeps.resolve_os_dependencies(['a_package']) }
500
- end
501
-
502
- def test_resolve_package_availability_unsupported_os_non_existent_dependency
503
- osdeps = create_osdep(Hash.new)
504
- flexmock(OSDependencies).should_receive(:supported_operating_system?).and_return(false)
505
- assert_equal OSDependencies::NO_PACKAGE, osdeps.availability_of('a_package')
506
- end
507
-
508
- def test_resolve_package_availability_unsupported_os_existent_dependency
509
- osdeps = create_osdep({ 'a_package' => { 'an_os' => 'bla' }})
510
- flexmock(OSDependencies).should_receive(:supported_operating_system?).and_return(false)
511
- assert_equal OSDependencies::AVAILABLE, osdeps.availability_of('a_package')
512
- end
513
-
514
- def test_resolve_os_dependencies_unsupported_os_existent_dependency
515
- osdeps = create_osdep({ 'a_package' => { 'an_os' => 'bla' }})
516
- flexmock(OSDependencies).should_receive(:supported_operating_system?).and_return(false)
517
- assert_equal [[osdeps.os_package_handler, ['a_package']]], osdeps.resolve_os_dependencies(['a_package'])
518
- end
519
-
520
- DATA_DIR = File.expand_path('data', File.dirname(__FILE__))
521
- def test_os_from_os_release_returns_nil_if_the_os_release_file_is_not_found
522
- assert !Autoproj::OSDependencies.os_from_os_release('does_not_exist')
523
- end
524
- def test_os_from_os_release_handles_quoted_and_unquoted_fields
525
- names, versions = Autoproj::OSDependencies.os_from_os_release(
526
- File.join(DATA_DIR, 'os_release.with_missing_optional_fields'))
527
- assert_equal ['name'], names
528
- assert_equal ['version_id'], versions
529
- end
530
- def test_os_from_os_release_handles_optional_fields
531
- names, versions = Autoproj::OSDependencies.os_from_os_release(
532
- File.join(DATA_DIR, 'os_release.with_missing_optional_fields'))
533
- assert_equal ['name'], names
534
- assert_equal ['version_id'], versions
535
- end
536
- def test_os_from_os_release_parses_the_version_field
537
- _, versions = Autoproj::OSDependencies.os_from_os_release(
538
- File.join(DATA_DIR, 'os_release.with_complex_version_field'))
539
- assert_equal ['version_id', 'version', 'codename', 'codename_bis'], versions
540
- end
541
- def test_os_from_os_release_removes_duplicate_values
542
- names, versions = Autoproj::OSDependencies.os_from_os_release(
543
- File.join(DATA_DIR, 'os_release.with_duplicate_values'))
544
- assert_equal ['id'], names
545
- assert_equal ['version_id', 'codename'], versions
546
- end
547
- def test_os_from_lsb_returns_nil_if_lsb_release_is_not_found_in_path
548
- flexmock(ENV).should_receive('[]').with('PATH').and_return('')
549
- assert !Autoproj::OSDependencies.os_from_lsb
550
- end
551
-
552
- def test_merge_issues_a_warning_if_two_definitions_differ_by_the_operating_system_packages
553
- Autoproj::OSDependencies.operating_system = [['os0'], []]
554
- osdeps0 = Autoproj::OSDependencies.new
555
- osdeps0.definitions['pkg'] = Hash['os0' => ['osdep0'], 'gem' => ['gem0']]
556
- osdeps0.sources['pkg'] = 'bla/bla'
557
- osdeps1 = Autoproj::OSDependencies.new
558
- osdeps1.definitions['pkg'] = Hash['os0' => ['osdep1'], 'gem' => ['gem0']]
559
- osdeps1.sources['pkg'] = 'bla/bla'
560
- flexmock(Autoproj).should_receive(:warn).once
561
- osdeps0.merge(osdeps1)
562
- end
563
- def test_merge_issues_a_warning_if_two_definitions_differ_by_an_os_independent_package
564
- Autoproj::OSDependencies.operating_system = [['os0'], []]
565
- osdeps0 = Autoproj::OSDependencies.new
566
- osdeps0.definitions['pkg'] = Hash['os0' => ['osdep0'], 'gem' => ['gem0']]
567
- osdeps0.sources['pkg'] = 'bla/bla'
568
- osdeps1 = Autoproj::OSDependencies.new
569
- osdeps1.definitions['pkg'] = Hash['os0' => ['osdep0'], 'gem' => ['gem1']]
570
- osdeps1.sources['pkg'] = 'bla/bla'
571
- flexmock(Autoproj).should_receive(:warn).once
572
- osdeps0.merge(osdeps1)
573
- end
574
- def test_merge_does_not_issue_a_warning_if_two_definitions_are_identical_for_the_local_operating_system
575
- Autoproj::OSDependencies.operating_system = [['os0'], []]
576
- osdeps0 = Autoproj::OSDependencies.new
577
- osdeps0.definitions['pkg'] = Hash['os0' => ['osdep0'], 'gem' => ['gem0'], 'os1' => ['osdep0']]
578
- osdeps0.sources['pkg'] = 'bla/bla'
579
- osdeps1 = Autoproj::OSDependencies.new
580
- osdeps1.definitions['pkg'] = Hash['os0' => ['osdep0'], 'gem' => ['gem0'], 'os1' => ['osdep1']]
581
- osdeps1.sources['pkg'] = 'bla/bla'
582
- flexmock(Autoproj).should_receive(:warn).never
583
- osdeps0.merge(osdeps1)
584
- end
585
- end
586
-