summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordheerajd-msys <dheeraj.dubey@msystechnologies.com>2020-04-09 17:03:12 +0530
committerdheerajd-msys <dheeraj.dubey@msystechnologies.com>2020-04-13 15:50:27 +0530
commit6d272e9ff423a9ee15664431465e9877eb7d133e (patch)
treecfbe33addf5ac78d2605c20d66969922d6609aac
parent1cd722bb20f81aa6b87fd7c30b3fbdb133a0d357 (diff)
downloadchef-6d272e9ff423a9ee15664431465e9877eb7d133e.tar.gz
update test for opensuse
Signed-off-by: dheerajd-msys <dheeraj.dubey@msystechnologies.com>
-rw-r--r--spec/functional/assets/inittest15
-rw-r--r--spec/functional/resource/insserv_spec.rb206
-rw-r--r--spec/spec_helper.rb1
-rw-r--r--spec/support/platform_helpers.rb7
4 files changed, 220 insertions, 9 deletions
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 (<dheeraj.dubey@msystechnologies.com>)
+# 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?