97 lines
3.2 KiB
Bash
Executable file
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"
|