summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2005-09-17 02:44:32 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2005-09-17 02:44:32 +0000
commit106d397bc0de9512b24724c5b3ed95db501671ea (patch)
treed6faae5ea8e1d5801893921b5f382ad0ff85c936 /test
parent42deabbe80de28ca7e086568cdb0fe670415893b (diff)
Users and groups now nearly work on normal machines and on os x, and I think I have a decent platform for expansion to some of the other important elements like hosts (probably most important after users and groups). Some tests are still failing on os x, because netinfo sucks, but I will hopefully be able to figure out a solution soon. Stupid OS X and NetInfo.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@684 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'test')
-rwxr-xr-xtest/types/tc_group.rb12
-rwxr-xr-xtest/types/tc_user.rb216
2 files changed, 119 insertions, 109 deletions
diff --git a/test/types/tc_group.rb b/test/types/tc_group.rb
index afbd91cc1..b16f28eba 100755
--- a/test/types/tc_group.rb
+++ b/test/types/tc_group.rb
@@ -19,9 +19,6 @@ class TestGroup < TestPuppet
def teardown
Puppet::Type::Group.clear
- if Facter["operatingsystem"].value == "Darwin"
- Puppet::State::GroupNInfo.flush()
- end
@@tmpgroups.each { |group|
unless missing?(group)
remove(group)
@@ -218,14 +215,7 @@ class TestGroup < TestPuppet
}
@@tmpgroups << name
- case Facter["operatingsystem"].value
- when "Darwin":
- trans = assert_events(comp, [:group_created, :group_modified],
- "group")
- else
- trans = assert_events(comp, [:group_created],
- "group")
- end
+ trans = assert_events(comp, [:group_created], "group")
obj = nil
assert_nothing_raised {
diff --git a/test/types/tc_user.rb b/test/types/tc_user.rb
index fd1e7d8e6..c3b518542 100755
--- a/test/types/tc_user.rb
+++ b/test/types/tc_user.rb
@@ -20,16 +20,95 @@ class TestUser < TestPuppet
def teardown
@@tmpusers.each { |user|
- begin
- obj = Etc.getpwnam(user)
- system("userdel %s" % user)
- rescue ArgumentError => detail
- # no such user, so we're fine
+ unless missing?(user)
+ remove(user)
end
}
super
end
+ case Facter["operatingsystem"].value
+ when "Darwin":
+ def missing?(user)
+ output = %x{nidump -r /users/#{user} / 2>/dev/null}.chomp
+
+ if output == ""
+ return true
+ else
+ return false
+ end
+
+ assert_equal("", output, "User %s is present:\n%s" % [user, output])
+ end
+
+ def current?(param, name)
+ state = Puppet::Type::User.states.find { |st|
+ st.name == param
+ }
+
+ output = %x{nireport / /users name #{state.netinfokey}}
+ output.split("\n").each { |line|
+ if line =~ /^(\w+)\s+(.+)$/
+ user = $1
+ id = $2.sub(/\s+$/, '')
+ if user == name
+ if id =~ /^[-0-9]+$/
+ return Integer(id)
+ else
+ return id
+ end
+ end
+ else
+ raise "Could not match %s" % line
+ end
+ }
+
+ return nil
+ end
+
+ def remove(user)
+ system("niutil -destroy / /users/%s" % user)
+ end
+ else
+ def missing?(user)
+ begin
+ obj = Etc.getgrnam(user)
+ return false
+ rescue ArgumentError
+ return true
+ end
+ end
+
+ def current?(param, name)
+ state = Puppet::Type::User.states.find { |st|
+ state.name == param
+ }
+
+ assert_nothing_raised {
+ obj = Etc.getgrnam(name)
+ return obj.send(state.posixmethod)
+ }
+
+ return nil
+ end
+
+ def remove(user)
+ system("userdel %s" % user)
+ end
+ end
+
+ 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 attrtest_comment(user)
old = user.is(:comment)
user[:comment] = "A different comment"
@@ -38,30 +117,20 @@ class TestUser < TestPuppet
trans = assert_events(comp, [:user_modified], "user")
- obj = nil
- assert_nothing_raised {
- obj = Etc.getpwnam(user[:name])
- }
-
- assert_equal("A different comment", obj.gecos, "Comment was not changed")
+ assert_equal("A different comment", current?(:comment, user[:name]),
+ "Comment was not changed")
assert_rollback_events(trans, [:user_modified], "user")
- assert_nothing_raised {
- obj = Etc.getpwnam(user[:name])
- }
-
- assert_equal(old, obj.gecos, "Comment was not reverted")
+ assert_equal(old, current?(:comment, user[:name]),
+ "Comment was not reverted")
end
def attrtest_home(user)
obj = nil
- assert_nothing_raised {
- obj = Etc.getpwnam(user[:name])
- }
- old = obj.dir
comp = newcomp("hometest", user)
+ old = current?(:home, user[:name])
user[:home] = old
trans = assert_events(comp, [], "user")
@@ -70,39 +139,22 @@ class TestUser < TestPuppet
trans = assert_events(comp, [:user_modified], "user")
- obj = nil
- assert_nothing_raised {
- obj = Etc.getpwnam(user[:name])
- }
-
- assert_equal("/tmp", obj.dir, "Home was not changed")
+ assert_equal("/tmp", current?(:home, user[:name]), "Home was not changed")
assert_rollback_events(trans, [:user_modified], "user")
- assert_nothing_raised {
- obj = Etc.getpwnam(user[:name])
- }
-
- assert_equal(old, obj.dir, "Home was not reverted")
+ assert_equal(old, current?(:home, user[:name]), "Home was not reverted")
end
def attrtest_shell(user)
- obj = nil
- assert_nothing_raised {
- obj = Etc.getpwnam(user[:name])
- }
- old = obj.shell
+ old = current?(:shell, user[:name])
comp = newcomp("shelltest", user)
user[:shell] = old
trans = assert_events(comp, [], "user")
- newshell = %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|
- FileTest.exists?(shell) and shell != old
- }
+ newshell = findshell(old)
unless newshell
$stderr.puts "Cannot find alternate shell; skipping shell test"
@@ -113,30 +165,23 @@ class TestUser < TestPuppet
trans = assert_events(comp, [:user_modified], "user")
- obj = nil
- assert_nothing_raised {
- obj = Etc.getpwnam(user[:name])
- }
-
- assert_equal(newshell, obj.shell, "Shell was not changed")
+ assert_equal(newshell, current?(:shell, user[:name]),
+ "Shell was not changed")
assert_rollback_events(trans, [:user_modified], "user")
- assert_nothing_raised {
- obj = Etc.getpwnam(user[:name])
- }
-
- assert_equal(old, obj.shell, "Shell was not reverted")
+ assert_equal(old, current?(:shell, user[:name]), "Shell was not reverted")
end
def attrtest_gid(user)
obj = nil
- assert_nothing_raised {
- obj = Etc.getpwnam(user[:name])
- }
- old = obj.gid
+ old = current?(:gid,user.name)
comp = newcomp("gidtest", user)
+ user.retrieve
+ Puppet.notice "%s vs %s vs %s" %
+ [user.is(:gid), user.should(:gid), old.inspect]
+
user[:gid] = old
trans = assert_events(comp, [], "user")
@@ -145,7 +190,6 @@ class TestUser < TestPuppet
begin
group = Etc.getgrnam(gid)
rescue ArgumentError => detail
- false
next
end
old != group.gid
@@ -170,32 +214,22 @@ class TestUser < TestPuppet
user[:gid] = newgid
}
- assert_events(comp, [], "user")
+ user.retrieve
- obj = nil
- assert_nothing_raised {
- obj = Etc.getpwnam(user[:name])
- }
+ assert_events(comp, [], "user")
- assert_equal(newgid, obj.gid, "GID was not changed")
+ assert_equal(newgid, current?(:gid,user[:name]), "GID was not changed")
assert_rollback_events(trans, [:user_modified], "user")
- assert_nothing_raised {
- obj = Etc.getpwnam(user[:name])
- }
-
- assert_equal(old, obj.gid, "GID was not reverted")
+ assert_equal(old, current?(:gid,user[:name]), "GID was not reverted")
end
def attrtest_uid(user)
obj = nil
- assert_nothing_raised {
- obj = Etc.getpwnam(user[:name])
- }
- old = obj.uid
comp = newcomp("uidtest", user)
+ old = current?(:uid, user[:name])
user[:uid] = old
trans = assert_events(comp, [], "user")
@@ -221,20 +255,11 @@ class TestUser < TestPuppet
trans = assert_events(comp, [:user_modified], "user")
- obj = nil
- assert_nothing_raised {
- obj = Etc.getpwnam(user[:name])
- }
-
- assert_equal(newuid, obj.uid, "UID was not changed")
+ assert_equal(newuid, current?(:uid, user[:name]), "UID was not changed")
assert_rollback_events(trans, [:user_modified], "user")
- assert_nothing_raised {
- obj = Etc.getpwnam(user[:name])
- }
-
- assert_equal(old, obj.uid, "UID was not reverted")
+ assert_equal(old, current?(:uid, user[:name]), "UID was not reverted")
end
def test_eachmethod
@@ -257,29 +282,26 @@ class TestUser < TestPuppet
user = nil
name = "pptest"
- assert_raise(ArgumentError) {
- Etc.getpwnam(name)
- }
+ assert(missing?(name), "User %s is present" % name)
assert_nothing_raised {
user = Puppet::Type::User.create(
:name => name,
- :comment => "Puppet Testing User"
+ :comment => "Puppet Testing User",
+ :gid => Process.gid,
+ :shell => findshell(),
+ :home => "/home/%s" % name
)
}
+ @@tmpusers << name
+
comp = newcomp("usercomp", user)
trans = assert_events(comp, [:user_created], "user")
- @@tmpusers << name
-
- obj = nil
- assert_nothing_raised {
- obj = Etc.getpwnam(name)
- }
-
- assert_equal("Puppet Testing User", obj.gecos, "Comment was not set")
+ assert_equal("Puppet Testing User", current?(:comment, user[:name]),
+ "Comment was not set")
tests = Puppet::Type::User.validstates.collect { |name, state|
state.name
@@ -296,9 +318,7 @@ class TestUser < TestPuppet
assert_rollback_events(trans, [:user_deleted], "user")
- assert_raise(ArgumentError) {
- Etc.getpwnam(user[:name])
- }
+ assert(missing?(user[:name]))
end
else
$stderr.puts "Not root; skipping user creation/modification tests"