Cleaned up bitrot in nsswitch testsuite. Merged tests across from TNG
[ira/wip.git] / testsuite / nsswitch / getent.exp
index fcd98670b83620bc6559cc5aad28054f5b1657e0..72bf2ea1ebec60252c6b4f72aa8cdf66956ce7f3 100644 (file)
 #
 
 load_lib util-defs.exp
-load_lib "$srcdir/config/env.exp"
-load_lib "$srcdir/config/default-nt-names.exp"
+load_lib compile.exp
+load_lib $srcdir/lib/nsswitch-config.exp
 
 #
-# Test getent passwd
+#   @(#) Test getent passwd returns domain users
 #
 
-set output [util_start "getent" "passwd" ""]
+set wbinfo_output [util_start "bin/wbinfo" "-u"]
+set getent_output [util_start "getent" "passwd" ""]
 
-# Test output for domain users
+if { ![regexp "$domain/" $getent_output] } {
+    fail "no domain users in getent passwd"
+    return
+}
+
+if { [regexp "Error" $wbinfo_output] } {
+    fail "wbinfo -u failed"
+    return
+}
+
+#
+#   @(#) Test each user in the output of wbinfo is also in the output of
+#   @(#) getent.
+#
+
+# Test wbinfo user names are in getent user names
+
+foreach { user } [split $wbinfo_output "\n"] {
+
+    verbose "looking for $user"
+
+    set test_desc "getent passwd does not contain $user"
+
+    if { ![regexp "$user" $getent_output] } {
+        fail $test_desc
+    } else {
+        pass $test_desc
+    }
+}
+
+# Test getent user names are in wbinfo user names
+
+foreach { user } [split $getent_output "\n"] {
+
+    set user_info [split $user ":"]
+    set username [lindex $user_info 0]
+
+    if { [regexp {^[^/]+/} $username] } {
+
+       set test_desc "wbinfo -u does not contain $username"
+
+       if { ![regexp "$username" $wbinfo_output] } {
+           fail $test_desc
+       } else {
+           pass $test_desc
+       }
+    } else {
+       verbose "ignoring non-domain user $username"
+    }
+}
+
+#
+#   @(#) Test each group in the output of wbinfo is also in the output of
+#   @(#) getent.
+#
+
+set wbinfo_output [util_start "bin/wbinfo" "-g"]
+set getent_output [util_start "getent" "group" ""]
+
+if { ![regexp "$domain/" $getent_output] } {
+    fail "no domain groups in getent passwd"
+    return
+}
+
+if { [regexp "Error" $wbinfo_output] } {
+    fail "wbinfo -g failed"
+    return
+}
+
+# Test wbinfo group names are in getent group names
+
+foreach { group } [split $wbinfo_output "\n"] {
+
+    verbose "looking for $group"
+
+    set test_desc "getent group does not contain $group"
+
+    if { ![regexp "$group" $getent_output] } {
+        fail $test_desc
+    } else {
+        pass $test_desc
+    }
+}
+
+# Test getent group names are in wbinfo group names
+
+foreach { group } [split $getent_output "\n"] {
+
+    set group_info [split $group ":"]
+    set groupname [lindex $group_info 0]
 
-foreach {user} $domain_users {
-    if {![regexp "$user" $output]} {
-        fail "getent passwd $user"
+    if { [regexp {^[^/]+/} $groupname] } {
+
+       set test_desc "wbinfo -g does not contain $groupname"
+
+       if { ![regexp "$groupname" $wbinfo_output] } {
+           fail $test_desc
+       } else {
+           pass $test_desc
+       }
     } else {
-        pass "getent passwd $user"
+       verbose "ignoring non-domain group $groupname"
     }
 }
 
 #
-# Test getent group
+#   @(#) Test out of order and repeat calls of pwent functions
+#   @(#) Test out of order and repeat calls of grent functions
 #
 
-set output [util_start "getent" "group" ""]
+set getent_tests [list \
+       { "out of order pwent operations" "getent_pwent" } \
+       { "out of order grent operations" "getent_grent" } \
+       ]
+
+# Compile and run each test
 
-foreach {group} $domain_groups {
-    if {![regexp "$group" $output]} {
-        fail "getent group $group"
+foreach { test } $getent_tests {
+    set test_desc [lindex $test 0]
+    set test_file [lindex $test 1]
+
+    simple_compile $test_file
+    set output [util_start "$srcdir/$subdir/$test_file" ]
+
+    if { [regexp "PASS" $output] } {
+        pass $test_desc
+        file delete "$srcdir/$subdir/$test_file" "$srcdir/$subdir/$test_file.o"
     } else {
-        pass "getent group $group"
+        fail $test_desc
+        puts $output
     }
+
 }