Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
265 changes: 265 additions & 0 deletions CHANGELOG.md

Large diffs are not rendered by default.

127 changes: 127 additions & 0 deletions CI-CD-TESTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
# CI/CD Tests Configuration - PivotPHP Core v1.1.3

## ✅ **Problemas de Output Resolvidos**

### 🚫 **Outputs Removidos**
- ✅ **echo statements** removidos de `ArrayCallableExampleTest.php`
- ✅ **error_log statements** removidos de `HighPerformanceStressTest.php`
- ✅ **error_log statements** removidos de `IntegrationTestCase.php`
- ✅ **TestHttpClient** configurado com `setTestMode(true)`

### 🧪 **Suites de Teste Configurados**

#### **CI Suite** (para CI/CD - sem output)
```bash
composer test:ci # Exclui Integration e Stress tests
```
- **Inclui**: Unit, Core, Security, Performance tests
- **Exclui**: Integration, Stress tests
- **Razão**: Evita output JSON que causa falhas no CI/CD

#### **Integration Suite** (para validação local/pre-push)
```bash
composer test:integration # Testes completos de integração
```
- **Inclui**: Todos os testes de integração
- **Output**: Controlado via `setTestMode(true)` mas pode haver traces

#### **Validação Completa** (pre-push)
```bash
composer prepush:validate # PHPStan + Unit + Integration + PSR-12
```

### 📋 **Scripts de Validação**

#### **Para CI/CD Pipeline**
```bash
composer quality:ci # PHPStan + test:ci + cs:check:summary
./scripts/quality-check.sh # Usa test:ci internamente
```

#### **Para Pre-Push Local**
```bash
./scripts/pre-push # PHPStan + Unit + Integration + Performance
composer prepush:validate # Alternativa via composer
```

### 🔧 **Configuração Detalhada**

#### **phpunit.xml - Suite CI**
```xml
<testsuite name="CI">
<directory>tests</directory>
<exclude>tests/Integration</exclude>
<exclude>tests/Stress</exclude>
</testsuite>
```

#### **TestHttpClient Fix**
```php
private function createRealResponse(): object
{
$response = new \PivotPHP\Core\Http\Response();
$response->setTestMode(true); // ✅ Previne output
return $response;
}
```

### 🚀 **Workflow Recomendado**

#### **CI/CD Pipeline**
1. Use `composer test:ci` - sem output problemático
2. Use `composer quality:ci` - validação rápida
3. Evite `composer test:integration` no CI/CD

#### **Desenvolvimento Local**
1. **Pre-commit**: `./scripts/pre-commit` (fast checks)
2. **Pre-push**: `./scripts/pre-push` (inclui integration)
3. **Validação completa**: `./scripts/quality-check.sh`

#### **Debugging Tests**
```bash
# Se houver output durante CI/CD:
composer test:ci 2>&1 | grep -v "Runtime\|Configuration\|PHPUnit"

# Para testar integration tests localmente:
composer test:integration

# Para verificar se TestMode está funcionando:
grep -r "setTestMode\|testMode" tests/
```

### 🎯 **Resultados**

#### **Antes da Correção**
```
❌ CI/CD failing devido a JSON output
❌ echo statements em performance tests
❌ error_log statements em stress tests
❌ Integration tests causando output no CI
```

#### **Após Correção**
```
✅ CI Suite executado limpo (sem integration)
✅ Integration tests funcionais para pre-push
✅ Output statements removidos/suprimidos
✅ TestHttpClient com setTestMode(true)
✅ Separação clara CI/CD vs Local validation
```

### 🔄 **Comandos Quick Reference**

```bash
# CI/CD (clean output)
composer test:ci
composer quality:ci

# Local development
composer test:integration
./scripts/pre-push

# Full validation
composer test
./scripts/quality-check.sh
```

Esta configuração resolve os problemas de output no CI/CD mantendo a funcionalidade completa dos testes de integração para validação local e pre-push.
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@

**PivotPHP** é um microframework moderno, leve e seguro, inspirado no Express.js, para construir APIs e aplicações web de alta performance em PHP. Ideal para validação de conceitos, estudos e desenvolvimento de aplicações que exigem produtividade, arquitetura desacoplada e extensibilidade real.

- **Performance Competitiva**: 6,227 req/sec em ambiente Docker controlado (3º lugar em validação comparativa), 837K ops/sec JSON processing interno, 505K ops/sec small JSON, apenas 1.61MB memory footprint (v1.1.1 Revolutionary JSON Edition).
- **Arquitetura Moderna**: DI Container, Service Providers, Event System, Extension System e PSR-15.
- **Performance Competitiva**: 6,227 req/sec em ambiente Docker controlado (3º lugar em validação comparativa), 40K+ ops/sec médio interno, 161K ops/sec JSON pooling, apenas 1.61MB memory footprint.
- **Arquitetura Consolidada (v1.1.2)**: Middlewares organizados por responsabilidade, zero duplicações, namespaces unificados.
- **Segurança**: Middlewares robustos para CSRF, XSS, Rate Limiting, JWT, API Key e mais.
- **Extensível**: Sistema de plugins, hooks, providers e integração PSR-14.
- **Qualidade**: 335+ testes, PHPStan Level 9, PSR-12, cobertura completa.
- **Qualidade**: 430+ testes (99.8% success), PHPStan Level 9, PSR-12 100%, zero duplicações críticas.
- **🆕 v1.1.0**: High-Performance Edition com circuit breaker, load shedding e pooling avançado.
- **🚀 v1.1.1**: JSON Optimization Edition com pooling automático e 161K ops/sec (pequenos), 17K ops/sec (médios), 1.7K ops/sec (grandes) - Docker testado.
- **🎯 v1.1.2**: Consolidation Edition com arquitetura consolidada, 100% testes passando, PHPStan Level 9, zero duplicações críticas.
- **🚀 v1.1.1**: JSON Optimization Edition com pooling automático e performance excepcional.
- **🎯 v1.1.2**: Consolidation Edition - arquitetura limpa, 100% backward compatible, base sólida para produção.

---

Expand Down
10 changes: 8 additions & 2 deletions benchmarks/ExpressPhpBenchmark.php
Original file line number Diff line number Diff line change
Expand Up @@ -222,8 +222,8 @@ private function benchmarkObjectPooling(): void
{
echo "📋 Benchmarking Object Pooling...\n";

// Limpar pools
OptimizedHttpFactory::clearPools();
// Pré-aquecer pools (não limpar - isso zera as estatísticas)
OptimizedHttpFactory::warmUpPools();

$start = microtime(true);

Expand All @@ -236,6 +236,12 @@ private function benchmarkObjectPooling(): void
$psr7Request = OptimizedHttpFactory::createServerRequest('POST', '/psr7/test');
$psr7Response = OptimizedHttpFactory::createPsr7Response(200, [], '{"pooled": true}');

// Retornar objetos ao pool para reutilização
if (method_exists('PivotPHP\Core\Http\Pool\Psr7Pool', 'returnServerRequest')) {
\PivotPHP\Core\Http\Pool\Psr7Pool::returnServerRequest($psr7Request);
\PivotPHP\Core\Http\Pool\Psr7Pool::returnResponse($psr7Response);
}

unset($request, $response, $psr7Request, $psr7Response);
}

Expand Down
36 changes: 33 additions & 3 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "pivotphp/core",
"description": "PivotPHP Core v1.1.2 - High-performance microframework with revolutionary JSON optimization (161K/17K/1.7K ops/sec), PSR-7 hybrid support, and Express.js-inspired API",
"description": "PivotPHP Core v1.1.3-dev - High-performance microframework with revolutionary JSON optimization (161K/17K/1.7K ops/sec), PSR-7 hybrid support, and Express.js-inspired API",
"type": "library",
"keywords": [
"php",
Expand Down Expand Up @@ -81,7 +81,16 @@
},
"scripts": {
"test": "phpunit",
"test:security": "vendor/bin/phpunit tests/Security/",
"test:ci": "vendor/bin/phpunit --testsuite=CI",
"test:fast": "vendor/bin/phpunit --testsuite=Fast",
"test:unit": "vendor/bin/phpunit --testsuite=Unit",
"test:integration": "vendor/bin/phpunit --testsuite=Integration",
"test:performance": "vendor/bin/phpunit --testsuite=Performance",
"test:security": "vendor/bin/phpunit --testsuite=Security",
"test:core": "vendor/bin/phpunit --testsuite=Core",
"test:coverage": "vendor/bin/phpunit --coverage-html reports/coverage",
"test:stress": "vendor/bin/phpunit --testsuite=Stress",
"test:no-stress": "vendor/bin/phpunit --exclude-group=stress,slow",
"test:auth": "php test/auth_test.php",
"phpstan": "phpstan analyse",
"phpstan:strict": "phpstan analyse -c phpstan-strict.neon",
Expand All @@ -104,11 +113,21 @@
"@phpstan",
"echo 'Quality check with PSR-12 completed!'"
],
"quality:check:disabled": [
"quality:check": [
"@phpstan",
"@test:ci",
"@cs:check"
],
"quality:check:full": [
"@phpstan",
"@test",
"@cs:check"
],
"quality:ci": [
"@phpstan",
"@test:ci",
"@cs:check:summary"
],
"quality:fix": [
"@cs:fix",
"@phpstan",
Expand All @@ -117,6 +136,17 @@
"fix:psr12-lines": "./scripts/fix-psr12-lines.sh",
"precommit:install": "./scripts/setup-precommit.sh",
"precommit:test": "./scripts/pre-commit",
"prepush:validate": [
"@phpstan",
"@test:unit",
"@test:integration",
"@cs:check:summary"
],
"prepush:full": [
"@phpstan",
"@test",
"@cs:check"
],
"validate:docs": "./scripts/validate-docs.sh",
"validate:project": "php scripts/validate_project.php",
"examples:basic": "php examples/example_basic.php",
Expand Down
2 changes: 1 addition & 1 deletion config/app.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
'name' => $_ENV['APP_NAME'] ?? 'PivotPHP Application',
'version' => '2.1.0',
'environment' => $_ENV['APP_ENV'] ?? 'production',
'debug' => filter_var($_ENV['APP_DEBUG'] ?? ($_ENV['APP_ENV'] === 'development' ? true : false), FILTER_VALIDATE_BOOLEAN),
'debug' => filter_var($_ENV['APP_DEBUG'] ?? (($_ENV['APP_ENV'] ?? 'production') === 'development' ? true : false), FILTER_VALIDATE_BOOLEAN),
'timezone' => $_ENV['APP_TIMEZONE'] ?? 'UTC',
'locale' => $_ENV['APP_LOCALE'] ?? 'en'
],
Expand Down
Loading
Loading