diff --git a/packages/django-google-spanner/django_test_suite_5.2.sh b/packages/django-google-spanner/django_test_suite_5.2.sh index 52e489561f31..884609c9ce53 100755 --- a/packages/django-google-spanner/django_test_suite_5.2.sh +++ b/packages/django-google-spanner/django_test_suite_5.2.sh @@ -27,15 +27,8 @@ export PYTHONPATH=$PYTHONPATH:$(pwd):$(pwd)/$DJANGO_TESTS_DIR/django python3 create_test_instance.py -# If no SPANNER_TEST_DB is set, generate a unique one -# so that we can have multiple tests running without -# conflicting which changes and constraints. We'll always -# cleanup the created database. -TEST_DBNAME=${SPANNER_TEST_DB:-$(python3 -c 'import os, time; print(chr(ord("a") + time.time_ns() % 26)+os.urandom(10).hex())')} -TEST_DBNAME_OTHER="$TEST_DBNAME-ot" INSTANCE=${SPANNER_TEST_INSTANCE:-spanner-django-python-systest} PROJECT=${PROJECT_ID:-$GOOGLE_CLOUD_PROJECT} -SETTINGS_FILE="$TEST_DBNAME-settings" TESTS_DIR=${DJANGO_TESTS_DIR:-django_tests} create_settings() { @@ -75,15 +68,35 @@ INSTALLED_APPS = [ } cd $TESTS_DIR/django/tests -create_settings EXIT_STATUS=0 +PIDS="" for DJANGO_TEST_APP in $DJANGO_TEST_APPS do if [ "$DJANGO_TEST_APP" = "order_with_respect_to" ] || [ "$DJANGO_TEST_APP" = "contenttypes_tests" ] || [ "$DJANGO_TEST_APP" = "inspectdb" ]; then echo "Skipping $DJANGO_TEST_APP as it is incompatible with Spanner" continue fi - python3 runtests.py $DJANGO_TEST_APP --verbosity=3 --noinput --settings $SETTINGS_FILE || EXIT_STATUS=$? + APP_PREFIX=$(echo "$DJANGO_TEST_APP" | tr -cd 'a-z0-9' | cut -c1-6) + RUN_ID=$(python3 -c 'import os; print(os.urandom(6).hex())') + if [ -n "$SPANNER_TEST_DB" ]; then + DB_PREFIX=$(echo "$SPANNER_TEST_DB" | cut -c1-20) + TEST_DBNAME="${DB_PREFIX}_${APP_PREFIX}" + else + TEST_DBNAME="${APP_PREFIX}_${RUN_ID}" + fi + TEST_DBNAME_OTHER="${TEST_DBNAME}-ot" + SETTINGS_FILE="${TEST_DBNAME}_settings" + create_settings + if [ -z "$SPANNER_EMULATOR_HOST" ]; then + python3 runtests.py "$DJANGO_TEST_APP" --verbosity=3 --noinput --settings "$SETTINGS_FILE" & + PIDS="$PIDS $!" + else + python3 runtests.py "$DJANGO_TEST_APP" --verbosity=3 --noinput --settings "$SETTINGS_FILE" || EXIT_STATUS=$? + fi +done +for PID in $PIDS +do + wait "$PID" || EXIT_STATUS=$? done exit $EXIT_STATUS diff --git a/packages/django-google-spanner/django_test_suite_6.0.sh b/packages/django-google-spanner/django_test_suite_6.0.sh index eeab3d35e62d..73462387e0b4 100755 --- a/packages/django-google-spanner/django_test_suite_6.0.sh +++ b/packages/django-google-spanner/django_test_suite_6.0.sh @@ -76,15 +76,34 @@ INSTALLED_APPS = [ } cd $TESTS_DIR/django/tests -create_settings EXIT_STATUS=0 +PIDS="" for DJANGO_TEST_APP in $DJANGO_TEST_APPS do if [ "$DJANGO_TEST_APP" = "order_with_respect_to" ] || [ "$DJANGO_TEST_APP" = "contenttypes_tests" ] || [ "$DJANGO_TEST_APP" = "inspectdb" ]; then echo "Skipping $DJANGO_TEST_APP as it is incompatible with Spanner" continue fi - python3 runtests.py $DJANGO_TEST_APP --verbosity=3 --noinput --settings $SETTINGS_FILE || EXIT_STATUS=$? + APP_PREFIX=$(echo "$DJANGO_TEST_APP" | tr -cd 'a-z0-9' | cut -c1-6) + RUN_ID=$(python3 -c 'import os; print(os.urandom(6).hex())') + if [ -n "$SPANNER_TEST_DB" ]; then + TEST_DBNAME="${SPANNER_TEST_DB}_${APP_PREFIX}" + else + TEST_DBNAME="${APP_PREFIX}_${RUN_ID}" + fi + TEST_DBNAME_OTHER="${TEST_DBNAME}-ot" + SETTINGS_FILE="${TEST_DBNAME}_settings" + create_settings + if [ -z "$SPANNER_EMULATOR_HOST" ]; then + python3 runtests.py "$DJANGO_TEST_APP" --verbosity=3 --noinput --settings "$SETTINGS_FILE" & + PIDS="$PIDS $!" + else + python3 runtests.py "$DJANGO_TEST_APP" --verbosity=3 --noinput --settings "$SETTINGS_FILE" || EXIT_STATUS=$? + fi +done +for PID in $PIDS +do + wait "$PID" || EXIT_STATUS=$? done exit $EXIT_STATUS diff --git a/packages/django-google-spanner/run_testing_worker.py b/packages/django-google-spanner/run_testing_worker.py index 06c295b73650..b572912a6226 100644 --- a/packages/django-google-spanner/run_testing_worker.py +++ b/packages/django-google-spanner/run_testing_worker.py @@ -70,7 +70,7 @@ def __exit__(self, exc, exc_value, traceback): suite = os.environ.get("DJANGO_TEST_SUITE", "./django_test_suite_6.0.sh") with TestInstance() as instance_name: os.system( - """DJANGO_TEST_APPS="{apps}" SPANNER_TEST_INSTANCE={instance} bash {suite}""".format( + """RUNNING_SPANNER_BACKEND_TESTS=1 DJANGO_TEST_APPS="{apps}" SPANNER_TEST_INSTANCE={instance} bash {suite}""".format( apps=" ".join(test_apps), instance=instance_name, suite=suite ) )