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]