summaryrefslogtreecommitdiffstats
path: root/test/ral/type/group.rb
blob: e82144b81198f7fa4d594aebf888e984b2587cf7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#!/usr/bin/env ruby

require File.dirname(__FILE__) + '/../../lib/puppettest'

require 'puppettest'
require 'etc'

class TestGroup < Test::Unit::TestCase
	include PuppetTest

    p = Puppet::Type.type(:group).provide :fake, :parent => PuppetTest::FakeProvider do
        @name = :fake
        apimethods :ensure, :gid

        def create
            @ensure = :present
        end

        def delete
            @ensure = :absent
        end

        def exists?
            if defined? @ensure and @ensure == :present
                true
            else
                false
            end
        end
    end

    FakeGroupProvider = p

    @@fakeproviders[:group] = p

    def setup
        super
        Puppet::Type.type(:group).defaultprovider = FakeGroupProvider
    end

    def teardown
        Puppet::Type.type(:group).defaultprovider = nil
        super
    end

    def mkgroup(name, hash = {})
        group = nil
        hash[:name] = name
        assert_nothing_raised {
            group = Puppet::Type.type(:group).new(hash)
        }

        return group
    end

    def groupnames
        %x{groups}.chomp.split(/ /)
    end

    def groupids
        Process.groups
    end

    def attrtest_ensure(group)
        group[:ensure] = :absent

        comp = mk_catalog("ensuretest", group)
        assert_apply(comp)
        assert_equal(:absent, group.provider.ensure,  "Group is still present")
        group[:ensure] = :present
        assert_events([:group_created], comp)
        assert_equal(:present, group.provider.ensure,  "Group is absent")
        group[:ensure] = :absent
        trans = assert_events([:group_removed], comp)
        assert_equal(:absent, group.provider.ensure,  "Group is present")

        assert_rollback_events(trans, [:group_created], "group")
        assert_equal(:present, group.provider.ensure,  "Group is absent")
    end

    # This is a bit odd, since we're not actually doing anything on the machine.
    # Just make sure we can set the gid and that it will work correctly.
    def attrtest_gid(group)

        # Check the validation.
        assert_nothing_raised {
            group[:gid] = "15"
        }

        assert_equal(15, group.should(:gid),
                     "Did not convert gid to number")

        comp = mk_catalog(group)
        trans = assert_events([:group_modified], comp, "group")
        assert_equal(15, group.provider.gid, "GID was not changed")

        assert_nothing_raised {
            group[:gid] = 16
        }

        assert_equal(16, group.should(:gid),
                     "Did not keep gid as number")

        # Now switch to 16
        trans = assert_events([:group_modified], comp, "group")
        assert_equal(16, group.provider.gid, "GID was not changed")

        # And then rollback
        assert_rollback_events(trans, [:group_modified], "group")
        assert_equal(15, group.provider.gid, "GID was not changed")
    end

    def test_owngroups
        groupnames().each { |group|
            gobj = nil
            comp = nil
            assert_nothing_raised {
                gobj = Puppet::Type.type(:group).new(
                    :name => group,
                    :check => [:gid]
                )
            }

            # Set a fake gid
            gobj.provider.gid = rand(100)

            current_values = nil
            assert_nothing_raised {
                current_values = gobj.retrieve
            }

            assert(current_values[gobj.property(:gid)], 
                   "Failed to retrieve gid")
        }
    end

    def test_mkgroup
        gobj = nil
        name = "pptestgr"

        assert_nothing_raised {
            gobj = Puppet::Type.type(:group).new(
                :name => name,
                :gid => 123
            )
        }
        gobj.finish

        trans = assert_events([:group_created], gobj, "group")

        assert(gobj.provider.exists?,
                "Did not create group")

        tests = Puppet::Type.type(:group).validproperties

        gobj.retrieve
        tests.each { |test|
            if self.respond_to?("attrtest_%s" % test)
                self.send("attrtest_%s" % test, gobj)
            else
                #$stderr.puts "Not testing attr %s of group" % test
            end
        }

        assert_rollback_events(trans, [:group_removed], "group")

        assert(! gobj.provider.exists?,
                "Did not delete group")
    end
end