1 #!/bin/ksh
   2 #
   3 # This file and its contents are supplied under the terms of the
   4 # Common Development and Distribution License ("CDDL"), version 1.0.
   5 # You may only use this file in accordance with the terms of version
   6 # 1.0 of the CDDL.
   7 #
   8 # A full copy of the text of the CDDL should have accompanied this
   9 # source.  A copy of the CDDL is also available via the Internet at
  10 # http://www.illumos.org/license/CDDL.
  11 #
  12 
  13 #
  14 # Copyright (c) 2017, Joyent, Inc.
  15 #
  16 
  17 #
  18 # Basic tests of date -r.
  19 #
  20 
  21 #
  22 # Make sure that we're executing in the C locale and that a given user's
  23 # locale doesn't impact this test.
  24 #
  25 export LANG=C
  26 
  27 date_arg0="$(basename $0)"
  28 date_prog=/usr/bin/date
  29 date_curcmd=
  30 
  31 fatal()
  32 {
  33         typeset msg="$*"
  34         [[ -z "$msg" ]] && msg="failed"
  35         echo "TEST FAILED: $date_arg0: $msg" >&2
  36         exit 1
  37 }
  38 
  39 compare()
  40 {
  41         typeset time=$1
  42         typeset exp=$2
  43         typeset tz=$3
  44         typeset val ret
  45 
  46         date_curcmd="TZ=$3 $date_prog -r $1"
  47         val=$(TZ=$3 $date_prog -r $1)
  48         ret=$?
  49         if [[ $ret -ne 0 ]]; then
  50                 fatal "date not exit zero, exited $ret; command: $date_curcmd"
  51         fi
  52         if [[ -z "$val" ]]; then
  53                 fatal "date returned no output; command: $date_curcmd"
  54         fi
  55 
  56         if [[ "$val" != "$exp" ]]; then
  57                 fatal "date output mismatch; command: $date_curcmd; expected: " \
  58                     "$exp; found: $val"
  59         fi
  60 }
  61 
  62 if [[ -n $DATE ]]; then
  63         date_prog=$DATE
  64 fi
  65 
  66 #
  67 # date -r supports base 10, hex, and octal
  68 #
  69 compare 0 "Thu Jan  1 00:00:00 UTC 1970" UTC
  70 compare 0 "Wed Dec 31 16:00:00 PST 1969" US/Pacific
  71 compare 0 "Thu Jan  1 09:00:00 JST 1970" Japan
  72 compare 1234567890 "Fri Feb 13 23:31:30 UTC 2009" UTC
  73 compare -1234567890 "Tue Nov 18 00:28:30 UTC 1930" UTC
  74 compare 2147483647 "Tue Jan 19 03:14:07 UTC 2038" UTC
  75 compare -2147483647 "Fri Dec 13 20:45:53 UTC 1901" UTC
  76 compare 558028800 "Mon Sep  7 16:00:00 UTC 1987" UTC
  77 compare 0x2142d800 "Mon Sep  7 16:00:00 UTC 1987" UTC
  78 compare 04120554000 "Mon Sep  7 16:00:00 UTC 1987" UTC
  79 
  80 #
  81 # Test the file related logic
  82 #
  83 env TZ=UTC touch -t 201712042323.23 $TMPDIR/test.$$
  84 compare "$TMPDIR/test.$$" "Mon Dec  4 23:23:23 UTC 2017" UTC
  85 rm -f $TMPDIR/test.$$
  86 
  87 #
  88 # date -r should not work with -a
  89 #
  90 if $date_prog -r 0 -a 10 2>/dev/null; then
  91         fatal "date -r 0 -a 10 exited zero when it should have failed"
  92 fi
  93 
  94 #
  95 # date -r and -R or -u should work together
  96 #
  97 compare "0 -R" "Thu, 01 Jan 1970 02:00:00 +0200" Africa/Cairo
  98 compare "0 -u" "Thu Jan  1 00:00:00 GMT 1970" Europe/Rome
  99 
 100 echo "TEST PASSED: $date_arg0"