diff options
author | nimisha <nimisha.sharad@clogeny.com> | 2017-07-31 18:42:50 +0530 |
---|---|---|
committer | nimisha <nimisha.sharad@clogeny.com> | 2017-08-16 14:49:02 +0530 |
commit | 68a3098e04b6f9a79ded4b555d81ae9fbac6c176 (patch) | |
tree | a12cc04e6d78b92ed7309e08135fb4cdb4d94979 | |
parent | b8c447a3f7e821773dfec4bc443e344c05d906a0 (diff) | |
download | chef-68a3098e04b6f9a79ded4b555d81ae9fbac6c176.tar.gz |
Fixed specs
Signed-off-by: nimisha <nimisha.sharad@clogeny.com>
-rw-r--r-- | lib/chef/provider/windows_path.rb | 8 | ||||
-rw-r--r-- | lib/chef/resource/windows_path.rb | 2 | ||||
-rw-r--r-- | spec/functional/resource/windows_path_spec.rb | 56 | ||||
-rw-r--r-- | spec/unit/provider/windows_path_spec.rb | 74 | ||||
-rw-r--r-- | spec/unit/resource/windows_path_spec.rb | 38 |
5 files changed, 173 insertions, 5 deletions
diff --git a/lib/chef/provider/windows_path.rb b/lib/chef/provider/windows_path.rb index d52baa2e7a..cc03341c05 100644 --- a/lib/chef/provider/windows_path.rb +++ b/lib/chef/provider/windows_path.rb @@ -1,6 +1,6 @@ # # Author:: Nimisha Sharad (<nimisha.sharad@msystechnologies.com>) -# Copyright:: Copyright 2008-2016, Chef Software Inc. +# Copyright:: Copyright 2008-2017, Chef Software Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -30,7 +30,7 @@ class Chef @current_resource end - def action_add + action :add do declare_resource(:env, "path") do action :modify delim ::File::PATH_SEPARATOR @@ -39,7 +39,7 @@ class Chef ENV["PATH"] = expand_env_vars(ENV["PATH"]) end - def action_remove + action :remove do declare_resource(:env, "path") do action :delete delim ::File::PATH_SEPARATOR @@ -53,7 +53,7 @@ class Chef # http://msdn.microsoft.com/en-us/library/windows/desktop/ms724265%28v=vs.85%29.aspx buf = 0.chr * 32 * 1024 # 32k if Chef::Provider::WindowsPath::ExpandEnvironmentStrings.call(path.dup, buf, buf.length) == 0 - raise Chef::Exceptions::Win32APIError, "Failed calling ExpandEnvironmentStrings (received 0)" + raise Chef::Exceptions::Win32APIError, "Failed calling ExpandEnvironmentStrings with error code #{FFI.errno}" end buf.strip end diff --git a/lib/chef/resource/windows_path.rb b/lib/chef/resource/windows_path.rb index fb47ec6791..5472a7e4fd 100644 --- a/lib/chef/resource/windows_path.rb +++ b/lib/chef/resource/windows_path.rb @@ -30,7 +30,7 @@ class Chef def initialize(name, run_context = nil) super @resource_name = :windows_path - @task_name = name + @path = name @provider = Chef::Provider::WindowsPath @action = :add end diff --git a/spec/functional/resource/windows_path_spec.rb b/spec/functional/resource/windows_path_spec.rb new file mode 100644 index 0000000000..0edda6a58d --- /dev/null +++ b/spec/functional/resource/windows_path_spec.rb @@ -0,0 +1,56 @@ +# +# Author:: Nimisha Sharad (<nimisha.sharad@msystechnologies.com>) +# Copyright:: Copyright (c) 2017 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" + +describe Chef::Resource::WindowsPath, :windows_only do + let(:path) { "test_path" } + + subject do + new_resource = Chef::Resource::WindowsPath.new(path, run_context) + new_resource + end + + describe "adding path" do + after { remove_path } + + it "appends the user given path in the Environment variable Path" do + subject.run_action(:add) + expect(ENV["PATH"]).to include(path) + end + end + + describe "removing path" do + before { add_path } + + it "removes the user given path from the Environment variable Path" do + subject.run_action(:remove) + expect(ENV["PATH"]).not_to include(path) + end + end + + def remove_path + new_resource = Chef::Resource::WindowsPath.new(path, run_context) + new_resource.run_action(:remove) + end + + def add_path + new_resource = Chef::Resource::WindowsPath.new(path, run_context) + new_resource.run_action(:add) + end +end diff --git a/spec/unit/provider/windows_path_spec.rb b/spec/unit/provider/windows_path_spec.rb new file mode 100644 index 0000000000..a43c13f049 --- /dev/null +++ b/spec/unit/provider/windows_path_spec.rb @@ -0,0 +1,74 @@ +# +# Author:: Nimisha Sharad (<nimisha.sharad@msystechnologies.com>) +# Copyright:: Copyright 2008-2017, 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" + +describe Chef::Provider::WindowsPath, :windows_only do + let(:new_resource) { Chef::Resource::WindowsPath.new("some_path") } + + let(:provider) do + node = Chef::Node.new + events = Chef::EventDispatch::Dispatcher.new + run_context = Chef::RunContext.new(node, {}, events) + Chef::Provider::WindowsPath.new(new_resource, run_context) + end + + describe "#load_current_resource" do + it "returns a current_resource" do + expect(provider.load_current_resource).to be_kind_of(Chef::Resource::WindowsPath) + end + + it "sets the path of current resource as the path of new resource" do + current_resource = provider.load_current_resource + expect(current_resource.path).to eq("some_path") + end + end + + describe "#action_add" do + it "uses env resource to add 'path' environment variable" do + allow(provider).to receive(:expand_env_vars) + expect(provider).to receive(:declare_resource).with(:env, "path") + provider.run_action(:add) + end + end + + describe "#action_remove" do + it "uses env resource to remove 'path' environment variable" do + allow(provider).to receive(:expand_env_vars) + expect(provider).to receive(:declare_resource).with(:env, "path") + provider.run_action(:remove) + end + end + + describe "#expand_env_vars" do + context "when ExpandEnvironmentStrings succeeds" do + it "returns the expanded environment variable" do + expanded_var = provider.expand_env_vars("some_path") + expect(expanded_var).to eq("some_path") + end + end + + context "when ExpandEnvironmentStrings fails" do + it "raises error" do + allow(Chef::Provider::WindowsPath::ExpandEnvironmentStrings).to receive(:call).and_return(0) + allow(FFI).to receive(:errno).and_return(10) + expect { provider.expand_env_vars("some_path") }.to raise_error(/Failed calling ExpandEnvironmentStrings with error code 10/) + end + end + end +end diff --git a/spec/unit/resource/windows_path_spec.rb b/spec/unit/resource/windows_path_spec.rb new file mode 100644 index 0000000000..aecea8ee6b --- /dev/null +++ b/spec/unit/resource/windows_path_spec.rb @@ -0,0 +1,38 @@ +# +# Author:: Nimisha Sharad (<nimisha.sharad@msystechnologies.com>) +# Copyright:: Copyright 2008-2017, 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" + +describe Chef::Resource::WindowsPath do + subject { Chef::Resource::WindowsPath.new("some_path") } + + it { is_expected.to be_a_kind_of(Chef::Resource) } + it { is_expected.to be_a_instance_of(Chef::Resource::WindowsPath) } + + it "sets resource name as :windows_path" do + expect(subject.resource_name).to eql(:windows_path) + end + + it "sets the path as it's name" do + expect(subject.path).to eql("some_path") + end + + it "sets the default action as :add" do + expect(subject.action).to eql(:add) + end +end |