diff --git a/lib/puppet/provider/user/useradd_win.rb
b/lib/puppet/provider/user/useradd_win.rb
new file mode 100644
index 0000000..cf9cae4
--- /dev/null
+++ b/lib/puppet/provider/user/useradd_win.rb
@@ -0,0 +1,49 @@
+require 'puppet/provider'
+
+Puppet::Type.type(:user).provide :useradd_win do
+ desc "User management for windows"
+
+ confine :true => Puppet.features.windows?
+ require 'puppet/util/windows_system'
+
+ has_features :manages_passwords
+
+ def user
+ @user = Puppet::Util::Windows::User.new(name) unless defined?(@user)
+ @user
+ end
+
+ def name
+ @resource[:name]
+ end
+
+ def password
+ password = @resource[:password]
+ user.password_is?(password) ?password :"" rescue :absent
+ end
+
+ def password=(pwd)
+ user.password = @resource[:password]
+ end
+
+ def groups
+ user.groups.join(',') rescue :absent
+ end
+
+ def groups=(groups)
+ user.set_groups(groups, @resource[:membership] == :minimum)
+ end
+
+ def create
+ @user = Puppet::Util::Windows::User.create(name, @resource[:password])
+ user.set_groups(@resource[:groups], @resource[:membership] == :minimum)
+ end
+
+ def exists?
+ return Puppet::Util::Windows::User.exists?(name)
+ end
+
+ def delete
+ Puppet::Util::Windows::User.delete(name)
+ end
+end
diff --git a/spec/integration/provider/user/useradd_win.rb
b/spec/integration/provider/user/useradd_win.rb
new file mode 100644
index 0000000..55cd094
--- /dev/null
+++ b/spec/integration/provider/user/useradd_win.rb
@@ -0,0 +1,82 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../../spec_helper'
+
+describe "Provider for windows users" do
+ confine :true => Puppet.features.windows?
+
+ require 'windowstest'
+ include WindowsTest
+
+ def user_provider(resource_configuration)
+ provider = Puppet::Type.type(:user).provider(:useradd_win).new
+ provider.resource = resource_configuration
+ return provider
+ end
+
+ after(:each) do
+ clear
+ end
+
+ it 'should add a user with the given password and group membership' do
+ expected_groups = ["randomgroup1", "randomgroup2"]
+ username = "testuser"
+ password = "1234"
+
+ mkgroups(expected_groups)
+ register_user username
+
+ provider = user_provider :name => username, :password =>
password, :groups => expected_groups.join(",")
+ provider.create
+
+ testuser = user(username)
+ testuser.password_is?(password).should be_true
+
+ groups = testuser.groups
+
+ expected_groups.each {|expected_group|
groups.include?(expected_group).should be_true }
+ expected_groups.length.should be_eql(groups.length)
+ end
+
+ describe "when a user belongs to groups named randomgroup1,
randomgroup2," do
+ before(:all) do
+ expected_groups = ["randomgroup1", "randomgroup2"]
+ username = "testuser"
+
+ mkgroups expected_groups
+ mkuser username
+
+ @provider = user_provider :name => username
+ @provider.groups = expected_groups.join(",")
+
+ groups = @provider.groups.split(',').collect {|group| group.strip }
+ groups.length.should be_eql(expected_groups.length)
+ groups.each {|group|
expected_groups.include?(group).should be_true }
+ end
+
+ describe "after setting membership to randomgroup1 only, " do
+ before(:all) do
+ @provider.groups = "randomgroup1"
+ end
+
+ it "the user should no more be a member of randomgroup 2" do
+ groups = @provider.groups
+
+ groups.index(',').should be_nil
+ groups.should be_eql("randomgroup1")
+ end
+ end
+ end
+
+ it 'should set a users password' do
+ username = "testuser"
+ password = "11112222"
+
+ testuser = mkuser username, password
+
+ provider = user_provider :name => username, :password => password
+ provider.password = password
+
+ testuser.password_is?(password).should be_true
+ end
+end
diff --git a/spec/unit/provider/user/useradd_win.rb
b/spec/unit/provider/user/useradd_win.rb
new file mode 100644
index 0000000..587a7af
--- /dev/null
+++ b/spec/unit/provider/user/useradd_win.rb
@@ -0,0 +1,79 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../../spec_helper'
+
+describe "User management for Windows: useradd_win" do
+ confine :true => Puppet.features.windows?
+
+ before(:each) do
+ @resource = stub('resource')
+ @resource.stubs(:[]).with(:name).returns('testuser')
+ @resource.stubs(:[]).with(:password).returns('pwd')
+
+ provider_class = Puppet::Type.type(:user).provider(:useradd_win)
+ @provider = provider_class.new(@resource)
+
+ @user_mock = mock('user')
+ @provider.stubs(:user).returns @user_mock
+ end
+
+ it 'should be able to verify a users password using User::password_is?' do
+ @user_mock.expects(:password_is?).with('pwd').returns true
+ @provider.password.should be_eql('pwd')
+
+ @user_mock.expects(:password_is?).with('pwd').returns false
+ @provider.password.should be_eql('')
+ end
+
+ it 'should be able to set a users password using User::password' do
+ @user_mock.expects(:password=).with('pwd')
+ @provider.password = 'pwd'
+ end
+
+ describe 'when asked for a list of groups of which the user is a member' do
+ it 'should return the list of groups as a csv' do
+ @user_mock.expects(:groups).returns ['group1', 'group2', 'group3']
+ @provider.groups.should be_eql('group1,group2,group3')
+ end
+
+ it 'should return :absent if any error is raised while
fetching the list' do
+ @user_mock.expects(:groups).raises("ERROR")
+ @provider.groups.should be_eql(:absent)
+ end
+ end
+
+ it 'should be able to add a user to a set of groups' do
+ @resource.expects(:[]).with(:membership).returns(:minimum)
+ @user_mock.expects(:set_groups).with('group1,group2', true)
+
+ @provider.groups = 'group1,group2'
+
+ @resource.expects(:[]).with(:membership).returns(:inclusive)
+ @user_mock.expects(:set_groups).with('group1,group2', false)
+
+ @provider.groups = 'group1,group2'
+ end
+
+ it 'should be able to create a user' do
+ @resource.expects(:[]).with(:groups).returns('group1,group2')
+ @resource.expects(:[]).with(:membership).returns(:minimum)
+
+ Puppet::Util::Windows::User.expects(:create).with('testuser',
'pwd').returns @user_mock
+ @user_mock.expects(:set_groups).with('group1,group2', true)
+
+ @provider.create
+ end
+
+ it 'should be able to test whether a user exists' do
+ Puppet::Util::Windows::User.expects(:exists?).with('testuser').returns
true
+ @provider.exists?.should be_true
+
+ Puppet::Util::Windows::User.expects(:exists?).with('testuser').returns
false
+ @provider.exists?.should be_false
+ end
+
+ it 'should be able to delete a user' do
+ Puppet::Util::Windows::User.expects(:delete).with('testuser')
+ @provider.delete
+ end
+end
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Puppet Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/puppet-dev?hl=en
-~----------~----~----~----~------~----~------~--~---