yams/tests/manual/test_sync_indexing.sh
2025-10-03 04:02:52 -04:00

97 lines
3.2 KiB
Bash
Executable file

#!/usr/bin/env bash
# PBI-040-4: Manual test for synchronous FTS5 indexing
# This test verifies that small document adds make grep results immediately available.
#
# Expected behavior:
# - Single file add → grep immediately finds content (no 5-10s delay)
# - Small batch add (≤10 files) → grep immediately finds content
# - Large batch add (>10 files) → grep may have delay (async indexing)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
YAMS_CLI="${YAMS_CLI:-${SCRIPT_DIR}/../../build/yams-debug/tools/yams-cli/yams-cli}"
TEST_DIR="/tmp/yams_sync_indexing_test_$$"
cleanup() {
echo "Cleaning up..."
rm -rf "$TEST_DIR"
pkill -f yams-daemon || true
}
trap cleanup EXIT
echo "=== PBI-040-4: Sync FTS5 Indexing Test ==="
echo
# Setup test environment
mkdir -p "$TEST_DIR"
export YAMS_DATA_DIR="$TEST_DIR/data"
mkdir -p "$YAMS_DATA_DIR"
# Create test files
echo "Creating test documents..."
echo "The quick brown fox jumps over the lazy dog" > "$TEST_DIR/test1.txt"
echo "Lorem ipsum dolor sit amet consectetur" > "$TEST_DIR/test2.txt"
echo "YAMS is a content-addressable storage system" > "$TEST_DIR/test3.txt"
echo "Test files created in $TEST_DIR"
echo
# Test 1: Single file add + immediate grep
echo "=== Test 1: Single File Add + Immediate Grep ==="
echo "Adding single file..."
START=$(date +%s%N)
HASH=$("$YAMS_CLI" add "$TEST_DIR/test1.txt" --tags "test,sync" | grep -oE "Hash: [a-f0-9]+" | cut -d' ' -f2)
ADD_TIME=$(( ($(date +%s%N) - START) / 1000000 ))
echo "Add completed in ${ADD_TIME}ms, hash: $HASH"
echo "Grepping immediately (no delay)..."
START=$(date +%s%N)
MATCHES=$("$YAMS_CLI" grep "quick brown fox" --paths-only | wc -l)
GREP_TIME=$(( ($(date +%s%N) - START) / 1000000 ))
echo "Grep completed in ${GREP_TIME}ms, matches: $MATCHES"
if [ "$MATCHES" -gt 0 ]; then
echo "✅ PASS: Immediate grep found content (sync indexing working)"
else
echo "❌ FAIL: Immediate grep did not find content (sync indexing broken)"
exit 1
fi
echo
# Test 2: Small batch add (3 files) + immediate grep
echo "=== Test 2: Small Batch Add (3 files) + Immediate Grep ==="
echo "Adding 3 files..."
START=$(date +%s%N)
"$YAMS_CLI" add "$TEST_DIR/test1.txt" "$TEST_DIR/test2.txt" "$TEST_DIR/test3.txt" --tags "test,batch" > /dev/null
ADD_TIME=$(( ($(date +%s%N) - START) / 1000000 ))
echo "Batch add completed in ${ADD_TIME}ms"
echo "Grepping immediately for 'YAMS' (no delay)..."
START=$(date +%s%N)
MATCHES=$("$YAMS_CLI" grep "YAMS" --paths-only | wc -l)
GREP_TIME=$(( ($(date +%s%N) - START) / 1000000 ))
echo "Grep completed in ${GREP_TIME}ms, matches: $MATCHES"
if [ "$MATCHES" -gt 0 ]; then
echo "✅ PASS: Immediate grep found batch content (sync indexing working)"
else
echo "❌ FAIL: Immediate grep did not find batch content"
exit 1
fi
echo
# Test 3: Performance check - grep should be < 1000ms
echo "=== Test 3: Performance Check ==="
if [ "$GREP_TIME" -lt 1000 ]; then
echo "✅ PASS: Grep performance is good (${GREP_TIME}ms < 1000ms)"
else
echo "⚠️ WARNING: Grep took ${GREP_TIME}ms (expected < 1000ms)"
fi
echo
echo "=== All Tests Passed ==="
echo "Summary:"
echo " - Single file add: ${ADD_TIME}ms"
echo " - Grep latency: ${GREP_TIME}ms"
echo " - Sync indexing: ✅ working"