
This method was previously misnamed - we are not setting any expectations, but instead stubbing Mixlib::ShellOut so that its #stdout command returns given values which can then be tested against. Also rename the parameters for clarity, and add some explanatory comments.
108 lines
2.9 KiB
Ruby
108 lines
2.9 KiB
Ruby
require File.expand_path('cib_object', File.dirname(__FILE__))
|
|
|
|
module Chef::RSpec
|
|
module Pacemaker
|
|
module RunnableResource
|
|
def expect_running(running)
|
|
expect_any_instance_of(cib_object_class) \
|
|
.to receive(:running?) \
|
|
.and_return(running)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
shared_examples "a runnable resource" do |fixture|
|
|
|
|
include Chef::RSpec::Pacemaker::RunnableResource
|
|
|
|
describe ":delete action" do
|
|
it_should_behave_like "action on non-existent resource", \
|
|
:delete, "crm configure delete #{fixture.name}", nil
|
|
|
|
it "should not delete a running resource" do
|
|
stub_shellout(fixture.definition_string)
|
|
expect_running(true)
|
|
|
|
expected_error = "Cannot delete running #{fixture}"
|
|
expect { provider.run_action :delete }.to \
|
|
raise_error(RuntimeError, expected_error)
|
|
|
|
cmd = "crm configure delete '#{fixture.name}'"
|
|
expect(@chef_run).not_to run_execute(cmd)
|
|
expect(@resource).not_to be_updated
|
|
end
|
|
|
|
it "should delete a non-running resource" do
|
|
stub_shellout(fixture.definition_string)
|
|
expect_running(false)
|
|
|
|
provider.run_action :delete
|
|
|
|
cmd = "crm configure delete '#{fixture.name}'"
|
|
expect(@chef_run).to run_execute(cmd)
|
|
expect(@resource).to be_updated
|
|
end
|
|
end
|
|
|
|
describe ":start action" do
|
|
it_should_behave_like "action on non-existent resource", \
|
|
:start,
|
|
"crm resource start #{fixture.name}", \
|
|
"Cannot start non-existent #{fixture}"
|
|
|
|
it "should do nothing to a started resource" do
|
|
stub_shellout(fixture.definition_string)
|
|
expect_running(true)
|
|
|
|
provider.run_action :start
|
|
|
|
cmd = "crm resource start #{fixture.name}"
|
|
expect(@chef_run).not_to run_execute(cmd)
|
|
expect(@resource).not_to be_updated
|
|
end
|
|
|
|
it "should start a stopped resource" do
|
|
config = fixture.definition_string.sub("Started", "Stopped")
|
|
stub_shellout(config)
|
|
expect_running(false)
|
|
|
|
provider.run_action :start
|
|
|
|
cmd = "crm resource start '#{fixture.name}'"
|
|
expect(@chef_run).to run_execute(cmd)
|
|
expect(@resource).to be_updated
|
|
end
|
|
end
|
|
|
|
describe ":stop action" do
|
|
it_should_behave_like "action on non-existent resource", \
|
|
:stop,
|
|
"crm resource stop #{fixture.name}", \
|
|
"Cannot stop non-existent #{fixture}"
|
|
|
|
it "should do nothing to a stopped resource" do
|
|
stub_shellout(fixture.definition_string)
|
|
expect_running(false)
|
|
|
|
provider.run_action :stop
|
|
|
|
cmd = "crm resource start #{fixture.name}"
|
|
expect(@chef_run).not_to run_execute(cmd)
|
|
expect(@resource).not_to be_updated
|
|
end
|
|
|
|
it "should stop a started resource" do
|
|
stub_shellout(fixture.definition_string)
|
|
expect_running(true)
|
|
|
|
provider.run_action :stop
|
|
|
|
cmd = "crm resource stop '#{fixture.name}'"
|
|
expect(@chef_run).to run_execute(cmd)
|
|
expect(@resource).to be_updated
|
|
end
|
|
end
|
|
|
|
end
|