test_cli_radicle
1 #!/bin/bash 2 3 # Exit immediately if a command exits with a non-zero status. 4 set -e 5 6 echo "--- SCENARIO 2: Testing RIP-X Layout (Default) ---" 7 echo "Starting Test: $(date)" 8 echo "======================================================" 9 10 # --- Configuration --- 11 TEST_DIR_RADICLE="test_repo_radicle" 12 REPO_PATH_RADICLE="$TEST_DIR_RADICLE" 13 GIT_DIR_RADICLE="$REPO_PATH_RADICLE/.git" 14 ID_ALIAS_RAD="rad_id_key" 15 DEVICE_ALIAS_RAD="rad_dev1_key" 16 PASSPHRASE_ID_RAD="pass_rad_id_123" 17 PASSPHRASE_DEV_RAD="pass_rad_dev_456" 18 METADATA_FILE_RAD="metadata_radicle.json" 19 DEVICE_SEED_FILE_RAD="device1_radicle.seed" 20 21 # RIP-X layout is the default — no override flags needed 22 IDENTITY_REF="refs/rad/id" 23 IDENTITY_BLOB="radicle-identity.json" 24 ATTESTATION_PREFIX="refs/keys" 25 ATTESTATION_BLOB="link-attestation.json" 26 27 # Ensure we handle potential CR characters (\r) from windowsy output 28 CR=$(printf '\r') 29 30 # --- Cleanup Function --- 31 cleanup() { 32 echo "" 33 echo "--- Cleaning up Scenario 2 ---" 34 auths key delete --alias "$ID_ALIAS_RAD" || true 35 auths key delete --alias "$DEVICE_ALIAS_RAD" || true 36 rm -rf "$TEST_DIR_RADICLE" 37 rm -f "$METADATA_FILE_RAD" "$DEVICE_SEED_FILE_RAD" 38 echo "Cleanup complete." 39 } 40 trap cleanup EXIT HUP INT QUIT TERM 41 42 # --- Setup --- 43 echo "" 44 echo "--- Setup ---" 45 rm -rf "$TEST_DIR_RADICLE" 46 mkdir "$TEST_DIR_RADICLE" 47 echo '{ 48 "xyz.radicle.agent": { 49 "alias": "rad_tester", 50 "controller": "" 51 }, 52 "profile": { 53 "name": "Radicle Test User" 54 } 55 }' > "$METADATA_FILE_RAD" 56 head -c 32 /dev/urandom > "$DEVICE_SEED_FILE_RAD" 57 echo "Setup complete." 58 59 # --- Test Initialization --- 60 echo "" 61 echo "--- Testing: id init-did (Default/RIP-X Layout) ---" 62 echo "$PASSPHRASE_ID_RAD" | auths --repo "$REPO_PATH_RADICLE" id init-did \ 63 --metadata-file "$METADATA_FILE_RAD" \ 64 --local-key-alias "$ID_ALIAS_RAD" 65 66 # --- Verification --- 67 echo "" 68 echo "--- Verifying Initialization ---" 69 echo "[Verifying] Listing keys..." 70 auths key list | grep "$ID_ALIAS_RAD" 71 echo "[Verifying] Showing identity info..." 72 CONTROLLER_DID_RAD=$(auths --repo "$REPO_PATH_RADICLE" id show 2>/dev/null | grep 'Controller DID:' | awk -F': ' '{print $2}') 73 echo "[Verification] Controller DID found: [$CONTROLLER_DID_RAD]" 74 auths --repo "$REPO_PATH_RADICLE" id show 2>/dev/null | grep 'rad_tester' 75 echo "[Verifying] Checking Git repository structure..." 76 ls "$GIT_DIR_RADICLE" 77 echo "[Verifying] git rev-parse --verify '$IDENTITY_REF'..." 78 git --git-dir="$GIT_DIR_RADICLE" rev-parse --verify "$IDENTITY_REF" > /dev/null 79 echo "[Verification] Identity ref '$IDENTITY_REF' found and verified." 80 COMMIT_HASH_RAD=$(git --git-dir="$GIT_DIR_RADICLE" rev-parse "$IDENTITY_REF") 81 git --git-dir="$GIT_DIR_RADICLE" ls-tree "$COMMIT_HASH_RAD" | grep "$IDENTITY_BLOB" 82 echo "[Verification] Identity blob '$IDENTITY_BLOB' found." 83 84 # --- Test Key Import --- 85 echo "" 86 echo "--- Testing: key import ---" 87 echo "$PASSPHRASE_DEV_RAD" | auths key import \ 88 --alias "$DEVICE_ALIAS_RAD" \ 89 --seed-file "$DEVICE_SEED_FILE_RAD" \ 90 --controller-did "$CONTROLLER_DID_RAD" 91 92 # --- Verification --- 93 echo "" 94 echo "--- Verifying Key Import ---" 95 echo "[Verifying] Listing keys..." 96 auths key list | grep "$ID_ALIAS_RAD" 97 auths key list | grep "$DEVICE_ALIAS_RAD" 98 99 # --- Test Device Link --- 100 echo "" 101 echo "--- Testing: device link (Default/RIP-X Layout) ---" 102 DERIVE_DID_OUTPUT_RAW=$(auths util derive-did --seed-hex $(xxd -p -c 256 "$DEVICE_SEED_FILE_RAD")) 103 DERIVE_DID_OUTPUT=${DERIVE_DID_OUTPUT_RAW%$CR} 104 DEVICE_DID_RAD=${DERIVE_DID_OUTPUT##*DID: } 105 DEVICE_DID_RAD=$(echo "$DEVICE_DID_RAD" | awk '{$1=$1};1') 106 echo "Debug: Device DID extracted: [$DEVICE_DID_RAD]" 107 shopt -s extglob 108 SANITIZED_DID_RAD=${DEVICE_DID_RAD//[^[:alnum:]]/_} 109 shopt -u extglob 110 echo "Debug: Sanitized DID for path: [$SANITIZED_DID_RAD]" 111 if [[ ! "$SANITIZED_DID_RAD" == did_key_z* ]]; then echo "ERROR: Sanitization failed!"; exit 1; fi 112 113 echo -e "$PASSPHRASE_DEV_RAD\n$PASSPHRASE_ID_RAD\n$PASSPHRASE_DEV_RAD" | auths --repo "$REPO_PATH_RADICLE" device link \ 114 --identity-key-alias "$ID_ALIAS_RAD" \ 115 --device-key-alias "$DEVICE_ALIAS_RAD" \ 116 --device-did "$DEVICE_DID_RAD" \ 117 --note "Radicle layout test device" 118 119 # --- Verification --- 120 echo "" 121 echo "--- Verifying Device Link ---" 122 echo "[Verifying] Showing devices..." 123 auths --repo "$REPO_PATH_RADICLE" id show-devices 2>/dev/null | grep "$DEVICE_DID_RAD" | grep "active" 124 auths --repo "$REPO_PATH_RADICLE" id show-devices 2>/dev/null | grep "Radicle layout test device" 125 echo "[Verifying] Checking Git repository structure..." 126 DEVICE_REF_PATH_RAD="${ATTESTATION_PREFIX}/${SANITIZED_DID_RAD}/signatures" 127 echo "Debug: Calculated Device Ref Path: [$DEVICE_REF_PATH_RAD]" 128 echo "[Verifying] git rev-parse --verify '$DEVICE_REF_PATH_RAD'..." 129 git --git-dir="$GIT_DIR_RADICLE" rev-parse --verify "$DEVICE_REF_PATH_RAD" > /dev/null 130 echo "[Verification] Device ref '$DEVICE_REF_PATH_RAD' found and verified." 131 DEV_COMMIT_HASH_RAD=$(git --git-dir="$GIT_DIR_RADICLE" rev-parse "$DEVICE_REF_PATH_RAD") 132 git --git-dir="$GIT_DIR_RADICLE" ls-tree "$DEV_COMMIT_HASH_RAD" | grep "$ATTESTATION_BLOB" 133 echo "[Verification] Attestation blob '$ATTESTATION_BLOB' found." 134 135 # --- Test Device Revoke --- 136 echo "" 137 echo "--- Testing: device revoke (Default/RIP-X Layout) ---" 138 echo "$PASSPHRASE_ID_RAD" | auths --repo "$REPO_PATH_RADICLE" device revoke \ 139 --identity-key-alias "$ID_ALIAS_RAD" \ 140 --device-did "$DEVICE_DID_RAD" \ 141 --note "Revoking radicle test device" 142 143 # --- Verification --- 144 echo "" 145 echo "--- Verifying Device Revoke ---" 146 echo "[Verifying] Showing devices (should be empty)..." 147 if auths --repo "$REPO_PATH_RADICLE" id show-devices 2>/dev/null | grep "$DEVICE_DID_RAD"; then 148 echo "ERROR: Revoked device still listed without --include-revoked!" 149 exit 1 150 else 151 echo "OK: Revoked device not listed by default." 152 fi 153 echo "[Verifying] Showing devices (including revoked)..." 154 auths --repo "$REPO_PATH_RADICLE" id show-devices --include-revoked 2>/dev/null | grep "$DEVICE_DID_RAD" | grep "revoked" 155 auths --repo "$REPO_PATH_RADICLE" id show-devices --include-revoked 2>/dev/null | grep "Revoking radicle test device" 156 echo "[Verifying] git ref '$DEVICE_REF_PATH_RAD' still exists..." 157 git --git-dir="$GIT_DIR_RADICLE" rev-parse --verify "$DEVICE_REF_PATH_RAD" > /dev/null 158 echo "[Verification] Device ref '$DEVICE_REF_PATH_RAD' still found and verified after revoke." 159 160 echo "" 161 echo "======================================================" 162 echo "--- SCENARIO 2: PASSED ---" 163 echo "Finished Test: $(date)"