Hello community,

here is the log from the commit of package yast2-services-manager for 
openSUSE:Factory checked in at 2014-07-18 14:03:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-services-manager (Old)
 and      /work/SRC/openSUSE:Factory/.yast2-services-manager.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "yast2-services-manager"

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/yast2-services-manager/yast2-services-manager.changes
    2014-07-13 17:15:27.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.yast2-services-manager.new/yast2-services-manager.changes
       2014-07-18 14:03:21.000000000 +0200
@@ -1,0 +2,11 @@
+Mon Jul 14 10:20:39 CEST 2014 - [email protected]
+
+- ServicesManagerServiceClass and ServicesManagerTargetClass
+  switched to using lazy loading of system(ctl) data
+- Fixed Export AutoYast functionality to return the currently
+  supported and documented format
+- Added tests for all the other AutoYast formats supported
+  for Import (all bnc#885800)
+- 3.1.21
+
+-------------------------------------------------------------------

Old:
----
  yast2-services-manager-3.1.20.tar.bz2

New:
----
  yast2-services-manager-3.1.21.tar.bz2

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

Other differences:
------------------
++++++ yast2-services-manager.spec ++++++
--- /var/tmp/diff_new_pack.nSqv8B/_old  2014-07-18 14:03:22.000000000 +0200
+++ /var/tmp/diff_new_pack.nSqv8B/_new  2014-07-18 14:03:22.000000000 +0200
@@ -24,7 +24,7 @@
 ######################################################################
 
 Name:           yast2-services-manager
-Version:        3.1.20
+Version:        3.1.21
 Release:        0
 
 BuildArch:      noarch

++++++ yast2-services-manager-3.1.20.tar.bz2 -> 
yast2-services-manager-3.1.21.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-services-manager-3.1.20/package/yast2-services-manager.changes 
new/yast2-services-manager-3.1.21/package/yast2-services-manager.changes
--- old/yast2-services-manager-3.1.20/package/yast2-services-manager.changes    
2014-07-08 11:42:27.000000000 +0200
+++ new/yast2-services-manager-3.1.21/package/yast2-services-manager.changes    
2014-07-14 15:17:29.000000000 +0200
@@ -1,4 +1,15 @@
 -------------------------------------------------------------------
+Mon Jul 14 10:20:39 CEST 2014 - [email protected]
+
+- ServicesManagerServiceClass and ServicesManagerTargetClass
+  switched to using lazy loading of system(ctl) data
+- Fixed Export AutoYast functionality to return the currently
+  supported and documented format
+- Added tests for all the other AutoYast formats supported
+  for Import (all bnc#885800)
+- 3.1.21
+
+-------------------------------------------------------------------
 Tue Jul  8 09:34:32 CEST 2014 - [email protected]
 
 - Function 'localize' moved to ServicesManagerTarget library and
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-services-manager-3.1.20/package/yast2-services-manager.spec 
new/yast2-services-manager-3.1.21/package/yast2-services-manager.spec
--- old/yast2-services-manager-3.1.20/package/yast2-services-manager.spec       
2014-07-08 11:42:27.000000000 +0200
+++ new/yast2-services-manager-3.1.21/package/yast2-services-manager.spec       
2014-07-14 15:17:29.000000000 +0200
@@ -24,7 +24,7 @@
 ######################################################################
 
 Name:           yast2-services-manager
-Version:        3.1.20
+Version:        3.1.21
 
 Release:        0
 BuildArch:      noarch
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-services-manager-3.1.20/src/modules/services_manager_service.rb 
new/yast2-services-manager-3.1.21/src/modules/services_manager_service.rb
--- old/yast2-services-manager-3.1.20/src/modules/services_manager_service.rb   
2014-07-08 11:42:27.000000000 +0200
+++ new/yast2-services-manager-3.1.21/src/modules/services_manager_service.rb   
2014-07-14 15:17:29.000000000 +0200
@@ -5,6 +5,8 @@
   import "Mode"
 
   class ServicesManagerServiceClass < Module
+    include Yast::Logger
+
     LIST_UNIT_FILES_COMMAND = 'systemctl list-unit-files --type service'
     LIST_UNITS_COMMAND      = 'systemctl list-units --all --type service'
     STATUS_COMMAND          = 'systemctl status'
@@ -33,22 +35,23 @@
       attr_reader :unit_files, :units, :services
       attr_reader :supported_unit_files, :supported_units
 
-      def initialize
+      def read
         @services   = {}
         @unit_files = {}
         @units      = {}
+
         load_unit_files
         load_units
+
         @supported_unit_files = unit_files.select do |_, status|
           Status::SUPPORTED_STATES.member?(status)
         end
+
         @supported_units = units.reject do |name, _|
           unit_files[name] && 
!Status::SUPPORTED_STATES.member?(unit_files[name])
         end
         supported_units.select! { |_, attributes| attributes[:status] == 
Status::LOADED }
-      end
 
-      def read
         extract_services_from_units
         extract_services_from_unit_files
         services
@@ -110,17 +113,21 @@
       end
     end
 
-    attr_reader   :services, :modified
+    attr_reader   :modified
     attr_accessor :errors, :services
 
-    alias_method :all, :services
     alias_method :modified?, :modified
 
+    def services
+      @services ||= read
+    end
+
+    alias_method :all, :services
+
     def initialize
       textdomain 'services-manager'
       @errors   = []
       @modified = false
-      @services = read
     end
 
     # Sets whether service should be running after writing the configuration
@@ -228,16 +235,28 @@
 
     # Returns only enabled services, the rest is expected to be disabled
     def export
-      exported_services = services.select do |service_name, properties|
+      enabled_services = services.select do |service_name, properties|
         enabled(service_name) && properties[:loaded]
       end
-      Builtins.y2milestone("Exported services: #{exported_services.keys}")
-      exported_services.keys
+
+      # Only services modifed by the user to be disabled are exported
+      # to AutoYast profile, untouched services are not exported
+      disabled_services = services.select do |service_name, properties|
+        !enabled(service_name) && properties[:modified]
+      end
+
+      log.info "Export: enabled services: #{enabled_services.keys}, disabled 
services: #{disabled_services.keys}"
+
+      {
+        'enable' => enabled_services.keys,
+        'disable' => disabled_services.keys,
+      }
     end
 
     def import profile
-      Builtins.y2milestone("List of services from autoyast profile: 
#{profile.services.map(&:name)}")
+      log.info "List of services from autoyast profile: 
#{profile.services.map(&:name)}"
       non_existent_services = []
+
       profile.services.each do |service|
         case service.status
         when 'enable'
@@ -248,6 +267,7 @@
           Builtins.y2error("Unknown status '#{service.status}' for service 
'#{service.name}'")
         end
       end
+
       return true if non_existent_services.empty?
 
       Builtins.y2error("Services #{non_existent_services.inspect} don't exist 
on this system")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-services-manager-3.1.20/src/modules/services_manager_target.rb 
new/yast2-services-manager-3.1.21/src/modules/services_manager_target.rb
--- old/yast2-services-manager-3.1.20/src/modules/services_manager_target.rb    
2014-07-08 11:42:27.000000000 +0200
+++ new/yast2-services-manager-3.1.21/src/modules/services_manager_target.rb    
2014-07-14 15:17:29.000000000 +0200
@@ -54,25 +54,32 @@
     # @return [String] Shows a reason why the default target has been selected;
     attr_accessor :proposal_reason
 
-    # @return [String] Name of the default systemd target unit
-    attr_reader :default_target
+    def initialize
+      textdomain 'services-manager'
+      @modified = false
+    end
 
     # @return [Hash] Collection of available targets
     # @example {'rescue' => {:enabled=>false, :loaded=>true, :active=>false, 
:description=>'Rescue'}}
-    attr_reader :targets
+    def targets
+      read if @targets.nil?
+      @targets
+    end
+
+    # @return [String] Name of the default systemd target unit
+    def default_target
+      read if @default_target.nil?
+      @default_target
+    end
 
     alias_method :all, :targets
 
-    def initialize
-      textdomain 'services-manager'
+    def read
       @targets = {}
-      @modified = false
       @default_target = ''
-      read_targets
-    end
 
-    def read_targets
-      return unless Mode.normal
+      # Reads the data on a running system only
+      return true unless Mode.normal
 
       default_target = SystemdTarget.get_default
       @default_target = default_target ? default_target.name : ''
@@ -81,16 +88,16 @@
         next unless target.allow_isolate?
         next if BLACKLISTED_TARGETS.member?(target.name)
 
-        targets[target.name] = {
+        @targets[target.name] = {
           :enabled => target.enabled?,
           :loaded  => target.loaded?,
           :active  => target.active?,
           :description => target.description
         }
       end
-    end
 
-    alias_method :read, :read_targets
+      [email protected]?
+    end
 
     def default_target= new_default
       if Mode.normal && !targets.keys.include?(new_default)
@@ -124,9 +131,8 @@
     end
 
     def reset
-      targets.clear
-      read_targets
       self.modified = false
+      read
     end
 
     publish({:function => :all,            :type => "map <string, map> ()" })
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-services-manager-3.1.20/test/services_manager_target_test.rb 
new/yast2-services-manager-3.1.21/test/services_manager_target_test.rb
--- old/yast2-services-manager-3.1.20/test/services_manager_target_test.rb      
2014-07-08 11:42:27.000000000 +0200
+++ new/yast2-services-manager-3.1.21/test/services_manager_target_test.rb      
2014-07-14 15:17:29.000000000 +0200
@@ -2,6 +2,8 @@
 
 require_relative "test_helper"
 
+Yast.import "Mode"
+
 module Yast
   module TestTarget
     class Template < Struct.new(
@@ -21,11 +23,18 @@
   Yast::textdomain "services-manager"
 
   describe ServicesManagerTarget do
+    before(:each) do
+      log.info "--- test ---"
+      allow(Yast::Mode).to receive(:mode).and_return("normal")
+    end
+
     context "reading targets" do
       it "reads default target name and other targets" do
         expect(SystemdTarget).to receive(:all).and_return(TestTarget::ALL)
         expect(SystemdTarget).to 
receive(:get_default).and_return(TestTarget::GRAPHICAL)
+
         target = ServicesManagerTargetClass.new
+
         expect(target.default_target).to eq('graphical')
         expect(target.targets).not_to be_empty
         expect(target.targets.keys).to include('multi-user')
@@ -35,7 +44,7 @@
       end
 
       it "skips reading targets if Mode.normal is false" do
-        Mode.SetMode('not-normal')
+        allow(Yast::Mode).to receive(:mode).and_return("instalation")
         expect(SystemdTarget).not_to receive(:all)
         expect(SystemdTarget).not_to receive(:get_default)
         target = ServicesManagerTargetClass.new
@@ -58,8 +67,8 @@
       end
 
       it "skips setting the default target if not modified" do
-        expect(SystemdTarget).to receive(:all).and_return(TestTarget::ALL)
-        expect(SystemdTarget).to 
receive(:get_default).and_return(TestTarget::GRAPHICAL)
+        allow(SystemdTarget).to receive(:all).and_return(TestTarget::ALL)
+        allow(SystemdTarget).to 
receive(:get_default).and_return(TestTarget::GRAPHICAL)
         target = ServicesManagerTargetClass.new
         expect(target.modified).to eq(false)
         expect(target.save).to eq(true)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-services-manager-3.1.20/test/services_manager_test.rb 
new/yast2-services-manager-3.1.21/test/services_manager_test.rb
--- old/yast2-services-manager-3.1.20/test/services_manager_test.rb     
2014-07-08 11:42:27.000000000 +0200
+++ new/yast2-services-manager-3.1.21/test/services_manager_test.rb     
2014-07-14 15:17:29.000000000 +0200
@@ -3,30 +3,117 @@
 require_relative 'test_helper'
 
 module Yast
+  Yast.import 'ServicesManagerTarget'
+  Yast.import 'ServicesManager'
+
+  TARGETS = {
+    "multi-user"=>{
+      :enabled=>true, :loaded=>true, :active=>true, :description=>"Multi-User 
System"
+    },
+    "emergency"=>{
+      :enabled=>false, :loaded=>true, :active=>false, :description=>"Emergency 
Mode"
+    },
+    "graphical"=>{
+      :enabled=>false, :loaded=>true, :active=>false, :description=>"Graphical 
Interface"
+    },
+    "rescue"=>{
+      :enabled=>false, :loaded=>true, :active=>false, :description=>"Rescue 
Mode"
+    }
+  }
+
   describe ServicesManager do
+    before(:each) do
+      log.info "--- test ---"
+      allow(Yast::ServicesManagerService).to receive(:services).and_return({})
+      allow(Yast::ServicesManagerTarget).to 
receive(:targets).and_return(TARGETS)
+    end
+
     context "Autoyast API" do
       it "exports systemd target and services" do
         services = {
-          'a' => {:enabled=>true, :loaded=>true},
-          'b' => {:enabled=>false, :loaded=>true}
+          'a' => { :enabled => true,  :loaded => true },
+          'b' => { :enabled => false, :modified => true },
+          'c' => { :enabled => true,  :loaded => true },
+          # Service will not be exported: it's not modified
+          'd' => { :enabled => false, :modified => false },
+          # Service will not be exported: it's not loaded
+          'e' => { :enabled => true,  :loaded => false },
         }
-        ServicesManagerService.stub(:services).and_return(services)
-        ServicesManagerTarget.stub(:default_target).and_return('some_target')
+
+        allow(ServicesManagerService).to 
receive(:services).and_return(services)
+        expect(ServicesManagerTarget).to 
receive(:default_target).and_return('some_target')
 
         data = Yast::ServicesManager.export
         expect(data['default_target']).to eq('some_target')
-        expect(data['services']).to eq(['a'])
+        expect(data['services']['enable'].sort).to eq(['a', 'c'].sort)
+        expect(data['services']['disable'].sort).to eq(['b'].sort)
+      end
+
+      context "when using AutoYast profile written in SLE 11 format" do
+        it "imports data for systemd target and services" do
+          data = {
+            'default' => '3',
+            'services' => [
+              {
+                'service_name' => 'sa',
+                'service_status' => 'enable',
+                'service_start' => '3',
+              },
+              {
+                'service_name' => 'sb',
+                'service_status' => 'enable',
+                'service_start' => '3',
+              },
+              {
+                'service_name' => 'sc',
+                'service_status' => 'disable',
+                'service_start' => '3',
+              },
+            ]
+          }
+
+          expect(ServicesManagerService).to 
receive(:exists?).with(/^s[abc]$/).at_least(:once).and_return(true)
+          expect(ServicesManagerService).to 
receive(:enable).with(/^s[ab]$/).twice.and_return(true)
+          expect(ServicesManagerService).to 
receive(:disable).with(/^sc$/).once.and_return(true)
 
+          expect(ServicesManagerService).to receive(:import).and_call_original
+          expect(ServicesManagerTarget).to receive(:import).and_call_original
+          expect(ServicesManager.import(data)).to be_true
+        end
       end
 
-      it "imports data for systemd target and services" do
-        data = {
-          'default_target' => 'multi-user',
-          'services'       => ['x', 'y', 'z']
-        }
-        expect(ServicesManagerService).to receive(:import)
-        expect(ServicesManagerTarget).to receive(:import)
-        ServicesManager.import(data)
+      context "when using AutoYast profile written in pre-SLE 12 format" do
+        it "imports data for systemd target and services" do
+          data = {
+            'default_target' => 'multi-user',
+            'services'       => ['x', 'y', 'z']
+          }
+
+          expect(ServicesManagerService).to 
receive(:exists?).with(/^[xyz]$/).at_least(:once).and_return(true)
+
+          expect(ServicesManagerService).to receive(:import).and_call_original
+          expect(ServicesManagerTarget).to receive(:import).and_call_original
+          expect(ServicesManager.import(data)).to be_true
+        end
+      end
+
+      context "when using AutoYast profile in the current format" do
+        it "imports data for systemd target and services" do
+          data = {
+            'default_target' => 'multi-user',
+            'services' => {
+              'enable'  => ['x', 'y', 'z'],
+              'disable' => ['d', 'e', 'f'],
+            },
+          }
+          expect(ServicesManagerService).to 
receive(:exists?).with(/^[xyzdef]$/).at_least(:once).and_return(true)
+          expect(ServicesManagerService).to 
receive(:enable).with(/^[xyz]$/).exactly(3).times.and_return(true)
+          expect(ServicesManagerService).to 
receive(:disable).with(/^[def]$/).exactly(3).times.and_return(true)
+
+          expect(ServicesManagerService).to receive(:import).and_call_original
+          expect(ServicesManagerTarget).to receive(:import).and_call_original
+          expect(ServicesManager.import(data)).to be_true
+        end
       end
 
       it "returns HTML-formatted autoyast summary with HTML-escaped values" do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-services-manager-3.1.20/test/test_helper.rb 
new/yast2-services-manager-3.1.21/test/test_helper.rb
--- old/yast2-services-manager-3.1.20/test/test_helper.rb       2014-07-08 
11:42:27.000000000 +0200
+++ new/yast2-services-manager-3.1.21/test/test_helper.rb       2014-07-14 
15:17:29.000000000 +0200
@@ -5,3 +5,4 @@
 require "yast"
 
 Yast.import 'ServicesManager'
+include Yast::Logger

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to