s4:rpc_server: remove unused dcesrv_connection_context->private_date
[samba.git] / testprogs / blackbox / subunit.sh
index 9b047a2d5dfa51f47b7d0efef3d452d26c0da0cd..bcc5bd6a928b1911f1f9a61768785b62b5025ef6 100755 (executable)
 #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 #
 
+timestamp() {
+  # mark the start time. With Gnu date, you get nanoseconds from %N
+  # (here truncated to microseconds with %6N), but not on BSDs,
+  # Solaris, etc, which will apparently leave either %N or N at the end.
+  date -u +'time: %Y-%m-%d %H:%M:%S.%6NZ' | sed 's/\..*NZ$/.000000Z/'
+}
+
 subunit_start_test () {
   # emit the current protocol start-marker for test $1
-  echo "test: $1"
+  timestamp
+  printf 'test: %s\n' "$1"
 }
 
 
 subunit_pass_test () {
   # emit the current protocol test passed marker for test $1
-  echo "success: $1"
+  timestamp
+  printf 'success: %s\n' "$1"
 }
 
 # This is just a hack as we have some broken scripts
@@ -38,7 +47,8 @@ subunit_fail_test () {
   # the error text.
   # we use stdin because the failure message can be arbitrarily long, and this
   # makes it convenient to write in scripts (using <<END syntax.
-  echo "failure: $1 ["
+  timestamp
+  printf 'failure: %s [\n' "$1"
   cat -
   echo "]"
 }
@@ -49,7 +59,18 @@ subunit_error_test () {
   # the error text.
   # we use stdin because the failure message can be arbitrarily long, and this
   # makes it convenient to write in scripts (using <<END syntax.
-  echo "error: $1 ["
+  timestamp
+  printf 'error: %s [\n' "$1"
+  cat -
+  echo "]"
+}
+
+subunit_skip_test () {
+  # emit the current protocol skip-marker for test $1, and emit stdin as
+  # the error text.
+  # we use stdin because the failure message can be arbitrarily long, and this
+  # makes it convenient to write in scripts (using <<END syntax.
+  printf 'skip: %s [\n' "$1"
   cat -
   echo "]"
 }
@@ -57,7 +78,7 @@ subunit_error_test () {
 testit () {
        name="$1"
        shift
-       cmdline="$*"
+       cmdline="$@"
        subunit_start_test "$name"
        output=`$cmdline 2>&1`
        status=$?
@@ -69,10 +90,35 @@ testit () {
        return $status
 }
 
+# This returns 0 if the command gave success and the grep value was found
+# all other cases return != 0
+testit_grep () {
+       name="$1"
+       shift
+       grep="$1"
+       shift
+       cmdline="$@"
+       subunit_start_test "$name"
+       output=`$cmdline 2>&1`
+       status=$?
+       if [ x$status != x0 ]; then
+               printf '%s' "$output" | subunit_fail_test "$name"
+               return $status
+       fi
+       printf '%s' "$output" | grep -q "$grep"
+       gstatus=$?
+       if [ x$gstatus = x0 ]; then
+               subunit_pass_test "$name"
+       else
+               printf 'GREP: "%s" not found in output:\n%s' "$grep" "$output" | subunit_fail_test "$name"
+       fi
+       return $status
+}
+
 testit_expect_failure () {
        name="$1"
        shift
-       cmdline="$*"
+       cmdline="$@"
        subunit_start_test "$name"
        output=`$cmdline 2>&1`
        status=$?
@@ -84,11 +130,34 @@ testit_expect_failure () {
        return $status
 }
 
+# This returns 0 if the command gave a failure and the grep value was found
+# all other cases return != 0
+testit_expect_failure_grep () {
+       name="$1"
+       shift
+       grep="$1"
+       shift
+       cmdline="$@"
+       subunit_start_test "$name"
+       output=`$cmdline 2>&1`
+       status=$?
+       if [ x$status = x0 ]; then
+               printf '%s' "$output" | subunit_fail_test "$name"
+               return 1
+       fi
+       printf '%s' "$output" | grep -q "$grep"
+       gstatus=$?
+       if [ x$gstatus = x0 ]; then
+               subunit_pass_test "$name"
+       else
+               printf 'GREP: "%s" not found in output:\n%s' "$grep" "$output" | subunit_fail_test "$name"
+       fi
+       return $status
+}
+
 testok () {
        name=`basename $1`
-       shift
        failed=$2
-       shift
 
        exit $failed
 }