-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Integration test improvements #2858
Changes from all commits
02ccedd
07c059e
364d0d2
9dd9ac0
c21576f
4308b2c
b22f1eb
9c4fbfc
ffabc9f
2ced8fb
7559e55
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -59,13 +59,17 @@ jobs: | |
strategy: | ||
fail-fast: false | ||
matrix: | ||
test_type: ["initial-install", "customizations"] | ||
compose_version: ["v2.0.1", "v2.7.0"] | ||
include: | ||
- compose_version: "v2.0.1" | ||
compose_path: "/usr/local/lib/docker/cli-plugins" | ||
- compose_version: "v2.7.0" | ||
compose_path: "/usr/local/lib/docker/cli-plugins" | ||
env: | ||
COMPOSE_PROJECT_NAME: self-hosted-${{ strategy.job-index }} | ||
SENTRY_DSN: https://[email protected]/6627632 | ||
REPORT_SELF_HOSTED_ISSUES: 1 | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
|
@@ -82,8 +86,11 @@ jobs: | |
sudo curl -L https://github.com/docker/compose/releases/download/${{ matrix.compose_version }}/docker-compose-`uname -s`-`uname -m` -o "${{ matrix.compose_path }}/docker-compose" | ||
sudo chmod +x "${{ matrix.compose_path }}/docker-compose" | ||
|
||
- name: Install self-hosted | ||
run: ./install.sh | ||
|
||
- name: Integration Test | ||
run: ./integration-test.sh | ||
run: ./integration-test.sh --${{ matrix.test_type }} | ||
|
||
- name: Inspect failure | ||
if: failure() | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,50 +1,23 @@ | ||
#!/usr/bin/env bash | ||
set -ex | ||
|
||
source install/_lib.sh | ||
source install/dc-detect-version.sh | ||
|
||
echo "${_group}Setting up variables and helpers ..." | ||
export SENTRY_TEST_HOST="${SENTRY_TEST_HOST:-https://localhost:9000}" | ||
TEST_USER='[email protected]' | ||
TEST_PASS='test123TEST' | ||
COOKIE_FILE=$(mktemp) | ||
|
||
# Courtesy of https://stackoverflow.com/a/2183063/90297 | ||
trap_with_arg() { | ||
func="$1" | ||
shift | ||
for sig; do | ||
trap "$func $sig "'$LINENO' "$sig" | ||
done | ||
} | ||
|
||
DID_TEAR_DOWN=0 | ||
# the teardown function will be the exit point | ||
teardown() { | ||
if [ "$DID_TEAR_DOWN" -eq 1 ]; then | ||
return 0 | ||
fi | ||
DID_TEAR_DOWN=1 | ||
|
||
if [ "$1" != "EXIT" ]; then | ||
echo "An error occurred, caught SIG$1 on line $2" | ||
fi | ||
|
||
echo "Tearing down ..." | ||
rm $COOKIE_FILE | ||
echo "Done." | ||
} | ||
trap_with_arg teardown ERR INT TERM EXIT | ||
trap_with_arg cleanup ERR INT TERM EXIT | ||
echo "${_endgroup}" | ||
|
||
echo "${_group}Starting Sentry for tests ..." | ||
# Disable beacon for e2e tests | ||
echo 'SENTRY_BEACON=False' >>$SENTRY_CONFIG_PY | ||
echo y | $dcr web createuser --force-update --superuser --email $TEST_USER --password $TEST_PASS | ||
$dc up -d | ||
printf "Waiting for Sentry to be up" | ||
timeout 90 bash -c 'until $(curl -Isf -o /dev/null $SENTRY_TEST_HOST); do printf '.'; sleep 0.5; done' | ||
# DC exec here is faster, tests run on the slower side and using exec would provide a boost | ||
echo y | $dc exec web sentry createuser --force-update --superuser --email $TEST_USER --password $TEST_PASS | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What happens if we exec into the web container but it isn't ready yet? Does docker wait until it is ready, or does this fail? If it's the former, we should There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Docker compose up will only succeed if the container healthcheck for web passes, so I don't think this will be a problem. That is performed on a previous line, so when the tests get to the createuser logic the web container will always be ready |
||
printf "Waiting for Sentry to be up" | ||
echo "" | ||
echo "${_endgroup}" | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,13 @@ | ||
echo "${_group}Setting up error handling ..." | ||
|
||
export SENTRY_DSN='https://[email protected]/3' | ||
export SENTRY_ORG=self-hosted | ||
export SENTRY_PROJECT=installer | ||
if [ -z "${SENTRY_DSN:-}" ]; then | ||
export SENTRY_DSN='https://19555c489ded4769978daae92f2346ca@self-hosted.getsentry.net/3' | ||
fi | ||
|
||
$dbuild -t sentry-self-hosted-jq-local --platform="$DOCKER_PLATFORM" jq | ||
|
||
jq="docker run --rm -i sentry-self-hosted-jq-local" | ||
sentry_cli="docker run --rm -v /tmp:/work -e SENTRY_ORG=$SENTRY_ORG -e SENTRY_PROJECT=$SENTRY_PROJECT -e SENTRY_DSN=$SENTRY_DSN getsentry/sentry-cli" | ||
sentry_cli="docker run --rm -v /tmp:/work -e SENTRY_DSN=$SENTRY_DSN getsentry/sentry-cli" | ||
|
||
send_envelope() { | ||
# Send envelope | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,29 +1,40 @@ | ||
#!/usr/bin/env bash | ||
set -ex | ||
|
||
source install/_lib.sh | ||
source install/detect-platform.sh | ||
source install/dc-detect-version.sh | ||
source install/error-handling.sh | ||
|
||
echo "Reset customizations" | ||
rm -f sentry/enhance-image.sh | ||
rm -f sentry/requirements.txt | ||
export REPORT_SELF_HOSTED_ISSUES=0 | ||
|
||
echo "Testing initial install" | ||
./install.sh | ||
_integration-test/run.sh | ||
_integration-test/ensure-customizations-not-present.sh | ||
_integration-test/ensure-backup-restore-works.sh | ||
test_option="$1" | ||
export MINIMIZE_DOWNTIME=0 | ||
|
||
echo "Make customizations" | ||
cat <<EOT >sentry/enhance-image.sh | ||
if [[ "$test_option" == "--initial-install" ]]; then | ||
echo "Testing initial install" | ||
source _integration-test/run.sh | ||
source _integration-test/ensure-customizations-not-present.sh | ||
source _integration-test/ensure-backup-restore-works.sh | ||
elif [[ "$test_option" == "--customizations" ]]; then | ||
echo "Testing customizations" | ||
$dc up -d | ||
echo "Making customizations" | ||
cat <<EOT >sentry/enhance-image.sh | ||
#!/bin/bash | ||
touch /created-by-enhance-image | ||
apt-get update | ||
apt-get install -y gcc libsasl2-dev python-dev libldap2-dev libssl-dev | ||
EOT | ||
chmod +x sentry/enhance-image.sh | ||
printf "python-ldap" >sentry/requirements.txt | ||
chmod +x sentry/enhance-image.sh | ||
printf "python-ldap" >sentry/requirements.txt | ||
|
||
echo "Testing in-place upgrade and customizations" | ||
./install.sh --minimize-downtime | ||
_integration-test/run.sh | ||
_integration-test/ensure-customizations-work.sh | ||
_integration-test/ensure-backup-restore-works.sh | ||
echo "Testing in-place upgrade and customizations" | ||
export MINIMIZE_DOWNTIME=1 | ||
./install.sh | ||
source _integration-test/run.sh | ||
source _integration-test/ensure-customizations-work.sh | ||
source _integration-test/ensure-backup-restore-works.sh | ||
fi |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,12 @@ | ||
#!/usr/bin/env bash | ||
set -e | ||
|
||
# This file runs in https://github.com/getsentry/sentry/blob/fe4795f5eae9e0d7c33e0ecb736c9d1369535eca/docker/cloudbuild.yaml#L59 | ||
export MINIMIZE_DOWNTIME=0 | ||
export REPORT_SELF_HOSTED_ISSUES=1 | ||
|
||
_integration-test/run.sh | ||
# This file runs in https://github.com/getsentry/sentry/blob/fe4795f5eae9e0d7c33e0ecb736c9d1369535eca/docker/cloudbuild.yaml#L59 | ||
source install/_lib.sh | ||
source install/detect-platform.sh | ||
source install/dc-detect-version.sh | ||
source install/error-handling.sh | ||
source _integration-test/run.sh |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
docker run is slower than just an exec into a running container
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is but it is also intentional to keep the run separate from the main web process.
That said for a one-off thing like this, I think using
exec
is a good compromise if it saves a notable amount of time. I'd just want it documented with a brief comment.