Skip to content

Commit

Permalink
Update testrunner to use new dev-env [WIP] (#1575)
Browse files Browse the repository at this point in the history
* Update testrunner to use new dev-env

* Fix label testcase

* Vendor the dev-infra scripts from the atproto repo for the dev-env server runner

* Bump detox to fix the ios sim control issue

* Use iphone 15 pro for tests

* Ensure the reminders never trigger during tests

* Skip the shell tests due to a crash bug with detox and the drawer
  • Loading branch information
pfrazee authored Oct 10, 2023
1 parent aad8d12 commit 0b44af3
Show file tree
Hide file tree
Showing 11 changed files with 288 additions and 67 deletions.
2 changes: 1 addition & 1 deletion .detoxrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ module.exports = {
simulator: {
type: 'ios.simulator',
device: {
type: 'iPhone 15',
type: 'iPhone 15 Pro',
},
},
attached: {
Expand Down
3 changes: 3 additions & 0 deletions __e2e__/mock-server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -502,6 +502,9 @@ async function main() {
createdAt: new Date().toISOString(),
},
)

// flush caches
await server.mocker.testNet.processAll()
}
}
console.log('Ready')
Expand Down
File renamed without changes.
92 changes: 92 additions & 0 deletions jest/dev-infra/_common.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
#!/usr/bin/env sh

get_container_id() {
local compose_file=$1
local service=$2
if [ -z "${compose_file}" ] || [ -z "${service}" ]; then
echo "usage: get_container_id <compose_file> <service>"
exit 1
fi

docker compose -f $compose_file ps --format json --status running \
| jq -r '.[]? | select(.Service == "'${service}'") | .ID'
}

# Exports all environment variables
export_env() {
export_pg_env
export_redis_env
}

# Exports postgres environment variables
export_pg_env() {
# Based on creds in compose.yaml
export PGPORT=5433
export PGHOST=localhost
export PGUSER=pg
export PGPASSWORD=password
export PGDATABASE=postgres
export DB_POSTGRES_URL="postgresql://pg:[email protected]:5433/postgres"
}

# Exports redis environment variables
export_redis_env() {
export REDIS_HOST="127.0.0.1:6380"
}

# Main entry point
main() {
# Expect a SERVICES env var to be set with the docker service names
local services=${SERVICES}

dir=$(dirname $0)
compose_file="${dir}/docker-compose.yaml"

# whether this particular script started the container(s)
started_container=false

# trap SIGINT and performs cleanup as necessary, i.e.
# taking down containers if this script started them
trap "on_sigint ${services}" INT
on_sigint() {
local services=$@
echo # newline
if $started_container; then
docker compose -f $compose_file rm -f --stop --volumes ${services}
fi
exit $?
}

# check if all services are running already
not_running=false
for service in $services; do
container_id=$(get_container_id $compose_file $service)
if [ -z $container_id ]; then
not_running=true
break
fi
done

# if any are missing, recreate all services
if $not_running; then
docker compose -f $compose_file up --wait --force-recreate ${services}
started_container=true
else
echo "all services ${services} are already running"
fi

# setup environment variables and run args
export_env
"$@"
# save return code for later
code=$?

# performs cleanup as necessary, i.e. taking down containers
# if this script started them
echo # newline
if $started_container; then
docker compose -f $compose_file rm -f --stop --volumes ${services}
fi

exit ${code}
}
49 changes: 49 additions & 0 deletions jest/dev-infra/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
version: '3.8'
services:
# An ephermerally-stored postgres database for single-use test runs
db_test: &db_test
image: postgres:14.4-alpine
environment:
- POSTGRES_USER=pg
- POSTGRES_PASSWORD=password
ports:
- '5433:5432'
# Healthcheck ensures db is queryable when `docker-compose up --wait` completes
healthcheck:
test: 'pg_isready -U pg'
interval: 500ms
timeout: 10s
retries: 20
# A persistently-stored postgres database
db:
<<: *db_test
ports:
- '5432:5432'
healthcheck:
disable: true
volumes:
- atp_db:/var/lib/postgresql/data
# An ephermerally-stored redis cache for single-use test runs
redis_test: &redis_test
image: redis:7.0-alpine
ports:
- '6380:6379'
# Healthcheck ensures redis is queryable when `docker-compose up --wait` completes
healthcheck:
test: ['CMD-SHELL', '[ "$$(redis-cli ping)" = "PONG" ]']
interval: 500ms
timeout: 10s
retries: 20
# A persistently-stored redis cache
redis:
<<: *redis_test
command: redis-server --save 60 1 --loglevel warning
ports:
- '6379:6379'
healthcheck:
disable: true
volumes:
- atp_redis:/data
volumes:
atp_db:
atp_redis:
9 changes: 9 additions & 0 deletions jest/dev-infra/with-test-db.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/usr/bin/env sh

# Example usage:
# ./with-test-db.sh psql postgresql://pg:password@localhost:5433/postgres -c 'select 1;'

dir=$(dirname $0)
. ${dir}/_common.sh

SERVICES="db_test" main "$@"
10 changes: 10 additions & 0 deletions jest/dev-infra/with-test-redis-and-db.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/usr/bin/env sh

# Example usage:
# ./with-test-redis-and-db.sh psql postgresql://pg:password@localhost:5433/postgres -c 'select 1;'
# ./with-test-redis-and-db.sh redis-cli -h localhost -p 6380 ping

dir=$(dirname $0)
. ${dir}/_common.sh

SERVICES="db_test redis_test" main "$@"
Loading

0 comments on commit 0b44af3

Please sign in to comment.