summaryrefslogtreecommitdiff
path: root/spec/functional/win32/service_manager_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/functional/win32/service_manager_spec.rb')
-rw-r--r--spec/functional/win32/service_manager_spec.rb275
1 files changed, 0 insertions, 275 deletions
diff --git a/spec/functional/win32/service_manager_spec.rb b/spec/functional/win32/service_manager_spec.rb
deleted file mode 100644
index b5b2e20825..0000000000
--- a/spec/functional/win32/service_manager_spec.rb
+++ /dev/null
@@ -1,275 +0,0 @@
-#
-# Author:: Serdar Sutay (<serdar@opscode.com>)
-# Copyright:: Copyright (c) 2013 Opscode, 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'
-if Chef::Platform.windows?
- require 'chef/application/windows_service_manager'
-end
-
-#
-# ATTENTION:
-# This test creates a windows service for testing purposes and runs it
-# as Local System on windows boxes.
-# This test will fail if you run the tests inside a Windows VM by
-# sharing the code from your host since Local System account by
-# default can't see the mounted partitions.
-# Run this test by copying the code to a local VM directory or setup
-# Local System account to see the maunted partitions for the shared
-# directories.
-#
-
-describe "Chef::Application::WindowsServiceManager", :windows_only, :system_windows_service_gem_only do
-
- # Some helper methods.
-
- def test_service_exists?
- ::Win32::Service.exists?("spec-service")
- end
-
- def test_service_state
- ::Win32::Service.status("spec-service").current_state
- end
-
- def service_manager
- Chef::Application::WindowsServiceManager.new(test_service)
- end
-
- def cleanup
- # Uninstall if the test service is installed.
- if test_service_exists?
-
- # We can only uninstall when the service is stopped.
- if test_service_state != "stopped"
- ::Win32::Service.send("stop", "spec-service")
- while test_service_state != "stopped"
- sleep 1
- end
- end
-
- ::Win32::Service.delete("spec-service")
- end
-
- # Delete the test_service_file if it exists
- if File.exists?(test_service_file)
- File.delete(test_service_file)
- end
-
- end
-
-
- # Definition for the test-service
-
- let(:test_service) {
- {
- :service_name => "spec-service",
- :service_display_name => "Spec Test Service",
- :service_description => "Service for testing Chef::Application::WindowsServiceManager.",
- :service_file_path => File.expand_path(File.join(File.dirname(__FILE__), '../../support/platforms/win32/spec_service.rb'))
- }
- }
-
- # Test service creates a file for us to verify that it is running.
- # Since our test service is running as Local System we should look
- # for the file it creates under SYSTEM temp directory
-
- let(:test_service_file) {
- "#{ENV['SystemDrive']}\\windows\\temp\\spec_service_file"
- }
-
- context "with invalid service definition" do
- it "throws an error when initialized with no service definition" do
- lambda { Chef::Application::WindowsServiceManager.new(nil) }.should raise_error(ArgumentError)
- end
-
- it "throws an error with required missing options" do
- test_service.each do |key,value|
- service_def = test_service.dup
- service_def.delete(key)
-
- lambda { Chef::Application::WindowsServiceManager.new(service_def) }.should raise_error(ArgumentError)
- end
- end
- end
-
- context "with valid definition" do
- before(:each) do
- @service_manager_output = [ ]
- # Uncomment below lines to debug this test
- # original_puts = $stdout.method(:puts)
- $stdout.stub(:puts) do |message|
- @service_manager_output << message
- # original_puts.call(message)
- end
- end
-
- after(:each) do
- cleanup
- end
-
- context "when service doesn't exist" do
- it "default => should say service don't exist" do
- service_manager.run
-
- @service_manager_output.grep(/doesn't exist on the system/).length.should > 0
- end
-
- it "install => should install the service" do
- service_manager.run(["-a", "install"])
-
- test_service_exists?.should be_true
- end
-
- it "other actions => should say service doesn't exist" do
- ["delete", "start", "stop", "pause", "resume", "uninstall"].each do |action|
- service_manager.run(["-a", action])
- @service_manager_output.grep(/doesn't exist on the system/).length.should > 0
- @service_manager_output = [ ]
- end
- end
- end
-
- context "when service exists" do
- before(:each) do
- service_manager.run(["-a", "install"])
- end
-
- it "should have an own-process, non-interactive type" do
- status = ::Win32::Service.status("spec-service")
- status[:service_type].should == "own process"
- status[:interactive].should be_false
- end
-
- it "install => should say service already exists" do
- service_manager.run(["-a", "install"])
- @service_manager_output.grep(/already exists/).length.should > 0
- end
-
- context "and service is stopped" do
- ["delete", "uninstall"].each do |action|
- it "#{action} => should remove the service", :volatile do
- service_manager.run(["-a", action])
- test_service_exists?.should be_false
- end
- end
-
- it "default, status => should say service is stopped" do
- service_manager.run([ ])
- @service_manager_output.grep(/stopped/).length.should > 0
- @service_manager_output = [ ]
-
- service_manager.run(["-a", "status"])
- @service_manager_output.grep(/stopped/).length.should > 0
- end
-
- it "start should start the service", :volatile do
- service_manager.run(["-a", "start"])
- test_service_state.should == "running"
- File.exists?(test_service_file).should be_true
- end
-
- it "stop should not affect the service" do
- service_manager.run(["-a", "stop"])
- test_service_state.should == "stopped"
- end
-
-
- ["pause", "resume"].each do |action|
- it "#{action} => should raise error" do
- lambda {service_manager.run(["-a", action])}.should raise_error(::Win32::Service::Error)
- end
- end
-
- context "and service is started", :volatile do
- before(:each) do
- service_manager.run(["-a", "start"])
- end
-
- ["delete", "uninstall"].each do |action|
- it "#{action} => should remove the service", :volatile do
- service_manager.run(["-a", action])
- test_service_exists?.should be_false
- end
- end
-
- it "default, status => should say service is running" do
- service_manager.run([ ])
- @service_manager_output.grep(/running/).length.should > 0
- @service_manager_output = [ ]
-
- service_manager.run(["-a", "status"])
- @service_manager_output.grep(/running/).length.should > 0
- end
-
- it "stop should stop the service" do
- service_manager.run(["-a", "stop"])
- test_service_state.should == "stopped"
- end
-
- it "pause should pause the service" do
- service_manager.run(["-a", "pause"])
- test_service_state.should == "paused"
- end
-
- it "resume should have no affect" do
- service_manager.run(["-a", "resume"])
- test_service_state.should == "running"
- end
- end
-
- context "and service is paused", :volatile do
- before(:each) do
- service_manager.run(["-a", "start"])
- service_manager.run(["-a", "pause"])
- end
-
- actions = ["delete", "uninstall"]
- actions.each do |action|
- it "#{action} => should remove the service" do
- service_manager.run(["-a", action])
- test_service_exists?.should be_false
- end
- end
-
- it "default, status => should say service is paused" do
- service_manager.run([ ])
- @service_manager_output.grep(/paused/).length.should > 0
- @service_manager_output = [ ]
-
- service_manager.run(["-a", "status"])
- @service_manager_output.grep(/paused/).length.should > 0
- end
-
- it "stop should stop the service" do
- service_manager.run(["-a", "stop"])
- test_service_state.should == "stopped"
- end
-
- it "pause should not affect the service" do
- service_manager.run(["-a", "pause"])
- test_service_state.should == "paused"
- end
-
- it "start should raise an error" do
- lambda {service_manager.run(["-a", "start"])}.should raise_error(::Win32::Service::Error)
- end
-
- end
- end
- end
- end
-end