mirror of
https://github.com/rubenhensen/k8scd.git
synced 2026-09-17 18:22:54 +02:00
166 lines
6.1 KiB
Bash
166 lines
6.1 KiB
Bash
#!/usr/bin/env bash
|
|
# Elasticsearch standalone test for nix-infra-machine
|
|
#
|
|
# This test:
|
|
# 1. Deploys Elasticsearch as a native service on custom port 9202
|
|
# 2. Verifies the service is running
|
|
# 3. Tests basic Elasticsearch operations (index/query)
|
|
# 4. Cleans up on teardown
|
|
|
|
# Custom ports for testing
|
|
ELASTICSEARCH_HTTP_PORT=9202
|
|
ELASTICSEARCH_TRANSPORT_PORT=9302
|
|
|
|
# Handle teardown command
|
|
if [ "$CMD" = "teardown" ]; then
|
|
echo "Tearing down Elasticsearch test..."
|
|
|
|
# Stop Elasticsearch service
|
|
$NIX_INFRA fleet cmd -d "$WORK_DIR" --target="$TARGET" \
|
|
'systemctl stop elasticsearch 2>/dev/null || true'
|
|
|
|
# Clean up data directory
|
|
$NIX_INFRA fleet cmd -d "$WORK_DIR" --target="$TARGET" \
|
|
'rm -rf /var/lib/elasticsearch'
|
|
|
|
echo "Elasticsearch teardown complete"
|
|
return 0
|
|
fi
|
|
|
|
# ============================================================================
|
|
# Test Setup
|
|
# ============================================================================
|
|
|
|
_start=$(date +%s)
|
|
|
|
echo ""
|
|
echo "========================================"
|
|
echo "Elasticsearch Standalone Test (port $ELASTICSEARCH_HTTP_PORT)"
|
|
echo "========================================"
|
|
echo ""
|
|
|
|
# Deploy the elasticsearch configuration to test nodes
|
|
echo "Step 1: Deploying Elasticsearch configuration..."
|
|
$NIX_INFRA fleet deploy-apps -d "$WORK_DIR" --batch --env="$ENV" \
|
|
--test-dir="$WORK_DIR/$TEST_DIR" \
|
|
--target="$TARGET"
|
|
|
|
# Apply the configuration
|
|
echo "Step 2: Applying NixOS configuration..."
|
|
$NIX_INFRA fleet cmd -d "$WORK_DIR" --target="$TARGET" "nixos-rebuild switch --fast"
|
|
|
|
_setup=$(date +%s)
|
|
|
|
# ============================================================================
|
|
# Test Verification
|
|
# ============================================================================
|
|
|
|
echo ""
|
|
echo "Step 3: Verifying Elasticsearch deployment..."
|
|
echo ""
|
|
|
|
# Wait for Elasticsearch service and API to be ready
|
|
for node in $TARGET; do
|
|
wait_for_service "$node" "elasticsearch" --timeout=60
|
|
wait_for_port "$node" "$ELASTICSEARCH_HTTP_PORT" --timeout=30
|
|
wait_for_elasticsearch "$node" "$ELASTICSEARCH_HTTP_PORT" --timeout=60
|
|
done
|
|
|
|
# Check if the systemd service is active
|
|
echo ""
|
|
echo "Checking systemd service status..."
|
|
for node in $TARGET; do
|
|
assert_service_active "$node" "elasticsearch" || show_service_logs "$node" "elasticsearch" 50
|
|
done
|
|
|
|
# Check if Elasticsearch process is running
|
|
echo ""
|
|
echo "Checking Elasticsearch process..."
|
|
for node in $TARGET; do
|
|
assert_process_running "$node" "-f elasticsearch" "Elasticsearch"
|
|
done
|
|
|
|
# Check if Elasticsearch HTTP port is listening
|
|
echo ""
|
|
echo "Checking Elasticsearch HTTP port ($ELASTICSEARCH_HTTP_PORT)..."
|
|
for node in $TARGET; do
|
|
assert_port_listening "$node" "$ELASTICSEARCH_HTTP_PORT" "HTTP port $ELASTICSEARCH_HTTP_PORT"
|
|
done
|
|
|
|
# ============================================================================
|
|
# Functional Tests
|
|
# ============================================================================
|
|
|
|
echo ""
|
|
echo "Step 4: Running functional tests..."
|
|
echo ""
|
|
|
|
# Test Elasticsearch connection and basic operations
|
|
for node in $TARGET; do
|
|
echo "Testing Elasticsearch operations on $node..."
|
|
|
|
# Test cluster health endpoint
|
|
echo " Checking cluster health..."
|
|
health_result=$(cmd_clean "$node" "curl -s http://127.0.0.1:$ELASTICSEARCH_HTTP_PORT/_cluster/health")
|
|
if assert_contains "$health_result" "cluster_name" "Cluster health endpoint accessible"; then
|
|
status=$(echo "$health_result" | jq -r '.status' 2>/dev/null || echo "unknown")
|
|
print_info "Cluster status" "$status"
|
|
fi
|
|
|
|
# Create a test index
|
|
echo " Creating test index..."
|
|
create_result=$(cmd_clean "$node" "curl -s -X PUT 'http://127.0.0.1:$ELASTICSEARCH_HTTP_PORT/test-index' -H 'Content-Type: application/json' -d '{\"settings\": {\"number_of_shards\": 1, \"number_of_replicas\": 0}}'")
|
|
assert_contains_all "$create_result" "Index creation successful" "acknowledged" "true"
|
|
|
|
# Insert a test document
|
|
echo " Inserting test document..."
|
|
insert_result=$(cmd_clean "$node" "curl -s -X POST 'http://127.0.0.1:$ELASTICSEARCH_HTTP_PORT/test-index/_doc/1' -H 'Content-Type: application/json' -d '{\"name\": \"test\", \"value\": 42}'")
|
|
if [[ "$insert_result" == *"created"* ]] || [[ "$insert_result" == *"_id"* ]]; then
|
|
echo -e " ${GREEN}✓${NC} Document insert successful [pass]"
|
|
else
|
|
echo -e " ${RED}✗${NC} Document insert failed: $insert_result [fail]"
|
|
fi
|
|
|
|
# Force refresh to make document searchable
|
|
cmd "$node" "curl -s -X POST 'http://127.0.0.1:$ELASTICSEARCH_HTTP_PORT/test-index/_refresh'" > /dev/null 2>&1
|
|
|
|
# Query the test document
|
|
echo " Querying test document..."
|
|
query_result=$(cmd_clean "$node" "curl -s 'http://127.0.0.1:$ELASTICSEARCH_HTTP_PORT/test-index/_doc/1'")
|
|
assert_contains_all "$query_result" "Document query successful" "found" "true"
|
|
|
|
# Test search functionality
|
|
echo " Testing search..."
|
|
search_result=$(cmd_clean "$node" "curl -s -X GET 'http://127.0.0.1:$ELASTICSEARCH_HTTP_PORT/test-index/_search' -H 'Content-Type: application/json' -d '{\"query\": {\"match\": {\"name\": \"test\"}}}'")
|
|
assert_contains_all "$search_result" "Search operation successful" "hits" "value"
|
|
|
|
# List indices
|
|
echo " Listing indices..."
|
|
indices_result=$(cmd_clean "$node" "curl -s 'http://127.0.0.1:$ELASTICSEARCH_HTTP_PORT/_cat/indices?v'")
|
|
assert_contains "$indices_result" "test-index" "Index listing successful"
|
|
|
|
# Clean up test index
|
|
echo " Cleaning up test index..."
|
|
cmd "$node" "curl -s -X DELETE 'http://127.0.0.1:$ELASTICSEARCH_HTTP_PORT/test-index'" > /dev/null 2>&1
|
|
print_cleanup "Test index cleaned up"
|
|
done
|
|
|
|
# ============================================================================
|
|
# Test Summary
|
|
# ============================================================================
|
|
|
|
_end=$(date +%s)
|
|
|
|
echo ""
|
|
echo "========================================"
|
|
echo "Elasticsearch Test Summary"
|
|
echo "========================================"
|
|
|
|
printf '+ setup %s\n' $(printTime $_start $_setup)
|
|
printf '+ tests %s\n' $(printTime $_setup $_end)
|
|
printf '= TOTAL %s\n' $(printTime $_start $_end)
|
|
|
|
echo ""
|
|
echo "========================================"
|
|
echo "Elasticsearch Test Complete"
|
|
echo "========================================" |