From a78cd04294cb00e1968ee77c1371842a1a24da7c Mon Sep 17 00:00:00 2001 From: aliasgar16 Date: Tue, 17 Jan 2017 17:09:12 +0530 Subject: Added RSpecs. Signed-off-by: aliasgar16 --- spec/unit/win32/error_spec.rb | 67 ++++++++++++++++++++++++++++++++++++++++ spec/unit/win32/security_spec.rb | 66 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 spec/unit/win32/error_spec.rb create mode 100644 spec/unit/win32/security_spec.rb (limited to 'spec') diff --git a/spec/unit/win32/error_spec.rb b/spec/unit/win32/error_spec.rb new file mode 100644 index 0000000000..7a2057303d --- /dev/null +++ b/spec/unit/win32/error_spec.rb @@ -0,0 +1,67 @@ +# +# Author:: Aliasgar Batterywala (aliasgar.batterywala@msystechnologies.com) +# Copyright:: Copyright 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" +if Chef::Platform.windows? + require "chef/win32/error" + require "chef/win32/api/error" +end + +describe "Chef::Win32::Error", :windows_only do + describe "self.raise!" do + context "code is not passed to the raise! method" do + context "last error received is user_not_found" do + it "raises UserIDNotFound exception" do + expect(Chef::ReservedNames::Win32::Error).to receive(:get_last_error).and_return( + Chef::ReservedNames::Win32::API::Error::ERROR_USER_NOT_FOUND + ) + expect(Chef::ReservedNames::Win32::Error).to receive_message_chain(:format_message, :strip) + expect{ Chef::ReservedNames::Win32::Error.raise! }.to raise_error Chef::Exceptions::UserIDNotFound + end + end + + context "last error received is not user_not_found" do + it "raises Win32APIError exception" do + expect(Chef::ReservedNames::Win32::Error).to receive(:get_last_error).and_return( + Chef::ReservedNames::Win32::API::Error::ERROR_BAD_USERNAME + ) + expect(Chef::ReservedNames::Win32::Error).to receive_message_chain(:format_message, :strip).and_return('Bad Username') + expect{ Chef::ReservedNames::Win32::Error.raise! }.to raise_error Chef::Exceptions::Win32APIError + end + end + end + + context "code is passed to the raise! method" do + context "last error received is user_not_found" do + it "raises UserIDNotFound exception" do + expect(Chef::ReservedNames::Win32::Error).to_not receive(:get_last_error) + expect(Chef::ReservedNames::Win32::Error).to receive_message_chain(:format_message, :strip) + expect{ Chef::ReservedNames::Win32::Error.raise! nil, Chef::ReservedNames::Win32::API::Error::ERROR_USER_NOT_FOUND }.to raise_error Chef::Exceptions::UserIDNotFound + end + end + + context "last error received is not user_not_found" do + it "raises Win32APIError exception" do + expect(Chef::ReservedNames::Win32::Error).to_not receive(:get_last_error) + expect(Chef::ReservedNames::Win32::Error).to receive_message_chain(:format_message, :strip).and_return('Bad Username') + expect{ Chef::ReservedNames::Win32::Error.raise! nil, Chef::ReservedNames::Win32::API::Error::ERROR_BAD_USERNAME }.to raise_error Chef::Exceptions::Win32APIError + end + end + end + end +end diff --git a/spec/unit/win32/security_spec.rb b/spec/unit/win32/security_spec.rb new file mode 100644 index 0000000000..8634526d39 --- /dev/null +++ b/spec/unit/win32/security_spec.rb @@ -0,0 +1,66 @@ +# +# Author:: Aliasgar Batterywala (aliasgar.batterywala@msystechnologies.com) +# Copyright:: Copyright 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" +if Chef::Platform.windows? + require "chef/win32/error" + require "chef/win32/security" + require "chef/win32/api/error" +end + +describe "Chef::Win32::Security", :windows_only do + describe "self.get_named_security_info" do + context "when HR result is ERROR_SUCCESS" do + it "does not raise the exception" do + expect(Chef::ReservedNames::Win32::Security).to receive(:GetNamedSecurityInfoW).and_return( + Chef::ReservedNames::Win32::API::Error::ERROR_SUCCESS + ) + expect { Chef::ReservedNames::Win32::Security.get_named_security_info '/temp_path' }.to_not raise_error + end + end + + context "when HR result is not ERROR_SUCCESS and not ERROR_USER_NOT_FOUND" do + it "raises Win32APIError exception" do + expect(Chef::ReservedNames::Win32::Security).to receive(:GetNamedSecurityInfoW).and_return( + Chef::ReservedNames::Win32::API::Error::ERROR_INVALID_ACCESS + ) + expect { Chef::ReservedNames::Win32::Security.get_named_security_info '/temp_path' }.to raise_error Chef::Exceptions::Win32APIError + end + end + end + + describe "self.set_named_security_info" do + context "when HR result is ERROR_SUCCESS" do + it "does not raise the exception" do + expect(Chef::ReservedNames::Win32::Security).to receive(:SetNamedSecurityInfoW).and_return( + Chef::ReservedNames::Win32::API::Error::ERROR_SUCCESS + ) + expect { Chef::ReservedNames::Win32::Security.set_named_security_info '/temp_path', :SE_FILE_OBJECT, {} }.to_not raise_error + end + end + + context "when HR result is not ERROR_SUCCESS but it is ERROR_USER_NOT_FOUND" do + it "raises UserIDNotFound exception" do + expect(Chef::ReservedNames::Win32::Security).to receive(:SetNamedSecurityInfoW).and_return( + Chef::ReservedNames::Win32::API::Error::ERROR_USER_NOT_FOUND + ) + expect { Chef::ReservedNames::Win32::Security.set_named_security_info '/temp_path', :SE_FILE_OBJECT, {} }.to raise_error Chef::Exceptions::Chef::Exceptions::UserIDNotFound + end + end + end +end -- cgit v1.2.1