diff options
author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:02:05 +0000 |
---|---|---|
committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:02:05 +0000 |
commit | 0dc342de848a642ecce8db697b8fecd83a63e117 (patch) | |
tree | 2b7ed4724aff1f86073e4740134bda9c4aac1a39 /trunk/test/rubygems/test_gem_spec_fetcher.rb | |
parent | ef70cf7138ab8034b5b806f466e4b484b24f0f88 (diff) |
added tag v1_9_0_4
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_9_0_4@18845 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'trunk/test/rubygems/test_gem_spec_fetcher.rb')
-rw-r--r-- | trunk/test/rubygems/test_gem_spec_fetcher.rb | 303 |
1 files changed, 303 insertions, 0 deletions
diff --git a/trunk/test/rubygems/test_gem_spec_fetcher.rb b/trunk/test/rubygems/test_gem_spec_fetcher.rb new file mode 100644 index 0000000000..2e9ce1b7eb --- /dev/null +++ b/trunk/test/rubygems/test_gem_spec_fetcher.rb @@ -0,0 +1,303 @@ +require 'test/unit' +require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities') +require 'rubygems/spec_fetcher' + +class TestGemSpecFetcher < RubyGemTestCase + + def setup + super + + @uri = URI.parse @gem_repo + + util_setup_fake_fetcher + + @source_index.add_spec @pl1 + + @specs = @source_index.gems.sort.map do |name, spec| + [spec.name, spec.version, spec.original_platform] + end.sort + + @fetcher.data["#{@gem_repo}specs.#{Gem.marshal_version}.gz"] = + util_gzip(Marshal.dump(@specs)) + + @latest_specs = @source_index.latest_specs.sort.map do |spec| + [spec.name, spec.version, spec.original_platform] + end + + @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] = + util_gzip(Marshal.dump(@latest_specs)) + + @sf = Gem::SpecFetcher.new + end + + def test_fetch_all + @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec.rz"] = + util_zip(Marshal.dump(@a1)) + @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a2.full_name}.gemspec.rz"] = + util_zip(Marshal.dump(@a2)) + + dep = Gem::Dependency.new 'a', 1 + specs_and_sources = @sf.fetch dep, true + + spec_names = specs_and_sources.map do |spec, source_uri| + [spec.full_name, source_uri] + end + + expected = [[@a1.full_name, @gem_repo], [@a2.full_name, @gem_repo]] + + assert_equal expected, spec_names + + assert_same specs_and_sources.first.last, specs_and_sources.last.last + end + + def test_fetch_latest + @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec.rz"] = + util_zip(Marshal.dump(@a1)) + @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a2.full_name}.gemspec.rz"] = + util_zip(Marshal.dump(@a2)) + + dep = Gem::Dependency.new 'a', 1 + specs_and_sources = @sf.fetch dep + + spec_names = specs_and_sources.map do |spec, source_uri| + [spec.full_name, source_uri] + end + + assert_equal [[@a2.full_name, @gem_repo]], spec_names + end + + def test_fetch_legacy_repo + @fetcher.data["#{@gem_repo}specs.#{Gem.marshal_version}.gz"] = nil + @fetcher.data["#{@gem_repo}yaml"] = '' + util_setup_source_info_cache @a1, @a2 + + dep = Gem::Dependency.new 'a', 1 + specs = nil + + use_ui @ui do + specs = @sf.fetch dep, true + end + + expected = <<-EOF +WARNING: RubyGems 1.2+ index not found for: +\thttp://gems.example.com/ + +RubyGems will revert to legacy indexes degrading performance. + EOF + + assert_equal expected, @ui.error + + specs = specs.map { |spec, source_uri| [spec.full_name, source_uri] } + + expected = [ + [@a1.full_name, @gem_repo], + [@a2.full_name, @gem_repo], + ] + + assert_equal expected, specs + end + + def test_fetch_platform + util_set_arch 'i386-linux' + + @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@pl1.original_name}.gemspec.rz"] = + util_zip(Marshal.dump(@pl1)) + + dep = Gem::Dependency.new 'pl', 1 + specs_and_sources = @sf.fetch dep + + spec_names = specs_and_sources.map do |spec, source_uri| + [spec.full_name, source_uri] + end + + assert_equal [[@pl1.full_name, @gem_repo]], spec_names + end + + def test_fetch_spec + spec_uri = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec" + @fetcher.data["#{spec_uri}.rz"] = util_zip(Marshal.dump(@a1)) + + spec = @sf.fetch_spec ['a', Gem::Version.new(1), 'ruby'], @uri + assert_equal @a1.full_name, spec.full_name + + cache_dir = @sf.cache_dir URI.parse(spec_uri) + + cache_file = File.join cache_dir, "#{@a1.full_name}.gemspec" + + assert File.exist?(cache_file) + end + + def test_fetch_spec_cached + spec_uri = "#{@gem_repo}/#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec" + @fetcher.data["#{spec_uri}.rz"] = nil + + cache_dir = @sf.cache_dir URI.parse(spec_uri) + FileUtils.mkdir_p cache_dir + + cache_file = File.join cache_dir, "#{@a1.full_name}.gemspec" + + open cache_file, 'wb' do |io| + Marshal.dump @a1, io + end + + spec = @sf.fetch_spec ['a', Gem::Version.new(1), 'ruby'], @uri + assert_equal @a1.full_name, spec.full_name + end + + def test_fetch_spec_platform + @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@pl1.original_name}.gemspec.rz"] = + util_zip(Marshal.dump(@pl1)) + + spec = @sf.fetch_spec ['pl', Gem::Version.new(1), 'i386-linux'], @uri + + assert_equal @pl1.full_name, spec.full_name + end + + def test_fetch_spec_platform_ruby + @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec.rz"] = + util_zip(Marshal.dump(@a1)) + + spec = @sf.fetch_spec ['a', Gem::Version.new(1), nil], @uri + assert_equal @a1.full_name, spec.full_name + + spec = @sf.fetch_spec ['a', Gem::Version.new(1), ''], @uri + assert_equal @a1.full_name, spec.full_name + end + + def test_find_matching_all + dep = Gem::Dependency.new 'a', 1 + specs = @sf.find_matching dep, true + + expected = [ + [['a', Gem::Version.new(1), Gem::Platform::RUBY], @gem_repo], + [['a', Gem::Version.new(2), Gem::Platform::RUBY], @gem_repo], + ] + + assert_equal expected, specs + end + + def test_find_matching_latest + dep = Gem::Dependency.new 'a', 1 + specs = @sf.find_matching dep + + expected = [ + [['a', Gem::Version.new(2), Gem::Platform::RUBY], @gem_repo], + ] + + assert_equal expected, specs + end + + def test_find_matching_platform + util_set_arch 'i386-linux' + + dep = Gem::Dependency.new 'pl', 1 + specs = @sf.find_matching dep + + expected = [ + [['pl', Gem::Version.new(1), 'i386-linux'], @gem_repo], + ] + + assert_equal expected, specs + + util_set_arch 'i386-freebsd6' + + dep = Gem::Dependency.new 'pl', 1 + specs = @sf.find_matching dep + + assert_equal [], specs + end + + def test_find_all_platforms + util_set_arch 'i386-freebsd6' + + dep = Gem::Dependency.new 'pl', 1 + specs = @sf.find_matching dep, false, false + + expected = [ + [['pl', Gem::Version.new(1), 'i386-linux'], @gem_repo], + ] + + assert_equal expected, specs + end + + def test_list + specs = @sf.list + + assert_equal [@uri], specs.keys + assert_equal @latest_specs, specs[@uri].sort + end + + def test_list_all + specs = @sf.list true + + assert_equal [@uri], specs.keys + + assert_equal @specs, specs[@uri].sort + end + + def test_list_cache + specs = @sf.list + + assert !specs[@uri].empty? + + @fetcher.data["#{@gem_repo}/latest_specs.#{Gem.marshal_version}.gz"] = nil + + cached_specs = @sf.list + + assert_equal specs, cached_specs + end + + def test_list_cache_all + specs = @sf.list true + + assert !specs[@uri].empty? + + @fetcher.data["#{@gem_repo}/specs.#{Gem.marshal_version}.gz"] = nil + + cached_specs = @sf.list true + + assert_equal specs, cached_specs + end + + def test_load_specs + specs = @sf.load_specs @uri, 'specs' + + expected = [ + ['a', Gem::Version.new(1), Gem::Platform::RUBY], + ['a', Gem::Version.new(2), Gem::Platform::RUBY], + ['a_evil', Gem::Version.new(9), Gem::Platform::RUBY], + ['c', Gem::Version.new('1.2'), Gem::Platform::RUBY], + ['pl', Gem::Version.new(1), 'i386-linux'], + ] + + assert_equal expected, specs + + cache_dir = File.join Gem.user_home, '.gem', 'specs', 'gems.example.com%80' + assert File.exist?(cache_dir), "#{cache_dir} does not exist" + + cache_file = File.join cache_dir, "specs.#{Gem.marshal_version}" + assert File.exist?(cache_file) + end + + def test_load_specs_cached + @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] = '' + @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}"] = + ' ' * Marshal.dump(@latest_specs).length + + cache_dir = File.join Gem.user_home, '.gem', 'specs', 'gems.example.com%80' + + FileUtils.mkdir_p cache_dir + + cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}" + + open cache_file, 'wb' do |io| + Marshal.dump @latest_specs, io + end + + latest_specs = @sf.load_specs @uri, 'latest_specs' + + assert_equal @latest_specs, latest_specs + end + +end + |