summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2005-09-08 20:03:52 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2005-09-08 20:03:52 +0000
commitda6590d072cbff40525311b6d5debae0885e1054 (patch)
tree9e1dde9f6251dee70bbe67f6822f8043d85eaed0 /test
parent3726cee8a648268054b240ffae8d7f5f6272c75a (diff)
downloadpuppet-da6590d072cbff40525311b6d5debae0885e1054.tar.gz
puppet-da6590d072cbff40525311b6d5debae0885e1054.tar.xz
puppet-da6590d072cbff40525311b6d5debae0885e1054.zip
group management now works on os x, although it is six shades of really nasty. Netinfo is a nightmare.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@640 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'test')
-rwxr-xr-xtest/types/tc_group.rb166
1 files changed, 151 insertions, 15 deletions
diff --git a/test/types/tc_group.rb b/test/types/tc_group.rb
index 2a23535d4..d5c46ae60 100755
--- a/test/types/tc_group.rb
+++ b/test/types/tc_group.rb
@@ -13,23 +13,73 @@ require 'test/unit'
class TestGroup < TestPuppet
def setup
- Puppet[:loglevel] = :debug if __FILE__ == $0
@@tmpgroups = []
super
end
def teardown
+ Puppet::Type::Group.clear
+ if Facter["operatingsystem"].value == "Darwin"
+ Puppet::State::GroupNInfo.flush()
+ end
@@tmpgroups.each { |group|
- begin
- obj = Etc.getgrnam(group)
- system("groupdel %s" % group)
- rescue ArgumentError => detail
- # no such group, so we're fine
+ unless missing?(group)
+ # if we've gotten this far, the group exists, so remove it
+ Puppet.info "Cleaning %s" % group
+ group = Puppet::Type::Group.new(
+ :name => group
+ )
+ group[:name] = :notfound
+ group.state(:name).sync
end
}
super
end
+ case Facter["operatingsystem"].value
+ when "Darwin":
+ def missing?(group)
+ output = %x{nidump -r /groups/#{group} / 2>/dev/null}.chomp
+
+ if output == ""
+ return true
+ else
+ return false
+ end
+
+ assert_equal("", output, "Group %s is present:\n%s" % [group, output])
+ end
+
+ def gid(name)
+ %x{nireport / /groups name gid}.split("\n").each { |line|
+ group, id = line.chomp.split(/\s+/)
+ if group == name
+ return Integer(id)
+ end
+ }
+
+ return nil
+ end
+ else
+ def assert_missing(group)
+ begin
+ obj = Etc.getgrnam(group)
+ raise false
+ rescue ArgumentError
+ raise true
+ end
+ end
+
+ def gid(name)
+ assert_nothing_raised {
+ obj = Etc.getgrnam(group[:name])
+ return obj.gid
+ }
+
+ return nil
+ end
+ end
+
def groupnames
%x{groups}.chomp.split(/ /)
end
@@ -38,6 +88,56 @@ class TestGroup < TestPuppet
Process.groups
end
+ def attrtest_gid(group)
+ obj = nil
+ #assert_nothing_raised {
+ # obj = Etc.getgrnam(group[:name])
+ #}
+ group.retrieve
+ old = gid(group[:name])
+ comp = newcomp("gidtest", group)
+
+ group[:gid] = old
+
+ trans = assert_events(comp, [], "group")
+
+ newgid = old
+ while true
+ newgid += 1
+
+ if newgid - old > 1000
+ $stderr.puts "Could not find extra test UID"
+ return
+ end
+ begin
+ Etc.getgrgid(newgid)
+ rescue ArgumentError => detail
+ break
+ end
+ end
+
+ assert_nothing_raised("Failed to change group id") {
+ group[:gid] = newgid
+ }
+
+ trans = assert_events(comp, [:group_modified], "group")
+
+ curgid = nil
+ assert_nothing_raised {
+ curgid = gid(group[:name])
+ }
+
+ assert_equal(newgid, curgid, "GID was not changed")
+
+ assert_rollback_events(trans, [:group_modified], "group")
+
+ assert_nothing_raised {
+ curgid = gid(group[:name])
+ }
+
+ assert_equal(old, curgid, "UID was not reverted")
+ end
+
def test_eachmethod
obj = Etc.getgrnam(groupnames()[0])
@@ -47,8 +147,19 @@ class TestGroup < TestPuppet
assert_nothing_raised {
method = state.infomethod
assert(method, "State %s has no infomethod" % name)
- assert(obj.respond_to?(method), "State %s has an invalid method %s" %
- [name, method])
+ assert(obj.respond_to?(method),
+ "State %s has an invalid method %s" %
+ [name, method]
+ )
+ }
+
+ assert_nothing_raised {
+ method = state.infomethod
+ assert(method, "State %s has no infomethod" % name)
+ assert(obj.respond_to?(method),
+ "State %s has an invalid method %s" %
+ [name, method]
+ )
}
}
end
@@ -81,9 +192,21 @@ class TestGroup < TestPuppet
comp = nil
name = "pptestgr"
- assert_raise(ArgumentError) {
- obj = Etc.getgrnam(name)
- }
+ os = Facter["operatingsystem"].value
+
+ #if os == "Darwin"
+ # obj = nil
+ # assert_nothing_raised {
+ # obj = Etc.getgrnam(name)
+ # }
+ # assert_equal(-2, obj.gid, "Darwin GID is not -2")
+ #else
+ #assert_raise(ArgumentError) {
+ # obj = Etc.getgrnam(name)
+ #}
+ #end
+ assert(missing?(name), "Group %s is still present" % name)
+
assert_nothing_raised {
gobj = Puppet::Type::Group.new(
:name => name
@@ -92,19 +215,32 @@ class TestGroup < TestPuppet
comp = newcomp("groupmaker %s" % name, gobj)
}
- trans = assert_events(comp, [:group_created], "group")
@@tmpgroups << name
+ trans = assert_events(comp, [:group_created, :group_modified],
+ "group")
obj = nil
assert_nothing_raised {
obj = Etc.getgrnam(name)
}
+ assert(!missing?(name), "Group %s is missing" % name)
- assert_rollback_events(trans, [:group_deleted], "group")
+ tests = Puppet::Type::Group.validstates.collect { |name, state|
+ state.name
+ }
- assert_raise(ArgumentError) {
- obj = Etc.getgrnam(name)
+ 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_modified, :group_deleted],
+ "group")
+
+ assert(missing?(name), "Group %s is still present" % name)
end
else
$stderr.puts "Not running as root; skipping group creation tests."