summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
Diffstat (limited to 'spec')
-rw-r--r--spec/functional/resource/group_spec.rb8
-rw-r--r--spec/support/shared/unit/provider/useradd_based_user_provider.rb52
-rw-r--r--spec/unit/provider/user/dscl_spec.rb2
-rw-r--r--spec/unit/provider/user/linux_spec.rb (renamed from spec/unit/provider/user/useradd_spec.rb)32
-rw-r--r--spec/unit/provider/user/pw_spec.rb9
-rw-r--r--spec/unit/provider/user/solaris_spec.rb6
-rw-r--r--spec/unit/provider/user/windows_spec.rb6
-rw-r--r--spec/unit/provider_resolver_spec.rb76
-rw-r--r--spec/unit/resource/user_spec.rb2
9 files changed, 128 insertions, 65 deletions
diff --git a/spec/functional/resource/group_spec.rb b/spec/functional/resource/group_spec.rb
index 89f742a8f9..06a89a67c5 100644
--- a/spec/functional/resource/group_spec.rb
+++ b/spec/functional/resource/group_spec.rb
@@ -85,8 +85,14 @@ describe Chef::Resource::Group, :requires_root_or_running_windows, :not_supporte
end
end
+ def node
+ node = Chef::Node.new
+ node.consume_external_attrs(ohai.data, {})
+ node
+ end
+
def user(username)
- usr = Chef::Resource::User.new("#{username}", run_context)
+ usr = Chef::Resource.resource_for_node(:user, node).new(username, run_context)
if ohai[:platform_family] == "windows"
usr.password("ComplexPass11!")
end
diff --git a/spec/support/shared/unit/provider/useradd_based_user_provider.rb b/spec/support/shared/unit/provider/useradd_based_user_provider.rb
index 6677a069ea..de851c4ad4 100644
--- a/spec/support/shared/unit/provider/useradd_based_user_provider.rb
+++ b/spec/support/shared/unit/provider/useradd_based_user_provider.rb
@@ -18,13 +18,18 @@
# limitations under the License.
#
+# XXX: this used to be shared by solaris and linux classes, but at some
+# point became linux-specific. it is now a misnomer to call these 'shared'
+# examples and they should either realy get turned into shared examples or
+# should be copypasta'd back directly into the linux tests.
+
shared_examples_for "a useradd-based user provider" do |supported_useradd_options|
before(:each) do
@node = Chef::Node.new
@events = Chef::EventDispatch::Dispatcher.new
@run_context = Chef::RunContext.new(@node, {}, @events)
- @new_resource = Chef::Resource::User.new("adam", @run_context)
+ @new_resource = Chef::Resource::User::LinuxUser.new("adam", @run_context)
@new_resource.comment "Adam Jacob"
@new_resource.uid 1000
@new_resource.gid 1000
@@ -35,7 +40,7 @@ shared_examples_for "a useradd-based user provider" do |supported_useradd_option
@new_resource.manage_home false
@new_resource.force false
@new_resource.non_unique false
- @current_resource = Chef::Resource::User.new("adam", @run_context)
+ @current_resource = Chef::Resource::User::LinuxUser.new("adam", @run_context)
@current_resource.comment "Adam Jacob"
@current_resource.uid 1000
@current_resource.gid 1000
@@ -46,7 +51,6 @@ shared_examples_for "a useradd-based user provider" do |supported_useradd_option
@current_resource.manage_home false
@current_resource.force false
@current_resource.non_unique false
- @current_resource.supports({ :manage_home => false, :non_unique => false })
end
describe "when setting option" do
@@ -102,9 +106,8 @@ shared_examples_for "a useradd-based user provider" do |supported_useradd_option
describe "when the resource has a different home directory and supports home directory management" do
before do
- allow(@new_resource).to receive(:home).and_return("/wowaweea")
- allow(@new_resource).to receive(:supports).and_return({ :manage_home => true,
- :non_unique => false })
+ @new_resource.home "/wowaweea"
+ @new_resource.manage_home true
end
it "should set -m -d /homedir" do
@@ -126,32 +129,20 @@ shared_examples_for "a useradd-based user provider" do |supported_useradd_option
end
end
- describe "when the resource supports non_unique ids" do
- before do
- allow(@new_resource).to receive(:supports).and_return({ :manage_home => false,
- :non_unique => true })
- end
-
- it "should set -m -o" do
- expect(provider.universal_options).to eql([ "-o" ])
- end
+ it "when non_unique is false should not set -m" do
+ @new_resource.non_unique false
+ expect(provider.universal_options).to eql([ ])
end
- describe "when the resource supports non_unique ids (using real attributes)" do
- before do
- allow(@new_resource).to receive(:manage_home).and_return(false)
- allow(@new_resource).to receive(:non_unique).and_return(true)
- end
-
- it "should set -m -o" do
- expect(provider.universal_options).to eql([ "-o" ])
- end
+ it "when non_unique is true should set -o" do
+ @new_resource.non_unique true
+ expect(provider.universal_options).to eql([ "-o" ])
end
end
describe "when creating a user" do
before(:each) do
- @current_resource = Chef::Resource::User.new(@new_resource.name, @run_context)
+ @current_resource = Chef::Resource::User::LinuxUser.new(@new_resource.name, @run_context)
@current_resource.username(@new_resource.username)
provider.current_resource = @current_resource
provider.new_resource.manage_home true
@@ -246,15 +237,12 @@ shared_examples_for "a useradd-based user provider" do |supported_useradd_option
end
it "should run userdel with the new resources user name and -r if manage_home is true" do
- @new_resource.supports({ :manage_home => true,
- :non_unique => false })
+ @new_resource.manage_home true
expect(provider).to receive(:shell_out!).with("userdel", "-r", @new_resource.username).and_return(true)
provider.remove_user
end
it "should run userdel with the new resources user name if non_unique is true" do
- @new_resource.supports({ :manage_home => false,
- :non_unique => true })
expect(provider).to receive(:shell_out!).with("userdel", @new_resource.username).and_return(true)
provider.remove_user
end
@@ -420,9 +408,9 @@ shared_examples_for "a useradd-based user provider" do |supported_useradd_option
end
end
it "should return true if the current home does not exist but a home is specified by the new resource" do
- @new_resource = Chef::Resource::User.new("adam", @run_context)
- @current_resource = Chef::Resource::User.new("adam", @run_context)
- provider = Chef::Provider::User::Useradd.new(@new_resource, @run_context)
+ @new_resource = Chef::Resource::User::LinuxUser.new("adam", @run_context)
+ @current_resource = Chef::Resource::User::LinuxUser.new("adam", @run_context)
+ provider = Chef::Provider::User::Linux.new(@new_resource, @run_context)
provider.current_resource = @current_resource
@current_resource.home nil
@new_resource.home "/home/kitten"
diff --git a/spec/unit/provider/user/dscl_spec.rb b/spec/unit/provider/user/dscl_spec.rb
index a309033161..dfaaa377d3 100644
--- a/spec/unit/provider/user/dscl_spec.rb
+++ b/spec/unit/provider/user/dscl_spec.rb
@@ -43,7 +43,7 @@ describe Chef::Provider::User::Dscl do
end
let(:new_resource) do
- r = Chef::Resource::User.new("toor")
+ r = Chef::Resource::User::DsclUser.new("toor")
r.password(password)
r.salt(salt)
r.iterations(iterations)
diff --git a/spec/unit/provider/user/useradd_spec.rb b/spec/unit/provider/user/linux_spec.rb
index 7c67449a86..ef12cec234 100644
--- a/spec/unit/provider/user/useradd_spec.rb
+++ b/spec/unit/provider/user/linux_spec.rb
@@ -21,7 +21,7 @@
require "spec_helper"
require "chef/provider/user/useradd"
-describe Chef::Provider::User::Useradd do
+describe Chef::Provider::User::Linux do
subject(:provider) do
p = described_class.new(@new_resource, @run_context)
@@ -48,4 +48,34 @@ describe Chef::Provider::User::Useradd do
provider.manage_user
end
end
+
+ describe "manage_home behavior" do
+ before(:each) do
+ @new_resource = Chef::Resource::User::LinuxUser.new("adam", @run_context)
+ @current_resource = Chef::Resource::User::LinuxUser.new("adam", @run_context)
+ end
+
+ it "sets supports manage_home to true" do
+ Chef::Config[:treat_deprecation_warnings_as_errors] = false
+ expect( @new_resource.supports[:manage_home] ).to be true
+ end
+
+ it "sets supports non-unique to true" do
+ Chef::Config[:treat_deprecation_warnings_as_errors] = false
+ expect( @new_resource.supports[:non_unique] ).to be true
+ end
+
+ it "defaults manage_home to true" do
+ expect( @new_resource.manage_home ).to be true
+ end
+
+ it "by default manage_home is true and we do not -M" do
+ expect( provider.useradd_options ).to eql([])
+ end
+
+ it "setting manage_home to false includes -M" do
+ @new_resource.manage_home false
+ expect( provider.useradd_options ).to eql(["-M"])
+ end
+ end
end
diff --git a/spec/unit/provider/user/pw_spec.rb b/spec/unit/provider/user/pw_spec.rb
index 1e9fda9f7e..624bcfc67d 100644
--- a/spec/unit/provider/user/pw_spec.rb
+++ b/spec/unit/provider/user/pw_spec.rb
@@ -24,7 +24,7 @@ describe Chef::Provider::User::Pw do
@events = Chef::EventDispatch::Dispatcher.new
@run_context = Chef::RunContext.new(@node, {}, @events)
- @new_resource = Chef::Resource::User.new("adam")
+ @new_resource = Chef::Resource::User::PwUser.new("adam")
@new_resource.comment "Adam Jacob"
@new_resource.uid 1000
@new_resource.gid 1000
@@ -34,7 +34,7 @@ describe Chef::Provider::User::Pw do
@new_resource.supports :manage_home => true
- @current_resource = Chef::Resource::User.new("adam")
+ @current_resource = Chef::Resource::User::PwUser.new("adam")
@current_resource.comment "Adam Jacob"
@current_resource.uid 1000
@current_resource.gid 1000
@@ -170,7 +170,6 @@ describe Chef::Provider::User::Pw do
end
it "logs an appropriate message" do
- expect(Chef::Log).to receive(:debug).with("user[adam] no change needed to password")
@provider.modify_password
end
end
@@ -194,7 +193,6 @@ describe Chef::Provider::User::Pw do
end
it "logs an appropriate message" do
- expect(Chef::Log).to receive(:debug).with("user[adam] no change needed to password")
@provider.modify_password
end
end
@@ -206,7 +204,6 @@ describe Chef::Provider::User::Pw do
end
it "should log an appropriate message" do
- expect(Chef::Log).to receive(:debug).with("user[adam] updating password")
@provider.modify_password
end
@@ -236,7 +233,7 @@ describe Chef::Provider::User::Pw do
describe "when loading the current state" do
before do
- @provider.new_resource = Chef::Resource::User.new("adam")
+ @provider.new_resource = Chef::Resource::User::PwUser.new("adam")
end
it "should raise an error if the required binary /usr/sbin/pw doesn't exist" do
diff --git a/spec/unit/provider/user/solaris_spec.rb b/spec/unit/provider/user/solaris_spec.rb
index af16a6bd80..860c9e41dd 100644
--- a/spec/unit/provider/user/solaris_spec.rb
+++ b/spec/unit/provider/user/solaris_spec.rb
@@ -44,8 +44,8 @@ describe Chef::Provider::User::Solaris do
@events = Chef::EventDispatch::Dispatcher.new
@run_context = Chef::RunContext.new(@node, {}, @events)
- @new_resource = Chef::Resource::User.new("adam", @run_context)
- @current_resource = Chef::Resource::User.new("adam", @run_context)
+ @new_resource = Chef::Resource::User::SolarisUser.new("adam", @run_context)
+ @current_resource = Chef::Resource::User::SolarisUser.new("adam", @run_context)
@new_resource.password "hocus-pocus"
@@ -81,7 +81,7 @@ describe Chef::Provider::User::Solaris do
@events = Chef::EventDispatch::Dispatcher.new
@run_context = Chef::RunContext.new(@node, {}, @events)
- @new_resource = Chef::Resource::User.new("dave")
+ @new_resource = Chef::Resource::User::SolarisUser.new("dave")
@current_resource = @new_resource.dup
@provider = Chef::Provider::User::Solaris.new(@new_resource, @run_context)
diff --git a/spec/unit/provider/user/windows_spec.rb b/spec/unit/provider/user/windows_spec.rb
index 4a62e6ec9d..324b5f503f 100644
--- a/spec/unit/provider/user/windows_spec.rb
+++ b/spec/unit/provider/user/windows_spec.rb
@@ -30,10 +30,10 @@ end
describe Chef::Provider::User::Windows do
before(:each) do
@node = Chef::Node.new
- @new_resource = Chef::Resource::User.new("monkey")
+ @new_resource = Chef::Resource::User::WindowsUser.new("monkey")
@events = Chef::EventDispatch::Dispatcher.new
@run_context = Chef::RunContext.new(@node, {}, @events)
- @current_resource = Chef::Resource::User.new("monkey")
+ @current_resource = Chef::Resource::User::WindowsUser.new("monkey")
@net_user = double("Chef::Util::Windows::NetUser")
allow(Chef::Util::Windows::NetUser).to receive(:new).and_return(@net_user)
@@ -89,7 +89,7 @@ describe Chef::Provider::User::Windows do
describe "and the attributes do not match" do
before do
- @current_resource = Chef::Resource::User.new("adam")
+ @current_resource = Chef::Resource::User::WindowsUser.new("adam")
@current_resource.comment "Adam Jacob-foo"
@current_resource.uid 1111
@current_resource.gid 1111
diff --git a/spec/unit/provider_resolver_spec.rb b/spec/unit/provider_resolver_spec.rb
index f1567ed86e..5ba5ddae03 100644
--- a/spec/unit/provider_resolver_spec.rb
+++ b/spec/unit/provider_resolver_spec.rb
@@ -480,7 +480,7 @@ describe Chef::ProviderResolver do
end
end
- on_platform %w{freebsd netbsd}, platform_version: "3.1.4" do
+ on_platform "freebsd", os: "freebsd", platform_version: "10.3" do
it "returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
stub_service_providers
stub_service_configs(:usr_local_etc_rcd)
@@ -507,7 +507,41 @@ describe Chef::ProviderResolver do
expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
end
- it "foo" do
+ it "always returns a freebsd provider by default?" do
+ stub_service_providers
+ stub_service_configs
+ expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
+ end
+ end
+
+ on_platform "netbsd", os: "netbsd", platform_version: "7.0.1" do
+ it "returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
+ stub_service_providers
+ stub_service_configs(:usr_local_etc_rcd)
+ expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
+ end
+
+ it "returns a Freebsd provider if it finds the /etc/rc.d initscript" do
+ stub_service_providers
+ stub_service_configs(:etc_rcd)
+ expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
+ end
+
+ it "always returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
+ # should only care about :usr_local_etc_rcd stub in the service configs
+ stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
+ stub_service_configs(:usr_local_etc_rcd, :initd, :upstart, :xinetd, :systemd)
+ expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
+ end
+
+ it "always returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
+ # should only care about :etc_rcd stub in the service configs
+ stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
+ stub_service_configs(:etc_rcd, :initd, :upstart, :xinetd, :systemd)
+ expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
+ end
+
+ it "always returns a freebsd provider by default?" do
stub_service_providers
stub_service_configs
expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
@@ -552,7 +586,12 @@ describe Chef::ProviderResolver do
subversion: [ Chef::Resource::Subversion, Chef::Provider::Subversion ],
template: [ Chef::Resource::Template, Chef::Provider::Template ],
timestamped_deploy: [ Chef::Resource::TimestampedDeploy, Chef::Provider::Deploy::Timestamped ],
- user: [ Chef::Resource::User, Chef::Provider::User::Useradd ],
+ aix_user: [ Chef::Resource::User::AixUser, Chef::Provider::User::Aix ],
+ dscl_user: [ Chef::Resource::User::DsclUser, Chef::Provider::User::Dscl ],
+ linux_user: [ Chef::Resource::User::LinuxUser, Chef::Provider::User::Linux ],
+ pw_user: [ Chef::Resource::User::PwUser, Chef::Provider::User::Pw ],
+ solaris_user: [ Chef::Resource::User::SolarisUser, Chef::Provider::User::Solaris ],
+ windows_user: [ Chef::Resource::User::WindowsUser, Chef::Provider::User::Windows ],
whyrun_safe_ruby_block: [ Chef::Resource::WhyrunSafeRubyBlock, Chef::Provider::WhyrunSafeRubyBlock ],
# We want to check that these are unsupported:
@@ -634,15 +673,6 @@ describe Chef::ProviderResolver do
},
},
- "freebsd" => {
- group: [ Chef::Resource::Group, Chef::Provider::Group::Pw ],
- user: [ Chef::Resource::User, Chef::Provider::User::Pw ],
-
- "freebsd" => {
- "3.1.4" => {
- },
- },
- },
"suse" => {
group: [ Chef::Resource::Group, Chef::Provider::Group::Gpasswd ],
"suse" => {
@@ -704,12 +734,24 @@ describe Chef::ProviderResolver do
},
+ "freebsd" => {
+ "freebsd" => {
+ group: [ Chef::Resource::Group, Chef::Provider::Group::Pw ],
+ user: [ Chef::Resource::User::PwUser, Chef::Provider::User::Pw ],
+
+ "freebsd" => {
+ "10.3" => {
+ },
+ },
+ },
+ },
+
"darwin" => {
%w{mac_os_x mac_os_x_server} => {
group: [ Chef::Resource::Group, Chef::Provider::Group::Dscl ],
package: [ Chef::Resource::HomebrewPackage, Chef::Provider::Package::Homebrew ],
osx_profile: [ Chef::Resource::OsxProfile, Chef::Provider::OsxProfile],
- user: [ Chef::Resource::User, Chef::Provider::User::Dscl ],
+ user: [ Chef::Resource::User::DsclUser, Chef::Provider::User::Dscl ],
"mac_os_x" => {
"10.9.2" => {
@@ -727,7 +769,7 @@ describe Chef::ProviderResolver do
package: [ Chef::Resource::WindowsPackage, Chef::Provider::Package::Windows ],
powershell_script: [ Chef::Resource::PowershellScript, Chef::Provider::PowershellScript ],
service: [ Chef::Resource::WindowsService, Chef::Provider::Service::Windows ],
- user: [ Chef::Resource::User, Chef::Provider::User::Windows ],
+ user: [ Chef::Resource::User::WindowsUser, Chef::Provider::User::Windows ],
windows_package: [ Chef::Resource::WindowsPackage, Chef::Provider::Package::Windows ],
windows_service: [ Chef::Resource::WindowsService, Chef::Provider::Service::Windows ],
@@ -748,7 +790,7 @@ describe Chef::ProviderResolver do
# TODO should be Chef::Resource::BffPackage
package: [ Chef::Resource::Package, Chef::Provider::Package::Aix ],
rpm_package: [ Chef::Resource::RpmPackage, Chef::Provider::Package::Rpm ],
- user: [ Chef::Resource::User, Chef::Provider::User::Aix ],
+ user: [ Chef::Resource::User::AixUser, Chef::Provider::User::Aix ],
# service: [ Chef::Resource::AixService, Chef::Provider::Service::Aix ],
"aix" => {
@@ -815,7 +857,7 @@ describe Chef::ProviderResolver do
},
"omnios" => {
"3.1.4" => {
- user: [ Chef::Resource::User, Chef::Provider::User::Solaris ],
+ user: [ Chef::Resource::User::SolarisUser, Chef::Provider::User::Solaris ],
},
},
"openindiana" => {
@@ -827,7 +869,7 @@ describe Chef::ProviderResolver do
},
},
"solaris2" => {
- user: [ Chef::Resource::User, Chef::Provider::User::Solaris ],
+ user: [ Chef::Resource::User::SolarisUser, Chef::Provider::User::Solaris ],
"5.11" => {
package: [ Chef::Resource::IpsPackage, Chef::Provider::Package::Ips ],
},
diff --git a/spec/unit/resource/user_spec.rb b/spec/unit/resource/user_spec.rb
index 9648ee1305..138ffb1bfe 100644
--- a/spec/unit/resource/user_spec.rb
+++ b/spec/unit/resource/user_spec.rb
@@ -29,7 +29,7 @@ describe Chef::Resource::User, "initialize" do
end
it "should set the resource_name to :user" do
- expect(@resource.resource_name).to eql(:user)
+ expect(@resource.resource_name).to eql(:user_resource_abstract_base_class)
end
it "should set the username equal to the argument to initialize" do