/ scripts / generate-snapshot-test-cases
generate-snapshot-test-cases
 1  #!/bin/bash
 2  
 3  SNAPSHOTS_ROOT="crates/amaru/tests/snapshots"
 4  BASE_TESTS_DIR="crates/amaru/tests"
 5  
 6  # Check if snapshots directory exists
 7  if [[ ! -d "$SNAPSHOTS_ROOT" ]]; then
 8      echo "Error: Directory $SNAPSHOTS_ROOT does not exist"
 9      exit 1
10  fi
11  
12  # Iterate through network directories
13  for NETWORK_PATH in "$SNAPSHOTS_ROOT"/*; do
14      if [[ -d "$NETWORK_PATH" ]]; then
15          NETWORK_NAME=$(basename "$NETWORK_PATH")
16          NETWORK_TESTS_DIR="$BASE_TESTS_DIR/snapshots/$NETWORK_NAME"
17          DEST_PATH="$NETWORK_TESTS_DIR/generated_compare_snapshot_test_cases.incl"
18  
19          # Ensure network-specific test directory exists
20          mkdir -p "$NETWORK_TESTS_DIR"
21  
22          # Reset TEST_CASES for this network
23          TEST_CASES=()
24  
25          # Collect all test cases for this network
26          for FILE_PATH in "$NETWORK_PATH"/*; do
27              if [[ -f "$FILE_PATH" ]]; then
28                  FILE_NAME=$(basename "$FILE_PATH")
29  
30                  # Check if filename matches pattern: summary__rewards_summary_*.snap
31                  if [[ "$FILE_NAME" =~ ^summary__rewards_summary_([0-9]+)\.snap$ ]]; then
32                      EPOCH="${BASH_REMATCH[1]}"
33                      TEST_CASES+=("$NETWORK_NAME:$EPOCH")
34                  fi
35              fi
36          done
37  
38          # Skip if no test cases found
39          if [[ ${#TEST_CASES[@]} -eq 0 ]]; then
40              echo "No test cases found for network: $NETWORK_NAME"
41              continue
42          fi
43  
44          # Sort test cases
45          IFS=$'\n' TEST_CASES=($(sort <<<"${TEST_CASES[*]}"))
46          unset IFS
47  
48          # Create/truncate the output file
49          > "$DEST_PATH"
50  
51          # Write test cases to file
52          for TEST_CASE in "${TEST_CASES[@]}"; do
53              NETWORK="${TEST_CASE%:*}"
54              EPOCH="${TEST_CASE#*:}"
55  
56              echo "#[test_case($EPOCH)]" >> "$DEST_PATH"
57          done
58  
59          # Append the test function content
60          cat >> "$DEST_PATH" << EOF
61  #[ignore]
62  pub fn compare_snapshot_$NETWORK_NAME(epoch: u64) {
63      let epoch = Epoch::from(epoch);
64      compare_snapshot(epoch)
65  }
66  EOF
67  
68          echo "✅ Generated test cases for '$NETWORK_NAME' at: $DEST_PATH"
69      fi
70  done