run.sh (6280B)
1 #!/bin/sh 2 # Driver-level checks for the shared kit CAS/tree utilities. 3 4 set -u 5 6 script_dir=$(cd "$(dirname "$0")" && pwd) 7 repo_root=$(cd "$script_dir/../.." && pwd) 8 9 KIT="${KIT:-$repo_root/build/kit}" 10 11 if [ ! -x "$KIT" ]; then 12 echo "cas: kit binary not found at $KIT" >&2 13 exit 2 14 fi 15 16 work=$(mktemp -d "${TMPDIR:-/tmp}/kit-cas-test.XXXXXX") 17 trap 'rm -rf "$work"' EXIT 18 19 mkdir -p "$work/src/bin" "$work/src/share" "$work/cas" "$work/out" 20 21 # Type-K mode-P kit: ok/run_ok/run_fail/contains/same_file/... + the CAS 22 # helpers (first_hex_id/cas_object_path/tree_blob_for_path), all recording 23 # through the unified kit_* counters over $work. 24 KIT_KIT_DIR="$repo_root/test/lib" 25 . "$repo_root/test/lib/kit_sh_kit.sh" 26 kit_report_init 27 28 make_fixtures() { 29 printf alpha > "$work/src/share/a.txt" 30 cp "$work/src/share/a.txt" "$work/src/share/a-copy.txt" 31 : > "$work/src/share/empty.dat" 32 { 33 printf '#!/bin/sh\n' 34 printf 'printf "hello from cas\\n"\n' 35 } > "$work/src/bin/tool.sh" 36 chmod +x "$work/src/bin/tool.sh" 37 } 38 39 make_fixtures 40 41 run_ok "cas-add-blob" "$KIT" cas add-blob --cas "$work/cas" "$work/src/share/a.txt" 42 blob_id=$(first_hex_id "$work/cas-add-blob.out") 43 if [ -n "$blob_id" ]; then 44 ok "cas-add-blob-id" 45 else 46 echo "could not parse blob id from add-blob output" > "$work/cas-add-blob-id.diag" 47 not_ok "cas-add-blob-id" "$work/cas-add-blob-id.diag" 48 fi 49 blob_file=$(cas_object_path "$work/cas" blob "$blob_id") 50 assert_file_exists "cas-add-blob-object" "$blob_file" 51 same_file "cas-add-blob-content" "$work/src/share/a.txt" "$blob_file" 52 53 run_ok "cas-add-tree-root" "$KIT" cas add-tree --cas "$work/cas" --root "$work/src" 54 tree_id=$(first_hex_id "$work/cas-add-tree-root.out") 55 if [ -n "$tree_id" ]; then 56 ok "cas-add-tree-id" 57 else 58 echo "could not parse tree id from add-tree output" > "$work/cas-add-tree-id.diag" 59 not_ok "cas-add-tree-id" "$work/cas-add-tree-id.diag" 60 fi 61 tree_file=$(cas_object_path "$work/cas" tree "$tree_id") 62 assert_file_exists "cas-add-tree-object" "$tree_file" 63 contains "cas-tree-magic" "$tree_file" "kit-tree 1" 64 contains "cas-tree-hash" "$tree_file" "hash = blake2b-256" 65 contains "cas-tree-blob-format" "$tree_file" "blob = kit-blob-v1" 66 contains "cas-tree-regular-path" "$tree_file" "path = share/a.txt" 67 contains "cas-tree-exec-path" "$tree_file" "path = bin/tool.sh" 68 contains "cas-tree-file-mode" "$tree_file" "mode = -" 69 contains "cas-tree-exec-mode" "$tree_file" "mode = x" 70 71 run_ok "cas-inspect-tree" "$KIT" cas inspect-tree --cas "$work/cas" "$tree_id" 72 contains "cas-inspect-tree-magic" "$work/cas-inspect-tree.out" "kit-tree 1" 73 contains "cas-inspect-tree-path" "$work/cas-inspect-tree.out" "path = share/a.txt" 74 75 run_ok "cas-verify-tree" "$KIT" cas verify-tree --cas "$work/cas" "$tree_id" 76 77 run_ok "cas-materialize-tree" "$KIT" cas materialize --cas "$work/cas" "$tree_id" -C "$work/out/root" 78 same_file "cas-materialize-a" "$work/src/share/a.txt" "$work/out/root/share/a.txt" 79 same_file "cas-materialize-a-copy" "$work/src/share/a-copy.txt" "$work/out/root/share/a-copy.txt" 80 same_file "cas-materialize-empty" "$work/src/share/empty.dat" "$work/out/root/share/empty.dat" 81 same_file "cas-materialize-tool" "$work/src/bin/tool.sh" "$work/out/root/bin/tool.sh" 82 is_executable "cas-materialize-exec-mode" "$work/out/root/bin/tool.sh" 83 84 cat > "$work/map.txt" <<EOF 85 mapped/tool.sh x $work/src/bin/tool.sh 86 mapped/a.txt - $work/src/share/a.txt 87 EOF 88 run_ok "cas-add-tree-map" "$KIT" cas add-tree --cas "$work/cas" --map "$work/map.txt" 89 map_tree_id=$(first_hex_id "$work/cas-add-tree-map.out") 90 if [ -n "$map_tree_id" ]; then 91 ok "cas-add-tree-map-id" 92 else 93 echo "could not parse map tree id from add-tree output" > "$work/cas-add-tree-map-id.diag" 94 not_ok "cas-add-tree-map-id" "$work/cas-add-tree-map-id.diag" 95 fi 96 run_ok "cas-verify-map-tree" "$KIT" cas verify-tree --cas "$work/cas" "$map_tree_id" 97 run_ok "cas-materialize-map-tree" "$KIT" cas materialize --cas "$work/cas" "$map_tree_id" -C "$work/out/map" 98 same_file "cas-map-materialize-a" "$work/src/share/a.txt" "$work/out/map/mapped/a.txt" 99 same_file "cas-map-materialize-tool" "$work/src/bin/tool.sh" "$work/out/map/mapped/tool.sh" 100 is_executable "cas-map-materialize-exec-mode" "$work/out/map/mapped/tool.sh" 101 102 cat > "$work/dup.map" <<EOF 103 same.txt - $work/src/share/a.txt 104 same.txt - $work/src/share/a-copy.txt 105 EOF 106 run_fail "cas-add-tree-duplicate-path-fails" "$KIT" cas add-tree --cas "$work/cas" --map "$work/dup.map" 107 108 cat > "$work/unsafe.map" <<EOF 109 ../escape.txt - $work/src/share/a.txt 110 EOF 111 run_fail "cas-add-tree-unsafe-path-fails" "$KIT" cas add-tree --cas "$work/cas" --map "$work/unsafe.map" 112 113 cat > "$work/absolute.map" <<EOF 114 /absolute.txt - $work/src/share/a.txt 115 EOF 116 run_fail "cas-add-tree-absolute-path-fails" "$KIT" cas add-tree --cas "$work/cas" --map "$work/absolute.map" 117 118 cat > "$work/empty-component.map" <<EOF 119 bad//component.txt - $work/src/share/a.txt 120 EOF 121 run_fail "cas-add-tree-empty-component-fails" "$KIT" cas add-tree --cas "$work/cas" --map "$work/empty-component.map" 122 123 cat > "$work/dot-component.map" <<EOF 124 bad/./component.txt - $work/src/share/a.txt 125 EOF 126 run_fail "cas-add-tree-dot-component-fails" "$KIT" cas add-tree --cas "$work/cas" --map "$work/dot-component.map" 127 128 cat > "$work/colon.map" <<EOF 129 bad:name.txt - $work/src/share/a.txt 130 EOF 131 run_fail "cas-add-tree-colon-path-fails" "$KIT" cas add-tree --cas "$work/cas" --map "$work/colon.map" 132 133 if [ -n "$tree_id" ]; then 134 cp -R "$work/cas" "$work/bad-cas-mutated" 135 a_blob=$(tree_blob_for_path "$tree_file" "share/a.txt") 136 printf tamper >> "$(cas_object_path "$work/bad-cas-mutated" blob "$a_blob")" 137 run_fail "cas-verify-mutated-blob-fails" "$KIT" cas verify-tree --cas "$work/bad-cas-mutated" "$tree_id" 138 run_fail "cas-materialize-mutated-blob-fails" "$KIT" cas materialize --cas "$work/bad-cas-mutated" "$tree_id" -C "$work/out/bad-mutated" 139 140 cp -R "$work/cas" "$work/bad-cas-missing" 141 rm -f "$(cas_object_path "$work/bad-cas-missing" blob "$a_blob")" 142 run_fail "cas-verify-missing-blob-fails" "$KIT" cas verify-tree --cas "$work/bad-cas-missing" "$tree_id" 143 144 mkdir -p "$work/empty-cas" 145 run_fail "cas-verify-missing-tree-fails" "$KIT" cas verify-tree --cas "$work/empty-cas" "$tree_id" 146 else 147 skip_test "cas-corruption-tests" 148 fi 149 150 kit_summary cas 151 kit_exit