/ scripts / test_cli_radicle
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)"