From: Jan Provaznik <[email protected]>
- even if downloading of repomd file failed, empty groups.xml or packages.xml
files were cached.
- also fixed repository_manager's rspec filename
---
.../util/repository_manager/comps_repository.rb | 22 +++++---
src/spec/utils/repository_manager.rb | 45 ----------------
src/spec/utils/repository_manager_spec.rb | 55 ++++++++++++++++++++
3 files changed, 68 insertions(+), 54 deletions(-)
delete mode 100644 src/spec/utils/repository_manager.rb
create mode 100644 src/spec/utils/repository_manager_spec.rb
diff --git a/src/app/util/repository_manager/comps_repository.rb
b/src/app/util/repository_manager/comps_repository.rb
index 4454e5a..2da48b9 100644
--- a/src/app/util/repository_manager/comps_repository.rb
+++ b/src/app/util/repository_manager/comps_repository.rb
@@ -1,6 +1,9 @@
require 'util/repository_manager/abstract_repository'
require 'open-uri'
+class MissingRepoPart < StandardError
+end
+
class CompsRepository < AbstractRepository
def initialize(conf)
super
@@ -42,15 +45,19 @@ class CompsRepository < AbstractRepository
def download_xml(type)
begin
url = get_url(type)
- rescue
+ rescue MissingRepoPart
return ''
end
- xml_data = open(url)
+ resp = Typhoeus::Request.get(url, :timeout => 30000, :follow_location =>
true, :max_redirects => 3)
+ unless resp.code == 200
+ raise "failed to fetch #{url}: #{resp.body}"
+ end
+
if url =~ /\.gz$/
- return Zlib::GzipReader.new(xml_data).read
+ return Zlib::GzipReader.new(resp.body).read
else
- return xml_data.read
+ return resp.body
end
end
@@ -103,15 +110,12 @@ class CompsRepository < AbstractRepository
return File.join(@baseurl, 'repodata', 'repomd.xml')
else
location =
repomd.xpath("/xmlns:repomd/xmlns:da...@type=\"#{type}\"]/xmlns:location").first
- raise "location for #{type} data not found" unless location
+ raise MissingRepoPart, "location for #{type} data not found" unless
location
return File.join(@baseurl, location['href'])
end
end
def repomd
- unless @repomd
- @repomd = Nokogiri::XML(get_xml('repomd'))
- end
- return @repomd
+ @repomd ||= Nokogiri::XML(get_xml('repomd'))
end
end
diff --git a/src/spec/utils/repository_manager.rb
b/src/spec/utils/repository_manager.rb
deleted file mode 100644
index cac151c..0000000
--- a/src/spec/utils/repository_manager.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-require 'spec_helper'
-
-describe RepositoryManager do
- before(:all) do
- @repositories_json = File.read(File.join(File.dirname(__FILE__),
- '../fixtures/repositories.json'))
- @packagegroups_json = File.read(File.join(File.dirname(__FILE__),
-
'../fixtures/packagegroups.json'))
- @packages_json = File.read(File.join(File.dirname(__FILE__),
- '../fixtures/packages.json'))
- end
-
- before(:each) do
- hydra = Typhoeus::Hydra.hydra
- hydra.stub(:get, "http://pulptest/repositories/").and_return(
- Typhoeus::Response.new(:code => 200, :body => @repositories_json))
- hydra.stub(:get,
"http://pulptest/repositories/jboss/packagegroups/").and_return(
- Typhoeus::Response.new(:code => 200, :body => @packagegroups_json))
- hydra.stub(:get,
"http://pulptest/repositories/jboss/packages/").and_return(
- Typhoeus::Response.new(:code => 200, :body => @packages_json))
-
- @rmanager = RepositoryManager.new(:config => [{
- 'baseurl' => 'http://pulptest',
- 'yumurl' => 'http://pulptest',
- 'type' => 'pulp',
- }])
- end
-
- it "should return a list of repositories" do
- @rmanager.repositories.should have(1).items
- @rmanager.repositories.first.id.should eql('jboss')
- end
-
- it "should return a list of packagegroups" do
- rep = @rmanager.repositories.first
- rep.groups.keys.sort.should == ["JBoss Core Packages", "JBoss Drools",
- "JBoss Social Networking Web Application"]
- end
-
- it "should return a list of packages" do
- rep = @rmanager.repositories.first
- rep.packages.map {|p| p[:name]}.sort.should == ["J-SocialNet", "JSDoc",
- "drools-guvnor", "jboss-as5", "jboss-jgroups", "jboss-rails"]
- end
-end
diff --git a/src/spec/utils/repository_manager_spec.rb
b/src/spec/utils/repository_manager_spec.rb
new file mode 100644
index 0000000..f38c507
--- /dev/null
+++ b/src/spec/utils/repository_manager_spec.rb
@@ -0,0 +1,55 @@
+require 'spec_helper'
+
+describe RepositoryManager do
+ before(:all) do
+ @repositories_json = File.read(File.join(File.dirname(__FILE__),
+ '../fixtures/repositories.json'))
+ @packagegroups_json = File.read(File.join(File.dirname(__FILE__),
+
'../fixtures/packagegroups.json'))
+ @packages_json = File.read(File.join(File.dirname(__FILE__),
+ '../fixtures/packages.json'))
+ end
+
+ before(:each) do
+ hydra = Typhoeus::Hydra.hydra
+ hydra.stub(:get, "http://pulptest/repositories/").and_return(
+ Typhoeus::Response.new(:code => 200, :body => @repositories_json))
+ hydra.stub(:get,
"http://pulptest/repositories/jboss/packagegroups/").and_return(
+ Typhoeus::Response.new(:code => 200, :body => @packagegroups_json))
+ hydra.stub(:get,
"http://pulptest/repositories/jboss/packages/").and_return(
+ Typhoeus::Response.new(:code => 200, :body => @packages_json))
+ hydra.stub(:get, "http://nonexisting.repo/").and_return(
+ Typhoeus::Response.new(:code => 404))
+
+ @rmanager = RepositoryManager.new(:config => [{
+ 'baseurl' => 'http://pulptest',
+ 'yumurl' => 'http://pulptest',
+ 'type' => 'pulp',
+ }])
+ end
+
+ it "should return a list of repositories" do
+ @rmanager.repositories.should have(1).items
+ @rmanager.repositories.first.id.should eql('jboss')
+ end
+
+ it "should return a list of packagegroups" do
+ rep = @rmanager.repositories.first
+ rep.groups.keys.sort.should == ["JBoss Core Packages", "JBoss Drools",
+ "JBoss Social Networking Web Application"]
+ end
+
+ it "should return a list of packages" do
+ rep = @rmanager.repositories.first
+ rep.packages.map {|p| p[:name]}.sort.should == ["J-SocialNet", "JSDoc",
+ "drools-guvnor", "jboss-as5", "jboss-jgroups", "jboss-rails"]
+ end
+
+ it "should raise exception when downloading of repomd fails" do
+ @rmanager = RepositoryManager.new(:config => [{
+ 'baseurl' => 'http://nonexisting.repo/',
+ 'type' => 'xml',
+ }])
+ lambda { @rmanager.all_groups}.should raise_error
+ end
+end
--
1.7.2.3
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel