kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

run.sh (4762B)


      1 #!/bin/sh
      2 # Regression checks for primary-input diagnostics and transactional output in
      3 # ld/strip/size (KIT-P2-003).
      4 
      5 set -u
      6 
      7 script_dir=$(CDPATH= cd -- "$(dirname "$0")" && pwd)
      8 repo_root=$(CDPATH= cd -- "$script_dir/../.." && pwd)
      9 KIT=${KIT:-$repo_root/build/kit}
     10 KIT_KIT_DIR=$repo_root/test/lib
     11 . "$repo_root/test/lib/kit_sh_kit.sh"
     12 
     13 kit_require_kit driver-diagnostics
     14 kit_report_init
     15 work=$(mktemp -d "${TMPDIR:-/tmp}/kit-diagnostics-test.XXXXXX")
     16 trap 'rm -rf "$work"' EXIT
     17 
     18 expect_one() {
     19   label=$1
     20   got=$2
     21   if [ "$got" -eq 1 ]; then
     22     ok "$label"
     23   else
     24     printf 'got exit %s, want 1\n' "$got" >"$work/$label.diag"
     25     not_ok "$label" "$work/$label.diag"
     26   fi
     27 }
     28 
     29 cat >"$work/valid.c" <<'EOF'
     30 int diagnostic_fixture(void) { return 1; }
     31 EOF
     32 "$KIT" cc -ffreestanding -c "$work/valid.c" -o "$work/valid.o" \
     33   >"$work/compile.stdout" 2>"$work/compile.stderr"
     34 printf 'not an object\n' >"$work/invalid.o"
     35 mkdir "$work/unreadable-input"
     36 
     37 # A total size failure has no stdout. A mixed request retains the valid row but
     38 # still returns operational failure for the missing input.
     39 "$KIT" size "$work/missing.o" >"$work/size-missing.stdout" \
     40   2>"$work/size-missing.stderr"
     41 expect_one size-missing-status "$?"
     42 if [ ! -s "$work/size-missing.stdout" ]; then
     43   ok size-missing-stdout-empty
     44 else
     45   not_ok size-missing-stdout-empty "$work/size-missing.stdout"
     46 fi
     47 contains size-missing-path "$work/size-missing.stderr" "$work/missing.o"
     48 
     49 "$KIT" size "$work/valid.o" "$work/missing.o" \
     50   >"$work/size-mixed.stdout" 2>"$work/size-mixed.stderr"
     51 expect_one size-mixed-status "$?"
     52 contains size-mixed-valid-row "$work/size-mixed.stdout" "$work/valid.o"
     53 contains size-mixed-bad-path "$work/size-mixed.stderr" "$work/missing.o"
     54 
     55 for kind in unreadable malformed; do
     56   case "$kind" in
     57     unreadable) input="$work/unreadable-input" ;;
     58     malformed) input="$work/invalid.o" ;;
     59   esac
     60   "$KIT" size "$input" >"$work/size-$kind.stdout" \
     61     2>"$work/size-$kind.stderr"
     62   expect_one "size-$kind-status" "$?"
     63   if [ ! -s "$work/size-$kind.stdout" ]; then
     64     ok "size-$kind-stdout-empty"
     65   else
     66     not_ok "size-$kind-stdout-empty" "$work/size-$kind.stdout"
     67   fi
     68   contains "size-$kind-path" "$work/size-$kind.stderr" "$input"
     69 done
     70 
     71 # Invalid strip input names the primary input and never publishes its output.
     72 "$KIT" strip -o "$work/stripped.o" "$work/invalid.o" \
     73   >"$work/strip.stdout" 2>"$work/strip.stderr"
     74 expect_one strip-invalid-status "$?"
     75 contains strip-invalid-path "$work/strip.stderr" "$work/invalid.o"
     76 if [ ! -e "$work/stripped.o" ]; then
     77   ok strip-invalid-output-absent
     78 else
     79   not_ok strip-invalid-output-absent
     80 fi
     81 
     82 for kind in missing unreadable; do
     83   case "$kind" in
     84     missing) input="$work/missing.o" ;;
     85     unreadable) input="$work/unreadable-input" ;;
     86   esac
     87   output="$work/stripped-$kind.o"
     88   "$KIT" strip -o "$output" "$input" >"$work/strip-$kind.stdout" \
     89     2>"$work/strip-$kind.stderr"
     90   expect_one "strip-$kind-status" "$?"
     91   contains "strip-$kind-path" "$work/strip-$kind.stderr" "$input"
     92   if [ ! -e "$output" ]; then
     93     ok "strip-$kind-output-absent"
     94   else
     95     not_ok "strip-$kind-output-absent" "$output"
     96   fi
     97 done
     98 
     99 # A recognized-but-truncated member is diagnosed as archive(member).
    100 head -c 8 "$work/valid.o" >"$work/bad.o"
    101 "$KIT" ar rcs "$work/bad.a" "$work/bad.o" \
    102   >"$work/ar.stdout" 2>"$work/ar.stderr"
    103 "$KIT" strip -o "$work/bad-stripped.a" "$work/bad.a" \
    104   >"$work/strip-archive.stdout" 2>"$work/strip-archive.stderr"
    105 expect_one strip-archive-status "$?"
    106 contains strip-archive-member "$work/strip-archive.stderr" \
    107   "$work/bad.a(bad.o)"
    108 if [ ! -e "$work/bad-stripped.a" ]; then
    109   ok strip-archive-output-absent
    110 else
    111   not_ok strip-archive-output-absent
    112 fi
    113 
    114 # ld resolves/validates before publication. An existing destination remains
    115 # byte-identical on invalid input rather than becoming empty or partial.
    116 cp "$work/invalid.o" "$work/ld-before.o"
    117 cp "$work/ld-before.o" "$work/ld-out.o"
    118 "$KIT" ld -r -o "$work/ld-out.o" "$work/invalid.o" \
    119   >"$work/ld.stdout" 2>"$work/ld.stderr"
    120 expect_one ld-invalid-status "$?"
    121 contains ld-invalid-path "$work/ld.stderr" "$work/invalid.o"
    122 same_file ld-invalid-output-unchanged "$work/ld-before.o" "$work/ld-out.o"
    123 
    124 for kind in missing unreadable; do
    125   case "$kind" in
    126     missing) input="$work/missing.o" ;;
    127     unreadable) input="$work/unreadable-input" ;;
    128   esac
    129   output="$work/ld-$kind-out.o"
    130   before="$work/ld-$kind-before.o"
    131   cp "$work/invalid.o" "$before"
    132   cp "$before" "$output"
    133   "$KIT" ld -r -o "$output" "$input" >"$work/ld-$kind.stdout" \
    134     2>"$work/ld-$kind.stderr"
    135   expect_one "ld-$kind-status" "$?"
    136   contains "ld-$kind-path" "$work/ld-$kind.stderr" "$input"
    137   same_file "ld-$kind-output-unchanged" "$before" "$output"
    138 done
    139 
    140 kit_summary driver-diagnostics
    141 kit_exit