rubygems-update 2.4.8 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rubygems-update might be problematic. Click here for more details.

Files changed (125) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CODE_OF_CONDUCT.md +40 -0
  5. data/CVE-2015-3900.txt +40 -0
  6. data/History.txt +173 -2
  7. data/Manifest.txt +14 -1
  8. data/Rakefile +36 -1
  9. data/lib/rubygems.rb +32 -14
  10. data/lib/rubygems/basic_specification.rb +31 -9
  11. data/lib/rubygems/commands/dependency_command.rb +25 -15
  12. data/lib/rubygems/commands/environment_command.rb +2 -0
  13. data/lib/rubygems/commands/help_command.rb +0 -10
  14. data/lib/rubygems/commands/install_command.rb +1 -1
  15. data/lib/rubygems/commands/list_command.rb +1 -1
  16. data/lib/rubygems/commands/pristine_command.rb +11 -1
  17. data/lib/rubygems/commands/query_command.rb +1 -1
  18. data/lib/rubygems/commands/sources_command.rb +1 -1
  19. data/lib/rubygems/commands/update_command.rb +2 -2
  20. data/lib/rubygems/config_file.rb +4 -4
  21. data/lib/rubygems/core_ext/kernel_require.rb +2 -2
  22. data/lib/rubygems/dependency.rb +9 -6
  23. data/lib/rubygems/dependency_list.rb +3 -0
  24. data/lib/rubygems/ext/builder.rb +2 -0
  25. data/lib/rubygems/ext/ext_conf_builder.rb +6 -1
  26. data/lib/rubygems/indexer.rb +26 -91
  27. data/lib/rubygems/installer.rb +58 -26
  28. data/lib/rubygems/installer_test_case.rb +2 -2
  29. data/lib/rubygems/package.rb +18 -6
  30. data/lib/rubygems/package/old.rb +2 -2
  31. data/lib/rubygems/package/tar_reader/entry.rb +7 -1
  32. data/lib/rubygems/package/tar_test_case.rb +12 -3
  33. data/lib/rubygems/package/tar_writer.rb +19 -1
  34. data/lib/rubygems/platform.rb +3 -2
  35. data/lib/rubygems/rdoc.rb +1 -2
  36. data/lib/rubygems/remote_fetcher.rb +25 -6
  37. data/lib/rubygems/request/connection_pools.rb +8 -4
  38. data/lib/rubygems/request_set.rb +3 -4
  39. data/lib/rubygems/request_set/gem_dependency_api.rb +2 -2
  40. data/lib/rubygems/request_set/lockfile.rb +1 -1
  41. data/lib/rubygems/request_set/lockfile/parser.rb +54 -43
  42. data/lib/rubygems/request_set/lockfile/tokenizer.rb +16 -13
  43. data/lib/rubygems/resolver.rb +47 -242
  44. data/lib/rubygems/resolver/activation_request.rb +2 -1
  45. data/lib/rubygems/resolver/conflict.rb +0 -1
  46. data/lib/rubygems/resolver/dependency_request.rb +4 -1
  47. data/lib/rubygems/resolver/git_specification.rb +1 -2
  48. data/lib/rubygems/resolver/molinillo.rb +1 -0
  49. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +5 -0
  50. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +266 -0
  51. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +69 -0
  52. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +3 -0
  53. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +99 -0
  54. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +63 -0
  55. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +430 -0
  56. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +43 -0
  57. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +51 -0
  58. data/lib/rubygems/resolver/specification.rb +1 -1
  59. data/lib/rubygems/specification.rb +256 -86
  60. data/lib/rubygems/stub_specification.rb +37 -29
  61. data/lib/rubygems/test_case.rb +65 -28
  62. data/lib/rubygems/test_utilities.rb +18 -18
  63. data/lib/rubygems/text.rb +0 -2
  64. data/lib/rubygems/uninstaller.rb +1 -1
  65. data/lib/rubygems/util.rb +4 -4
  66. data/lib/rubygems/util/licenses.rb +309 -0
  67. data/lib/rubygems/util/list.rb +9 -21
  68. data/lib/rubygems/version.rb +24 -14
  69. data/test/rubygems/simple_gem.rb +1 -1
  70. data/test/rubygems/test_config.rb +10 -1
  71. data/test/rubygems/test_gem.rb +58 -11
  72. data/test/rubygems/test_gem_available_set.rb +2 -1
  73. data/test/rubygems/test_gem_commands_cleanup_command.rb +6 -5
  74. data/test/rubygems/test_gem_commands_dependency_command.rb +9 -1
  75. data/test/rubygems/test_gem_commands_install_command.rb +17 -28
  76. data/test/rubygems/test_gem_commands_mirror.rb +0 -13
  77. data/test/rubygems/test_gem_commands_outdated_command.rb +2 -3
  78. data/test/rubygems/test_gem_commands_pristine_command.rb +33 -5
  79. data/test/rubygems/test_gem_commands_query_command.rb +123 -158
  80. data/test/rubygems/test_gem_commands_server_command.rb +2 -2
  81. data/test/rubygems/test_gem_commands_specification_command.rb +4 -4
  82. data/test/rubygems/test_gem_commands_stale_command.rb +2 -0
  83. data/test/rubygems/test_gem_commands_uninstall_command.rb +5 -4
  84. data/test/rubygems/test_gem_commands_unpack_command.rb +4 -6
  85. data/test/rubygems/test_gem_commands_update_command.rb +22 -52
  86. data/test/rubygems/test_gem_commands_which_command.rb +1 -0
  87. data/test/rubygems/test_gem_config_file.rb +1 -1
  88. data/test/rubygems/test_gem_dependency.rb +7 -3
  89. data/test/rubygems/test_gem_dependency_installer.rb +5 -5
  90. data/test/rubygems/test_gem_doctor.rb +1 -1
  91. data/test/rubygems/test_gem_ext_builder.rb +2 -0
  92. data/test/rubygems/test_gem_ext_configure_builder.rb +8 -4
  93. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +25 -21
  94. data/test/rubygems/test_gem_indexer.rb +4 -4
  95. data/test/rubygems/test_gem_install_update_options.rb +2 -2
  96. data/test/rubygems/test_gem_installer.rb +32 -26
  97. data/test/rubygems/test_gem_package.rb +46 -1
  98. data/test/rubygems/test_gem_package_tar_reader_entry.rb +8 -1
  99. data/test/rubygems/test_gem_package_tar_writer.rb +10 -1
  100. data/test/rubygems/test_gem_package_task.rb +5 -2
  101. data/test/rubygems/test_gem_platform.rb +11 -0
  102. data/test/rubygems/test_gem_remote_fetcher.rb +64 -3
  103. data/test/rubygems/test_gem_request.rb +1 -1
  104. data/test/rubygems/test_gem_request_connection_pools.rb +10 -1
  105. data/test/rubygems/test_gem_request_set.rb +5 -8
  106. data/test/rubygems/test_gem_request_set_lockfile.rb +2 -4
  107. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +1 -1
  108. data/test/rubygems/test_gem_resolver.rb +12 -31
  109. data/test/rubygems/test_gem_resolver_git_specification.rb +1 -0
  110. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -11
  111. data/test/rubygems/test_gem_resolver_lock_specification.rb +3 -2
  112. data/test/rubygems/test_gem_security_trust_dir.rb +2 -0
  113. data/test/rubygems/test_gem_server.rb +4 -0
  114. data/test/rubygems/test_gem_specification.rb +344 -61
  115. data/test/rubygems/test_gem_stream_ui.rb +6 -6
  116. data/test/rubygems/test_gem_stub_specification.rb +21 -6
  117. data/test/rubygems/test_gem_text.rb +2 -0
  118. data/test/rubygems/test_gem_uninstaller.rb +2 -1
  119. data/test/rubygems/test_gem_util.rb +8 -0
  120. data/test/rubygems/test_require.rb +156 -125
  121. data/util/generate_spdx_license_list.rb +21 -0
  122. data/util/update_bundled_ca_certificates.rb +2 -1
  123. metadata +42 -6
  124. metadata.gz.sig +0 -0
  125. data/lib/rubygems/util/stringio.rb +0 -34
@@ -48,11 +48,11 @@ class TestGemIndexer < Gem::TestCase
48
48
  assert indexer.build_modern
49
49
  end
50
50
 
51
- def test_build_indicies
51
+ def test_build_indices
52
52
  @indexer.make_temp_directories
53
53
 
54
54
  use_ui @ui do
55
- @indexer.build_indicies
55
+ @indexer.build_indices
56
56
  end
57
57
 
58
58
  specs_path = File.join @indexer.directory, "specs.#{@marshal_version}"
@@ -198,7 +198,7 @@ class TestGemIndexer < Gem::TestCase
198
198
  assert_match %r%^Generating latest specs index$%, @ui.output
199
199
  assert_match %r%^Generating prerelease specs index$%, @ui.output
200
200
  assert_match %r%^Complete$%, @ui.output
201
- assert_match %r%^Compressing indicies$%, @ui.output
201
+ assert_match %r%^Compressing indices$%, @ui.output
202
202
 
203
203
  assert_equal '', @ui.error
204
204
  end
@@ -294,7 +294,7 @@ class TestGemIndexer < Gem::TestCase
294
294
 
295
295
  sys_gem = util_spec 'systemgem', '1.0'
296
296
  util_build_gem sys_gem
297
- Gem::Specification.add_spec sys_gem
297
+ install_default_gems sys_gem
298
298
  yield
299
299
  util_remove_gem sys_gem
300
300
  end
@@ -129,7 +129,7 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
129
129
 
130
130
  assert @cmd.options[:user_install]
131
131
 
132
- @installer = Gem::Installer.new @gem, @cmd.options
132
+ @installer = Gem::Installer.at @gem, @cmd.options
133
133
  @installer.install
134
134
  assert_path_exists File.join(Gem.user_dir, 'gems')
135
135
  assert_path_exists File.join(Gem.user_dir, 'gems', @spec.full_name)
@@ -149,7 +149,7 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
149
149
  Gem.use_paths @gemhome, @userhome
150
150
 
151
151
  assert_raises(Gem::FilePermissionError) do
152
- Gem::Installer.new(@gem, @cmd.options).install
152
+ Gem::Installer.at(@gem, @cmd.options).install
153
153
  end
154
154
  end
155
155
  ensure
@@ -36,7 +36,7 @@ class TestGemInstaller < Gem::InstallerTestCase
36
36
 
37
37
  require 'rubygems'
38
38
 
39
- version = \">= 0\"
39
+ version = \">= 0.a\"
40
40
 
41
41
  if ARGV.first
42
42
  str = ARGV.first
@@ -257,7 +257,7 @@ gem 'other', version
257
257
  s.add_dependency 'garbage ~> 5'
258
258
  end
259
259
 
260
- installer = Gem::Installer.new a_gem
260
+ installer = Gem::Installer.at a_gem
261
261
 
262
262
  e = assert_raises Gem::InstallError do
263
263
  installer.ensure_loadable_spec
@@ -275,7 +275,7 @@ gem 'other', version
275
275
  end
276
276
 
277
277
  policy = Gem::Security::HighSecurity
278
- installer = Gem::Installer.new a_gem, :security_policy => policy
278
+ installer = Gem::Installer.at a_gem, :security_policy => policy
279
279
 
280
280
  assert_raises Gem::Security::Exception do
281
281
  installer.ensure_loadable_spec
@@ -322,7 +322,7 @@ gem 'other', version
322
322
  :install_dir => "/non/existent"
323
323
  }
324
324
 
325
- inst = Gem::Installer.new '', options
325
+ inst = Gem::Installer.at '', options
326
326
 
327
327
  Gem::Installer.path_warning = false
328
328
 
@@ -575,8 +575,8 @@ gem 'other', version
575
575
  util_make_exec
576
576
  one = @spec.dup
577
577
  one.version = 1
578
+ @installer = Gem::Installer.for_spec spec
578
579
  @installer.gem_dir = util_gem_dir one
579
- @installer.spec = spec
580
580
 
581
581
  @installer.generate_bin
582
582
 
@@ -672,14 +672,14 @@ gem 'other', version
672
672
  util_build_gem spec
673
673
  FileUtils.mv spec.cache_file, @tempdir
674
674
 
675
- installer = Gem::Installer.new gem
675
+ installer = Gem::Installer.at gem
676
676
 
677
677
  assert_equal File.join(@gemhome, 'gems', spec.full_name), installer.gem_dir
678
678
  assert_equal File.join(@gemhome, 'bin'), installer.bin_dir
679
679
  end
680
680
 
681
681
  def test_initialize_user_install
682
- installer = Gem::Installer.new @gem, :user_install => true
682
+ installer = Gem::Installer.at @gem, :user_install => true
683
683
 
684
684
  assert_equal File.join(Gem.user_dir, 'gems', @spec.full_name),
685
685
  installer.gem_dir
@@ -688,7 +688,7 @@ gem 'other', version
688
688
 
689
689
  def test_initialize_user_install_bin_dir
690
690
  installer =
691
- Gem::Installer.new @gem, :user_install => true, :bin_dir => @tempdir
691
+ Gem::Installer.at @gem, :user_install => true, :bin_dir => @tempdir
692
692
 
693
693
  assert_equal File.join(Gem.user_dir, 'gems', @spec.full_name),
694
694
  installer.gem_dir
@@ -870,7 +870,7 @@ gem 'other', version
870
870
  Gem::Package.build @spec
871
871
  end
872
872
  end
873
- @installer = Gem::Installer.new @gem
873
+ @installer = Gem::Installer.at @gem
874
874
  build_rake_in do
875
875
  use_ui @ui do
876
876
  assert_equal @spec, @installer.install
@@ -884,7 +884,7 @@ gem 'other', version
884
884
 
885
885
  def test_install_force
886
886
  use_ui @ui do
887
- installer = Gem::Installer.new old_ruby_required, :force => true
887
+ installer = Gem::Installer.at old_ruby_required, :force => true
888
888
  installer.install
889
889
  end
890
890
 
@@ -993,7 +993,7 @@ gem 'other', version
993
993
  use_ui @ui do
994
994
  path = Gem::Package.build @spec
995
995
 
996
- @installer = Gem::Installer.new path
996
+ @installer = Gem::Installer.at path
997
997
  @installer.install
998
998
  end
999
999
 
@@ -1016,7 +1016,7 @@ gem 'other', version
1016
1016
  use_ui @ui do
1017
1017
  path = Gem::Package.build @spec
1018
1018
 
1019
- installer = Gem::Installer.new path, :install_dir => gemhome2
1019
+ installer = Gem::Installer.at path, :install_dir => gemhome2
1020
1020
  installer.install
1021
1021
  end
1022
1022
 
@@ -1056,7 +1056,7 @@ gem 'other', version
1056
1056
  use_ui @ui do
1057
1057
  path = Gem::Package.build @spec
1058
1058
 
1059
- @installer = Gem::Installer.new path
1059
+ @installer = Gem::Installer.at path
1060
1060
  @installer.install
1061
1061
  end
1062
1062
  assert_path_exists File.join @spec.gem_dir, rb
@@ -1097,7 +1097,7 @@ gem 'other', version
1097
1097
  use_ui @ui do
1098
1098
  path = Gem::Package.build @spec
1099
1099
 
1100
- @installer = Gem::Installer.new path
1100
+ @installer = Gem::Installer.at path
1101
1101
  @installer.install
1102
1102
  end
1103
1103
  assert_path_exists so
@@ -1175,7 +1175,7 @@ gem 'other', version
1175
1175
  # that it work everything out on it's own.
1176
1176
  Gem::Specification.reset
1177
1177
 
1178
- installer = Gem::Installer.new gem, :install_dir => gemhome2
1178
+ installer = Gem::Installer.at gem, :install_dir => gemhome2
1179
1179
 
1180
1180
  build_rake_in do
1181
1181
  use_ui @ui do
@@ -1186,7 +1186,7 @@ gem 'other', version
1186
1186
 
1187
1187
  def test_pre_install_checks_ruby_version
1188
1188
  use_ui @ui do
1189
- installer = Gem::Installer.new old_ruby_required
1189
+ installer = Gem::Installer.at old_ruby_required
1190
1190
  e = assert_raises Gem::InstallError do
1191
1191
  installer.pre_install_checks
1192
1192
  end
@@ -1205,7 +1205,7 @@ gem 'other', version
1205
1205
  gem = File.join(@gemhome, 'cache', spec.file_name)
1206
1206
 
1207
1207
  use_ui @ui do
1208
- @installer = Gem::Installer.new gem
1208
+ @installer = Gem::Installer.at gem
1209
1209
  e = assert_raises Gem::InstallError do
1210
1210
  @installer.pre_install_checks
1211
1211
  end
@@ -1231,7 +1231,7 @@ gem 'other', version
1231
1231
  def test_process_options_build_root
1232
1232
  build_root = File.join @tempdir, 'build_root'
1233
1233
 
1234
- @installer = Gem::Installer.new @gem, :build_root => build_root
1234
+ @installer = Gem::Installer.at @gem, :build_root => build_root
1235
1235
 
1236
1236
  assert_equal Pathname(build_root), @installer.build_root
1237
1237
  assert_equal File.join(build_root, @gemhome, 'bin'), @installer.bin_dir
@@ -1406,7 +1406,7 @@ gem 'other', version
1406
1406
  end
1407
1407
 
1408
1408
  def test_write_build_info_file_install_dir
1409
- installer = Gem::Installer.new @gem, :install_dir => "#{@gemhome}2"
1409
+ installer = Gem::Installer.at @gem, :install_dir => "#{@gemhome}2"
1410
1410
 
1411
1411
  installer.build_args = %w[
1412
1412
  --with-libyaml-dir /usr/local/Cellar/libyaml/0.1.4
@@ -1426,8 +1426,7 @@ gem 'other', version
1426
1426
  FileUtils.mv cache_file, gem
1427
1427
  refute_path_exists cache_file
1428
1428
 
1429
- installer = Gem::Installer.new gem
1430
- installer.spec = @spec
1429
+ installer = Gem::Installer.at gem
1431
1430
  installer.gem_home = @gemhome
1432
1431
 
1433
1432
  installer.write_cache_file
@@ -1439,7 +1438,7 @@ gem 'other', version
1439
1438
  FileUtils.rm @spec.spec_file
1440
1439
  refute_path_exists @spec.spec_file
1441
1440
 
1442
- @installer.spec = @spec
1441
+ @installer = Gem::Installer.for_spec @spec
1443
1442
  @installer.gem_home = @gemhome
1444
1443
 
1445
1444
  @installer.write_spec
@@ -1459,7 +1458,7 @@ gem 'other', version
1459
1458
 
1460
1459
  @spec.files = %w[a.rb b.rb c.rb]
1461
1460
 
1462
- @installer.spec = @spec
1461
+ @installer = Gem::Installer.for_spec @spec
1463
1462
  @installer.gem_home = @gemhome
1464
1463
 
1465
1464
  @installer.write_spec
@@ -1474,6 +1473,13 @@ gem 'other', version
1474
1473
  assert_match %r!/gemhome/gems/a-2$!, @installer.dir
1475
1474
  end
1476
1475
 
1476
+ def test_default_gem_loaded_from
1477
+ spec = util_spec 'a'
1478
+ installer = Gem::Installer.for_spec spec, :install_as_default => true
1479
+ installer.install
1480
+ assert_predicate spec, :default_gem?
1481
+ end
1482
+
1477
1483
  def test_default_gem
1478
1484
  FileUtils.rm_f File.join(Gem.dir, 'specifications')
1479
1485
 
@@ -1490,10 +1496,10 @@ gem 'other', version
1490
1496
  installed_exec = File.join util_inst_bindir, 'executable'
1491
1497
  assert_path_exists installed_exec
1492
1498
 
1493
- assert File.directory? File.join(Gem.dir, 'specifications')
1494
- assert File.directory? File.join(Gem.dir, 'specifications', 'default')
1499
+ assert File.directory? File.join(Gem.default_dir, 'specifications')
1500
+ assert File.directory? File.join(Gem.default_dir, 'specifications', 'default')
1495
1501
 
1496
- default_spec = eval File.read File.join(Gem.dir, 'specifications', 'default', 'a-2.gemspec')
1502
+ default_spec = eval File.read File.join(Gem.default_dir, 'specifications', 'default', 'a-2.gemspec')
1497
1503
  assert_equal Gem::Version.new("2"), default_spec.version
1498
1504
  assert_equal ['bin/executable'], default_spec.files
1499
1505
  end
@@ -132,6 +132,37 @@ class TestGemPackage < Gem::Package::TarTestCase
132
132
  assert_equal %w[lib/code.rb], files
133
133
  end
134
134
 
135
+ def test_add_files_symlink
136
+ skip 'symlink not supported' if Gem.win_platform?
137
+
138
+ spec = Gem::Specification.new
139
+ spec.files = %w[lib/code.rb lib/code_sym.rb]
140
+
141
+ FileUtils.mkdir_p 'lib'
142
+ open 'lib/code.rb', 'w' do |io| io.write '# lib/code.rb' end
143
+ File.symlink('lib/code.rb', 'lib/code_sym.rb')
144
+
145
+ package = Gem::Package.new 'bogus.gem'
146
+ package.spec = spec
147
+
148
+ tar = util_tar do |tar_io|
149
+ package.add_files tar_io
150
+ end
151
+
152
+ tar.rewind
153
+
154
+ files, symlinks = [], []
155
+
156
+ Gem::Package::TarReader.new tar do |tar_io|
157
+ tar_io.each_entry do |entry|
158
+ (entry.symlink? ? symlinks : files) << entry.full_name
159
+ end
160
+ end
161
+
162
+ assert_equal %w[lib/code.rb], files
163
+ assert_equal %w[lib/code_sym.rb], symlinks
164
+ end
165
+
135
166
  def test_build
136
167
  spec = Gem::Specification.new 'build', '1'
137
168
  spec.summary = 'build'
@@ -396,6 +427,21 @@ class TestGemPackage < Gem::Package::TarTestCase
396
427
  "#{@destination} is not allowed", e.message)
397
428
  end
398
429
 
430
+ def test_extract_tar_gz_symlink_absolute
431
+ package = Gem::Package.new @gem
432
+
433
+ tgz_io = util_tar_gz do |tar|
434
+ tar.add_symlink 'code.rb', '/absolute.rb', 0644
435
+ end
436
+
437
+ e = assert_raises Gem::Package::PathError do
438
+ package.extract_tar_gz tgz_io, @destination
439
+ end
440
+
441
+ assert_equal("installing into parent path /absolute.rb of " +
442
+ "#{@destination} is not allowed", e.message)
443
+ end
444
+
399
445
  def test_extract_tar_gz_directory
400
446
  package = Gem::Package.new @gem
401
447
 
@@ -821,4 +867,3 @@ class TestGemPackage < Gem::Package::TarTestCase
821
867
  end
822
868
 
823
869
  end
824
-
@@ -92,6 +92,14 @@ class TestGemPackageTarReaderEntry < Gem::Package::TarTestCase
92
92
  close_util_entry(dir_ent) if dir_ent
93
93
  end
94
94
 
95
+ def test_symlink_eh
96
+ assert_equal false, @entry.symlink?
97
+ symlink_ent = util_symlink_entry
98
+ assert_equal true, symlink_ent.symlink?
99
+ ensure
100
+ close_util_entry(symlink_ent) if symlink_ent
101
+ end
102
+
95
103
  def test_file_eh
96
104
  assert_equal true, @entry.file?
97
105
  dir_ent = util_dir_entry
@@ -131,4 +139,3 @@ class TestGemPackageTarReaderEntry < Gem::Package::TarTestCase
131
139
  end
132
140
 
133
141
  end
134
-
@@ -30,6 +30,16 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
30
30
  assert_equal 1024, @io.pos
31
31
  end
32
32
 
33
+ def test_add_symlink
34
+ Time.stub :now, Time.at(1458518157) do
35
+ @tar_writer.add_symlink 'x', 'y', 0644
36
+
37
+ assert_headers_equal(tar_symlink_header('x', '', 0644, Time.now, 'y'),
38
+ @io.string[0, 512])
39
+ end
40
+ assert_equal 512, @io.pos
41
+ end
42
+
33
43
  def test_add_file_digest
34
44
  digest_algorithms = Digest::SHA1, Digest::SHA512
35
45
 
@@ -251,4 +261,3 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
251
261
  end
252
262
 
253
263
  end
254
-
@@ -1,6 +1,9 @@
1
1
  require 'rubygems/test_case'
2
2
  require 'rubygems'
3
- require 'rubygems/package_task'
3
+ begin
4
+ require 'rubygems/package_task'
5
+ rescue LoadError
6
+ end
4
7
 
5
8
  class TestGemPackageTask < Gem::TestCase
6
9
 
@@ -76,5 +79,5 @@ class TestGemPackageTask < Gem::TestCase
76
79
  assert_equal 'pkg/nokogiri-1.5.0-java', pkg.package_dir_path
77
80
  end
78
81
 
79
- end
82
+ end if defined?(Rake::PackageTask)
80
83
 
@@ -190,6 +190,17 @@ class TestGemPlatform < Gem::TestCase
190
190
  assert((x86_darwin8 === Gem::Platform.local), 'universal =~ x86')
191
191
  end
192
192
 
193
+ def test_nil_cpu_arch_is_treated_as_universal
194
+ with_nil_arch = Gem::Platform.new [nil, 'mingw32']
195
+ with_uni_arch = Gem::Platform.new ['universal', 'mingw32']
196
+ with_x86_arch = Gem::Platform.new ['x86', 'mingw32']
197
+
198
+ assert((with_nil_arch === with_uni_arch), 'nil =~ universal')
199
+ assert((with_uni_arch === with_nil_arch), 'universal =~ nil')
200
+ assert((with_nil_arch === with_x86_arch), 'nil =~ x86')
201
+ assert((with_x86_arch === with_nil_arch), 'x86 =~ nil')
202
+ end
203
+
193
204
  def test_equals3_cpu_arm
194
205
  arm = Gem::Platform.new 'arm-linux'
195
206
  armv5 = Gem::Platform.new 'armv5-linux'
@@ -77,8 +77,34 @@ gems:
77
77
 
78
78
  DIR = File.expand_path(File.dirname(__FILE__))
79
79
 
80
+ # Generated via:
81
+ # x = OpenSSL::PKey::DH.new(2048) # wait a while...
82
+ # x.to_s => pem
83
+ # x.priv_key.to_s => hex for OpenSSL::BN.new
84
+ TEST_KEY_DH2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_
85
+ -----BEGIN DH PARAMETERS-----
86
+ MIIBCAKCAQEA3Ze2EHSfYkZLUn557torAmjBgPsqzbodaRaGZtgK1gEU+9nNJaFV
87
+ G1JKhmGUiEDyIW7idsBpe4sX/Wqjnp48Lr8IeI/SlEzLdoGpf05iRYXC8Cm9o8aM
88
+ cfmVgoSEAo9YLBpzoji2jHkO7Q5IPt4zxbTdlmmGFLc/GO9q7LGHhC+rcMcNTGsM
89
+ 49AnILNn49pq4Y72jSwdmvq4psHZwwFBbPwLdw6bLUDDCN90jfqvYt18muwUxDiN
90
+ NP0fuvVAIB158VnQ0liHSwcl6+9vE1mL0Jo/qEXQxl0+UdKDjaGfTsn6HIrwTnmJ
91
+ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
92
+ -----END DH PARAMETERS-----
93
+ _end_of_pem_
94
+
95
+ TEST_KEY_DH2048.priv_key = OpenSSL::BN.new("108911488509734781344423639" \
96
+ "5585749502236089033416160524030987005037540379474123441273555416835" \
97
+ "4725688238369352738266590757370603937618499698665047757588998555345" \
98
+ "3446251978586372525530219375408331096098220027413238477359960428372" \
99
+ "0195464393332338164504352015535549496585792320286513563739305843396" \
100
+ "9294344974028713065472959376197728193162272314514335882399554394661" \
101
+ "5306385003430991221886779612878793446851681835397455333989268503748" \
102
+ "7862488679178398716189205737442996155432191656080664090596502674943" \
103
+ "7902481557157485795980326766117882761941455140582265347052939604724" \
104
+ "964857770053363840471912215799994973597613931991572884", 16)
105
+
80
106
  def setup
81
- @proxies = %w[http_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
107
+ @proxies = %w[https_proxy http_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
82
108
  @old_proxies = @proxies.map {|k| ENV[k] }
83
109
  @proxies.each {|k| ENV[k] = nil }
84
110
 
@@ -226,6 +252,31 @@ gems:
226
252
  dns.verify
227
253
  end
228
254
 
255
+ def test_api_endpoint_timeout_warning
256
+ uri = URI.parse "http://gems.example.com/foo"
257
+
258
+ dns = MiniTest::Mock.new
259
+ def dns.getresource arg, *rest
260
+ raise Resolv::ResolvError.new('timeout!')
261
+ end
262
+
263
+ fetch = Gem::RemoteFetcher.new nil, dns
264
+ begin
265
+ old_verbose, Gem.configuration.verbose = Gem.configuration.verbose, 1
266
+ endpoint = use_ui @ui do
267
+ fetch.api_endpoint(uri)
268
+ end
269
+ ensure
270
+ Gem.configuration.verbose = old_verbose
271
+ end
272
+
273
+ assert_equal uri, endpoint
274
+
275
+ assert_equal "Getting SRV record failed: timeout!\n", @ui.output
276
+
277
+ dns.verify
278
+ end
279
+
229
280
  def test_cache_update_path
230
281
  uri = URI 'http://example/file'
231
282
  path = File.join @tempdir, 'file'
@@ -647,6 +698,14 @@ gems:
647
698
  assert_equal "too many redirects (#{url})", e.message
648
699
  end
649
700
 
701
+ def test_fetch_http_with_additional_headers
702
+ ENV["http_proxy"] = @proxy_uri
703
+ ENV["no_proxy"] = URI::parse(@server_uri).host
704
+ fetcher = Gem::RemoteFetcher.new nil, nil, {"X-Captain" => "murphy"}
705
+ @fetcher = fetcher
706
+ assert_equal "murphy", fetcher.fetch_path(@server_uri)
707
+ end
708
+
650
709
  def test_fetch_s3
651
710
  fetcher = Gem::RemoteFetcher.new nil
652
711
  @fetcher = fetcher
@@ -898,7 +957,7 @@ gems:
898
957
  server.mount_proc("/insecure_redirect") { |req, res|
899
958
  res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query['to'])
900
959
  }
901
- server.ssl_context.tmp_dh_callback = proc { OpenSSL::PKey::DH.new 128 }
960
+ server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
902
961
  t = Thread.new do
903
962
  begin
904
963
  server.start
@@ -933,7 +992,9 @@ gems:
933
992
  )
934
993
  s.mount_proc("/kill") { |req, res| s.shutdown }
935
994
  s.mount_proc("/yaml") { |req, res|
936
- if @enable_yaml
995
+ if req["X-Captain"]
996
+ res.body = req["X-Captain"]
997
+ elsif @enable_yaml
937
998
  res.body = data
938
999
  res['Content-Type'] = 'text/plain'
939
1000
  res['content-length'] = data.size