summaryrefslogtreecommitdiffstats
path: root/test/ral/type/resources.rb
blob: 50d6839e7bf1a4e53d251da9d98de41df54fdfcf (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
#!/usr/bin/env ruby
#
#  Created by Luke Kanies on 2006-12-12.
#  Copyright (c) 2006. All rights reserved.

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

require 'puppettest'

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

    def add_purge_lister
        # Now define the list method
        class << @purgetype
            def instances
                $purgemembers.values
            end
        end
    end

    def mk_purger(managed = false)
        @purgenum ||= 0
        @purgenum += 1
        obj = @purgetype.create :name => "purger#{@purgenum}"
        $purgemembers[obj[:name]] = obj
        obj[:fake] = "testing" if managed
        obj
    end

    def mkpurgertype
        # Create a purgeable type
        $purgemembers = {}
        @purgetype = Puppet::Type.newtype(:purgetest) do
            newparam(:name, :namevar => true) {}
            newproperty(:ensure) do
                newvalue(:absent) do
                    $purgemembers[@parent[:name]] = @parent
                end
                newvalue(:present) do
                    $purgemembers.delete(@parent[:name])
                end
            end
            newproperty(:fake) do
                def sync
                    :faked
                end
            end
        end
        cleanup do
            Puppet::Type.rmtype(:purgetest)
        end
    end

    def setup
        super
        @type = Puppet::Type.type(:resources)
    end

    # Part of #408.
    def test_check
        # First check a non-user
        res = Puppet::Type.type(:resources).new :name => :package
        assert_nil(res[:unless_system_user], "got bad default for package")


        assert_nothing_raised {
            assert(res.check("A String"), "String failed check")
            assert(res.check(Puppet::Type.type(:file).new(:path => tempfile())), "File failed check")
            assert(res.check(Puppet::Type.type(:user).new(:name => "yayness")), "User failed check in package")
        }

        # Now create a user manager
        res = Puppet::Type.type(:resources).new :name => :user

        # Make sure the default is 500
        assert_equal(500, res[:unless_system_user], "got bad default")

        # Now make sure root fails the test
        @user = Puppet::Type.type(:user)
        assert_nothing_raised {
            assert(! res.check(@user.create(:name => "root")), "root passed check")
            assert(! res.check(@user.create(:name => "nobody")), "nobody passed check")
        }

        # Now find a user between 0 and the limit
        low = high = nil
        Etc.passwd { |entry|
            if ! low and (entry.uid > 10 and entry.uid < 500)
                low = entry.name
            else
                # We'll reset the limit, since we can't really guarantee that
                # there are any users with uid > 500
                if ! high and entry.uid > 100 and ! res.system_users.include?(entry.name)
                    high = entry.name
                    break
                end
            end
        }

        assert(! res.check(@user.create(:name => low)), "low user #{low} passed check") if low
        if high
            res[:unless_system_user] = 50
            assert(res.check(@user.create(:name => high)), "high user #{high} failed check")
        end
    end
end