summaryrefslogtreecommitdiff
path: root/test/rubygems
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-02-28 22:25:55 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-02-28 22:25:55 +0000
commita5dfaca00a94bc3d135aae52b4458f5a355bf0ed (patch)
tree77c9580bb289422d6e97749934a8c24c8aadc76c /test/rubygems
parent3fc7731297d8de1f52cec9382a4f1f0a08bea949 (diff)
* lib/rubygems/ext/builder.rb: Fix incompatibilities when installing
extensions. Patch by Nobu. [ruby-trunk - Bug #7968] [ruby-trunk - Bug #7971] * lib/rubygems/ext/ext_conf_builder.rb: ditto. * lib/rubygems/installer.rb: ditto. * test/rubygems/test_gem_ext_ext_conf_builder.rb: Test for the above. * test/rubygems/test_gem_installer.rb: ditto. * lib/rubygems/commands/sources_command.rb: Prefer HTTPS over HTTP. * lib/rubygems/defaults.rb: ditto * lib/rubygems/dependency_resolver.rb: Ditto. * lib/rubygems/source.rb: ditto. * lib/rubygems/spec_fetcher.rb: ditto. * lib/rubygems/specification.rb: ditto. * lib/rubygems/test_utilities.rb: ditto. * test/rubygems/test_gem.rb: Test for the above. * test/rubygems/test_gem_commands_sources_command.rb: ditto. * test/rubygems/test_gem_dependency_resolver_api_set.rb: ditto. * test/rubygems/test_gem_remote_fetcher.rb: ditto. * test/rubygems/test_gem_source.rb: ditto. * test/rubygems/test_gem_spec_fetcher.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39542 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/rubygems')
-rw-r--r--test/rubygems/test_gem.rb2
-rw-r--r--test/rubygems/test_gem_commands_sources_command.rb39
-rw-r--r--test/rubygems/test_gem_dependency_resolver_api_set.rb80
-rw-r--r--test/rubygems/test_gem_ext_ext_conf_builder.rb12
-rw-r--r--test/rubygems/test_gem_installer.rb5
-rw-r--r--test/rubygems/test_gem_remote_fetcher.rb3
-rw-r--r--test/rubygems/test_gem_source.rb11
-rw-r--r--test/rubygems/test_gem_spec_fetcher.rb47
8 files changed, 179 insertions, 20 deletions
diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb
index bf77009ca6..9be77e1375 100644
--- a/test/rubygems/test_gem.rb
+++ b/test/rubygems/test_gem.rb
@@ -665,7 +665,7 @@ class TestGem < Gem::TestCase
end
def test_self_default_sources
- assert_equal %w[http://rubygems.org/], Gem.default_sources
+ assert_equal %w[https://rubygems.org/], Gem.default_sources
end
def test_self_detect_gemdeps
diff --git a/test/rubygems/test_gem_commands_sources_command.rb b/test/rubygems/test_gem_commands_sources_command.rb
index 6bae460c84..8dc2f91ed4 100644
--- a/test/rubygems/test_gem_commands_sources_command.rb
+++ b/test/rubygems/test_gem_commands_sources_command.rb
@@ -118,6 +118,45 @@ source #{@gem_repo} already present in the cache
assert_equal '', @ui.error
end
+ def test_execute_add_http_rubygems_org
+ http_rubygems_org = 'http://rubygems.org'
+ util_setup_fake_fetcher
+
+ install_specs @a1
+
+ specs = Gem::Specification.map { |spec|
+ [spec.name, spec.version, spec.original_platform]
+ }
+
+ specs_dump_gz = StringIO.new
+ Zlib::GzipWriter.wrap specs_dump_gz do |io|
+ Marshal.dump specs, io
+ end
+
+ @fetcher.data["#{http_rubygems_org}/specs.#{@marshal_version}.gz"] =
+ specs_dump_gz.string
+
+ @cmd.handle_options %W[--add #{http_rubygems_org}]
+
+ util_setup_spec_fetcher
+
+ ui = Gem::MockGemUi.new "n"
+
+ use_ui ui do
+ assert_raises Gem::MockGemUi::TermError do
+ @cmd.execute
+ end
+ end
+
+ assert_equal [@gem_repo], Gem.sources
+
+ expected = <<-EXPECTED
+ EXPECTED
+
+ assert_equal expected, @ui.output
+ assert_empty @ui.error
+ end
+
def test_execute_add_bad_uri
@cmd.handle_options %w[--add beta-gems.example.com]
diff --git a/test/rubygems/test_gem_dependency_resolver_api_set.rb b/test/rubygems/test_gem_dependency_resolver_api_set.rb
new file mode 100644
index 0000000000..c1e7eda191
--- /dev/null
+++ b/test/rubygems/test_gem_dependency_resolver_api_set.rb
@@ -0,0 +1,80 @@
+require 'rubygems/test_case'
+require 'rubygems/dependency_resolver'
+
+class TestGemDependencyResolverAPISet < Gem::TestCase
+
+ def setup
+ super
+
+ @DR = Gem::DependencyResolver
+
+ @api_set = @DR::APISet.new
+ @uri = 'https://rubygems.org/api/v1/dependencies'
+ @fetcher = Gem::FakeFetcher.new
+ Gem::RemoteFetcher.fetcher = @fetcher
+ end
+
+ def test_find_all
+ b_entry = {
+ :name => 'b',
+ :number => '2',
+ :platform => 'ruby',
+ :dependencies => [['a', '>= 0']],
+ }
+
+ @fetcher.data["#{@uri}?gems=b"] = Marshal.dump [b_entry]
+
+ b_req = @DR::DependencyRequest.new dep('b', '>= 0'), nil
+
+ expected = [
+ @DR::APISpecification.new(@api_set, b_entry)
+ ]
+
+ assert_equal expected, @api_set.find_all(b_req)
+ end
+
+ def test_prefetch
+ b_entry = {
+ :name => 'b',
+ :number => '2',
+ :platform => 'ruby',
+ :dependencies => [['a', '>= 0']],
+ }
+
+ a_entry = {
+ :name => 'a',
+ :number => '2',
+ :platform => 'ruby',
+ :dependencies => [],
+ }
+
+ @fetcher.data["#{@uri}?gems=a,b"] = Marshal.dump [a_entry, b_entry]
+
+ a_req = @DR::DependencyRequest.new dep('a', '>= 0'), nil
+ b_req = @DR::DependencyRequest.new dep('b', '>= 0'), nil
+
+ @api_set.prefetch([b_req, a_req])
+
+ assert_equal [a_entry], @api_set.versions('a')
+ assert_equal [b_entry], @api_set.versions('b')
+ end
+
+ def test_versions_cache
+ entry = {
+ :name => 'b',
+ :number => '2',
+ :platform => 'ruby',
+ :dependencies => [['a', '>= 0']],
+ }
+
+ @fetcher.data["#{@uri}?gems=b"] = Marshal.dump [entry]
+
+ assert_equal [entry], @api_set.versions('b')
+
+ @fetcher.data["#{@uri}?gems=b"] = 'garbage'
+
+ assert_equal [entry], @api_set.versions('b'), 'version data must be cached'
+ end
+
+end
+
diff --git a/test/rubygems/test_gem_ext_ext_conf_builder.rb b/test/rubygems/test_gem_ext_ext_conf_builder.rb
index 4a492c1235..c899592442 100644
--- a/test/rubygems/test_gem_ext_ext_conf_builder.rb
+++ b/test/rubygems/test_gem_ext_ext_conf_builder.rb
@@ -30,7 +30,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
end
- assert_match(/^#{Gem.ruby} extconf.rb/, output[0])
+ assert_match(/^#{Gem.ruby} .*extconf.rb/, output[0])
assert_equal "creating Makefile\n", output[1]
case RUBY_PLATFORM
when /mswin/ then
@@ -107,10 +107,10 @@ class TestGemExtExtConfBuilder < Gem::TestCase
assert_match(/\Aextconf failed:
-#{Gem.ruby} extconf.rb.*
+#{Gem.ruby} .*extconf.rb.*
checking for main\(\) in .*?nonexistent/m, error.message)
- assert_match(/^#{Gem.ruby} extconf.rb/, output[0])
+ assert_match(/^#{Gem.ruby} .*extconf.rb/, output[0])
end
def test_class_make
@@ -134,12 +134,6 @@ checking for main\(\) in .*?nonexistent/m, error.message)
assert_equal make_command, output[0]
assert_equal "#{make_command} install", output[2]
-
- edited_makefile = Gem.read_binary makefile_path
- edited_makefile.gsub!(/\r/, '') if Gem.win_platform?
-
- assert_match "\nRUBYARCHDIR = #{@ext}$(target_prefix)\n", edited_makefile
- assert_match "\nRUBYLIBDIR = #{@ext}$(target_prefix)\n", edited_makefile
end
def test_class_make_no_Makefile
diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb
index ddedd8144c..a4e6caf7df 100644
--- a/test/rubygems/test_gem_installer.rb
+++ b/test/rubygems/test_gem_installer.rb
@@ -81,7 +81,7 @@ load Gem.bin_path('a', 'executable', version)
gem_make_out = File.join @gemhome, 'gems', @spec.full_name, 'gem_make.out'
- assert_match %r%#{Regexp.escape Gem.ruby} extconf\.rb%,
+ assert_match %r%#{Regexp.escape Gem.ruby} .*extconf\.rb%,
File.read(gem_make_out)
assert_match %r%#{Regexp.escape Gem.ruby}: No such file%,
File.read(gem_make_out)
@@ -119,7 +119,8 @@ load Gem.bin_path('a', 'executable', version)
File.open File.join(@spec.gem_dir, "extconf.rb"), "w" do |f|
f.write <<-'RUBY'
puts "IN EXTCONF"
- File.open 'extconf_args', 'w' do |f|
+ extconf_args = File.join File.dirname(__FILE__), 'extconf_args'
+ File.open extconf_args, 'w' do |f|
f.puts ARGV.inspect
end
diff --git a/test/rubygems/test_gem_remote_fetcher.rb b/test/rubygems/test_gem_remote_fetcher.rb
index d3cc388db4..c178edc0d9 100644
--- a/test/rubygems/test_gem_remote_fetcher.rb
+++ b/test/rubygems/test_gem_remote_fetcher.rb
@@ -399,6 +399,9 @@ gems:
@fetcher.instance_variable_set :@a1, @a1
@fetcher.instance_variable_set :@a2, @a2
def @fetcher.fetch_path uri, mtime = nil, head = false
+ raise Gem::RemoteFetcher::FetchError.new 'no http upgrade', uri if
+ uri.scheme != 'http'
+
case uri.request_uri
when /#{@a1.spec_name}/ then
Gem.deflate Marshal.dump @a1
diff --git a/test/rubygems/test_gem_source.rb b/test/rubygems/test_gem_source.rb
index 2629f180a9..3de9073f96 100644
--- a/test/rubygems/test_gem_source.rb
+++ b/test/rubygems/test_gem_source.rb
@@ -184,5 +184,16 @@ class TestGemSource < Gem::TestCase
end
end
+ def test_uri_equals
+ @source.api_uri # cached
+
+ refute_equal URI('https://secure.example'), @source.api_uri
+
+ @source.uri = URI 'https://secure.example'
+
+ assert_equal URI('https://secure.example'), @source.uri
+ assert_equal URI('https://secure.example'), @source.api_uri
+ end
+
end
diff --git a/test/rubygems/test_gem_spec_fetcher.rb b/test/rubygems/test_gem_spec_fetcher.rb
index b4aff095c0..ac48edde96 100644
--- a/test/rubygems/test_gem_spec_fetcher.rb
+++ b/test/rubygems/test_gem_spec_fetcher.rb
@@ -32,13 +32,14 @@ class TestGemSpecFetcher < Gem::TestCase
Gem::NameTuple.new(spec.name, spec.version, spec.original_platform)
}
- v = Gem.marshal_version
- s_zip = util_gzip(Marshal.dump(Gem::NameTuple.to_basic(@specs)))
- l_zip = util_gzip(Marshal.dump(Gem::NameTuple.to_basic(@latest_specs)))
- p_zip = util_gzip(Marshal.dump(Gem::NameTuple.to_basic(@prerelease_specs)))
- @fetcher.data["#{@gem_repo}specs.#{v}.gz"] = s_zip
- @fetcher.data["#{@gem_repo}latest_specs.#{v}.gz"] = l_zip
- @fetcher.data["#{@gem_repo}prerelease_specs.#{v}.gz"] = p_zip
+ @v = Gem.marshal_version
+ @s_zip = util_gzip(Marshal.dump(Gem::NameTuple.to_basic(@specs)))
+ @l_zip = util_gzip(Marshal.dump(Gem::NameTuple.to_basic(@latest_specs)))
+ @p_zip = util_gzip(Marshal.dump(Gem::NameTuple.to_basic(@prerelease_specs)))
+
+ @fetcher.data["#{@gem_repo}specs.#{@v}.gz"] = @s_zip
+ @fetcher.data["#{@gem_repo}latest_specs.#{@v}.gz"] = @l_zip
+ @fetcher.data["#{@gem_repo}prerelease_specs.#{@v}.gz"] = @p_zip
@sf = Gem::SpecFetcher.new
@@ -200,7 +201,6 @@ class TestGemSpecFetcher < Gem::TestCase
assert_equal comp.sort, specs[@source].sort
end
-
def test_available_specs_cache
specs, _ = @sf.available_specs(:latest)
@@ -240,5 +240,36 @@ class TestGemSpecFetcher < Gem::TestCase
assert_kind_of Gem::SourceFetchProblem, errors.first
end
+ def test_upgrade_http_source
+ Gem.configuration.verbose = :really
+
+ source = Gem::Source.new URI 'http://example'
+ same_source = nil
+ https_source = nil
+
+ use_ui @ui do
+ same_source = @sf.upgrade_http_source source
+ end
+
+ assert_equal URI('http://example'), same_source.uri
+
+ @fetcher.data['https://example/'] = 'hello'
+
+ use_ui @ui do
+ https_source = @sf.upgrade_http_source source
+ end
+
+ assert_equal URI('https://example'), https_source.uri
+
+ assert_empty @ui.error
+
+ expected = <<-EXPECTED
+Upgrading http://example to HTTPS failed, continuing
+Upgraded http://example to HTTPS
+ EXPECTED
+
+ assert_equal expected, @ui.output
+ end
+
end