From 293d12d3d3b0595d6a5f984a47c93bd599fb179b Mon Sep 17 00:00:00 2001 From: mubbasher-ahmed Date: Sat, 19 Jul 2025 23:25:49 +0500 Subject: [PATCH 1/2] fix: fix test scripts to persist container --- Makefile | 60 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/Makefile b/Makefile index 7f5f018..94e81f2 100644 --- a/Makefile +++ b/Makefile @@ -144,32 +144,46 @@ docker-restart: docker-down docker-up # Testing Environment # ============================================================================= + # Run tests (automated testing environment) -test: docker-setup-env - @echo "๐Ÿงช TESTING: Running complete test suite..." - cd containers && docker-compose -f docker-compose.test.yml up -d - @echo ">> Installing dependencies in test container..." - @sleep 10 - docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test composer install --no-interaction --prefer-dist --optimize-autoloader - docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test php artisan key:generate --env=testing --force - docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test php artisan migrate:fresh --seed --env=testing --force - @echo ">> Running tests..." - docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test php artisan test --parallel --recreate-databases --stop-on-failure - cd containers && docker-compose -f docker-compose.test.yml down - @echo "โœ… SUCCESS: Tests completed!" +test: + @if docker-compose -f containers/docker-compose.test.yml ps | grep -q 'laravel_blog_api_test' && docker-compose -f containers/docker-compose.test.yml ps | grep 'Up'; then \ + echo "๐Ÿงช TESTING: Test container already running. Skipping setup..."; \ + echo ">> Running tests..."; \ + docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test php artisan test --parallel --recreate-databases --stop-on-failure; \ + echo "โœ… SUCCESS: Tests completed!"; \ + else \ + echo "๐Ÿงช TESTING: Running complete test suite..."; \ + cd containers && docker-compose -f docker-compose.test.yml up -d; \ + echo ">> Installing dependencies in test container..."; \ + sleep 10; \ + docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test composer install --no-interaction --prefer-dist --optimize-autoloader; \ + docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test php artisan key:generate --env=testing --force; \ + docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test php artisan migrate:fresh --seed --env=testing --force; \ + echo ">> Running tests..."; \ + docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test php artisan test --parallel --recreate-databases --stop-on-failure; \ + echo "โœ… SUCCESS: Tests completed!"; \ + fi + # Run tests with coverage report -test-coverage: docker-setup-env - @echo "๐Ÿงช TESTING: Running tests with coverage..." - cd containers && docker-compose -f docker-compose.test.yml up -d - @sleep 10 - docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test composer install --no-interaction --prefer-dist --optimize-autoloader - docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test php artisan key:generate --env=testing --force - docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test php artisan migrate:fresh --seed --env=testing --force - @echo ">> Running tests with coverage..." - docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test php artisan test --coverage --coverage-html reports/coverage --coverage-clover reports/coverage.xml --stop-on-failure --min=80 - cd containers && docker-compose -f docker-compose.test.yml down - @echo "โœ… SUCCESS: Tests with coverage completed!" +test-coverage: + @if docker-compose -f containers/docker-compose.test.yml ps | grep -q 'laravel_blog_api_test' && docker-compose -f containers/docker-compose.test.yml ps | grep 'Up'; then \ + echo "๐Ÿงช TESTING: Test container already running. Skipping setup..."; \ + echo ">> Running tests with coverage..."; \ + docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test php artisan test --coverage --coverage-html reports/coverage --coverage-clover reports/coverage.xml --stop-on-failure --min=80; \ + echo "โœ… SUCCESS: Tests with coverage completed!"; \ + else \ + echo "๐Ÿงช TESTING: Running tests with coverage..."; \ + cd containers && docker-compose -f docker-compose.test.yml up -d; \ + sleep 10; \ + docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test composer install --no-interaction --prefer-dist --optimize-autoloader; \ + docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test php artisan key:generate --env=testing --force; \ + docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test php artisan migrate:fresh --seed --env=testing --force; \ + echo ">> Running tests with coverage..."; \ + docker-compose -f containers/docker-compose.test.yml exec -T laravel_blog_api_test php artisan test --coverage --coverage-html reports/coverage --coverage-clover reports/coverage.xml --stop-on-failure --min=80; \ + echo "โœ… SUCCESS: Tests with coverage completed!"; \ + fi # ============================================================================= # Code Quality Tools From d59abcaa3baf5332c0ba96652aa0b6c1316d7768 Mon Sep 17 00:00:00 2001 From: mubbasher-ahmed Date: Sat, 19 Jul 2025 23:27:04 +0500 Subject: [PATCH 2/2] fix: fixed port check issues --- containers/check-ports.sh | 18 ++++++------------ containers/check-sonarqube-ports.sh | 23 +++++++++++------------ 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/containers/check-ports.sh b/containers/check-ports.sh index 0eb09fd..3c7fabb 100755 --- a/containers/check-ports.sh +++ b/containers/check-ports.sh @@ -46,34 +46,29 @@ check_port() { local optional=${3:-false} local os=$(detect_os) local port_in_use=false - case $os in "windows") - # Use netstat on Windows (available by default) - if netstat -an | grep -q ":$port "; then + # Only consider LISTENING state + if netstat -an | grep -E ":$port[[:space:]]" | grep -iq "LISTEN"; then port_in_use=true fi ;; "macos") - # Use netstat on macOS (available by default) - if netstat -an | grep -q "\\.$port "; then + # Only consider LISTEN state + if netstat -an | grep -E "\.$port[[:space:]]" | grep -iq "LISTEN"; then port_in_use=true fi ;; "linux") - # Try multiple methods on Linux if command -v ss &> /dev/null; then - # Use ss (modern replacement for netstat) - if ss -tuln | grep -q ":$port "; then + if ss -tuln | awk '{print $4,$1}' | grep -E "[:.]$port[[:space:]]" | grep -iq "LISTEN"; then port_in_use=true fi elif command -v netstat &> /dev/null; then - # Fall back to netstat - if netstat -tuln | grep -q ":$port "; then + if netstat -tuln | grep -E ":$port[[:space:]]" | grep -iq "LISTEN"; then port_in_use=true fi elif command -v nc &> /dev/null; then - # Fall back to netcat if nc -z localhost $port 2>/dev/null; then port_in_use=true fi @@ -83,7 +78,6 @@ check_port() { fi ;; *) - # Unknown OS - try netcat if available if command -v nc &> /dev/null; then if nc -z localhost $port 2>/dev/null; then port_in_use=true diff --git a/containers/check-sonarqube-ports.sh b/containers/check-sonarqube-ports.sh index cc6bb7e..c527721 100755 --- a/containers/check-sonarqube-ports.sh +++ b/containers/check-sonarqube-ports.sh @@ -34,36 +34,32 @@ detect_os() { check_port() { local port=$1 local description=$2 + local optional=${3:-false} local os=$(detect_os) local port_in_use=false - case $os in "windows") - # Use netstat on Windows (available by default) - if netstat -an | grep -q ":$port "; then + # Only consider LISTENING state + if netstat -an | grep -E ":$port[[:space:]]" | grep -iq "LISTEN"; then port_in_use=true fi ;; "macos") - # Use netstat on macOS (available by default) - if netstat -an | grep -q "\\.$port "; then + # Only consider LISTEN state + if netstat -an | grep -E "\.$port[[:space:]]" | grep -iq "LISTEN"; then port_in_use=true fi ;; "linux") - # Try multiple methods on Linux if command -v ss &> /dev/null; then - # Use ss (modern replacement for netstat) - if ss -tuln | grep -q ":$port "; then + if ss -tuln | awk '{print $4,$1}' | grep -E "[:.]$port[[:space:]]" | grep -iq "LISTEN"; then port_in_use=true fi elif command -v netstat &> /dev/null; then - # Fall back to netstat - if netstat -tuln | grep -q ":$port "; then + if netstat -tuln | grep -E ":$port[[:space:]]" | grep -iq "LISTEN"; then port_in_use=true fi elif command -v nc &> /dev/null; then - # Fall back to netcat if nc -z localhost $port 2>/dev/null; then port_in_use=true fi @@ -73,7 +69,6 @@ check_port() { fi ;; *) - # Unknown OS - try netcat if available if command -v nc &> /dev/null; then if nc -z localhost $port 2>/dev/null; then port_in_use=true @@ -84,6 +79,10 @@ check_port() { fi ;; esac + return 0 + fi + ;; + esac if [ "$port_in_use" = true ]; then echo -e "${RED}โŒ PORT $port ($description) is already in use${NC}"