From 6d272e9ff423a9ee15664431465e9877eb7d133e Mon Sep 17 00:00:00 2001 From: dheerajd-msys Date: Thu, 9 Apr 2020 17:03:12 +0530 Subject: update test for opensuse Signed-off-by: dheerajd-msys --- spec/functional/assets/inittest | 15 +-- spec/functional/resource/insserv_spec.rb | 206 +++++++++++++++++++++++++++++++ spec/spec_helper.rb | 1 + spec/support/platform_helpers.rb | 7 +- 4 files changed, 220 insertions(+), 9 deletions(-) create mode 100644 spec/functional/resource/insserv_spec.rb diff --git a/spec/functional/assets/inittest b/spec/functional/assets/inittest index dc542a965a..3284d27a1e 100644 --- a/spec/functional/assets/inittest +++ b/spec/functional/assets/inittest @@ -2,16 +2,17 @@ TMPDIR="${TMPDIR:-/tmp}" -function create_chef_txt { - touch $TMPDIR/inittest.txt +create_chef_txt() { + touch "$TMPDIR"/inittest.txt } -function delete_chef_txt { - rm $TMPDIR/inittest.txt + +delete_chef_txt() { + rm "$TMPDIR"/inittest.txt } -function rename_chef_txt { - mv $TMPDIR/inittest.txt $TMPDIR/$1 +rename_chef_txt() { + mv "$TMPDIR"/inittest.txt "$TMPDIR"/"$1" } case "$1" in @@ -22,7 +23,7 @@ stop ) delete_chef_txt ;; status ) - [ -f $TMPDIR/inittest.txt ] || [ -f $TMPDIR/inittest_reload.txt ] || [ -f $TMPDIR/inittest_restart.txt ] + [ -f "$TMPDIR"/inittest.txt ] || [ -f "$TMPDIR"/inittest_reload.txt ] || [ -f "$TMPDIR"/inittest_restart.txt ] ;; reload ) rename_chef_txt "inittest_reload.txt" diff --git a/spec/functional/resource/insserv_spec.rb b/spec/functional/resource/insserv_spec.rb new file mode 100644 index 0000000000..94b090af6a --- /dev/null +++ b/spec/functional/resource/insserv_spec.rb @@ -0,0 +1,206 @@ +# encoding: UTF-8 +# +# Author:: Dheeraj Dubey () +# Copyright:: Copyright 2009-2019, Chef Software, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require "spec_helper" +require "functional/resource/base" +require "chef/mixin/shell_out" +require "fileutils" + +describe Chef::Resource::Service, :requires_root, :opensuse15 do + + include Chef::Mixin::ShellOut + + def service_should_be_enabled + expect(shell_out!("/sbin/insserv -r -f #{new_resource.service_name}").exitstatus).to eq(0) + expect(shell_out!("/sbin/insserv -d -f #{new_resource.service_name}").exitstatus).to eq(0) + !Dir.glob("/etc/rc*/**/S*#{service_name}").empty? + end + + def service_should_be_disabled + expect(shell_out!("/sbin/insserv -r -f #{new_resource.service_name}").exitstatus).to eq(0) + Dir.glob("/etc/rc*/**/S*#{service_name}").empty? + end + + # Platform specific validation routines. + def service_should_be_started(file_name) + # The existence of this file indicates that the service was started. + expect(File.exists?("#{Dir.tmpdir}/#{file_name}")).to be_truthy + end + + def service_should_be_stopped(file_name) + expect(File.exists?("#{Dir.tmpdir}/#{file_name}")).to be_falsey + end + + def delete_test_files + files = Dir.glob("#{Dir.tmpdir}/init[a-z_]*.txt") + File.delete(*files) + end + + # Actual tests + let(:new_resource) do + new_resource = Chef::Resource::Service.new("inittest", run_context) + new_resource.provider Chef::Provider::Service::Insserv + new_resource.supports({ status: true, restart: true, reload: true }) + new_resource + end + + let(:provider) do + provider = new_resource.provider_for_action(new_resource.action) + provider + end + + let (:service_name) { "Chef::Util::PathHelper.escape_glob_dir(current_resource.service_name)" } + + let(:current_resource) do + provider.load_current_resource + provider.current_resource + end + + before(:all) do + File.delete("/etc/init.d/inittest") if File.exists?("/etc/init.d/inittest") + FileUtils.cp((File.join(File.dirname(__FILE__), "/../assets/inittest")).to_s, "/etc/init.d/inittest") + FileUtils.chmod(0755, "/etc/init.d/inittest") + end + + after(:all) do + File.delete("/etc/init.d/inittest") if File.exists?("/etc/init.d/inittest") + end + + before(:each) do + delete_test_files + end + + after(:each) do + delete_test_files + end + + describe "start service" do + it "should start the service" do + new_resource.run_action(:start) + service_should_be_started("inittest.txt") + expect(new_resource).to be_updated_by_last_action + end + + it "should be idempotent" do + new_resource.run_action(:start) + service_should_be_started("inittest.txt") + expect(new_resource).to be_updated_by_last_action + new_resource.run_action(:start) + service_should_be_started("inittest.txt") + expect(new_resource).not_to be_updated_by_last_action + end + end + + describe "stop service" do + before do + new_resource.run_action(:start) + end + + it "should stop the service" do + new_resource.run_action(:stop) + service_should_be_stopped("inittest.txt") + expect(new_resource).to be_updated_by_last_action + end + + it "should be idempotent" do + new_resource.run_action(:stop) + service_should_be_stopped("inittest.txt") + expect(new_resource).to be_updated_by_last_action + new_resource.run_action(:stop) + service_should_be_stopped("inittest.txt") + expect(new_resource).not_to be_updated_by_last_action + end + end + + describe "restart service" do + before do + new_resource.run_action(:start) + end + + it "should restart the service" do + new_resource.run_action(:restart) + service_should_be_started("inittest_restart.txt") + expect(new_resource).to be_updated_by_last_action + end + + it "should be idempotent" do + skip "FIXME: restart is not idempotent" + new_resource.run_action(:restart) + service_should_be_disabled + expect(new_resource).to be_updated_by_last_action + new_resource.run_action(:restart) + service_should_be_disabled + expect(new_resource).not_to be_updated_by_last_action + end + end + + describe "reload service" do + before do + new_resource.run_action(:start) + end + + it "should reload the service" do + new_resource.run_action(:reload) + service_should_be_started("inittest_reload.txt") + expect(new_resource).to be_updated_by_last_action + end + + it "should be idempotent" do + skip "FIXME: reload is not idempotent" + new_resource.run_action(:reload) + service_should_be_disabled + expect(new_resource).to be_updated_by_last_action + new_resource.run_action(:reload) + service_should_be_disabled + expect(new_resource).not_to be_updated_by_last_action + end + end + + describe "enable service" do + it "should enable the service" do + new_resource.run_action(:enable) + service_should_be_enabled + expect(new_resource).to be_updated_by_last_action + end + + it "should be idempotent" do + new_resource.run_action(:enable) + service_should_be_enabled + new_resource.run_action(:enable) + service_should_be_enabled + expect(new_resource).not_to be_updated_by_last_action + end + end + + describe "disable_service" do + it "should disable the service" do + new_resource.run_action(:disable) + service_should_be_disabled + expect(new_resource).to be_updated_by_last_action + end + + it "should be idempotent" do + new_resource.run_action(:disable) + service_should_be_disabled + new_resource.run_action(:disable) + service_should_be_disabled + expect(new_resource).not_to be_updated_by_last_action + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 920bd75dba..a7a583546e 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -169,6 +169,7 @@ RSpec.configure do |config| config.filter_run_excluding linux_only: true unless linux? config.filter_run_excluding aix_only: true unless aix? config.filter_run_excluding suse_only: true unless suse? + config.filter_run_excluding opensuse15: true unless opensuse15? config.filter_run_excluding debian_family_only: true unless debian_family? config.filter_run_excluding supports_cloexec: true unless supports_cloexec? config.filter_run_excluding selinux_only: true unless selinux_enabled? diff --git a/spec/support/platform_helpers.rb b/spec/support/platform_helpers.rb index 9f3ef74a11..e761b625d8 100644 --- a/spec/support/platform_helpers.rb +++ b/spec/support/platform_helpers.rb @@ -174,6 +174,10 @@ def rhel6? rhel? && !!(ohai[:platform_version].to_i == 6) end +def opensuse15? + suse? && !!(ohai[:platform_version].to_i == 15) +end + def rhel7? rhel? && !!(ohai[:platform_version].to_i == 7) end @@ -227,8 +231,7 @@ def selinux_enabled? end def suse? - ::File.exists?("/etc/SuSE-release") || - ( ::File.exists?("/etc/os-release") && /sles|suse/.match?(File.read("/etc/os-release")) ) + ::File.exists?("/etc/os-release") && /sles|suse/.match?(File.read("/etc/os-release")) end def root? -- cgit v1.2.1