diff options
| author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2005-09-08 20:03:52 +0000 |
|---|---|---|
| committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2005-09-08 20:03:52 +0000 |
| commit | da6590d072cbff40525311b6d5debae0885e1054 (patch) | |
| tree | 9e1dde9f6251dee70bbe67f6822f8043d85eaed0 /test | |
| parent | 3726cee8a648268054b240ffae8d7f5f6272c75a (diff) | |
| download | puppet-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-x | test/types/tc_group.rb | 166 |
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." |
