rubygems-update 3.0.4 → 3.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/History.txt +85 -0
  4. data/Manifest.txt +5 -3
  5. data/Rakefile +8 -6
  6. data/bundler/lib/bundler/build_metadata.rb +2 -2
  7. data/lib/rubygems.rb +6 -12
  8. data/lib/rubygems/commands/push_command.rb +2 -0
  9. data/lib/rubygems/commands/setup_command.rb +9 -11
  10. data/lib/rubygems/commands/uninstall_command.rb +16 -6
  11. data/lib/rubygems/commands/which_command.rb +1 -3
  12. data/lib/rubygems/defaults.rb +1 -8
  13. data/lib/rubygems/dependency.rb +1 -1
  14. data/lib/rubygems/dependency_installer.rb +1 -2
  15. data/lib/rubygems/exceptions.rb +0 -4
  16. data/lib/rubygems/gemcutter_utilities.rb +9 -5
  17. data/lib/rubygems/installer.rb +8 -5
  18. data/lib/rubygems/installer_test_case.rb +2 -2
  19. data/lib/rubygems/package/tar_header.rb +11 -2
  20. data/lib/rubygems/remote_fetcher.rb +15 -54
  21. data/lib/rubygems/request.rb +1 -1
  22. data/lib/rubygems/request_set/gem_dependency_api.rb +3 -5
  23. data/lib/rubygems/resolver.rb +4 -1
  24. data/lib/rubygems/s3_uri_signer.rb +183 -0
  25. data/lib/rubygems/security_option.rb +0 -1
  26. data/lib/rubygems/specification.rb +13 -14
  27. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  28. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  29. data/lib/rubygems/stub_specification.rb +1 -2
  30. data/lib/rubygems/test_case.rb +8 -4
  31. data/lib/rubygems/util.rb +12 -0
  32. data/rubygems-update.gemspec +1 -1
  33. data/test/rubygems/test_bundled_ca.rb +7 -4
  34. data/test/rubygems/test_gem.rb +40 -3
  35. data/test/rubygems/test_gem_commands_push_command.rb +15 -0
  36. data/test/rubygems/test_gem_commands_setup_command.rb +11 -7
  37. data/test/rubygems/test_gem_commands_uninstall_command.rb +80 -1
  38. data/test/rubygems/test_gem_indexer.rb +8 -8
  39. data/test/rubygems/test_gem_installer.rb +78 -19
  40. data/test/rubygems/test_gem_package_tar_header.rb +41 -0
  41. data/test/rubygems/test_gem_remote_fetcher.rb +133 -14
  42. data/test/rubygems/test_gem_request.rb +4 -4
  43. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +20 -30
  44. data/test/rubygems/test_gem_specification.rb +29 -0
  45. data/test/rubygems/test_gem_util.rb +8 -0
  46. data/util/cops/deprecations.rb +52 -0
  47. data/util/create_certs.sh +27 -0
  48. data/util/update_bundled_ca_certificates.rb +1 -3
  49. metadata +12 -9
  50. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  51. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
@@ -313,7 +313,7 @@ gem 'other', version
313
313
  @installer.wrappers = true
314
314
 
315
315
  @spec.executables = %w[executable]
316
- @spec.bindir = '.'
316
+ @spec.bindir = 'bin'
317
317
 
318
318
  exec_file = @installer.formatted_program_filename 'executable'
319
319
  exec_path = File.join @spec.gem_dir, exec_file
@@ -325,7 +325,7 @@ gem 'other', version
325
325
 
326
326
  @installer.generate_bin
327
327
 
328
- assert_equal true, File.directory?(util_inst_bindir)
328
+ assert_directory_exists (util_inst_bindir)
329
329
  installed_exec = File.join(util_inst_bindir, 'executable')
330
330
  assert_path_exists installed_exec
331
331
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
@@ -366,7 +366,7 @@ gem 'other', version
366
366
  @installer.gem_dir = @spec.gem_dir
367
367
 
368
368
  @installer.generate_bin
369
- assert File.directory? util_inst_bindir
369
+ assert_directory_exists util_inst_bindir
370
370
  installed_exec = File.join util_inst_bindir, 'executable'
371
371
  assert_path_exists installed_exec
372
372
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
@@ -383,7 +383,7 @@ gem 'other', version
383
383
 
384
384
  Gem::Installer.exec_format = 'foo-%s-bar'
385
385
  @installer.generate_bin
386
- assert_equal true, File.directory?(util_inst_bindir)
386
+ assert_directory_exists util_inst_bindir
387
387
  installed_exec = File.join util_inst_bindir, 'foo-executable-bar'
388
388
  assert_path_exists installed_exec
389
389
  ensure
@@ -397,7 +397,7 @@ gem 'other', version
397
397
 
398
398
  Gem::Installer.exec_format = 'foo-%s-bar'
399
399
  @installer.generate_bin
400
- assert_equal true, File.directory?(util_inst_bindir)
400
+ assert_directory_exists util_inst_bindir
401
401
  installed_exec = File.join util_inst_bindir, 'executable'
402
402
  assert_path_exists installed_exec
403
403
  ensure
@@ -496,7 +496,7 @@ gem 'other', version
496
496
  end
497
497
 
498
498
  @installer.generate_bin
499
- assert_equal true, File.directory?(util_inst_bindir)
499
+ assert_directory_exists util_inst_bindir
500
500
  assert_path_exists installed_exec
501
501
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
502
502
 
@@ -514,7 +514,7 @@ gem 'other', version
514
514
  @installer.gem_dir = @spec.gem_dir
515
515
 
516
516
  @installer.generate_bin
517
- assert_equal true, File.directory?(util_inst_bindir)
517
+ assert_directory_exists util_inst_bindir
518
518
  installed_exec = File.join util_inst_bindir, 'executable'
519
519
  assert_equal true, File.symlink?(installed_exec)
520
520
  assert_equal(File.join(@spec.gem_dir, 'bin', 'executable'),
@@ -666,7 +666,7 @@ gem 'other', version
666
666
  @installer.generate_bin
667
667
  end
668
668
 
669
- assert_equal true, File.directory?(util_inst_bindir)
669
+ assert_directory_exists util_inst_bindir
670
670
  installed_exec = File.join(util_inst_bindir, 'executable')
671
671
  assert_path_exists installed_exec
672
672
 
@@ -977,16 +977,16 @@ gem 'other', version
977
977
 
978
978
  def test_install_missing_dirs
979
979
  FileUtils.rm_f File.join(Gem.dir, 'cache')
980
- FileUtils.rm_f File.join(Gem.dir, 'docs')
980
+ FileUtils.rm_f File.join(Gem.dir, 'doc')
981
981
  FileUtils.rm_f File.join(Gem.dir, 'specifications')
982
982
 
983
983
  use_ui @ui do
984
984
  @installer.install
985
985
  end
986
986
 
987
- File.directory? File.join(Gem.dir, 'cache')
988
- File.directory? File.join(Gem.dir, 'docs')
989
- File.directory? File.join(Gem.dir, 'specifications')
987
+ assert_directory_exists File.join(Gem.dir, 'cache')
988
+ assert_directory_exists File.join(Gem.dir, 'doc')
989
+ assert_directory_exists File.join(Gem.dir, 'specifications')
990
990
 
991
991
  assert_path_exists File.join @gemhome, 'cache', @spec.file_name
992
992
  assert_path_exists File.join @gemhome, 'specifications', @spec.spec_name
@@ -1822,28 +1822,87 @@ gem 'other', version
1822
1822
  assert_predicate spec, :default_gem?
1823
1823
  end
1824
1824
 
1825
- def test_default_gem
1825
+ def test_default_gem_without_wrappers
1826
1826
  FileUtils.rm_f File.join(Gem.dir, 'specifications')
1827
1827
 
1828
- @installer.wrappers = true
1828
+ @installer.wrappers = false
1829
1829
  @installer.options[:install_as_default] = true
1830
1830
  @installer.gem_dir = @spec.gem_dir
1831
- @installer.generate_bin
1832
1831
 
1833
1832
  use_ui @ui do
1834
1833
  @installer.install
1835
1834
  end
1836
1835
 
1837
- assert File.directory? util_inst_bindir
1838
- installed_exec = File.join util_inst_bindir, 'executable'
1836
+ assert_directory_exists File.join(@spec.gem_dir, 'bin')
1837
+ installed_exec = File.join @spec.gem_dir, 'bin', 'executable'
1839
1838
  assert_path_exists installed_exec
1840
1839
 
1841
- assert File.directory? File.join(Gem.default_dir, 'specifications')
1842
- assert File.directory? File.join(Gem.default_dir, 'specifications', 'default')
1840
+ assert_directory_exists File.join(Gem.default_dir, 'specifications')
1841
+ assert_directory_exists File.join(Gem.default_dir, 'specifications', 'default')
1843
1842
 
1844
1843
  default_spec = eval File.read File.join(Gem.default_dir, 'specifications', 'default', 'a-2.gemspec')
1845
1844
  assert_equal Gem::Version.new("2"), default_spec.version
1846
1845
  assert_equal ['bin/executable'], default_spec.files
1846
+
1847
+ assert_directory_exists util_inst_bindir
1848
+
1849
+ installed_exec = File.join util_inst_bindir, 'executable'
1850
+ assert_path_exists installed_exec
1851
+
1852
+ wrapper = File.read installed_exec
1853
+ refute_match %r|generated by RubyGems|, wrapper
1854
+ end
1855
+
1856
+ def test_default_gem_with_wrappers
1857
+ FileUtils.rm_f File.join(Gem.dir, 'specifications')
1858
+
1859
+ @installer.wrappers = true
1860
+ @installer.options[:install_as_default] = true
1861
+ @installer.gem_dir = @spec.gem_dir
1862
+
1863
+ use_ui @ui do
1864
+ @installer.install
1865
+ end
1866
+
1867
+ assert_directory_exists util_inst_bindir
1868
+
1869
+ installed_exec = File.join util_inst_bindir, 'executable'
1870
+ assert_path_exists installed_exec
1871
+
1872
+ wrapper = File.read installed_exec
1873
+ assert_match %r|generated by RubyGems|, wrapper
1874
+ end
1875
+
1876
+ def test_default_gem_with_exe_as_bindir
1877
+ FileUtils.rm_f File.join(Gem.dir, 'specifications')
1878
+
1879
+ @spec = quick_gem 'c' do |spec|
1880
+ util_make_exec spec, '#!/usr/bin/ruby', 'exe'
1881
+ end
1882
+
1883
+ util_build_gem @spec
1884
+
1885
+ @spec.cache_file
1886
+
1887
+ installer = util_installer @spec, @gemhome
1888
+
1889
+ installer.options[:install_as_default] = true
1890
+ installer.gem_dir = @spec.gem_dir
1891
+
1892
+ use_ui @ui do
1893
+ installer.install
1894
+ end
1895
+
1896
+ assert_directory_exists File.join(@spec.gem_dir, 'exe')
1897
+ installed_exec = File.join @spec.gem_dir, 'exe', 'executable'
1898
+ assert_path_exists installed_exec
1899
+
1900
+ assert_directory_exists File.join(Gem.default_dir, 'specifications')
1901
+ assert_directory_exists File.join(Gem.default_dir, 'specifications', 'default')
1902
+
1903
+ default_spec = eval File.read File.join(Gem.default_dir, 'specifications', 'default', 'c-2.gemspec')
1904
+ assert_equal Gem::Version.new("2"), default_spec.version
1905
+ assert_equal ['exe/executable'], default_spec.files
1847
1906
  end
1848
1907
 
1849
1908
  def old_ruby_required(requirement)
@@ -164,4 +164,45 @@ group\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
164
164
  end
165
165
  end
166
166
 
167
+ def test_big_uid_gid
168
+ stream = StringIO.new(
169
+ <<-EOF.dup.force_encoding('binary').split("\n").join
170
+ GeoIP2-City_20190528/
171
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
172
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
173
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
174
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x000000755\x00\x80\x00
175
+ \x00\x00v\xB2Z\x9E\x80\x00\x00\x00v\xB2Z\x9E00000000000\x0013473270100\x00015424
176
+ \x00 5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
177
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
178
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
179
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
180
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ustar \x00
181
+ tjmather\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
182
+ \x00\x00\x00\x00\x00tjmather\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
183
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
184
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
185
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
186
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
187
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
188
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
189
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
190
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
191
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
192
+ \x00\x00\x00\x00
193
+ EOF
194
+ )
195
+
196
+ tar_header = Gem::Package::TarHeader.from stream
197
+
198
+ assert_equal 1991400094, tar_header.uid
199
+ assert_equal 1991400094, tar_header.gid
200
+
201
+ assert_equal 'GeoIP2-City_20190528/', tar_header.name
202
+ assert_equal 0755, tar_header.mode
203
+ assert_equal 0, tar_header.size
204
+ assert_equal 1559064640, tar_header.mtime
205
+ assert_equal 6932, tar_header.checksum
206
+ end
207
+
167
208
  end
@@ -648,10 +648,11 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
648
648
  assert_equal "murphy", fetcher.fetch_path(@server_uri)
649
649
  end
650
650
 
651
- def assert_fetch_s3(url)
651
+ def assert_fetch_s3(url, signature, token=nil, region='us-east-1', instance_profile_json=nil)
652
652
  fetcher = Gem::RemoteFetcher.new nil
653
653
  @fetcher = fetcher
654
654
  $fetched_uri = nil
655
+ $instance_profile = instance_profile_json
655
656
 
656
657
  def fetcher.request(uri, request_class, last_modified = nil)
657
658
  $fetched_uri = uri
@@ -660,13 +661,21 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
660
661
  res
661
662
  end
662
663
 
663
- def fetcher.s3_expiration
664
- 1395098371
664
+ def fetcher.s3_uri_signer(uri)
665
+ require 'json'
666
+ s3_uri_signer = Gem::S3URISigner.new(uri)
667
+ def s3_uri_signer.ec2_metadata_credentials_json
668
+ JSON.parse($instance_profile)
669
+ end
670
+ # Running sign operation to make sure uri.query is not mutated
671
+ s3_uri_signer.sign
672
+ raise "URI query is not empty: #{uri.query}" unless uri.query.nil?
673
+ s3_uri_signer
665
674
  end
666
675
 
667
676
  data = fetcher.fetch_s3 URI.parse(url)
668
677
 
669
- assert_equal 'https://my-bucket.s3.amazonaws.com/gems/specs.4.8.gz?AWSAccessKeyId=testuser&Expires=1395098371&Signature=eUTr7NkpZEet%2BJySE%2BfH6qukroI%3D', $fetched_uri.to_s
678
+ assert_equal "https://my-bucket.s3.#{region}.amazonaws.com/gems/specs.4.8.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=testuser%2F20190624%2F#{region}%2Fs3%2Faws4_request&X-Amz-Date=20190624T050641Z&X-Amz-Expires=86400#{token ? "&X-Amz-Security-Token=" + token : ""}&X-Amz-SignedHeaders=host&X-Amz-Signature=#{signature}", $fetched_uri.to_s
670
679
  assert_equal 'success', data
671
680
  ensure
672
681
  $fetched_uri = nil
@@ -677,14 +686,132 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
677
686
  'my-bucket' => {:id => 'testuser', :secret => 'testpass'}
678
687
  }
679
688
  url = 's3://my-bucket/gems/specs.4.8.gz'
680
- assert_fetch_s3 url
689
+ Time.stub :now, Time.at(1561353581) do
690
+ assert_fetch_s3 url, '20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b'
691
+ end
692
+ ensure
693
+ Gem.configuration[:s3_source] = nil
694
+ end
695
+
696
+ def test_fetch_s3_config_creds_with_region
697
+ Gem.configuration[:s3_source] = {
698
+ 'my-bucket' => {:id => 'testuser', :secret => 'testpass', :region => 'us-west-2'}
699
+ }
700
+ url = 's3://my-bucket/gems/specs.4.8.gz'
701
+ Time.stub :now, Time.at(1561353581) do
702
+ assert_fetch_s3 url, '4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9', nil, 'us-west-2'
703
+ end
681
704
  ensure
682
705
  Gem.configuration[:s3_source] = nil
683
706
  end
684
707
 
708
+ def test_fetch_s3_config_creds_with_token
709
+ Gem.configuration[:s3_source] = {
710
+ 'my-bucket' => {:id => 'testuser', :secret => 'testpass', :security_token => 'testtoken'}
711
+ }
712
+ url = 's3://my-bucket/gems/specs.4.8.gz'
713
+ Time.stub :now, Time.at(1561353581) do
714
+ assert_fetch_s3 url, '935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c', 'testtoken'
715
+ end
716
+ ensure
717
+ Gem.configuration[:s3_source] = nil
718
+ end
719
+
720
+ def test_fetch_s3_env_creds
721
+ ENV['AWS_ACCESS_KEY_ID'] = 'testuser'
722
+ ENV['AWS_SECRET_ACCESS_KEY'] = 'testpass'
723
+ ENV['AWS_SESSION_TOKEN'] = nil
724
+ Gem.configuration[:s3_source] = {
725
+ 'my-bucket' => {:provider => 'env'}
726
+ }
727
+ url = 's3://my-bucket/gems/specs.4.8.gz'
728
+ Time.stub :now, Time.at(1561353581) do
729
+ assert_fetch_s3 url, '20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b'
730
+ end
731
+ ensure
732
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS')}
733
+ Gem.configuration[:s3_source] = nil
734
+ end
735
+
736
+ def test_fetch_s3_env_creds_with_region
737
+ ENV['AWS_ACCESS_KEY_ID'] = 'testuser'
738
+ ENV['AWS_SECRET_ACCESS_KEY'] = 'testpass'
739
+ ENV['AWS_SESSION_TOKEN'] = nil
740
+ Gem.configuration[:s3_source] = {
741
+ 'my-bucket' => {:provider => 'env', :region => 'us-west-2'}
742
+ }
743
+ url = 's3://my-bucket/gems/specs.4.8.gz'
744
+ Time.stub :now, Time.at(1561353581) do
745
+ assert_fetch_s3 url, '4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9', nil, 'us-west-2'
746
+ end
747
+ ensure
748
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS')}
749
+ Gem.configuration[:s3_source] = nil
750
+ end
751
+
752
+ def test_fetch_s3_env_creds_with_token
753
+ ENV['AWS_ACCESS_KEY_ID'] = 'testuser'
754
+ ENV['AWS_SECRET_ACCESS_KEY'] = 'testpass'
755
+ ENV['AWS_SESSION_TOKEN'] = 'testtoken'
756
+ Gem.configuration[:s3_source] = {
757
+ 'my-bucket' => {:provider => 'env'}
758
+ }
759
+ url = 's3://my-bucket/gems/specs.4.8.gz'
760
+ Time.stub :now, Time.at(1561353581) do
761
+ assert_fetch_s3 url, '935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c', 'testtoken'
762
+ end
763
+ ensure
764
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS')}
765
+ Gem.configuration[:s3_source] = nil
766
+ end
767
+
685
768
  def test_fetch_s3_url_creds
686
769
  url = 's3://testuser:testpass@my-bucket/gems/specs.4.8.gz'
687
- assert_fetch_s3 url
770
+ Time.stub :now, Time.at(1561353581) do
771
+ assert_fetch_s3 url, '20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b'
772
+ end
773
+ end
774
+
775
+ def test_fetch_s3_instance_profile_creds
776
+ Gem.configuration[:s3_source] = {
777
+ 'my-bucket' => {:provider => 'instance_profile'}
778
+ }
779
+
780
+ url = 's3://my-bucket/gems/specs.4.8.gz'
781
+ Time.stub :now, Time.at(1561353581) do
782
+ assert_fetch_s3 url, '20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b', nil, 'us-east-1',
783
+ '{"AccessKeyId": "testuser", "SecretAccessKey": "testpass"}'
784
+ end
785
+ ensure
786
+ Gem.configuration[:s3_source] = nil
787
+ end
788
+
789
+ def test_fetch_s3_instance_profile_creds_with_region
790
+ Gem.configuration[:s3_source] = {
791
+ 'my-bucket' => {:provider => 'instance_profile', :region => 'us-west-2'}
792
+ }
793
+
794
+ url = 's3://my-bucket/gems/specs.4.8.gz'
795
+ Time.stub :now, Time.at(1561353581) do
796
+ assert_fetch_s3 url, '4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9', nil, 'us-west-2',
797
+ '{"AccessKeyId": "testuser", "SecretAccessKey": "testpass"}'
798
+ end
799
+ ensure
800
+ Gem.configuration[:s3_source] = nil
801
+ end
802
+
803
+ def test_fetch_s3_instance_profile_creds_with_token
804
+ Gem.configuration[:s3_source] = {
805
+ 'my-bucket' => {:provider => 'instance_profile'}
806
+ }
807
+
808
+ url = 's3://my-bucket/gems/specs.4.8.gz'
809
+ Time.stub :now, Time.at(1561353581) do
810
+ assert_fetch_s3 url, '935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c', 'testtoken', 'us-east-1',
811
+ '{"AccessKeyId": "testuser", "SecretAccessKey": "testpass", "Token": "testtoken"}'
812
+ end
813
+ ensure
814
+ Gem.configuration[:s3_source] = nil
688
815
  end
689
816
 
690
817
  def refute_fetch_s3(url, expected_message)
@@ -1044,12 +1171,4 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
1044
1171
  end
1045
1172
  end
1046
1173
 
1047
- def test_correct_for_windows_path
1048
- path = "/C:/WINDOWS/Temp/gems"
1049
- assert_equal "C:/WINDOWS/Temp/gems", @fetcher.correct_for_windows_path(path)
1050
-
1051
- path = "/home/skillet"
1052
- assert_equal "/home/skillet", @fetcher.correct_for_windows_path(path)
1053
- end
1054
-
1055
1174
  end if defined?(OpenSSL::SSL)
@@ -250,7 +250,7 @@ class TestGemRequest < Gem::TestCase
250
250
  def test_user_agent_engine
251
251
  util_save_version
252
252
 
253
- Object.send :remove_const, :RUBY_ENGINE if defined?(RUBY_ENGINE)
253
+ Object.send :remove_const, :RUBY_ENGINE
254
254
  Object.send :const_set, :RUBY_ENGINE, 'vroom'
255
255
 
256
256
  ua = make_request(@uri, nil, nil, nil).user_agent
@@ -263,7 +263,7 @@ class TestGemRequest < Gem::TestCase
263
263
  def test_user_agent_engine_ruby
264
264
  util_save_version
265
265
 
266
- Object.send :remove_const, :RUBY_ENGINE if defined?(RUBY_ENGINE)
266
+ Object.send :remove_const, :RUBY_ENGINE
267
267
  Object.send :const_set, :RUBY_ENGINE, 'ruby'
268
268
 
269
269
  ua = make_request(@uri, nil, nil, nil).user_agent
@@ -447,7 +447,7 @@ ERROR: Certificate is an invalid CA certificate
447
447
  end
448
448
 
449
449
  def util_restore_version
450
- Object.send :remove_const, :RUBY_ENGINE if defined?(RUBY_ENGINE)
450
+ Object.send :remove_const, :RUBY_ENGINE
451
451
  Object.send :const_set, :RUBY_ENGINE, @orig_RUBY_ENGINE if
452
452
  defined?(@orig_RUBY_ENGINE)
453
453
 
@@ -460,7 +460,7 @@ ERROR: Certificate is an invalid CA certificate
460
460
  end
461
461
 
462
462
  def util_save_version
463
- @orig_RUBY_ENGINE = RUBY_ENGINE if defined? RUBY_ENGINE
463
+ @orig_RUBY_ENGINE = RUBY_ENGINE
464
464
  @orig_RUBY_PATCHLEVEL = RUBY_PATCHLEVEL
465
465
  @orig_RUBY_REVISION = RUBY_REVISION if defined? RUBY_REVISION
466
466
  end
@@ -20,35 +20,28 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
20
20
  end
21
21
 
22
22
  def with_engine_version(name, version)
23
- engine = RUBY_ENGINE if Object.const_defined? :RUBY_ENGINE
24
- engine_version_const = "#{Gem.ruby_engine.upcase}_VERSION"
25
- engine_version = Object.const_get engine_version_const
23
+ engine = RUBY_ENGINE
24
+ engine_version = RUBY_ENGINE_VERSION
26
25
 
27
- Object.send :remove_const, :RUBY_ENGINE if engine
28
- Object.send :remove_const, engine_version_const if name == 'ruby' and
29
- Object.const_defined? engine_version_const
26
+ Object.send :remove_const, :RUBY_ENGINE
27
+ Object.send :remove_const, :RUBY_ENGINE_VERSION
30
28
 
31
- new_engine_version_const = "#{name.upcase}_VERSION"
32
- Object.const_set :RUBY_ENGINE, name if name
33
- Object.const_set new_engine_version_const, version if version
29
+ Object.const_set :RUBY_ENGINE, name if name
30
+ Object.const_set :RUBY_ENGINE_VERSION, version if version
34
31
 
35
32
  Gem.instance_variable_set :@ruby_version, Gem::Version.new(version)
36
33
 
37
- yield
34
+ begin
35
+ yield
36
+ ensure
37
+ Object.send :remove_const, :RUBY_ENGINE if name
38
+ Object.send :remove_const, :RUBY_ENGINE_VERSION if version
38
39
 
39
- ensure
40
- Object.send :remove_const, :RUBY_ENGINE if name
41
- Object.send :remove_const, new_engine_version_const if version
42
-
43
- Object.send :remove_const, engine_version_const if name == 'ruby' and
44
- Object.const_defined? engine_version_const
45
-
46
- Object.const_set :RUBY_ENGINE, engine if engine
47
- Object.const_set engine_version_const, engine_version unless
48
- Object.const_defined? engine_version_const
40
+ Object.const_set :RUBY_ENGINE, engine
41
+ Object.const_set :RUBY_ENGINE_VERSION, engine_version
49
42
 
50
- Gem.send :remove_instance_variable, :@ruby_version if
51
- Gem.instance_variables.include? :@ruby_version
43
+ Gem.send :remove_instance_variable, :@ruby_version
44
+ end
52
45
  end
53
46
 
54
47
  def test_gempspec_with_multiple_runtime_deps
@@ -837,23 +830,20 @@ end
837
830
 
838
831
  def test_with_engine_version
839
832
  version = RUBY_VERSION
840
- engine = Gem.ruby_engine
841
-
842
- engine_version_const = "#{Gem.ruby_engine.upcase}_VERSION"
843
- engine_version = Object.const_get engine_version_const
833
+ engine = Gem.ruby_engine
834
+ engine_version = RUBY_ENGINE_VERSION
844
835
 
845
836
  with_engine_version 'other', '1.2.3' do
846
837
  assert_equal 'other', Gem.ruby_engine
847
- assert_equal '1.2.3', OTHER_VERSION
838
+ assert_equal '1.2.3', RUBY_ENGINE_VERSION
848
839
 
849
- assert_equal version, RUBY_VERSION if engine
840
+ assert_equal version, RUBY_VERSION
850
841
  end
851
842
 
852
843
  assert_equal version, RUBY_VERSION
853
844
  assert_equal engine, Gem.ruby_engine
854
845
 
855
- assert_equal engine_version, Object.const_get(engine_version_const) if
856
- engine
846
+ assert_equal engine_version, RUBY_ENGINE_VERSION if engine
857
847
  end
858
848
 
859
849
  end