| 1 | #!/usr/bin/env bash
 | 
| 2 | #
 | 
| 3 | # Test case for OSH readlink.
 | 
| 4 | #
 | 
| 5 | # Note: there is also a demo to run like this:
 | 
| 6 | #
 | 
| 7 | # $ demo/readlink-demo.sh all
 | 
| 8 | #
 | 
| 9 | # Usage:
 | 
| 10 | #   gold/readlink.sh <function name>
 | 
| 11 | 
 | 
| 12 | set -o nounset
 | 
| 13 | set -o pipefail
 | 
| 14 | #set -o errexit
 | 
| 15 | 
 | 
| 16 | test-readlink() {
 | 
| 17 |   readlink -f _tmp/gold-bin/readlink
 | 
| 18 |   echo $?
 | 
| 19 | 
 | 
| 20 |   readlink -f libc.so
 | 
| 21 |   echo $?
 | 
| 22 | 
 | 
| 23 |   # busybox 1.35.0 changed behavior here!  It now matches GNU readlink.
 | 
| 24 |   readlink -f /nonexistent
 | 
| 25 |   echo $?
 | 
| 26 | 
 | 
| 27 |   readlink -f /nonexistent/foo
 | 
| 28 |   echo $?
 | 
| 29 | 
 | 
| 30 |   return
 | 
| 31 | 
 | 
| 32 |   # NOTE: busybox doesn't accept multiple arguments.
 | 
| 33 |   echo 'Multiple arguments with an error in the middle'
 | 
| 34 |   readlink -f _tmp/gold-bin/readlink /nonexistent/foo libc.so
 | 
| 35 |   echo $?
 | 
| 36 | }
 | 
| 37 | 
 | 
| 38 | # For this readlink gold test, we need a custom test driver.
 | 
| 39 | compare() {
 | 
| 40 |   mkdir -p _tmp/gold-bin
 | 
| 41 |   ln -s -f -v $PWD/../oil_DEPS/spec-bin/busybox _tmp/gold-bin/readlink
 | 
| 42 | 
 | 
| 43 |   if ! _tmp/gold-bin/readlink --help; then
 | 
| 44 |     echo "busybox readlink not working"
 | 
| 45 |   fi
 | 
| 46 | 
 | 
| 47 |   # Use the readlink in busybox.
 | 
| 48 |   PATH="_tmp/gold-bin:$PATH" $0 test-readlink > _tmp/busybox-readlink.txt
 | 
| 49 | 
 | 
| 50 |   # Use the readlink in OSH.
 | 
| 51 |   PATH="bin/:$PATH" $0 test-readlink > _tmp/osh-readlink.txt
 | 
| 52 | 
 | 
| 53 |   if diff -u _tmp/{busybox,osh}-readlink.txt; then
 | 
| 54 |     echo PASS
 | 
| 55 |   else
 | 
| 56 |     echo FAIL
 | 
| 57 |     return 1
 | 
| 58 |   fi
 | 
| 59 | }
 | 
| 60 | 
 | 
| 61 | "$@"
 |