autoproj 2.0.0.b7 → 2.0.0.rc1

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 (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
-