-
-
Notifications
You must be signed in to change notification settings - Fork 1
Testing Internal Operations
This guide explains how to test ChronoTrace with internal Laravel operations using the chronotrace:test-internal command.
The chronotrace:test-internal command addresses a common limitation where chronotrace:record primarily captures external HTTP events. This command allows you to test ChronoTrace's ability to capture internal Laravel operations like database queries, cache operations, and custom events.
- Purpose: Records actual HTTP requests to your application
- Best for: Debugging real user interactions and API calls
- Captures: Complete HTTP request lifecycle
- Limitation: Requires external HTTP requests to trigger
- Purpose: Tests ChronoTrace functionality without HTTP requests
- Best for: Verifying installation, testing event capture, development
- Captures: Database, cache, jobs, custom events
- Advantage: Works without web server or external requests
# Run basic internal operations test
php artisan chronotrace:test-internal
# Expected output:
π§ͺ Testing ChronoTrace Internal Operations...
β
Configuration Check:
- ChronoTrace enabled: Yes
- Storage driver: local
- Event capture: database, cache, http, jobs
β
Database Operations:
- Test query executed (5ms)
- Transaction test passed
- Query bindings test passed
β
Cache Operations:
- Cache set operation (2ms)
- Cache get operation (1ms)
- Cache hit test passed
β
Queue Operations:
- Test job dispatched
- Job payload test passed
π Test Results:
- Total operations: 8
- Total duration: 45ms
- Events captured: 8
- Trace ID: chronotrace_test_20240806_143015
π All tests passed! ChronoTrace is working correctly.# Test only database operations
php artisan chronotrace:test-internal --component=database
# Test only cache operations
php artisan chronotrace:test-internal --component=cache
# Test only queue operations
php artisan chronotrace:test-internal --component=jobs
# Test multiple components
php artisan chronotrace:test-internal --component=database,cache# Generate sample traces for development/demo
php artisan chronotrace:test-internal --generate-samples=10
# Generate with specific event types
php artisan chronotrace:test-internal --generate-samples=5 --events=database,http
# Generate traces with different performance profiles
php artisan chronotrace:test-internal --generate-samples=3 --profile=slow
php artisan chronotrace:test-internal --generate-samples=3 --profile=fast
php artisan chronotrace:test-internal --generate-samples=3 --profile=error# Test with high load simulation
php artisan chronotrace:test-internal --stress-test --operations=100
# Test memory usage with large operations
php artisan chronotrace:test-internal --memory-test --size=large
# Test concurrent operations
php artisan chronotrace:test-internal --concurrent=5# Database-specific testing
php artisan chronotrace:test-internal --component=database --verbose
# Expected operations:
β
Basic Query Test:
- SELECT * FROM users LIMIT 1 (3ms)
- Query executed successfully
- Bindings captured correctly
β
Transaction Test:
- BEGIN TRANSACTION
- INSERT INTO test_table VALUES (?)
- COMMIT TRANSACTION
- Transaction boundaries captured
β
N+1 Query Simulation:
- Generated 5 related queries
- N+1 pattern detected and flagged
β
Slow Query Simulation:
- Simulated 500ms query
- Slow query threshold triggered
- Performance warning generated# Cache-specific testing
php artisan chronotrace:test-internal --component=cache --verbose
# Expected operations:
β
Cache Write Test:
- SET test_key_1 = "test_value" (TTL: 3600s)
- Operation completed in 2ms
- Cache store: redis/file
β
Cache Read Test:
- GET test_key_1 (HIT)
- Value retrieved in 1ms
- Cache efficiency: 100%
β
Cache Miss Test:
- GET non_existent_key (MISS)
- Fallback behavior tested
- Miss properly recorded
β
Cache Deletion Test:
- FORGET test_key_1
- Key removed successfully
- Cleanup verified# Queue-specific testing
php artisan chronotrace:test-internal --component=jobs --verbose
# Expected operations:
β
Job Dispatch Test:
- TestJob dispatched to 'default' queue
- Payload size: 234 bytes
- Job ID: job_abc123
β
Delayed Job Test:
- DelayedTestJob scheduled (+30s)
- Delay properly recorded
- Queue: high-priority
β
Job Failure Simulation:
- FailingTestJob dispatched
- Exception handling tested
- Failure reason captured# Simulate e-commerce operations
php artisan chronotrace:test-internal --scenario=ecommerce
# Simulated operations:
β
Product Catalog:
- Product lookup queries
- Category filtering
- Price calculations
- Inventory checks
β
Shopping Cart:
- Cart creation
- Item additions
- Price updates
- Session management
β
Order Processing:
- Order creation
- Payment simulation
- Inventory updates
- Email notifications# Simulate API-heavy operations
php artisan chronotrace:test-internal --scenario=api-integration
# Simulated operations:
β
External API Calls:
- Payment gateway simulation
- Shipping rate calculations
- Third-party webhooks
- Authentication tokens
β
API Response Caching:
- Response caching logic
- Cache invalidation
- Rate limiting simulation
- Error handling# Test performance characteristics
php artisan chronotrace:test-internal --scenario=performance
# Performance tests:
β
Memory Usage:
- Baseline memory: 8MB
- Peak memory: 15MB
- Memory growth: 7MB
- Garbage collection: 3 cycles
β
Operation Speed:
- Database queries: avg 5ms
- Cache operations: avg 1ms
- Job dispatching: avg 2ms
- Overall efficiency: 95%// tests/Feature/ChronoTraceTest.php
use Tests\TestCase;
use Grazulex\LaravelChronotrace\Testing\ChronoTraceAssertions;
class ChronoTraceTest extends TestCase
{
use ChronoTraceAssertions;
public function test_chronotrace_captures_database_operations()
{
// Enable ChronoTrace for test
$this->enableChronoTrace();
// Perform database operations
User::factory()->create();
User::where('email', 'test@example.com')->first();
// Assert trace captured operations
$this->assertTraceHasDatabaseQueries();
$this->assertDatabaseQueriesLessThan(5);
$trace = $this->getLastTrace();
$this->assertArrayHasKey('database_events', $trace['events']);
}
public function test_chronotrace_captures_cache_operations()
{
$this->enableChronoTrace();
// Perform cache operations
Cache::put('test_key', 'test_value', 3600);
$value = Cache::get('test_key');
// Assert cache operations captured
$this->assertTraceHasCacheOperations();
$this->assertCacheHitRate(greaterThan: 50);
}
public function test_internal_operations_command()
{
// Run internal test command
$this->artisan('chronotrace:test-internal --component=database')
->expectsOutput('β
Database Operations:')
->assertExitCode(0);
// Verify trace was created
$this->artisan('chronotrace:list --limit=1')
->expectsTable(['Trace ID', 'Method', 'Status', 'Duration'], [
// Expected trace data
]);
}
}// tests/Support/ChronoTraceTestHelpers.php
trait ChronoTraceTestHelpers
{
protected function generateTestTrace(): string
{
return $this->artisan('chronotrace:test-internal --quiet')
->run();
}
protected function simulateSlowOperation(): void
{
$this->artisan('chronotrace:test-internal --component=database --profile=slow')
->run();
}
protected function assertTracePerformance(string $traceId, int $maxDuration): void
{
$trace = $this->getTrace($traceId);
$this->assertLessThan($maxDuration, $trace['performance']['total_duration_ms']);
}
}# Check configuration
php artisan chronotrace:test-internal --diagnose
# Expected output if misconfigured:
β Configuration Issues Detected:
- Database capture disabled
- Cache capture disabled
- Storage not writable
# Fix:
CHRONOTRACE_CAPTURE_DATABASE=true
CHRONOTRACE_CAPTURE_CACHE=true# Test storage permissions
php artisan chronotrace:test-internal --test-storage
# Expected output:
β
Storage Test:
- Write test: SUCCESS
- Read test: SUCCESS
- Delete test: SUCCESS
- Storage driver: local (/app/storage/chronotrace)# Test queue functionality
php artisan chronotrace:test-internal --component=jobs --test-queue
# If queue workers not running:
β Queue Test Failed:
- Job dispatch: SUCCESS
- Job processing: TIMEOUT
- Recommendation: Start queue workers
# Solution:
php artisan queue:work --queue=chronotrace# .github/workflows/chronotrace-tests.yml
name: ChronoTrace Tests
on: [push, pull_request]
jobs:
chronotrace-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 8.3
- name: Install dependencies
run: composer install
- name: Setup test database
run: |
php artisan migrate --env=testing
- name: Test ChronoTrace Installation
run: php artisan chronotrace:test-internal --env=testing
- name: Test Component Functionality
run: |
php artisan chronotrace:test-internal --component=database --env=testing
php artisan chronotrace:test-internal --component=cache --env=testing
php artisan chronotrace:test-internal --component=jobs --env=testing
- name: Verify Trace Generation
run: |
php artisan chronotrace:list --env=testing
php artisan chronotrace:diagnose --env=testing# Dockerfile.chronotrace-test
FROM php:8.3-cli
RUN apt-get update && apt-get install -y \
redis-server \
&& docker-php-ext-install pdo_mysql
COPY . /app
WORKDIR /app
RUN composer install --no-dev --optimize-autoloader
# Start Redis for testing
RUN redis-server --daemonize yes
# Test ChronoTrace
CMD ["php", "artisan", "chronotrace:test-internal", "--verbose"]# Run performance benchmarks
php artisan chronotrace:test-internal --benchmark
# Expected output:
π ChronoTrace Performance Benchmark:
Database Operations (1000 iterations):
- Average query time: 2.3ms
- ChronoTrace overhead: 0.1ms (4.3%)
- Memory overhead: 0.5MB
Cache Operations (1000 iterations):
- Average cache time: 0.8ms
- ChronoTrace overhead: 0.05ms (6.25%)
- Memory overhead: 0.2MB
Overall Performance Impact:
- CPU overhead: 3.2%
- Memory overhead: 2.1%
- Storage overhead: 1.8MB/hour
- Recommendation: β
Acceptable for production// Create custom benchmark
php artisan make:command ChronoTrace:CustomBenchmark
class CustomBenchmark extends Command
{
public function handle()
{
$this->benchmark('Database Operations', function () {
for ($i = 0; $i < 1000; $i++) {
User::find(1);
}
});
$this->benchmark('Cache Operations', function () {
for ($i = 0; $i < 1000; $i++) {
Cache::get('test_key_' . $i);
}
});
}
private function benchmark(string $name, callable $operation): void
{
$start = microtime(true);
$operation();
$duration = microtime(true) - $start;
$this->info("{$name}: {$duration}s");
}
}- Commands - Complete command reference
- Configuration - Configure test behavior
- API Reference - Testing API methods
- Troubleshooting - Solve testing issues
Use internal testing to verify ChronoTrace functionality! The test-internal command is essential for validating your installation and testing specific components without external dependencies.
- Getting Started - Install and configure ChronoTrace
- Examples - Real-world debugging scenarios
- Production Guide - Deploy safely in production
- Troubleshooting - Solve common issues
| Section | Page | Description |
|---|---|---|
| π Basics | Your First Trace | Step-by-step beginner guide |
| ποΈ Config | Recording Modes | Choose when to record traces |
| π‘οΈ Security | Security & PII | Protect sensitive data |
| π§ Tools | Commands | Complete command reference |
- π¬ GitHub Discussions - Community support
- π Report Issues - Bug reports & feature requests
- π§ Contact - Direct support
- π‘ Feature Requests - Suggest improvements
ChronoTrace helps Laravel developers debug applications faster with intelligent request tracing.
Made with β€οΈ by Grazulex β’ Documentation updated August 2024