PromucFlow_constructor/deploy/docker/tests/pg-test-utils.sh
Abhijeet 6eb44a11c7
chore: Add appsmith user existence check for auth tests (#38069)
## Description
PR to add the check for `appsmith` user existence before any assertions
in pg-auth-test to remove the flakiness.

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!WARNING]
> Tests have not run on the HEAD
0ac8736872f1d8b51b384b644dd0f3b21f725cb0 yet
> <hr>Fri, 13 Dec 2024 05:18:03 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [x] No


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **Bug Fixes**
- Enhanced testing for PostgreSQL authentication to ensure the Appsmith
user exists before access checks.

- **Tests**
- Updated existing test functions to include user existence
verification, improving the robustness of the testing process.
- Introduced new functions to verify user existence and check the
readiness of the Appsmith instance and PostgreSQL.
- Streamlined logic for readiness checks, enhancing overall testing
efficiency.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2024-12-13 10:51:55 +05:30

70 lines
2.0 KiB
Bash

#!/bin/bash
# Default container name if not provided
container_name=${container_name:-appsmith-docker-test}
# Function to check if the Appsmith instance is up
is_appsmith_instance_ready() {
local max_retries=200
local retry_count=0
local response_code
while [ $retry_count -lt $max_retries ]; do
response_code=$(curl -s -o /dev/null -w "%{http_code}" http://localhost/health)
if [[ $response_code -eq 200 ]]; then
echo "Appsmith instance is ready."
return 0
fi
echo "Waiting for Appsmith instance to be ready... (Attempt: $((retry_count + 1)))"
retry_count=$((retry_count + 1))
sleep 2
done
return 1
}
# Function to wait until the postgres is ready
wait_for_postgres() {
local max_retries=200
local retry_count=0
while [ $retry_count -lt $max_retries ]; do
if docker exec "${container_name}" pg_isready; then
echo "Postgres is ready."
return 0
fi
echo "Waiting for Postgres to be ready... (Attempt: $((retry_count + 1)))"
retry_count=$((retry_count + 1))
sleep 2
done
}
# Function to check if the user exists in the database
check_user_exists() {
local user
user=$1
local max_retries=200
local retry_count=0
while [ $retry_count -lt $max_retries ]; do
if docker exec "${container_name}" bash -c "psql -p 5432 -U postgres -c \"SELECT 1 FROM pg_roles WHERE rolname='$user';\" | grep -q 1"; then
echo "$user user exists."
return 0
fi
echo "Waiting for $user user to be created... (Attempt: $((retry_count + 1)))"
retry_count=$((retry_count + 1))
sleep 1
done
echo "$user user does not exist."
return 1
}
# Function to check if the Appsmith user has read access to databases
check_user_datasource_access_with_host_port_wo_auth() {
docker exec "${container_name}" bash -c "psql -h 127.0.0.1 -p 5432 -U postgres -c '\l'"
return $?
}
# Function to check if the Appsmith user has read access to databases
check_user_datasource_access_with_local_port_wo_auth() {
docker exec "${container_name}" bash -c "psql -p 5432 -U postgres -c '\l'"
return $?
}