rubygems-update 3.0.0 → 3.0.9

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 (89) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -0
  3. data/.travis.yml +2 -0
  4. data/CODE_OF_CONDUCT.md +10 -8
  5. data/CONTRIBUTING.md +7 -0
  6. data/History.txt +180 -0
  7. data/Manifest.txt +5 -3
  8. data/README.md +6 -0
  9. data/Rakefile +33 -7
  10. data/bundler/CHANGELOG.md +11 -0
  11. data/bundler/lib/bundler/build_metadata.rb +2 -2
  12. data/bundler/lib/bundler/rubygems_gem_installer.rb +7 -0
  13. data/bundler/lib/bundler/source/metadata.rb +2 -3
  14. data/bundler/lib/bundler/version.rb +1 -1
  15. data/bundler/man/bundle.ronn +3 -0
  16. data/lib/rubygems/command_manager.rb +12 -4
  17. data/lib/rubygems/commands/build_command.rb +28 -13
  18. data/lib/rubygems/commands/owner_command.rb +6 -1
  19. data/lib/rubygems/commands/push_command.rb +2 -0
  20. data/lib/rubygems/commands/setup_command.rb +14 -16
  21. data/lib/rubygems/commands/uninstall_command.rb +16 -6
  22. data/lib/rubygems/commands/which_command.rb +1 -3
  23. data/lib/rubygems/defaults.rb +1 -8
  24. data/lib/rubygems/dependency.rb +1 -1
  25. data/lib/rubygems/dependency_installer.rb +1 -2
  26. data/lib/rubygems/dependency_list.rb +1 -1
  27. data/lib/rubygems/exceptions.rb +0 -4
  28. data/lib/rubygems/gemcutter_utilities.rb +14 -7
  29. data/lib/rubygems/install_update_options.rb +1 -1
  30. data/lib/rubygems/installer.rb +37 -15
  31. data/lib/rubygems/installer_test_case.rb +2 -2
  32. data/lib/rubygems/package/old.rb +1 -1
  33. data/lib/rubygems/package/tar_header.rb +11 -2
  34. data/lib/rubygems/package.rb +12 -2
  35. data/lib/rubygems/rdoc.rb +2 -2
  36. data/lib/rubygems/remote_fetcher.rb +15 -54
  37. data/lib/rubygems/request.rb +1 -1
  38. data/lib/rubygems/request_set/gem_dependency_api.rb +11 -10
  39. data/lib/rubygems/requirement.rb +16 -5
  40. data/lib/rubygems/resolver.rb +4 -1
  41. data/lib/rubygems/s3_uri_signer.rb +183 -0
  42. data/lib/rubygems/security_option.rb +0 -1
  43. data/lib/rubygems/specification.rb +21 -23
  44. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  45. data/lib/rubygems/stub_specification.rb +1 -2
  46. data/lib/rubygems/test_case.rb +23 -12
  47. data/lib/rubygems/uninstaller.rb +1 -1
  48. data/lib/rubygems/user_interaction.rb +4 -1
  49. data/lib/rubygems/util.rb +13 -1
  50. data/lib/rubygems.rb +8 -13
  51. data/rubygems-update.gemspec +1 -1
  52. data/test/rubygems/ca_cert.pem +74 -65
  53. data/test/rubygems/client.pem +103 -45
  54. data/test/rubygems/ssl_cert.pem +78 -17
  55. data/test/rubygems/ssl_key.pem +25 -13
  56. data/test/rubygems/test_bundled_ca.rb +8 -5
  57. data/test/rubygems/test_gem.rb +55 -13
  58. data/test/rubygems/test_gem_bundler_version_finder.rb +4 -0
  59. data/test/rubygems/test_gem_command_manager.rb +10 -0
  60. data/test/rubygems/test_gem_commands_build_command.rb +1 -0
  61. data/test/rubygems/test_gem_commands_push_command.rb +15 -0
  62. data/test/rubygems/test_gem_commands_setup_command.rb +11 -7
  63. data/test/rubygems/test_gem_commands_uninstall_command.rb +80 -1
  64. data/test/rubygems/test_gem_ext_cmake_builder.rb +1 -1
  65. data/test/rubygems/test_gem_indexer.rb +15 -8
  66. data/test/rubygems/test_gem_installer.rb +191 -22
  67. data/test/rubygems/test_gem_package.rb +37 -0
  68. data/test/rubygems/test_gem_package_tar_header.rb +41 -0
  69. data/test/rubygems/test_gem_package_tar_writer.rb +3 -0
  70. data/test/rubygems/test_gem_rdoc.rb +1 -135
  71. data/test/rubygems/test_gem_remote_fetcher.rb +133 -14
  72. data/test/rubygems/test_gem_request.rb +4 -4
  73. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +80 -57
  74. data/test/rubygems/test_gem_requirement.rb +6 -0
  75. data/test/rubygems/test_gem_security_policy.rb +1 -1
  76. data/test/rubygems/test_gem_specification.rb +32 -0
  77. data/test/rubygems/test_gem_stream_ui.rb +2 -2
  78. data/test/rubygems/test_gem_text.rb +5 -0
  79. data/test/rubygems/test_gem_uninstaller.rb +21 -2
  80. data/test/rubygems/test_gem_util.rb +25 -0
  81. data/util/ci +6 -1
  82. data/util/cops/deprecations.rb +52 -0
  83. data/util/create_certs.sh +27 -0
  84. data/util/create_encrypted_key.rb +4 -4
  85. data/util/update_bundled_ca_certificates.rb +1 -3
  86. metadata +12 -10
  87. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  88. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  89. /data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
@@ -5,7 +5,6 @@ require 'rubygems/rdoc'
5
5
 
6
6
  class TestGemRDoc < Gem::TestCase
7
7
  Gem::RDoc.load_rdoc
8
- rdoc_4 = Gem::Requirement.new('> 3').satisfied_by?(Gem::RDoc.rdoc_version)
9
8
 
10
9
  def setup
11
10
  super
@@ -31,29 +30,8 @@ class TestGemRDoc < Gem::TestCase
31
30
  Gem.configuration[:rdoc] = nil
32
31
  end
33
32
 
34
- ##
35
- # RDoc 4 ships with its own Gem::RDoc which overrides this one which is
36
- # shipped for backwards compatibility.
37
-
38
- def rdoc_4?
39
- Gem::Requirement.new('>= 4.0.0.preview2').satisfied_by? \
40
- @hook.class.rdoc_version
41
- end
42
-
43
- def rdoc_3?
44
- Gem::Requirement.new('~> 3.0').satisfied_by? @hook.class.rdoc_version
45
- end
46
-
47
- def rdoc_3_8_or_better?
48
- Gem::Requirement.new('>= 3.8').satisfied_by? @hook.class.rdoc_version
49
- end
50
-
51
33
  def test_initialize
52
- if rdoc_4?
53
- refute @hook.generate_rdoc
54
- else
55
- assert @hook.generate_rdoc
56
- end
34
+ refute @hook.generate_rdoc
57
35
  assert @hook.generate_ri
58
36
 
59
37
  rdoc = Gem::RDoc.new @a, false, false
@@ -75,67 +53,6 @@ class TestGemRDoc < Gem::TestCase
75
53
  assert_empty args
76
54
  end
77
55
 
78
- def test_document
79
- skip 'RDoc 3 required' unless rdoc_3?
80
-
81
- options = RDoc::Options.new
82
- options.files = []
83
-
84
- rdoc = @hook.new_rdoc
85
- @hook.instance_variable_set :@rdoc, rdoc
86
- @hook.instance_variable_set :@file_info, []
87
-
88
- @hook.document 'darkfish', options, @a.doc_dir('rdoc')
89
-
90
- assert @hook.rdoc_installed?
91
- end unless rdoc_4
92
-
93
- def test_generate
94
- skip 'RDoc 3 required' unless rdoc_3?
95
-
96
- FileUtils.mkdir_p @a.doc_dir
97
- FileUtils.mkdir_p File.join(@a.gem_dir, 'lib')
98
-
99
- @hook.generate
100
-
101
- assert @hook.rdoc_installed?
102
- assert @hook.ri_installed?
103
-
104
- rdoc = @hook.instance_variable_get :@rdoc
105
-
106
- refute rdoc.options.hyperlink_all
107
- end unless rdoc_4
108
-
109
- def test_generate_configuration_rdoc_array
110
- skip 'RDoc 3 required' unless rdoc_3?
111
-
112
- Gem.configuration[:rdoc] = %w[-A]
113
-
114
- FileUtils.mkdir_p @a.doc_dir
115
- FileUtils.mkdir_p File.join(@a.gem_dir, 'lib')
116
-
117
- @hook.generate
118
-
119
- rdoc = @hook.instance_variable_get :@rdoc
120
-
121
- assert rdoc.options.hyperlink_all
122
- end unless rdoc_4
123
-
124
- def test_generate_configuration_rdoc_string
125
- skip 'RDoc 3 required' unless rdoc_3?
126
-
127
- Gem.configuration[:rdoc] = '-A'
128
-
129
- FileUtils.mkdir_p @a.doc_dir
130
- FileUtils.mkdir_p File.join(@a.gem_dir, 'lib')
131
-
132
- @hook.generate
133
-
134
- rdoc = @hook.instance_variable_get :@rdoc
135
-
136
- assert rdoc.options.hyperlink_all
137
- end unless rdoc_4
138
-
139
56
  def test_generate_disabled
140
57
  @hook.generate_rdoc = false
141
58
  @hook.generate_ri = false
@@ -146,57 +63,6 @@ class TestGemRDoc < Gem::TestCase
146
63
  refute @hook.ri_installed?
147
64
  end
148
65
 
149
- def test_generate_force
150
- skip 'RDoc 3 required' unless rdoc_3?
151
-
152
- FileUtils.mkdir_p @a.doc_dir 'ri'
153
- FileUtils.mkdir_p @a.doc_dir 'rdoc'
154
- FileUtils.mkdir_p File.join(@a.gem_dir, 'lib')
155
-
156
- @hook.force = true
157
-
158
- @hook.generate
159
-
160
- assert_path_exists File.join(@a.doc_dir('rdoc'), 'index.html')
161
- assert_path_exists File.join(@a.doc_dir('ri'), 'cache.ri')
162
- end unless rdoc_4
163
-
164
- def test_generate_no_overwrite
165
- skip 'RDoc 3 required' unless rdoc_3?
166
-
167
- FileUtils.mkdir_p @a.doc_dir 'ri'
168
- FileUtils.mkdir_p @a.doc_dir 'rdoc'
169
- FileUtils.mkdir_p File.join(@a.gem_dir, 'lib')
170
-
171
- @hook.generate
172
-
173
- refute_path_exists File.join(@a.doc_dir('rdoc'), 'index.html')
174
- refute_path_exists File.join(@a.doc_dir('ri'), 'cache.ri')
175
- end unless rdoc_4
176
-
177
- def test_generate_legacy
178
- skip 'RDoc < 3.8 required' if rdoc_3_8_or_better?
179
-
180
- FileUtils.mkdir_p @a.doc_dir
181
- FileUtils.mkdir_p File.join(@a.gem_dir, 'lib')
182
-
183
- @hook.generate_legacy
184
-
185
- assert @hook.rdoc_installed?
186
- assert @hook.ri_installed?
187
- end unless rdoc_4
188
-
189
- def test_legacy_rdoc
190
- skip 'RDoc < 3.8 required' if rdoc_3_8_or_better?
191
-
192
- FileUtils.mkdir_p @a.doc_dir
193
- FileUtils.mkdir_p File.join(@a.gem_dir, 'lib')
194
-
195
- @hook.legacy_rdoc '--op', @a.doc_dir('rdoc')
196
-
197
- assert @hook.rdoc_installed?
198
- end unless rdoc_4
199
-
200
66
  def test_new_rdoc
201
67
  assert_kind_of RDoc::RDoc, @hook.new_rdoc
202
68
  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
@@ -283,6 +276,14 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
283
276
  refute_empty set.dependencies
284
277
  end
285
278
 
279
+ with_engine_version 'truffleruby', '2.0.0' do
280
+ set = Gem::RequestSet.new
281
+ gda = @GDA.new set, 'gem.deps.rb'
282
+ gda.gem 'a', :platforms => :ruby
283
+
284
+ refute_empty set.dependencies
285
+ end
286
+
286
287
  with_engine_version 'jruby', '1.7.6' do
287
288
  set = Gem::RequestSet.new
288
289
  gda = @GDA.new set, 'gem.deps.rb'
@@ -310,6 +311,12 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
310
311
 
311
312
  assert_empty @set.dependencies
312
313
  end
314
+
315
+ with_engine_version 'truffleruby', '1.2.3' do
316
+ @gda.gem 'a', :platforms => :mri
317
+
318
+ assert_empty @set.dependencies
319
+ end
313
320
  end
314
321
 
315
322
  def test_gem_platforms_maglev
@@ -332,6 +339,22 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
332
339
  Gem.win_platform = win_platform
333
340
  end
334
341
 
342
+ def test_gem_platforms_truffleruby
343
+ with_engine_version 'truffleruby', '1.0.0' do
344
+ set = Gem::RequestSet.new
345
+ gda = @GDA.new set, 'gem.deps.rb'
346
+ gda.gem 'a', :platforms => :truffleruby
347
+
348
+ refute_empty set.dependencies
349
+
350
+ set = Gem::RequestSet.new
351
+ gda = @GDA.new set, 'gem.deps.rb'
352
+ gda.gem 'a', :platforms => :maglev
353
+
354
+ assert_empty set.dependencies
355
+ end
356
+ end
357
+
335
358
  def test_gem_platforms_multiple
336
359
  win_platform, Gem.win_platform = Gem.win_platform?, false
337
360
 
@@ -652,20 +675,23 @@ end
652
675
  end
653
676
 
654
677
  def test_platform_mswin
655
- util_set_arch 'i686-darwin8.10.1' do
656
- @gda.platform :mswin do
657
- @gda.gem 'a'
678
+ if win_platform?
679
+ util_set_arch 'x86-mswin32-60' do
680
+ @gda.platform :mswin do
681
+ @gda.gem 'a'
682
+ end
683
+
684
+ assert_equal [dep('a')], @set.dependencies
685
+ refute_empty @set.dependencies
658
686
  end
687
+ else
688
+ util_set_arch 'i686-darwin8.10.1' do
689
+ @gda.platform :mswin do
690
+ @gda.gem 'a'
691
+ end
659
692
 
660
- assert_empty @set.dependencies
661
- end
662
-
663
- util_set_arch 'x86-mswin32-60' do
664
- @gda.platform :mswin do
665
- @gda.gem 'a'
693
+ assert_empty @set.dependencies
666
694
  end
667
-
668
- refute_empty @set.dependencies
669
695
  end
670
696
  end
671
697
 
@@ -708,26 +734,20 @@ end
708
734
  end
709
735
 
710
736
  def test_platforms
711
- util_set_arch 'i686-darwin8.10.1' do
712
- @gda.platforms :ruby do
713
- @gda.gem 'a'
714
- end
715
-
716
- assert_equal [dep('a')], @set.dependencies
737
+ unless win_platform?
738
+ util_set_arch 'i686-darwin8.10.1' do
739
+ @gda.platforms :ruby do
740
+ @gda.gem 'a'
741
+ end
717
742
 
718
- @gda.platforms :mswin do
719
- @gda.gem 'b'
720
- end
743
+ assert_equal [dep('a')], @set.dependencies
721
744
 
722
- assert_equal [dep('a')], @set.dependencies
723
- end
745
+ @gda.platforms :mswin do
746
+ @gda.gem 'b'
747
+ end
724
748
 
725
- util_set_arch 'x86-mswin32-60' do
726
- @gda.platforms :mswin do
727
- @gda.gem 'c'
749
+ assert_equal [dep('a')], @set.dependencies
728
750
  end
729
-
730
- assert_equal [dep('a'), dep('c')], @set.dependencies
731
751
  end
732
752
  end
733
753
 
@@ -741,6 +761,12 @@ end
741
761
  :engine => 'jruby', :engine_version => '1.7.6'
742
762
 
743
763
  end
764
+
765
+ with_engine_version 'truffleruby', '1.0.0-rc11' do
766
+ assert @gda.ruby RUBY_VERSION,
767
+ :engine => 'truffleruby', :engine_version => '1.0.0-rc11'
768
+
769
+ end
744
770
  end
745
771
 
746
772
  def test_ruby_engine_mismatch_engine
@@ -804,23 +830,20 @@ end
804
830
 
805
831
  def test_with_engine_version
806
832
  version = RUBY_VERSION
807
- engine = Gem.ruby_engine
808
-
809
- engine_version_const = "#{Gem.ruby_engine.upcase}_VERSION"
810
- engine_version = Object.const_get engine_version_const
833
+ engine = Gem.ruby_engine
834
+ engine_version = RUBY_ENGINE_VERSION
811
835
 
812
836
  with_engine_version 'other', '1.2.3' do
813
837
  assert_equal 'other', Gem.ruby_engine
814
- assert_equal '1.2.3', OTHER_VERSION
838
+ assert_equal '1.2.3', RUBY_ENGINE_VERSION
815
839
 
816
- assert_equal version, RUBY_VERSION if engine
840
+ assert_equal version, RUBY_VERSION
817
841
  end
818
842
 
819
843
  assert_equal version, RUBY_VERSION
820
844
  assert_equal engine, Gem.ruby_engine
821
845
 
822
- assert_equal engine_version, Object.const_get(engine_version_const) if
823
- engine
846
+ assert_equal engine_version, RUBY_ENGINE_VERSION if engine
824
847
  end
825
848
 
826
849
  end
@@ -20,6 +20,12 @@ class TestGemRequirement < Gem::TestCase
20
20
  refute_requirement_equal "= 1.2", "= 1.3"
21
21
  refute_requirement_equal "= 1.3", "= 1.2"
22
22
 
23
+ refute_requirement_equal "~> 1.3", "~> 1.3.0"
24
+ refute_requirement_equal "~> 1.3.0", "~> 1.3"
25
+
26
+ assert_requirement_equal ["> 2", "~> 1.3"], ["> 2.0", "~> 1.3"]
27
+ assert_requirement_equal ["> 2.0", "~> 1.3"], ["> 2", "~> 1.3"]
28
+
23
29
  refute_equal Object.new, req("= 1.2")
24
30
  refute_equal req("= 1.2"), Object.new
25
31
  end
@@ -293,7 +293,7 @@ class TestGemSecurityPolicy < Gem::TestCase
293
293
 
294
294
  def test_subject
295
295
  assert_equal 'email:nobody@example', @no.subject(PUBLIC_CERT)
296
- assert_equal '/C=JP/O=JIN.GR.JP/OU=RRR/CN=CA', @no.subject(CA_CERT)
296
+ assert_equal '/C=JP/ST=Tokyo/O=RubyGemsTest/CN=CA', @no.subject(CA_CERT)
297
297
  end
298
298
 
299
299
  def test_verify
@@ -1719,8 +1719,11 @@ dependencies: []
1719
1719
  end
1720
1720
 
1721
1721
  def test_date_use_env_source_date_epoch
1722
+ epoch = ENV["SOURCE_DATE_EPOCH"]
1722
1723
  ENV["SOURCE_DATE_EPOCH"] = "123456789"
1723
1724
  assert_equal Time.utc(1973,11,29,0,0,0), @a1.date
1725
+ ensure
1726
+ ENV["SOURCE_DATE_EPOCH"] = epoch
1724
1727
  end
1725
1728
 
1726
1729
  def test_dependencies
@@ -2416,6 +2419,35 @@ end
2416
2419
  assert_equal @a2, same_spec
2417
2420
  end
2418
2421
 
2422
+ def test_to_ruby_with_rsa_key
2423
+ rsa_key = OpenSSL::PKey::RSA.new(2048)
2424
+ @a2.signing_key = rsa_key
2425
+ ruby_code = @a2.to_ruby
2426
+
2427
+ expected = <<-SPEC
2428
+ # -*- encoding: utf-8 -*-
2429
+ # stub: a 2 ruby lib
2430
+
2431
+ Gem::Specification.new do |s|
2432
+ s.name = "a".freeze
2433
+ s.version = "2"
2434
+
2435
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
2436
+ s.require_paths = ["lib".freeze]
2437
+ s.authors = ["A User".freeze]
2438
+ s.date = "#{Gem::Specification::TODAY.strftime "%Y-%m-%d"}"
2439
+ s.description = "This is a test description".freeze
2440
+ s.email = "example@example.com".freeze
2441
+ s.files = ["lib/code.rb".freeze]
2442
+ s.homepage = "http://example.com".freeze
2443
+ s.rubygems_version = "#{Gem::VERSION}".freeze
2444
+ s.summary = "this is a summary".freeze
2445
+ end
2446
+ SPEC
2447
+
2448
+ assert_equal expected, ruby_code
2449
+ end
2450
+
2419
2451
  def test_to_ruby_for_cache
2420
2452
  @a2.add_runtime_dependency 'b', '1'
2421
2453
  @a2.dependencies.first.instance_variable_set :@type, nil
@@ -37,7 +37,7 @@ class TestGemStreamUI < Gem::TestCase
37
37
  end
38
38
 
39
39
  def test_ask
40
- Timeout.timeout(1) do
40
+ Timeout.timeout(5) do
41
41
  expected_answer = "Arthur, King of the Britons"
42
42
  @in.string = "#{expected_answer}\n"
43
43
  actual_answer = @sui.ask("What is your name?")
@@ -55,7 +55,7 @@ class TestGemStreamUI < Gem::TestCase
55
55
  end
56
56
 
57
57
  def test_ask_for_password
58
- Timeout.timeout(1) do
58
+ Timeout.timeout(5) do
59
59
  expected_answer = "Arthur, King of the Britons"
60
60
  @in.string = "#{expected_answer}\n"
61
61
  actual_answer = @sui.ask_for_password("What is your name?")