Other than my comments from the other mail, +1
On May 24, 2009, at 10:52 AM, joel r wrote:
>
> 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
>
> >
--
The most overlooked advantage to owning a computer is that if they foul
up there's no law against wacking them around a little. -- Joe Martin
---------------------------------------------------------------------
Luke Kanies | http://reductivelabs.com | http://madstop.com
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---