summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornimisha <nimisha.sharad@clogeny.com>2017-07-31 18:42:50 +0530
committernimisha <nimisha.sharad@clogeny.com>2017-08-16 14:49:02 +0530
commit68a3098e04b6f9a79ded4b555d81ae9fbac6c176 (patch)
treea12cc04e6d78b92ed7309e08135fb4cdb4d94979
parentb8c447a3f7e821773dfec4bc443e344c05d906a0 (diff)
downloadchef-68a3098e04b6f9a79ded4b555d81ae9fbac6c176.tar.gz
Fixed specs
Signed-off-by: nimisha <nimisha.sharad@clogeny.com>
-rw-r--r--lib/chef/provider/windows_path.rb8
-rw-r--r--lib/chef/resource/windows_path.rb2
-rw-r--r--spec/functional/resource/windows_path_spec.rb56
-rw-r--r--spec/unit/provider/windows_path_spec.rb74
-rw-r--r--spec/unit/resource/windows_path_spec.rb38
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