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
-~----------~----~----~----~------~----~------~--~---

Reply via email to