diff --git a/src/api/app/models/product.rb b/src/api/app/models/product.rb index 4efebf712a7..c51299baa3c 100644 --- a/src/api/app/models/product.rb +++ b/src/api/app/models/product.rb @@ -17,7 +17,9 @@ def self.find_by_name_and_package( name, package ) end def set_CPE(swClass, vendor, version=nil) - self.cpe = "cpe:/#{swClass}:#{vendor}:#{self.name}" + # hack for old SLE 11 definitions + vendor="suse" if vendor.start_with?("SUSE LINUX") + self.cpe = "cpe:/#{swClass}:#{vendor.downcase}:#{self.name.downcase}" self.cpe += ":#{version}" if version end diff --git a/src/api/test/fixtures/backend/source/simple_product/simple.product b/src/api/test/fixtures/backend/source/simple_product/simple.product index 70f09592551..036e9404559 100644 --- a/src/api/test/fixtures/backend/source/simple_product/simple.product +++ b/src/api/test/fixtures/backend/source/simple_product/simple.product @@ -4,10 +4,8 @@ OBS_Fuzzies simple - 11 - 2 + 13.1 0 - sle sle-11-%{_target_cpu} @@ -27,7 +25,7 @@ lines - SLES + openSUSE Beta2 @@ -36,8 +34,8 @@ lines en_US suse suse/setup/descr - - SUSE_SLE + + openSUSE @@ -51,12 +49,11 @@ lines @@ -73,7 +70,6 @@ lines - diff --git a/src/api/test/fixtures/backend/source/sle11_product/SUSE_SLES.product b/src/api/test/fixtures/backend/source/sle11_product/SUSE_SLES.product new file mode 100644 index 00000000000..ac570439d91 --- /dev/null +++ b/src/api/test/fixtures/backend/source/sle11_product/SUSE_SLES.product @@ -0,0 +1,87 @@ + + + + + + SUSE LINUX Products GmbH, Nuernberg, Germany + SUSE_SLES + 11 + 2 + 0 + sle + + sle-11-%{_target_cpu} + + + + + + Simple OBS Product + + Some text +in multiple +lines + + + + https://bugzilla.novell.com/ + + + + SLES + Beta2 + + + + + en_US + suse + suse/setup/descr + + SUSE_SLE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/api/test/fixtures/backend/source/sle11_product/defaults-archsets.include b/src/api/test/fixtures/backend/source/sle11_product/defaults-archsets.include new file mode 100644 index 00000000000..fdb86ae4819 --- /dev/null +++ b/src/api/test/fixtures/backend/source/sle11_product/defaults-archsets.include @@ -0,0 +1,24 @@ + + + + i586 + noarch + + + x86_64 + noarch + + + ppc64 + noarch + + + s390x + noarch + + + ia64 + noarch + + + diff --git a/src/api/test/fixtures/backend/source/sle11_product/defaults-conditionals.include b/src/api/test/fixtures/backend/source/sle11_product/defaults-conditionals.include new file mode 100644 index 00000000000..34dc85a8382 --- /dev/null +++ b/src/api/test/fixtures/backend/source/sle11_product/defaults-conditionals.include @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/api/test/fixtures/backend/source/sle11_product/defaults-repositories.include b/src/api/test/fixtures/backend/source/sle11_product/defaults-repositories.include new file mode 100644 index 00000000000..ffa278eea8c --- /dev/null +++ b/src/api/test/fixtures/backend/source/sle11_product/defaults-repositories.include @@ -0,0 +1,5 @@ + + + + + diff --git a/src/api/test/fixtures/backend/source/sle11_product/obs-release.spec b/src/api/test/fixtures/backend/source/sle11_product/obs-release.spec new file mode 100644 index 00000000000..648cdf45ed2 --- /dev/null +++ b/src/api/test/fixtures/backend/source/sle11_product/obs-release.spec @@ -0,0 +1,47 @@ + +Name: obs-release +%define product obs +%define betaversion Beta2 +Summary: OBS +Version: ___VERSION___ +Release: 0 +License: BSD 3-Clause +Group: System/Fhs + +Provides: obs-release + +___PRODUCT_PROVIDES___ + +AutoReqProv: on +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +___DESCRIPTION___ + + +___FLAVOR_PACKAGES___ + +%prep + +%build + + +%install +mkdir -p $RPM_BUILD_ROOT/etc +echo "OBS %{version} (%{_target_cpu})" > $RPM_BUILD_ROOT/etc/obs-release +echo VERSION = 11 >> $RPM_BUILD_ROOT/etc/obs-release +echo PATCHLEVEL = 2 >> $RPM_BUILD_ROOT/etc/obs-release + +___CREATE_PRODUCT_FILES___ + +%clean +rm -rf %buildroot + +%files +%defattr(644,root,root,755) +%dir /etc/products.d +/etc/products.d/*.prod +/etc/obs-release + + +%changelog diff --git a/src/api/test/fixtures/backend/source/sle11_product/obs.group b/src/api/test/fixtures/backend/source/sle11_product/obs.group new file mode 100644 index 00000000000..80c26d7a7e4 --- /dev/null +++ b/src/api/test/fixtures/backend/source/sle11_product/obs.group @@ -0,0 +1,17 @@ + + + + OBS Extension + Simple OBS list + OBS + Blah +Blub + true + + + + + + + + diff --git a/src/api/test/functional/product_test.rb b/src/api/test/functional/product_test.rb index f9cf9317642..7831220c244 100644 --- a/src/api/test/functional/product_test.rb +++ b/src/api/test/functional/product_test.rb @@ -36,11 +36,11 @@ def test_simple_product_file get "/source/home:tom:temporary?view=productlist" assert_response :success assert_xml_tag :tag => "product", - :attributes => { :name => "simple", :cpe => "cpe:/a:OBS_Fuzzies:simple:11.2", :originproject => "home:tom:temporary" } + :attributes => { :name => "simple", :cpe => "cpe:/o:obs_fuzzies:simple:13.1", :originproject => "home:tom:temporary" } get "/source/home:tom:temporary?view=productlist&expand=1" assert_response :success assert_xml_tag :tag => "product", - :attributes => { :name => "simple", :cpe => "cpe:/a:OBS_Fuzzies:simple:11.2", :originproject => "home:tom:temporary" } + :attributes => { :name => "simple", :cpe => "cpe:/o:obs_fuzzies:simple:13.1", :originproject => "home:tom:temporary" } # product views via project links get "/source/home:tom:temporary:link?view=productlist" @@ -49,7 +49,7 @@ def test_simple_product_file get "/source/home:tom:temporary:link?view=productlist&expand=1" assert_response :success assert_xml_tag :tag => "product", - :attributes => { :name => "simple", :cpe => "cpe:/a:OBS_Fuzzies:simple:11.2", :originproject => "home:tom:temporary" } + :attributes => { :name => "simple", :cpe => "cpe:/o:obs_fuzzies:simple:13.1", :originproject => "home:tom:temporary" } # product views in a package get "/source/home:tom:temporary/_product?view=issues" @@ -68,15 +68,13 @@ def test_simple_product_file product = Package.find_by_project_and_name("home:tom:temporary","_product").products.first assert_equal "simple", product.name - assert_equal "cpe:/a:OBS_Fuzzies:simple:11.2", product.cpe + assert_equal "cpe:/o:obs_fuzzies:simple:13.1", product.cpe assert_equal product.product_update_repositories.first.repository.project.name, "BaseDistro2.0:LinkedUpdateProject" assert_equal product.product_update_repositories.first.repository.name, "BaseDistro2LinkedUpdateProject_repo" - get "/source/home:tom:temporary/_product:simple-SP3-migration/simple-SP3-migration.spec" - assert_response :success get "/source/home:tom:temporary/_product:simple-release/simple-release.spec" assert_response :success - get "/source/home:tom:temporary/_product:sle-obs-cd-cd-i586_x86_64/sle-obs-cd-cd-i586_x86_64.kiwi" + get "/source/home:tom:temporary/_product:simple-cd-cd-i586_x86_64/simple-cd-cd-i586_x86_64.kiwi" assert_response :success assert_xml_tag :tag => "source", :attributes => { :path => "obs://home:Iggy/10.2" }, :parent => { :tag => "instrepo", :attributes => { :name => "repository_1", :priority => "1", :local => "true" } } @@ -84,7 +82,7 @@ def test_simple_product_file :parent => { :tag => "metadata" } assert_xml_tag :tag => "repopackage", :attributes => { :name => "patterns-obs", :medium => "0", :removearch => "src,nosrc", :onlyarch => "i586,x86_64" }, :parent => { :tag => "metadata" } - get "/source/home:tom:temporary/_product:sle-obs-cd-cd-i586_x86_64/sle-obs-cd-cd-i586_x86_64.kwd" + get "/source/home:tom:temporary/_product:simple-cd-cd-i586_x86_64/simple-cd-cd-i586_x86_64.kwd" assert_response :success assert_match(/^obs-server: \+Kwd:\\nsupport_l3\\n-Kwd:/, @response.body) @@ -96,6 +94,99 @@ def test_simple_product_file assert_match(/Illegal support key ILLEGAL for obs-server/, @response.body) login_tom + delete "/source/home:tom:temporary:link" + assert_response :success + delete "/source/home:tom:temporary" + assert_response :success + end + + def test_sle11_product_file + login_tom + put "/source/home:tom:temporary/_meta", + ' <description/> + <repository name="me" /> + </project>' + assert_response :success + put "/source/home:tom:temporary/_product/_meta", + '<package project="home:tom:temporary" name="_product"> <title/> <description/> + <person userid="adrian" role="maintainer" /> + </package>' + assert_response :success + put "/source/home:tom:temporary:link/_meta", + '<project name="home:tom:temporary:link"> <title/> <description/> + <link project="home:tom:temporary" /> + <repository name="me" /> + </project>' + assert_response :success + + # everything works even when the project is not owner by me? + login_adrian + # upload sources in right order + ["defaults-archsets.include", "defaults-conditionals.include", "defaults-repositories.include", "obs.group", "obs-release.spec", "SUSE_SLES.product"].each do |file| + raw_put "/source/home:tom:temporary/_product/#{file}", + File.open("#{Rails.root}/test/fixtures/backend/source/sle11_product/#{file}").read() + assert_response :success + end + + # product views in a project + get "/source/home:tom:temporary?view=productlist" + assert_response :success + assert_xml_tag :tag => "product", + :attributes => { :name => "SUSE_SLES", :cpe => "cpe:/a:suse:suse_sles:11.2", :originproject => "home:tom:temporary" } + get "/source/home:tom:temporary?view=productlist&expand=1" + assert_response :success + assert_xml_tag :tag => "product", + :attributes => { :name => "SUSE_SLES", :cpe => "cpe:/a:suse:suse_sles:11.2", :originproject => "home:tom:temporary" } + + # product views via project links + get "/source/home:tom:temporary:link?view=productlist" + assert_response :success + assert_no_xml_tag :tag => "product" + get "/source/home:tom:temporary:link?view=productlist&expand=1" + assert_response :success + assert_xml_tag :tag => "product", + :attributes => { :name => "SUSE_SLES", :cpe => "cpe:/a:suse:suse_sles:11.2", :originproject => "home:tom:temporary" } + + # product views in a package + get "/source/home:tom:temporary/_product?view=issues" + assert_response :success + assert_xml_tag :tag => "kind", :content => "product" + get "/source/home:tom:temporary/_product?view=products" + assert_response :success + assert_xml_tag :parent => { :tag => "product", :attributes => { :id => 'simple' } }, + :tag => "name", :content => "SUSE_SLES" + get "/source/home:tom:temporary/_product?view=products&product=SUSE_SLES" + assert_response :success + assert_xml_tag :tag => "name", :content => "SUSE_SLES" + get "/source/home:tom:temporary/_product?view=products&product=DOES_NOT_EXIST" + assert_response :success + assert_no_xml_tag :tag => "name" + + product = Package.find_by_project_and_name("home:tom:temporary","_product").products.first + assert_equal "SUSE_SLES", product.name + assert_equal "cpe:/a:suse:suse_sles:11.2", product.cpe + assert_equal product.product_update_repositories.first.repository.project.name, "BaseDistro2.0:LinkedUpdateProject" + assert_equal product.product_update_repositories.first.repository.name, "BaseDistro2LinkedUpdateProject_repo" + + get "/source/home:tom:temporary/_product:SUSE_SLES-SP3-migration/SUSE_SLES-SP3-migration.spec" + assert_response :success + get "/source/home:tom:temporary/_product:SUSE_SLES-release/SUSE_SLES-release.spec" + assert_response :success + get "/source/home:tom:temporary/_product:sle-obs-cd-cd-i586_x86_64/sle-obs-cd-cd-i586_x86_64.kiwi" + assert_response :success + assert_xml_tag :tag => "source", :attributes => { :path => "obs://home:Iggy/10.2" }, + :parent => { :tag => "instrepo", :attributes => { :name => "repository_1", :priority => "1", :local => "true" } } + assert_xml_tag :tag => "repopackage", :attributes => { :name => "skelcd-obs", :medium => "0", :removearch => "src,nosrc", :onlyarch => "i586,x86_64" }, + :parent => { :tag => "metadata" } + assert_xml_tag :tag => "repopackage", :attributes => { :name => "patterns-obs", :medium => "0", :removearch => "src,nosrc", :onlyarch => "i586,x86_64" }, + :parent => { :tag => "metadata" } + get "/source/home:tom:temporary/_product:sle-obs-cd-cd-i586_x86_64/sle-obs-cd-cd-i586_x86_64.kwd" + assert_response :success + assert_match(/^obs-server: \+Kwd:\\nsupport_l3\\n-Kwd:/, @response.body) + + login_tom + delete "/source/home:tom:temporary:link" + assert_response :success delete "/source/home:tom:temporary" assert_response :success end