summaryrefslogtreecommitdiffstats
path: root/test/util/posixtest.rb
blob: 354e3ad4c4d351d28fd21c74afebd2781c7810d8 (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
171
172
173
#!/usr/bin/env ruby
#
#  Created by Luke Kanies on 2006-11-07.
#  Copyright (c) 2006. All rights reserved.

$:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/

require 'puppettest'
require 'puppet/util/posix'

class TestPosixUtil < Test::Unit::TestCase
	include PuppetTest
	include Puppet::Util::POSIX
	
	def mk_posix_resource(type, obj)
	    field = idfield(type)
        res = Puppet::Type.type(type).create(
            :name => obj.name,
            field => obj.send(field)
        )
        res.setdefaults
        res
    end
	
	def test_get_posix_field
	    {:gr => nonrootgroup, :pw => nonrootuser}.each do |space, obj|
	        if space == :gr
	            id = :gid
            else
                id = :uid
            end
	        [obj.name, obj.send(id), obj.send(id).to_s].each do |test|
        	    value = nil
        	    assert_nothing_raised do
        	        value = get_posix_field(space, :name, test)
        	    end
        	    assert_equal(obj.name, value)
    	    end
	    end
    end
    
    def test_get_provider_value
        user = nonrootuser
        obj = mk_posix_resource(:user, user)
        
        assert_nothing_raised do
            assert_equal(user.uid, get_provider_value(:user, :uid, user.uid))
            assert_equal(user.name, get_provider_value(:user, :name, user.name))
        end
    end
    
    def test_gid_and_uid
        {:user => nonrootuser, :group => nonrootgroup}.each do |type, obj|
            method = idfield(type)
            # First make sure we get it back with both name and id with no object
            [obj.name, obj.send(method)].each do |value|
                assert_equal(obj.send(method), send(method, value))
            end
            
            # Now make a Puppet resource and make sure we get it from that.
            resource = mk_posix_resource(type, obj)
            
            [obj.name, obj.send(method)].each do |value|
                assert_equal(obj.send(method), send(method, value))
            end
        end
    end
    
    def test_util_methods
        assert(Puppet::Util.respond_to?(:uid), "util does not have methods")
    end
    
    # First verify we can convert a known user
    def test_gidbyname
        %x{groups}.split(" ").each { |group|
            gid = nil
            assert_nothing_raised {
                gid = Puppet::Util.gid(group)
            }

            assert(gid, "Could not retrieve gid for %s" % group)
        }
    end

    # Then verify we can retrieve a known group by gid
    def test_gidbyid
        %x{groups}.split(" ").each { |group|
            obj = Puppet.type(:group).create(
                :name => group,
                :check => [:gid]
            )
            obj.setdefaults
            obj.retrieve
            id = obj.is(:gid)
            gid = nil
            assert_nothing_raised {
                gid = Puppet::Util.gid(id)
            }

            assert(gid, "Could not retrieve gid for %s" % group)
            assert_equal(id, gid, "Got mismatched ids")
        }
    end

    # Finally, verify that we can find groups by id even if we don't
    # know them
    def test_gidbyunknownid
        gid = nil
        group = Puppet::SUIDManager.gid
        assert_nothing_raised {
            gid = Puppet::Util.gid(group)
        }

        assert(gid, "Could not retrieve gid for %s" % group)
        assert_equal(group, gid, "Got mismatched ids")
    end

    def user
        require 'etc'
        unless defined? @user
            obj = Etc.getpwuid(Puppet::SUIDManager.uid)
            @user = obj.name
        end
        return @user
    end

    # And do it all over again for users
    # First verify we can convert a known user
    def test_uidbyname
        user = user()
        uid = nil
        assert_nothing_raised {
            uid = Puppet::Util.uid(user)
        }

        assert(uid, "Could not retrieve uid for %s" % user)
        assert_equal(Puppet::SUIDManager.uid, uid, "UIDs did not match")
    end

    # Then verify we can retrieve a known user by uid
    def test_uidbyid
        user = user()
        obj = Puppet.type(:user).create(
            :name => user,
            :check => [:uid]
        )
        obj.setdefaults
        obj.retrieve
        id = obj.is(:uid)
        uid = nil
        assert_nothing_raised {
            uid = Puppet::Util.uid(id)
        }

        assert(uid, "Could not retrieve uid for %s" % user)
        assert_equal(id, uid, "Got mismatched ids")
    end

    # Finally, verify that we can find users by id even if we don't
    # know them
    def test_uidbyunknownid
        uid = nil
        user = Puppet::SUIDManager.uid
        assert_nothing_raised {
            uid = Puppet::Util.uid(user)
        }

        assert(uid, "Could not retrieve uid for %s" % user)
        assert_equal(user, uid, "Got mismatched ids")
    end
end

# $Id$