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
|
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../../lib/puppettest'
require 'puppettest'
require 'etc'
class TestUser < Test::Unit::TestCase
include PuppetTest
p = Puppet::Type.type(:user).provide :fake, :parent => PuppetTest::FakeProvider do
@name = :fake
apimethods
def create
@ensure = :present
@resource.send(:properties).each do |property|
next if property.name == :ensure
property.sync
end
end
def delete
@ensure = :absent
@resource.send(:properties).each do |property|
send(property.name.to_s + "=", :absent)
end
end
def exists?
if defined? @ensure and @ensure == :present
true
else
false
end
end
end
FakeUserProvider = p
@@fakeproviders[:group] = p
def findshell(old = nil)
%w{/bin/sh /bin/bash /sbin/sh /bin/ksh /bin/zsh /bin/csh /bin/tcsh
/usr/bin/sh /usr/bin/bash /usr/bin/ksh /usr/bin/zsh /usr/bin/csh
/usr/bin/tcsh}.find { |shell|
if old
FileTest.exists?(shell) and shell != old
else
FileTest.exists?(shell)
end
}
end
def setup
super
Puppet::Type.type(:user).defaultprovider = FakeUserProvider
end
def teardown
Puppet::Type.type(:user).defaultprovider = nil
super
end
def mkuser(name)
user = nil
assert_nothing_raised {
user = Puppet::Type.type(:user).new(
:name => name,
:comment => "Puppet Testing User",
:gid => Puppet::Util::SUIDManager.gid,
:shell => findshell(),
:home => "/home/%s" % name
)
}
assert(user, "Did not create user")
return user
end
def test_autorequire
file = tempfile()
comp = nil
user = nil
group =nil
home = nil
ogroup = nil
assert_nothing_raised {
user = Puppet::Type.type(:user).new(
:name => "pptestu",
:home => file,
:gid => "pptestg",
:groups => "yayness"
)
home = Puppet::Type.type(:file).new(
:path => file,
:owner => "pptestu",
:ensure => "directory"
)
group = Puppet::Type.type(:group).new(
:name => "pptestg"
)
ogroup = Puppet::Type.type(:group).new(
:name => "yayness"
)
comp = mk_catalog(user, group, home, ogroup)
}
rels = nil
assert_nothing_raised() { rels = user.autorequire }
assert(rels.detect { |r| r.source == group }, "User did not require group")
assert(rels.detect { |r| r.source == ogroup }, "User did not require other groups")
assert_nothing_raised() { rels = home.autorequire }
assert(rels.detect { |r| r.source == user }, "Homedir did not require user")
end
# Testing #455
def test_autorequire_with_no_group_should
user = Puppet::Type.type(:user).new(:name => "yaytest", :check => :all)
catalog = mk_catalog(user)
assert_nothing_raised do
user.autorequire
end
user[:ensure] = :absent
assert(user.property(:groups).insync?(nil),
"Groups state considered out of sync with no :should value")
end
# Make sure the 'managehome' param can only be set when the provider
# has that feature. Uses a patch from #432.
def test_managehome
user = Puppet::Type.type(:user).new(:name => "yaytest", :check => :all)
prov = user.provider
home = false
prov.class.meta_def(:manages_homedir?) { home }
assert_nothing_raised("failed on false managehome") do
user[:managehome] = false
end
assert_raise(Puppet::Error, "did not fail when managehome? is false") do
user[:managehome] = true
end
home = true
assert(prov.class.manages_homedir?, "provider did not enable homedir")
assert_nothing_raised("failed when managehome is true") do
user[:managehome] = true
end
end
end
|