Deployment Verification
Verify your DataVault deployment is working correctly
Deployment Verification
After deploying DataVault, it's crucial to verify that all components are functioning correctly. This guide provides a comprehensive checklist and testing procedures.
Initial Health Checks
1. Service Status
Check all services are running:
# Docker deployment
docker-compose ps
# Kubernetes deployment
kubectl get pods -n datavault
kubectl get svc -n datavault
# Systemd services
systemctl status datavault-api
systemctl status weaviate
systemctl status postgresqlExpected output:
- All services show "running" or "healthy" status
- No restart loops
- No error states
2. API Accessibility
Test API endpoint:
# Health check
curl -X GET http://localhost:8000/health
# Expected response:
{
  "status": "healthy",
  "version": "2.0.0",
  "services": {
    "database": "connected",
    "vector_db": "connected",
    "cache": "connected"
  }
}
# API docs
curl -X GET http://localhost:8000/docs3. Database Connectivity
PostgreSQL:
# Test connection
psql -h localhost -U datavault -d datavault -c "SELECT version();"
# Check tables
psql -h localhost -U datavault -d datavault -c "\dt"Weaviate:
# Check Weaviate status
curl -X GET http://localhost:8080/v1/meta
# List schemas
curl -X GET http://localhost:8080/v1/schemaFunctional Testing
1. Authentication
Test login:
# Get access token
curl -X POST http://localhost:8000/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "username": "admin",
    "password": "your-password"
  }'
# Use token for authenticated requests
export TOKEN="your-access-token"
curl -X GET http://localhost:8000/api/v1/user/profile \
  -H "Authorization: Bearer $TOKEN"2. Document Ingestion
Upload test document:
# Create test file
echo "This is a test document for DataVault verification." > test.txt
# Upload document
curl -X POST http://localhost:8000/api/v1/documents/upload \
  -H "Authorization: Bearer $TOKEN" \
  -F "file=@test.txt" \
  -F "metadata={\"category\":\"test\"}"
# Check processing status
curl -X GET http://localhost:8000/api/v1/documents/status/{document_id} \
  -H "Authorization: Bearer $TOKEN"3. Vector Search
Test semantic search:
# Search for similar documents
curl -X POST http://localhost:8000/api/v1/search \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "test document verification",
    "limit": 10,
    "threshold": 0.7
  }'4. RAG Functionality
Test question answering:
# Ask a question
curl -X POST http://localhost:8000/api/v1/chat/completions \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [{"role": "user", "content": "What is DataVault?"}],
    "use_context": true,
    "model": "gpt-3.5-turbo"
  }'Performance Verification
1. Response Times
Measure API latency:
# Simple latency test
time curl -X GET http://localhost:8000/health
# Load test with Apache Bench
ab -n 100 -c 10 -H "Authorization: Bearer $TOKEN" \
   http://localhost:8000/api/v1/documents/list
# Expected results:
# - Health check: <100ms
# - Document list: <500ms
# - Search queries: <2s2. Resource Usage
Monitor system resources:
# CPU and Memory
top -b -n 1 | grep -E "datavault|weaviate|postgres"
# Disk usage
df -h | grep -E "datavault|docker"
# Network connections
netstat -tulpn | grep -E "8000|8080|5432"3. Database Performance
Check query performance:
-- PostgreSQL slow queries
SELECT query, calls, mean_exec_time
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;
-- Table sizes
SELECT 
    schemaname,
    tablename,
    pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;Integration Testing
1. Data Source Connections
Test each configured source:
# S3 source
curl -X POST http://localhost:8000/api/v1/sources/test \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "s3",
    "config": {
      "bucket": "test-bucket",
      "region": "us-east-1"
    }
  }'
# Confluence source
curl -X POST http://localhost:8000/api/v1/sources/test \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "confluence",
    "config": {
      "url": "https://company.atlassian.net",
      "space": "TEST"
    }
  }'2. Embedding Provider
Verify embedding generation:
# Test embedding endpoint
curl -X POST http://localhost:8000/api/v1/embeddings/generate \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Test embedding generation",
    "model": "text-embedding-ada-002"
  }'3. LLM Provider
Test LLM connectivity:
# Test completion without context
curl -X POST http://localhost:8000/api/v1/chat/completions \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [{"role": "user", "content": "Hello"}],
    "use_context": false,
    "model": "gpt-3.5-turbo"
  }'Security Verification
1. Authentication Tests
# Test invalid token
curl -X GET http://localhost:8000/api/v1/documents/list \
  -H "Authorization: Bearer invalid-token"
# Expected: 401 Unauthorized
# Test missing token
curl -X GET http://localhost:8000/api/v1/documents/list
# Expected: 401 Unauthorized
# Test expired token
# Wait for token expiry, then:
curl -X GET http://localhost:8000/api/v1/documents/list \
  -H "Authorization: Bearer $EXPIRED_TOKEN"
# Expected: 401 Unauthorized2. Authorization Tests
# Test accessing other user's documents
curl -X GET http://localhost:8000/api/v1/documents/{other_user_doc_id} \
  -H "Authorization: Bearer $TOKEN"
# Expected: 403 Forbidden
# Test admin-only endpoints as regular user
curl -X GET http://localhost:8000/api/v1/admin/users \
  -H "Authorization: Bearer $USER_TOKEN"
# Expected: 403 Forbidden3. Input Validation
# Test SQL injection
curl -X POST http://localhost:8000/api/v1/search \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "test'; DROP TABLE documents; --",
    "limit": 10
  }'
# Expected: Normal results, no database damage
# Test XSS
curl -X POST http://localhost:8000/api/v1/documents/upload \
  -H "Authorization: Bearer $TOKEN" \
  -F "file=@test.txt" \
  -F "metadata={\"title\":\"<script>alert('xss')</script>\"}"
# Expected: Escaped or rejectedMonitoring Setup
1. Prometheus Metrics
# Check metrics endpoint
curl -X GET http://localhost:8000/metrics
# Verify key metrics:
# - http_requests_total
# - http_request_duration_seconds
# - document_processing_duration_seconds
# - vector_search_duration_seconds2. Logging
# Check application logs
tail -f /var/log/datavault/api.log
# Check error logs
tail -f /var/log/datavault/error.log
# Verify log format and content:
# - Timestamp
# - Log level
# - Request ID
# - User ID
# - Action performed3. Alerts
Test alert conditions:
# Simulate high CPU
stress --cpu 8 --timeout 60s
# Simulate disk full
dd if=/dev/zero of=/tmp/testfile bs=1G count=10
# Simulate service down
docker stop datavault-api
# Verify alerts are triggeredLoad Testing
Gradual Load Test
# load_test.py
import concurrent.futures
import requests
import time
BASE_URL = "http://localhost:8000"
TOKEN = "your-token"
def search_request():
    headers = {"Authorization": f"Bearer {TOKEN}"}
    data = {"query": "test query", "limit": 10}
    response = requests.post(
        f"{BASE_URL}/api/v1/search",
        json=data,
        headers=headers
    )
    return response.status_code, response.elapsed.total_seconds()
# Test with increasing load
for num_users in [1, 5, 10, 20, 50]:
    print(f"\nTesting with {num_users} concurrent users:")
    
    with concurrent.futures.ThreadPoolExecutor(max_workers=num_users) as executor:
        start_time = time.time()
        futures = [executor.submit(search_request) for _ in range(100)]
        results = [f.result() for f in futures]
        
        total_time = time.time() - start_time
        success_count = sum(1 for status, _ in results if status == 200)
        avg_response_time = sum(t for _, t in results) / len(results)
        
        print(f"Total time: {total_time:.2f}s")
        print(f"Success rate: {success_count}/100")
        print(f"Avg response time: {avg_response_time:.2f}s")Verification Checklist
Core Functionality
- API health endpoint returns healthy
- Authentication works
- Document upload succeeds
- Document processing completes
- Vector search returns results
- RAG queries work
- All configured sources connect
Performance
- Response times meet requirements
- Resource usage is acceptable
- System handles expected load
- No memory leaks observed
Security
- Authentication is enforced
- Authorization rules work
- Input validation is effective
- SSL/TLS is configured
- Logs don't contain sensitive data
Reliability
- Services auto-restart on failure
- Data persists across restarts
- Backups are created
- Monitoring is active
- Alerts are configured
Troubleshooting Failed Checks
If any verification fails:
- Check service logs for errors
- Verify configuration files
- Ensure all dependencies are installed
- Check network connectivity
- Verify resource availability
- Review security settings
For detailed troubleshooting, see the operations guide.