Skip to content
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

nightly vcr cassettes update #9678

Merged
merged 9 commits into from
Dec 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions .ci/gcb-vcr-nightly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
steps:
- name: 'gcr.io/graphite-docker-images/go-plus'
id: gcb-vcr-nightly
entrypoint: '/workspace/.ci/scripts/go-plus/vcr-cassette-update/vcr_cassette_update.sh'
secretEnv: ["GITHUB_TOKEN", "GOOGLE_BILLING_ACCOUNT", "GOOGLE_CUST_ID", "GOOGLE_FIRESTORE_PROJECT", "GOOGLE_IDENTITY_USER", "GOOGLE_MASTER_BILLING_ACCOUNT", "GOOGLE_ORG", "GOOGLE_ORG_2", "GOOGLE_ORG_DOMAIN", "GOOGLE_PROJECT", "GOOGLE_PROJECT_NUMBER", "GOOGLE_SERVICE_ACCOUNT", "SA_KEY", "GOOGLE_PUBLIC_AVERTISED_PREFIX_DESCRIPTION"]
args:
- $BUILD_ID

# Long timeout to enable waiting on VCR test
timeout: 20000s
options:
machineType: 'N1_HIGHCPU_32'

logsBucket: 'gs://cloudbuild-vcr-nightly-logs'
availableSecrets:
ScottSuarez marked this conversation as resolved.
Show resolved Hide resolved
secretManager:
- versionName: projects/673497134629/secrets/github-magician-token/versions/latest
env: GITHUB_TOKEN
- versionName: projects/673497134629/secrets/ci-test-billing-account/versions/latest
env: GOOGLE_BILLING_ACCOUNT
- versionName: projects/673497134629/secrets/ci-test-cust-id/versions/latest
env: GOOGLE_CUST_ID
- versionName: projects/673497134629/secrets/ci-test-firestore-project/versions/latest
env: GOOGLE_FIRESTORE_PROJECT
- versionName: projects/673497134629/secrets/ci-test-identity-user/versions/latest
env: GOOGLE_IDENTITY_USER
- versionName: projects/673497134629/secrets/ci-test-master-billing-account/versions/latest
env: GOOGLE_MASTER_BILLING_ACCOUNT
- versionName: projects/673497134629/secrets/ci-test-org/versions/latest
env: GOOGLE_ORG
- versionName: projects/673497134629/secrets/ci-test-org-2/versions/latest
env: GOOGLE_ORG_2
- versionName: projects/673497134629/secrets/ci-test-org-domain/versions/latest
env: GOOGLE_ORG_DOMAIN
- versionName: projects/673497134629/secrets/ci-test-project/versions/latest
env: GOOGLE_PROJECT
- versionName: projects/673497134629/secrets/ci-test-project-number/versions/latest
env: GOOGLE_PROJECT_NUMBER
- versionName: projects/673497134629/secrets/ci-test-service-account/versions/latest
env: GOOGLE_SERVICE_ACCOUNT
- versionName: projects/673497134629/secrets/ci-test-service-account-key/versions/latest
env: SA_KEY
- versionName: projects/673497134629/secrets/ci-test-public-advertised-prefix-description/versions/latest
env: GOOGLE_PUBLIC_AVERTISED_PREFIX_DESCRIPTION
198 changes: 198 additions & 0 deletions .ci/scripts/go-plus/vcr-cassette-update/vcr_cassette_update.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
#!/bin/bash

set -e

build_id=$1
github_username=hashicorp
gh_repo=terraform-provider-google-beta
git_remote=https://github.com/$github_username/$gh_repo
local_path=$GOPATH/src/github.com/hashicorp/$gh_repo
mkdir -p "$(dirname $local_path)"
git clone $git_remote $local_path --depth 1
pushd $local_path

# get today's date in YYYY-MM-DD format
today=$(date +%F)

set +e

echo $SA_KEY > sa_key.json
gcloud auth activate-service-account $GOOGLE_SERVICE_ACCOUNT --key-file=$local_path/sa_key.json --project=$GOOGLE_PROJECT

# cassette retrieval
mkdir fixtures

# pull main cassettes
gsutil -m -q cp gs://ci-vcr-cassettes/beta/fixtures/* fixtures/

# main cassettes backup
# incase nightly run goes wrong. this will be used to restore the cassettes
gsutil -m -q cp fixtures/* gs://vcr-nightly/beta/$today/$build_id/main_cassettes_backup/fixtures/

mkdir testlog
mkdir testlog/replaying
mkdir testlog/recording
mkdir testlog/recording_build

export GOOGLE_REGION=us-central1
export GOOGLE_ZONE=us-central1-a
export VCR_PATH=$local_path/fixtures
export VCR_MODE=REPLAYING
export ACCTEST_PARALLELISM=32
export GOOGLE_CREDENTIALS=$SA_KEY
export GOOGLE_APPLICATION_CREDENTIALS=$local_path/sa_key.json
export GOOGLE_TEST_DIRECTORY=$(go list ./... | grep -v github.com/hashicorp/terraform-provider-google-beta/scripts)

echo "checking terraform version"
terraform version

go build $GOOGLE_TEST_DIRECTORY
if [ $? != 0 ]; then
echo "Skipping tests: Build failure detected"
exit 1
fi

echo "running tests in REPLAYING mode now"
TF_LOG=DEBUG TF_LOG_PATH_MASK=$local_path/testlog/replaying/%s.log TF_ACC=1 TF_SCHEMA_PANIC_ON_ERROR=1 go test $GOOGLE_TEST_DIRECTORY -parallel $ACCTEST_PARALLELISM -v -run=TestAcc -timeout 240m -ldflags="-X=github.com/hashicorp/terraform-provider-google-beta/version.ProviderVersion=acc" > replaying_test.log

# store replaying build log
gsutil -h "Content-Type:text/plain" -q cp replaying_test.log gs://vcr-nightly/beta/$today/$build_id/logs/build-log/

# store replaying test logs
gsutil -h "Content-Type:text/plain" -m -q cp testlog/replaying/* gs://vcr-nightly/beta/$today/$build_id/logs/replaying/

# handle provider crash
TESTS_PANIC=$(grep "^panic: " replaying_test.log)
if [[ -n $TESTS_PANIC ]]; then
echo "#################################"
echo "The provider crashed while running the VCR tests in REPLAYING mode"
echo "#################################"
exit 0
fi

FAILED_TESTS=$(grep "^--- FAIL: TestAcc" replaying_test.log)
PASSED_TESTS=$(grep "^--- PASS: TestAcc" replaying_test.log)
SKIPPED_TESTS=$(grep "^--- SKIP: TestAcc" replaying_test.log)

if [[ -n $FAILED_TESTS ]]; then
FAILED_TESTS_COUNT=$(echo "$FAILED_TESTS" | wc -l)
else
FAILED_TESTS_COUNT=0
fi

if [[ -n $PASSED_TESTS ]]; then
PASSED_TESTS_COUNT=$(echo "$PASSED_TESTS" | wc -l)
else
PASSED_TESTS_COUNT=0
fi

if [[ -n $SKIPPED_TESTS ]]; then
SKIPPED_TESTS_COUNT=$(echo "$SKIPPED_TESTS" | wc -l)
else
SKIPPED_TESTS_COUNT=0
fi

FAILED_TESTS_PATTERN=$(grep "^--- FAIL: TestAcc" replaying_test.log | awk '{print $3}' | awk -v d="|" '{s=(NR==1?s:s d)$0}END{print s}')

echo "#################################"
echo "Tests Analytics"
echo "Total tests: $(($FAILED_TESTS_COUNT+$PASSED_TESTS_COUNT+$SKIPPED_TESTS_COUNT))"
echo "Passed tests: $PASSED_TESTS_COUNT"
echo "Skipped tests: $SKIPPED_TESTS_COUNT"
echo "Affected tests: $FAILED_TESTS_COUNT"
echo "Affected tests list: $FAILED_TESTS_PATTERN"
echo "#################################"
echo ""

if [[ -n $FAILED_TESTS_PATTERN ]]; then
echo "running affected tests in RECORDING mode now"

# Clear fixtures folder
rm $VCR_PATH/*

# set RECORDING mode
export VCR_MODE=RECORDING

FAILED_TESTS=$(grep "^--- FAIL: TestAcc" replaying_test.log | awk '{print $3}')
# test_exit_code=0
parallel --jobs 16 TF_LOG=DEBUG TF_LOG_PATH_MASK=$local_path/testlog/recording/%s.log TF_ACC=1 TF_SCHEMA_PANIC_ON_ERROR=1 go test {1} -parallel 1 -v -run="{2}$" -timeout 240m -ldflags="-X=github.com/hashicorp/terraform-provider-google-beta/version.ProviderVersion=acc" ">>" testlog/recording_build/{2}_recording_test.log ::: $GOOGLE_TEST_DIRECTORY ::: $FAILED_TESTS

test_exit_code=$?

# Concatenate recording build logs to one file
# Note: build logs are different from debug logs
for failed_test in $FAILED_TESTS
do
cat testlog/recording_build/${failed_test}_recording_test.log >> recording_test.log
done

# store cassettes
gsutil -m -q cp fixtures/* gs://ci-vcr-cassettes/beta/fixtures/
ScottSuarez marked this conversation as resolved.
Show resolved Hide resolved

# store recording build log
gsutil -h "Content-Type:text/plain" -q cp recording_test.log gs://vcr-nightly/beta/$today/$build_id/logs/build-log/

# store recording individual build logs
gsutil -h "Content-Type:text/plain" -m -q cp testlog/recording_build/* gs://vcr-nightly/beta/$today/$build_id/logs/build-log/recording_build/

# store recording test logs
gsutil -h "Content-Type:text/plain" -m -q cp testlog/recording/* gs://vcr-nightly/beta/$today/$build_id/logs/recording/

# handle provider crash
RECORDING_TESTS_PANIC=$(grep "^panic: " recording_test.log)

if [[ -n $RECORDING_TESTS_PANIC ]]; then
echo "#################################"
echo "The provider crashed while running the VCR tests in RECORDING mode"
echo "#################################"
exit 0
fi

RECORDING_FAILED_TESTS=$(grep "^--- FAIL: TestAcc" recording_test.log | awk '{print $3}')
RECORDING_PASSED_TESTS=$(grep "^--- PASS: TestAcc" recording_test.log | awk '{print $3}')

RECORDING_PASSED_TESTS_COUNT=0
RECORDING_FAILED_TESTS_COUNT=0

echo "#################################"
echo "RECORDING Tests Report"
if [[ -n $RECORDING_PASSED_TESTS ]]; then
RECORDING_PASSED_TESTS_COUNT=$(echo "$RECORDING_PASSED_TESTS" | wc -l)
echo "Tests passed during RECORDING mode:"
echo $RECORDING_PASSED_TESTS
echo ""
fi

if [[ -n $RECORDING_FAILED_TESTS ]]; then
RECORDING_FAILED_TESTS_COUNT=$(echo "$RECORDING_FAILED_TESTS" | wc -l)
echo "Tests failed during RECORDING mode:"
echo $RECORDING_FAILED_TESTS
echo ""
if [[ $RECORDING_PASSED_TESTS_COUNT+$RECORDING_FAILED_TESTS_COUNT -lt $FAILED_TESTS_COUNT ]]; then
echo "Several tests got terminated during RECORDING mode"
fi
else
if [[ $RECORDING_PASSED_TESTS_COUNT+$RECORDING_FAILED_TESTS_COUNT -lt $FAILED_TESTS_COUNT ]]; then
echo "Several tests got terminated during RECORDING mode"
elif [[ $test_exit_code -ne 0 ]]; then
# check for any uncaught errors in RECORDING mode
echo "Errors occurred during RECORDING mode."
else
echo "All tests passed!"
fi
fi
echo "#################################"
else
if [[ $test_exit_code -ne 0 ]]; then
# check for any uncaught errors errors in REPLAYING mode
echo "#################################"
echo "Errors occurred during REPLAYING mode."
echo "#################################"
else
echo "#################################"
echo "All tests passed in REPLAYING mode."
echo "#################################"
fi
fi

set -e