Hello community,

here is the log from the commit of package yast2-registration for 
openSUSE:Factory checked in at 2018-06-18 13:48:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-registration (Old)
 and      /work/SRC/openSUSE:Factory/.yast2-registration.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "yast2-registration"

Mon Jun 18 13:48:55 2018 rev:19 rq:616724 version:4.0.40

Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-registration/yast2-registration.changes    
2018-05-17 19:31:58.322215131 +0200
+++ 
/work/SRC/openSUSE:Factory/.yast2-registration.new/yast2-registration.changes   
    2018-06-18 13:49:04.755919768 +0200
@@ -1,0 +2,33 @@
+Wed Jun 13 14:00:30 UTC 2018 - lsle...@suse.cz
+
+- Prefer the SCC credentials at upgrade when both NCC and SCC
+  credentials are present in the system (bsc#1096813)
+- 4.0.40
+
+-------------------------------------------------------------------
+Wed Jun  6 07:33:07 UTC 2018 - lsle...@suse.cz
+
+- Fixed also the another places detecting the installed product
+  (bsc#1095702)
+- 4.0.39
+
+-------------------------------------------------------------------
+Tue Jun  5 10:12:07 UTC 2018 - lsle...@suse.cz
+
+- Fixed evaluating the installed product (the installed upgraded
+  products are marked as "removed") (bsc#1095702)
+- 4.0.38
+
+-------------------------------------------------------------------
+Wed May 30 12:26:23 UTC 2018 - lsle...@suse.cz
+
+- Fixes for upgrade via SMT (bsc#1094865):
+  - Set the new "target_distro" for libzypp also after reloading
+    the target otherwise libzypp might reject the new repositories
+  - Copy also the SMT credentials into the installation system,
+    not only the SCC ones
+  - Copy the SMT (and also the RMT) SSL certificate into the
+    installation system (for HTTPS communication)
+- 4.0.37
+
+-------------------------------------------------------------------

Old:
----
  yast2-registration-4.0.36.tar.bz2

New:
----
  yast2-registration-4.0.40.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ yast2-registration.spec ++++++
--- /var/tmp/diff_new_pack.jhjvSN/_old  2018-06-18 13:49:05.951875562 +0200
+++ /var/tmp/diff_new_pack.jhjvSN/_new  2018-06-18 13:49:05.955875415 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-registration
-Version:        4.0.36
+Version:        4.0.40
 Release:        0
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build

++++++ yast2-registration-4.0.36.tar.bz2 -> yast2-registration-4.0.40.tar.bz2 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-registration-4.0.36/package/yast2-registration.changes 
new/yast2-registration-4.0.40/package/yast2-registration.changes
--- old/yast2-registration-4.0.36/package/yast2-registration.changes    
2018-05-15 09:42:03.000000000 +0200
+++ new/yast2-registration-4.0.40/package/yast2-registration.changes    
2018-06-14 09:29:44.000000000 +0200
@@ -1,4 +1,37 @@
 -------------------------------------------------------------------
+Wed Jun 13 14:00:30 UTC 2018 - lsle...@suse.cz
+
+- Prefer the SCC credentials at upgrade when both NCC and SCC
+  credentials are present in the system (bsc#1096813)
+- 4.0.40
+
+-------------------------------------------------------------------
+Wed Jun  6 07:33:07 UTC 2018 - lsle...@suse.cz
+
+- Fixed also the another places detecting the installed product
+  (bsc#1095702)
+- 4.0.39
+
+-------------------------------------------------------------------
+Tue Jun  5 10:12:07 UTC 2018 - lsle...@suse.cz
+
+- Fixed evaluating the installed product (the installed upgraded
+  products are marked as "removed") (bsc#1095702)
+- 4.0.38
+
+-------------------------------------------------------------------
+Wed May 30 12:26:23 UTC 2018 - lsle...@suse.cz
+
+- Fixes for upgrade via SMT (bsc#1094865):
+  - Set the new "target_distro" for libzypp also after reloading
+    the target otherwise libzypp might reject the new repositories
+  - Copy also the SMT credentials into the installation system,
+    not only the SCC ones
+  - Copy the SMT (and also the RMT) SSL certificate into the
+    installation system (for HTTPS communication)
+- 4.0.37
+
+-------------------------------------------------------------------
 Tue May  8 17:27:36 CEST 2018 - sch...@suse.de
 
 - Fixed: Offline migration against RMT sends some requests to 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-registration-4.0.36/package/yast2-registration.spec 
new/yast2-registration-4.0.40/package/yast2-registration.spec
--- old/yast2-registration-4.0.36/package/yast2-registration.spec       
2018-05-15 09:42:03.000000000 +0200
+++ new/yast2-registration-4.0.40/package/yast2-registration.spec       
2018-06-14 09:29:44.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-registration
-Version:        4.0.36
+Version:        4.0.40
 Release:        0
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-registration-4.0.36/src/lib/registration/clients/inst_migration_repos.rb
 
new/yast2-registration-4.0.40/src/lib/registration/clients/inst_migration_repos.rb
--- 
old/yast2-registration-4.0.36/src/lib/registration/clients/inst_migration_repos.rb
  2018-05-15 09:42:03.000000000 +0200
+++ 
new/yast2-registration-4.0.40/src/lib/registration/clients/inst_migration_repos.rb
  2018-06-14 09:29:44.000000000 +0200
@@ -46,27 +46,24 @@
         SwMgmt.copy_old_credentials(destdir)
 
         # import the SMT certificate to inst-sys
-        import_ssl_certificate
+        import_ssl_certificates
       end
 
-      # Import the old SSL certificate if present. Tries both SLE12 nad SLE11
-      # file locations.
-      def import_ssl_certificate
-        # SLE12 certificate path
-        cert_file = File.join(Yast::Installation.destdir, 
SUSE::Connect::YaST::SERVER_CERT_FILE)
+      # Import the old SSL certificate if present. Tries all known locations.
+      def import_ssl_certificates
+        prefix = Yast::Installation.destdir
 
-        if !File.exist?(cert_file)
-          # try the the SLE11 certificate path as well
-          cert_file = File.join(Yast::Installation.destdir,
-            SslCertificate::SLE11_SERVER_CERT_FILE)
-
-          return unless File.exist?(cert_file)
+        SslCertificate::PATHS.each do |file|
+          cert_file = File.join(prefix, file)
+          if File.exist?(cert_file)
+            log.info("Importing the SSL certificate from the old system: 
(#{prefix})#{file} ...")
+            cert = SslCertificate.load_file(cert_file)
+            target_path = File.join(SslCertificate::INSTSYS_CERT_DIR, 
File.basename(cert_file))
+            cert.import_to_instsys(target_path)
+          else
+            log.debug("SSL certificate (#{prefix})#{file} not found in the 
system")
+          end
         end
-
-        log.info("Importing the SSL certificate from the old system 
(#{cert_file})...")
-        cert = SslCertificate.load_file(cert_file)
-        # in Stage.initial this imports to the inst-sys
-        cert.import
       end
     end
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-registration-4.0.36/src/lib/registration/ssl_certificate.rb 
new/yast2-registration-4.0.40/src/lib/registration/ssl_certificate.rb
--- old/yast2-registration-4.0.36/src/lib/registration/ssl_certificate.rb       
2018-05-15 09:42:03.000000000 +0200
+++ new/yast2-registration-4.0.40/src/lib/registration/ssl_certificate.rb       
2018-06-14 09:29:44.000000000 +0200
@@ -12,13 +12,29 @@
     Yast.import "Stage"
 
     # Path to the registration certificate in the instsys
-    INSTSYS_SERVER_CERT_FILE = 
"/etc/pki/trust/anchors/registration_server.pem".freeze
-    # the SLE11 certificate path, see
-    # 
https://github.com/yast/yast-registration/blob/Code-11-SP3/src/modules/Register.ycp#L296-L297
-    SLE11_SERVER_CERT_FILE = "/etc/ssl/certs/registration-server.pem".freeze
+    INSTSYS_CERT_DIR = "/etc/pki/trust/anchors".freeze
+    INSTSYS_SERVER_CERT_FILE = File.join(INSTSYS_CERT_DIR, 
"registration_server.pem").freeze
     # Path to system CA certificates
     CA_CERTS_DIR = "/var/lib/ca-certificates".freeze
 
+    # all used certificate paths, this is used during upgrade to import
+    # the old certificate into the inst-sys, put the older paths at the end
+    # so the newer paths are checked first
+    PATHS = [
+      # the YaST (SUSEConnect) current default path
+      # /usr/share/pki/trust/anchors/registration_server.pem
+      SUSE::Connect::YaST::SERVER_CERT_FILE,
+      # RMT certificate
+      # 
https://github.com/SUSE/rmt/blob/b240ce577bd1637cfb57548f2741a1925cf3e4ee/public/tools/rmt-client-setup#L214
+      "/etc/pki/trust/anchors/rmt-server.pem",
+      # SMT certificate
+      # https://github.com/SUSE/smt/blob/SMT12/script/clientSetup4SMT.sh#L245
+      "/etc/pki/trust/anchors/registration-server.pem",
+      # the SLE11 path (for both YaST and the clientSetup4SMT.sh script)
+      # 
https://github.com/yast/yast-registration/blob/Code-11-SP3/src/modules/Register.ycp#L296-L297
+      "/etc/ssl/certs/registration-server.pem"
+    ].freeze
+
     attr_reader :x509_cert
 
     # Path to store the certificate of the registration server
@@ -175,12 +191,15 @@
     # to installation system is slightly different to the one followed
     # to import certificates to a installed system.
     #
+    # @param target_path [String] where the imported certificate will be saved,
+    #   the path should contain the INSTSYS_CERT_DIR prefix otherwise it might
+    #   not work correctly.
     # @return [Boolean] true if import was successful; false otherwise.
     #
     # @see update_instsys_ca
-    def import_to_instsys
+    def import_to_instsys(target_path = self.class.default_certificate_path)
       # Copy certificate
-      File.write(self.class.default_certificate_path, x509_cert.to_pem)
+      File.write(target_path, x509_cert.to_pem)
 
       # Update database
       self.class.update_instsys_ca
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-registration-4.0.36/src/lib/registration/sw_mgmt.rb 
new/yast2-registration-4.0.40/src/lib/registration/sw_mgmt.rb
--- old/yast2-registration-4.0.36/src/lib/registration/sw_mgmt.rb       
2018-05-15 09:42:03.000000000 +0200
+++ new/yast2-registration-4.0.40/src/lib/registration/sw_mgmt.rb       
2018-06-14 09:29:44.000000000 +0200
@@ -46,6 +46,7 @@
   Yast.import "Installation"
   Yast.import "PackageCallbacks"
   Yast.import "Popup"
+  Yast.import "Product"
 
   class SwMgmt
     include Yast
@@ -72,7 +73,7 @@
       # display progress when refreshing repositories
       PackageCallbacks.InitPackageCallbacks
 
-      raise_pkg_exception unless Pkg.TargetInitialize(Installation.destdir)
+      raise_pkg_exception unless init_target(Installation.destdir)
       raise_pkg_exception unless Pkg.TargetLoad
       raise_pkg_exception(SourceRestoreError) unless Pkg.SourceRestore
 
@@ -199,8 +200,9 @@
       elsif Stage.initial
         # during upgrade it depends on whether target is already initialized,
         # use the product from the medium for the self-update step
+        # (during upgrade the installed product might me already selected for 
removal)
         if installed
-          p["status"] == :installed && p["type"] == "base"
+          (p["status"] == :installed || p["status"] == :removed) && p["type"] 
== "base"
         elsif selected
           p["status"] == :selected
         else
@@ -208,7 +210,7 @@
         end
       else
         # in installed system or at upgrade the base product has valid type
-        p["status"] == :installed && p["type"] == "base"
+        (p["status"] == :installed || p["status"] == :removed) && p["type"] == 
"base"
       end
     end
 
@@ -223,15 +225,21 @@
     # Any product installed? (e.g. during upgrade)
     # @return [Boolean] true if at least one product is installed
     def self.product_installed?
-      Pkg.ResolvableProperties("", :product, "").any? { |p| p["status"] == 
:installed }
+      Pkg.ResolvableProperties("", :product, "").any? do |p|
+        p["status"] == :installed || p["status"] == :removed
+      end
     end
 
     def self.installed_products
       # just for testing/debugging
       return [FAKE_BASE_PRODUCT] if ENV["FAKE_BASE_PRODUCT"]
 
-      products = Pkg.ResolvableProperties("", :product, "").select do |p|
-        p["status"] == :installed
+      all_products = Pkg.ResolvableProperties("", :product, "")
+      log.info("Evaluating products: #{all_products}")
+
+      products = all_products.select do |p|
+        # installed or installed marked for removal (at upgrade)
+        p["status"] == :installed || p["status"] == :removed
       end
 
       log.info "Found installed products: #{products.map { |p| p["name"] }}"
@@ -443,18 +451,27 @@
         ::FileUtils.mkdir_p(dir)
       end
 
-      # check for NCC credentials
-      ncc_file = File.join(source_dir, dir, "NCCcredentials")
-      copy_old_credentials_file(ncc_file)
+      # if the system contains both NCC and SCC credentials then the SCC ones
+      # should be preferred (bsc#1096813)
+      # take advantage that "NCCcredentials" is alphabetically before
+      # "SCCcredentials" so it is enough to just sort the files and then the
+      # SCC credentials will simply overwrite the NCC credentials
+      Dir[File.join(source_dir, dir, "*")].sort.each do |path|
+        # skip non-files
+        next unless File.file?(path)
+
+        # check for the NCC credentials, we need to save them as the SCC 
credentials
+        new_path = if File.basename(path) == "NCCcredentials"
+          SUSE::Connect::YaST::GLOBAL_CREDENTIALS_FILE
+        else
+          File.join(dir, File.basename(path))
+        end
 
-      scc_file = File.join(source_dir, 
SUSE::Connect::YaST::GLOBAL_CREDENTIALS_FILE)
-      copy_old_credentials_file(scc_file)
+        copy_old_credentials_file(path, new_path)
+      end
     end
 
-    def self.copy_old_credentials_file(file)
-      return unless File.exist?(file)
-
-      new_file = SUSE::Connect::YaST::GLOBAL_CREDENTIALS_FILE
+    private_class_method def self.copy_old_credentials_file(file, new_file)
       log.info "Copying the old credentials from previous installation"
       log.info "Copying #{file} to #{new_file}"
 
@@ -465,17 +482,18 @@
 
       credentials = SUSE::Connect::YaST.credentials(new_file)
       log.info "Using previous credentials (username): #{credentials.username}"
+    rescue SUSE::Connect::MalformedSccCredentialsFile => e
+      log.warn "Cannot parse the credentials file: #{e.inspect}"
     end
 
-    private_class_method :copy_old_credentials_file
-
     def self.find_addon_updates(addons)
       log.info "Available addons: #{addons.map(&:identifier)}"
 
       products = Pkg.ResolvableProperties("", :product, "")
 
       installed_addons = products.select do |product|
-        product["status"] == :installed && product["type"] != "base"
+        (product["status"] == :installed || product["status"] == :removed) &&
+          product["type"] != "base"
       end
 
       product_names = installed_addons.map { |a| 
"#{a["name"]}-#{a["version"]}-#{a["release"]}" }
@@ -501,7 +519,7 @@
     # a helper method for iterating over repositories
     # @param repo_aliases [Array<String>] list of repository aliases
     # @param block block evaluated for each found repository
-    def self.each_repo(repo_aliases, &block)
+    private_class_method def self.each_repo(repo_aliases, &block)
       all_repos = Pkg.SourceGetCurrent(false)
 
       repo_aliases.each do |repo_alias|
@@ -611,6 +629,35 @@
       raise klass, Pkg.LastError
     end
 
-    private_class_method :each_repo
+    # initialize the libzypp target
+    # @param destdir [String] the target directory
+    # @return [Boolean] true on sucess, false otherwise
+    def self.init_target(destdir)
+      if Stage.initial && Mode.update
+        # at upgrade we need to override the target_distro otherwise libzypp
+        # will use the old value from the upgraded system which might not
+        # match the new target_distro from the media and might result in 
ignoring
+        # service repositories (bsc#1094865)
+        options = { "target_distro" => target_distribution }
+        Pkg.TargetInitializeOptions(destdir, options)
+      else
+        Pkg.TargetInitialize(destdir)
+      end
+    end
+
+    # get the target distribution for the new base product
+    # @return [String] target distribution name or empty string if not found
+    def self.target_distribution
+      base_products = Product.FindBaseProducts
+
+      # empty target distribution disables service compatibility check in case
+      # the base product cannot be found
+      target_distro = base_products ? base_products.first["register_target"] : 
""
+      log.info "Base product target distribution: #{target_distro.inspect}"
+
+      target_distro
+    end
+
+    private_class_method :init_target, :target_distribution
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-registration-4.0.36/src/lib/registration/ui/offline_migration_workflow.rb
 
new/yast2-registration-4.0.40/src/lib/registration/ui/offline_migration_workflow.rb
--- 
old/yast2-registration-4.0.36/src/lib/registration/ui/offline_migration_workflow.rb
 2018-05-15 09:42:03.000000000 +0200
+++ 
new/yast2-registration-4.0.40/src/lib/registration/ui/offline_migration_workflow.rb
 2018-06-14 09:29:44.000000000 +0200
@@ -125,8 +125,9 @@
           end
         end
 
-        log.info("Removing #{SslCertificate::INSTSYS_SERVER_CERT_FILE}")
-        File.delete(SslCertificate::INSTSYS_SERVER_CERT_FILE)
+        files = Dir[File.join(SslCertificate::INSTSYS_CERT_DIR, "*.pem")]
+        log.info("Removing files: #{files.inspect}")
+        File.delete(*files)
 
         # Cleanup
         FileUtils.rm_rf(SslCertificate::TMP_CA_CERTS_DIR)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-registration-4.0.36/test/inst_migration_repos_spec.rb 
new/yast2-registration-4.0.40/test/inst_migration_repos_spec.rb
--- old/yast2-registration-4.0.36/test/inst_migration_repos_spec.rb     
2018-05-15 09:42:03.000000000 +0200
+++ new/yast2-registration-4.0.40/test/inst_migration_repos_spec.rb     
2018-06-14 09:29:44.000000000 +0200
@@ -7,7 +7,7 @@
 describe Registration::Clients::InstMigrationRepos do
   let(:destdir) { "/mnt" }
   let(:sle12_cert) { File.join(destdir, SUSE::Connect::YaST::SERVER_CERT_FILE) 
}
-  let(:sle11_cert) { File.join(destdir, 
Registration::SslCertificate::SLE11_SERVER_CERT_FILE) }
+  let(:sle11_cert) { File.join(destdir, 
"/etc/ssl/certs/registration-server.pem") }
 
   before do
     allow(Yast::WFM).to receive(:call)
@@ -32,7 +32,7 @@
     expect(File).to receive(:read).with(sle12_cert).and_return(
       File.read(fixtures_file("test.pem"))
     )
-    expect_any_instance_of(Registration::SslCertificate).to receive(:import)
+    expect_any_instance_of(Registration::SslCertificate).to 
receive(:import_to_instsys)
 
     subject.main
   end
@@ -42,7 +42,7 @@
     expect(File).to receive(:read).with(sle11_cert).and_return(
       File.read(fixtures_file("test.pem"))
     )
-    expect_any_instance_of(Registration::SslCertificate).to receive(:import)
+    expect_any_instance_of(Registration::SslCertificate).to 
receive(:import_to_instsys)
 
     subject.main
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-registration-4.0.36/test/offline_migration_workflow_test.rb 
new/yast2-registration-4.0.40/test/offline_migration_workflow_test.rb
--- old/yast2-registration-4.0.36/test/offline_migration_workflow_test.rb       
2018-05-15 09:42:03.000000000 +0200
+++ new/yast2-registration-4.0.40/test/offline_migration_workflow_test.rb       
2018-06-14 09:29:44.000000000 +0200
@@ -26,6 +26,9 @@
         expect(Dir).to receive(:[])
           .with(File.join(Registration::SslCertificate::TMP_CA_CERTS_DIR, "*"))
           
.and_return([File.join(Registration::SslCertificate::TMP_CA_CERTS_DIR, 
"smt.pem")])
+        expect(Dir).to receive(:[])
+          .with("/etc/pki/trust/anchors/*.pem")
+          .and_return(["/etc/pki/trust/anchors/registration_server.pem"])
 
         var_lib_cert = File.join(Registration::SslCertificate::CA_CERTS_DIR, 
"/openssl/smt.pem")
         expect(File).to receive(:exist?).with(var_lib_cert).and_return(true)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-registration-4.0.36/test/sw_mgmt_spec.rb 
new/yast2-registration-4.0.40/test/sw_mgmt_spec.rb
--- old/yast2-registration-4.0.36/test/sw_mgmt_spec.rb  2018-05-15 
09:42:03.000000000 +0200
+++ new/yast2-registration-4.0.40/test/sw_mgmt_spec.rb  2018-06-14 
09:29:44.000000000 +0200
@@ -206,17 +206,18 @@
   describe ".copy_old_credentials" do
     let(:root_dir) { "/mnt" }
     let(:target_dir) { SUSE::Connect::YaST::DEFAULT_CREDENTIALS_DIR }
+    let(:ncc_credentials) { File.join(root_dir, target_dir, "NCCcredentials") }
+    let(:scc_credentials) { File.join(root_dir, target_dir, "SCCcredentials") }
 
     before do
       expect(File).to receive(:exist?).with(target_dir).and_return(false)
+      allow(File).to receive(:file?).and_return(true)
       expect(FileUtils).to receive(:mkdir_p).with(target_dir)
     end
 
     it "does not fail when the old credentials are missing" do
-      expect(File).to receive(:exist?).with(File.join(root_dir, target_dir, 
"NCCcredentials"))
-        .and_return(false)
-      expect(File).to receive(:exist?).with(File.join(root_dir, target_dir, 
"SCCcredentials"))
-        .and_return(false)
+      expect(Dir).to receive(:[]).with(File.join(root_dir, target_dir, "*"))
+        .and_return([])
 
       # no copy
       expect(FileUtils).to receive(:cp).never
@@ -225,29 +226,53 @@
     end
 
     it "copies old NCC credentials at upgrade" do
-      expect(File).to receive(:exist?).with(File.join(root_dir, target_dir, 
"NCCcredentials"))
-        .and_return(true)
-      expect(File).to receive(:exist?).with(File.join(root_dir, target_dir, 
"SCCcredentials"))
-        .and_return(false)
+      expect(Dir).to receive(:[]).with(File.join(root_dir, target_dir, "*"))
+        .and_return([ncc_credentials])
 
-      expect(subject).to receive(:`).with("cp -a " + File.join(root_dir, 
target_dir,
-        "NCCcredentials") + " " + File.join(target_dir, "SCCcredentials"))
+      expect(subject).to receive(:`).with("cp -a " + ncc_credentials + " " +
+        File.join(target_dir, "SCCcredentials"))
       expect(SUSE::Connect::YaST).to 
receive(:credentials).and_return(OpenStruct.new)
 
-      expect { subject.copy_old_credentials(root_dir) }.to_not raise_error
+      subject.copy_old_credentials(root_dir)
+    end
+
+    it "prefers the SCC credentials if both NCC and SCC credentials are 
present" do
+      # deliberately return the SCC credentials first here
+      expect(Dir).to receive(:[]).with(File.join(root_dir, target_dir, "*"))
+        .and_return([scc_credentials, ncc_credentials])
+
+      # copy the credentials in the NCC, SCC order (bsc#1096813)
+      expect(subject).to receive(:`).with("cp -a " + ncc_credentials + " " +
+        File.join(target_dir, "SCCcredentials")).ordered
+      expect(subject).to receive(:`).with("cp -a " + scc_credentials + " " +
+        File.join(target_dir, "SCCcredentials")).ordered
+
+      allow(SUSE::Connect::YaST).to 
receive(:credentials).and_return(OpenStruct.new)
+
+      subject.copy_old_credentials(root_dir)
     end
 
     it "copies old SCC credentials at upgrade" do
-      expect(File).to receive(:exist?).with(File.join(root_dir, target_dir, 
"NCCcredentials"))
-        .and_return(false)
-      expect(File).to receive(:exist?).with(File.join(root_dir, target_dir, 
"SCCcredentials"))
-        .and_return(true)
+      expect(Dir).to receive(:[]).with(File.join(root_dir, target_dir, "*"))
+        .and_return([scc_credentials])
 
-      expect(subject).to receive(:`).with("cp -a " + File.join(root_dir, 
target_dir,
-        "SCCcredentials") + " " + File.join(target_dir, "SCCcredentials"))
+      expect(subject).to receive(:`).with("cp -a " + scc_credentials + " " +
+        File.join(target_dir, "SCCcredentials"))
       expect(SUSE::Connect::YaST).to 
receive(:credentials).and_return(OpenStruct.new)
 
-      expect { subject.copy_old_credentials(root_dir) }.to_not raise_error
+      subject.copy_old_credentials(root_dir)
+    end
+
+    it "copies old SMT credentials at upgrade" do
+      smt_credentials = File.join(root_dir, target_dir, 
"SMT-http_smt_example_com")
+      expect(Dir).to receive(:[]).with(File.join(root_dir, target_dir, "*"))
+        .and_return([smt_credentials])
+
+      expect(subject).to receive(:`).with("cp -a " + smt_credentials + " " +
+        File.join(target_dir, "SMT-http_smt_example_com"))
+      expect(SUSE::Connect::YaST).to 
receive(:credentials).and_return(OpenStruct.new)
+
+      subject.copy_old_credentials(root_dir)
     end
   end
 


Reply via email to