summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaire McQuin <claire@getchef.com>2015-09-08 12:20:45 -0700
committerClaire McQuin <claire@getchef.com>2015-09-08 13:24:25 -0700
commit998e13adbda5e964d2f8d17ebd8f216f752244a6 (patch)
tree6bd0c042229dca9865bc37a81a87bc1c7bf23d83
parent530119278f6a71eef4b0bf02df022218a96dcecc (diff)
downloadchef-998e13adbda5e964d2f8d17ebd8f216f752244a6.tar.gz
Skip tests unless RefreshMode is Disabled
-rw-r--r--lib/chef/platform/query_helpers.rb7
-rw-r--r--lib/chef/provider/dsc_resource.rb14
-rw-r--r--spec/functional/resource/dsc_resource_spec.rb2
-rw-r--r--spec/unit/platform/query_helpers_spec.rb24
-rw-r--r--spec/unit/provider/dsc_resource_spec.rb13
5 files changed, 41 insertions, 19 deletions
diff --git a/lib/chef/platform/query_helpers.rb b/lib/chef/platform/query_helpers.rb
index e64189fbd6..ea86ab227f 100644
--- a/lib/chef/platform/query_helpers.rb
+++ b/lib/chef/platform/query_helpers.rb
@@ -52,6 +52,13 @@ class Chef
Gem::Version.new(node[:languages][:powershell][:version]) >=
Gem::Version.new("5.0.10018.0")
end
+
+ def refresh_mode_disabled?(node)
+ require 'chef/util/powershell/cmdlet'
+ cmdlet = Chef::Util::Powershell::Cmdlet.new(node, "Get-DscLocalConfigurationManager", :object)
+ metadata = cmdlet.run!.return_value
+ metadata['RefreshMode'] == 'Disabled'
+ end
end
end
end
diff --git a/lib/chef/provider/dsc_resource.rb b/lib/chef/provider/dsc_resource.rb
index 379369ba6e..31c6c078f4 100644
--- a/lib/chef/provider/dsc_resource.rb
+++ b/lib/chef/provider/dsc_resource.rb
@@ -59,9 +59,7 @@ class Chef
a.block_action!
end
requirements.assert(:run) do |a|
- a.assertion {
- meta_configuration['RefreshMode'] == 'Disabled'
- }
+ a.assertion { refresh_mode_disabled? }
err = ["The LCM must have its RefreshMode set to Disabled. "]
a.failure_message Chef::Exceptions::ProviderNotFound, err.join(' ')
a.whyrun err + ["Assuming a previous resource sets the RefreshMode."]
@@ -85,6 +83,10 @@ class Chef
def supports_dsc_invoke_resource?
run_context && Chef::Platform.supports_dsc_invoke_resource?(node)
end
+
+ def refresh_mode_disabled?
+ Chef::Platform.refresh_mode_disabled?(node)
+ end
def generate_description
@converge_description
@@ -153,12 +155,6 @@ class Chef
cmdlet.run!
end
- def meta_configuration
- cmdlet = Chef::Util::Powershell::Cmdlet.new(node, "Get-DscLocalConfigurationManager", :object)
- result = cmdlet.run!
- result.return_value
- end
-
end
end
end
diff --git a/spec/functional/resource/dsc_resource_spec.rb b/spec/functional/resource/dsc_resource_spec.rb
index 6f453eeb9f..820e8fe123 100644
--- a/spec/functional/resource/dsc_resource_spec.rb
+++ b/spec/functional/resource/dsc_resource_spec.rb
@@ -43,6 +43,8 @@ describe Chef::Resource::DscResource, :windows_powershell_dsc_only do
before do
if !Chef::Platform.supports_dsc_invoke_resource?(node)
skip 'Requires Powershell >= 5.0.10018.0'
+ elsif !Chef::Platform.refresh_mode_disabled?(node)
+ skip 'Requires LCM RefreshMode is Disabled'
end
end
context 'with an invalid dsc resource' do
diff --git a/spec/unit/platform/query_helpers_spec.rb b/spec/unit/platform/query_helpers_spec.rb
index 33d4c2c3b7..78f90748d3 100644
--- a/spec/unit/platform/query_helpers_spec.rb
+++ b/spec/unit/platform/query_helpers_spec.rb
@@ -75,3 +75,27 @@ describe 'Chef::Platform#supports_dsc_invoke_resource?' do
end
end
+describe 'Chef::Platform#refresh_mode_disabled?' do
+ let(:node) { instance_double('Chef::Node') }
+ let(:cmdlet) { instance_double('Chef::Util::Powershell::Cmdlet') }
+ let(:cmdlet_result) { instance_double('Chef::Util::Powershell::CmdletResult')}
+
+ it "returns true when RefreshMode is Disabled" do
+ expect(Chef::Util::Powershell::Cmdlet).to receive(:new).
+ with(node, "Get-DscLocalConfigurationManager", :object).
+ and_return(cmdlet)
+ expect(cmdlet).to receive(:run!).and_return(cmdlet_result)
+ expect(cmdlet_result).to receive(:return_value).and_return({ 'RefreshMode' => 'Disabled' })
+ expect(Chef::Platform.refresh_mode_disabled?(node)).to be true
+ end
+
+ it "returns false when RefreshMode is not Disabled" do
+ expect(Chef::Util::Powershell::Cmdlet).to receive(:new).
+ with(node, "Get-DscLocalConfigurationManager", :object).
+ and_return(cmdlet)
+ expect(cmdlet).to receive(:run!).and_return(cmdlet_result)
+ expect(cmdlet_result).to receive(:return_value).and_return({ 'RefreshMode' => 'LaLaLa' })
+ expect(Chef::Platform.refresh_mode_disabled?(node)).to be false
+ end
+end
+
diff --git a/spec/unit/provider/dsc_resource_spec.rb b/spec/unit/provider/dsc_resource_spec.rb
index 65c1c019f0..807a844346 100644
--- a/spec/unit/provider/dsc_resource_spec.rb
+++ b/spec/unit/provider/dsc_resource_spec.rb
@@ -50,30 +50,23 @@ describe Chef::Provider::DscResource do
}
context 'when RefreshMode is not set to Disabled' do
- let (:meta_configuration) { {'RefreshMode' => 'AnythingElse'}}
-
it 'raises an exception' do
- expect(provider).to receive(:meta_configuration).and_return(
- meta_configuration)
+ expect(provider).to receive(:refresh_mode_disabled?).and_return(false)
expect { provider.run_action(:run) }.to raise_error(
Chef::Exceptions::ProviderNotFound, /Disabled/)
end
end
context 'when RefreshMode is set to Disabled' do
- let (:meta_configuration) { {'RefreshMode' => 'Disabled'}}
-
it 'does not update the resource if it is up to date' do
- expect(provider).to receive(:meta_configuration).and_return(
- meta_configuration)
+ expect(provider).to receive(:refresh_mode_disabled?).and_return(true)
expect(provider).to receive(:test_resource).and_return(true)
provider.run_action(:run)
expect(resource).not_to be_updated
end
it 'converges the resource if it is not up to date' do
- expect(provider).to receive(:meta_configuration).and_return(
- meta_configuration)
+ expect(provider).to receive(:refresh_mode_disabled?).and_return(true)
expect(provider).to receive(:test_resource).and_return(false)
expect(provider).to receive(:set_resource)
provider.run_action(:run)