Improve test policy for examples

Signed-off-by: Tom Chauveau <tom.chauveau@epitech.eu>
This commit is contained in:
Tom Chauveau 2021-08-30 16:06:39 +02:00 committed by Guillaume de Rouville
parent 02e7cd3f59
commit e7a738211f
3 changed files with 96 additions and 89 deletions

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
mkdir test mkdir -p test
cat > test/source.cue << EOF cat > test/source.cue << EOF
package test package test

View File

@ -9,70 +9,73 @@ setup() {
# Test 1003-get-started # Test 1003-get-started
@test "doc-1003-get-started" { @test "doc-1003-get-started" {
setup_example_sandbox "doc" setup_example_sandbox
# Set examples private key # Set examples private key
./import-tutorial-key.sh "$DAGGER_SANDBOX"/import-tutorial-key.sh
# Collect url # Collect url
dagger up dagger -w "$DAGGER_SANDBOX" up
url=$(dagger query -f text url) url=$(dagger -w "$DAGGER_SANDBOX" query -f text url)
# More commands # More commands
dagger list dagger -w "$DAGGER_SANDBOX" list
ls -l ./s3 ls -l "$DAGGER_SANDBOX"/s3
dagger input list dagger -w "$DAGGER_SANDBOX" input list
# Check output # Check output
run curl $url run curl "$url"
assert_output --partial "My Todo app" assert_output --partial "My Todo app"
} }
@test "doc-1004-first-env" { @test "doc-1004-first-env" {
setup_example_sandbox "doc" setup_example_sandbox
# Follow tutorial # Follow tutorial
mkdir multibucket mkdir -p "$DAGGER_SANDBOX"/multibucket
cp $CODEBLOC_SRC/multibucket/source.cue multibucket cp "$DAGGER_WORKSPACE"/multibucket/source.cue "$DAGGER_SANDBOX"/multibucket
cp $CODEBLOC_SRC/multibucket/yarn.cue multibucket cp "$DAGGER_WORKSPACE"/multibucket/yarn.cue "$DAGGER_SANDBOX"/multibucket
cp $CODEBLOC_SRC/multibucket/netlify.cue multibucket cp "$DAGGER_WORKSPACE"/multibucket/netlify.cue "$DAGGER_SANDBOX"/multibucket
dagger doc alpha.dagger.io/netlify dagger -w "$DAGGER_SANDBOX" doc alpha.dagger.io/netlify
dagger doc alpha.dagger.io/js/yarn dagger -w "$DAGGER_SANDBOX" doc alpha.dagger.io/js/yarn
# Initialize new env # Initialize new env
dagger new 'multibucket' -p ./multibucket dagger -w "$DAGGER_SANDBOX" new 'multibucket' -p "$DAGGER_SANDBOX"/multibucket
# Copy corresponding env # Copy corresponding env
cp -r $CODEBLOC_SRC/.dagger/env/multibucket .dagger/env/ cp -r "$DAGGER_WORKSPACE"/.dagger/env/multibucket "$DAGGER_SANDBOX"/.dagger/env/
# Add missing src input # Add missing src input
dagger -e multibucket input dir src . dagger -w "$DAGGER_SANDBOX" -e multibucket input dir src "$DAGGER_SANDBOX"
# Run test # Run test
dagger -e multibucket up dagger -w "$DAGGER_SANDBOX" -e multibucket up
url=$(dagger -e multibucket query -f text site.netlify.deployUrl) url=$(dagger -w "$DAGGER_SANDBOX" -e multibucket query -f text site.netlify.deployUrl)
# Check output : # Check output
run curl $url run curl "$url"
assert_output --partial "./static/css/main.9149988f.chunk.css" assert_output --partial "./static/css/main.9149988f.chunk.css"
} }
@test "doc-1006-google-cloud-run" { @test "doc-1006-google-cloud-run" {
setup_example_sandbox "doc" setup_example_sandbox
mkdir gcpcloudrun # Follow tutorial
cp $CODEBLOC_SRC/gcpcloudrun/source.cue gcpcloudrun mkdir -p "$DAGGER_SANDBOX"/gcpcloudrun
cp "$DAGGER_WORKSPACE"/gcpcloudrun/source.cue "$DAGGER_SANDBOX"/gcpcloudrun
# Initialize new env # Initialize new env
dagger new 'gcpcloudrun' -p gcpcloudrun dagger -w "$DAGGER_SANDBOX" new 'gcpcloudrun' -p "$DAGGER_SANDBOX"/gcpcloudrun
# Copy corresponding env # Copy corresponding env
cp -r $CODEBLOC_SRC/.dagger/env/gcpcloudrun .dagger/env/ cp -r "$DAGGER_WORKSPACE"/.dagger/env/gcpcloudrun "$DAGGER_SANDBOX"/.dagger/env/
# Add missing src input # Add missing src input
dagger -e gcpcloudrun input dir src . dagger -w "$DAGGER_SANDBOX" -e gcpcloudrun input dir src "$DAGGER_SANDBOX"
# Run test # Run test
run dagger -e gcpcloudrun up run dagger -w "$DAGGER_SANDBOX" -e gcpcloudrun up
assert_success assert_success
} }
@ -140,7 +143,7 @@ setup() {
dagger -w "$DAGGER_SANDBOX" -e kube-aws-basic up dagger -w "$DAGGER_SANDBOX" -e kube-aws-basic up
#################### DEPLOYMENT #################### #################### DEPLOYMENT ####################
# Copy deployment to sandbox # Copy deployment to sandbox
copy_to_sandbox kube-aws-deployment kube-aws copy_to_sandbox kube-aws-deployment kube-aws
# Up deployment # Up deployment
@ -177,93 +180,103 @@ setup() {
@test "doc-1008-aws-cloudformation" { @test "doc-1008-aws-cloudformation" {
skip_unless_local_localstack skip_unless_local_localstack
setup_example_sandbox "doc" setup_example_sandbox
### Create a basic plan ### Create a basic plan
## Construct ## Construct
mkdir cloudformation mkdir -p "$DAGGER_SANDBOX"/cloudformation
cp $CODEBLOC_SRC/cloudformation/template.cue cloudformation cp "$DAGGER_WORKSPACE"/cloudformation/template.cue "$DAGGER_SANDBOX"/cloudformation
# Cloudformation relay # Cloudformation relay
dagger doc alpha.dagger.io/aws/cloudformation dagger -w "$DAGGER_SANDBOX" doc alpha.dagger.io/aws/cloudformation
cp $CODEBLOC_SRC/cloudformation/source-begin.cue cloudformation/source.cue cp "$DAGGER_WORKSPACE"/cloudformation/source-begin.cue "$DAGGER_SANDBOX"/cloudformation/source.cue
# Initialize new env # Initialize new env
dagger new 'cloudformation' -p cloudformation dagger -w "$DAGGER_SANDBOX" new 'cloudformation' -p "$DAGGER_SANDBOX"/cloudformation
# Finish template setup # Finish template setup
cp $CODEBLOC_SRC/cloudformation/source-end.cue cloudformation/source.cue cp "$DAGGER_WORKSPACE"/cloudformation/source-end.cue "$DAGGER_SANDBOX"/cloudformation/source.cue
# Copy corresponding env # Copy corresponding env
cp -r $CODEBLOC_SRC/.dagger/env/cloudformation .dagger/env/ cp -r "$DAGGER_WORKSPACE"/.dagger/env/cloudformation "$DAGGER_SANDBOX"/.dagger/env/
# Run test # Run test
dagger -e cloudformation up dagger -w "$DAGGER_SANDBOX" -e cloudformation up
stackName=$(dagger -e cloudformation query cfnStackName -f text) stackName=$(dagger -w "$DAGGER_SANDBOX" -e cloudformation query cfnStackName -f text)
## Cleanup ## Cleanup
# Place back empty source # Place back empty source
cp $CODEBLOC_SRC/cloudformation/source-begin.cue cloudformation/source.cue cp "$DAGGER_WORKSPACE"/cloudformation/source-begin.cue "$DAGGER_SANDBOX"/cloudformation/source.cue
cp $CODEBLOC_SRC/cloudformation/deletion.cue cloudformation/deletion.cue cp "$DAGGER_WORKSPACE"/cloudformation/deletion.cue "$DAGGER_SANDBOX"/cloudformation/deletion.cue
# Prepare and run cloudformation cleanup # Prepare and run cloudformation cleanup
dagger -e cloudformation input text stackRemoval.stackName $stackName dagger -w "$DAGGER_SANDBOX" -e cloudformation input text stackRemoval.stackName "$stackName"
dagger -e cloudformation up dagger -w "$DAGGER_SANDBOX" -e cloudformation up
### Template part ### Template part
## Create convert.cue ## Create convert.cue
cp $CODEBLOC_SRC/cloudformation/template/convert.cue cloudformation/convert.cue cp "$DAGGER_WORKSPACE"/cloudformation/template/convert.cue "$DAGGER_SANDBOX"/cloudformation/convert.cue
rm cloudformation/source.cue cloudformation/deletion.cue rm "$DAGGER_SANDBOX"/cloudformation/source.cue "$DAGGER_SANDBOX"/cloudformation/deletion.cue
## Retrieve Unmarshalled JSON ## Retrieve Unmarshalled JSON
dagger query -e cloudformation s3Template dagger -w "$DAGGER_SANDBOX" query -e cloudformation s3Template
## Remove convert.cue ## Remove convert.cue
rm cloudformation/convert.cue rm "$DAGGER_SANDBOX"/cloudformation/convert.cue
## Store the output
cp $CODEBLOC_SRC/cloudformation/template/template-begin.cue cloudformation/template.cue
# Inspect conf
dagger query -e cloudformation template -f text
cp $CODEBLOC_SRC/cloudformation/template/deployment.cue cloudformation/deployment.cue ## Store the output
cp $CODEBLOC_SRC/cloudformation/template/template-end.cue cloudformation/template.cue cp "$DAGGER_WORKSPACE"/cloudformation/template/template-begin.cue "$DAGGER_SANDBOX"/cloudformation/template.cue
cp $CODEBLOC_SRC/cloudformation/source-end.cue cloudformation/source.cue
# Inspect conf
dagger -w "$DAGGER_SANDBOX" query -e cloudformation template -f text
cp "$DAGGER_WORKSPACE"/cloudformation/template/deployment.cue "$DAGGER_SANDBOX"/cloudformation/deployment.cue
cp "$DAGGER_WORKSPACE"/cloudformation/template/template-end.cue "$DAGGER_SANDBOX"/cloudformation/template.cue
cp "$DAGGER_WORKSPACE"/cloudformation/source-end.cue "$DAGGER_SANDBOX"/cloudformation/source.cue
# Deploy again # Deploy again
dagger -e cloudformation query template -f text dagger -w "$DAGGER_SANDBOX" -e cloudformation query template -f text
dagger -e cloudformation up dagger -w "$DAGGER_SANDBOX" -e cloudformation up
dagger -e cloudformation output list dagger -w "$DAGGER_SANDBOX" -e cloudformation output list
## Cleanup again ## Cleanup again
stackName=$(dagger -e cloudformation query cfnStackName -f text) stackName=$(dagger -w "$DAGGER_SANDBOX" -e cloudformation query cfnStackName -f text)
rm -rf cloudformation/* rm -rf "$DAGGER_SANDBOX"/cloudformation/*
# Place back empty source # Place back empty source
cp $CODEBLOC_SRC/cloudformation/source-begin.cue cloudformation/source.cue cp "$DAGGER_WORKSPACE"/cloudformation/source-begin.cue "$DAGGER_SANDBOX"/cloudformation/source.cue
cp $CODEBLOC_SRC/cloudformation/deletion.cue cloudformation/deletion.cue cp "$DAGGER_WORKSPACE"/cloudformation/deletion.cue "$DAGGER_SANDBOX"/cloudformation/deletion.cue
# Prepare and run cloudformation cleanup # Prepare and run cloudformation cleanup
dagger -e cloudformation input text stackRemoval.stackName $stackName dagger -w "$DAGGER_SANDBOX" -e cloudformation input text stackRemoval.stackName "$stackName"
dagger -e cloudformation up dagger -w "$DAGGER_SANDBOX" -e cloudformation up
} }
@test "doc-1010-dev-cue-package" { @test "doc-1010-dev-cue-package" {
setup_example_sandbox ""
# Initializing workspace # Initializing workspace
mkdir workspace mkdir -p "$DAGGER_SANDBOX"/workspace
cd workspace
# Writing package # Writing package
dagger init # dagger init # The sandbox is already init
mkdir -p cue.mod/pkg/github.com/tjovicic/gcpcloudrun mkdir -p "$DAGGER_SANDBOX"/cue.mod/pkg/github.com/tjovicic/gcpcloudrun
cp $CODEBLOC_SRC/dev-cue-package/source.cue cue.mod/pkg/github.com/tjovicic/gcpcloudrun/source.cue cp "$DAGGER_WORKSPACE"/dev-cue-package/source.cue "$DAGGER_SANDBOX"/cue.mod/pkg/github.com/tjovicic/gcpcloudrun/source.cue
cp $CODEBLOC_SRC/dev-cue-package/script.sh . cp "$DAGGER_WORKSPACE"/dev-cue-package/script.sh "$DAGGER_SANDBOX"/workspace/script.sh
# We remove the last line of the script, as bats cannot expand dagger # We remove the last line of the script, as bats cannot expand dagger
# to dagger() bats helper func inside bash files # to dagger() bats helper func inside bash files
sed '$d' < script.sh > tmpFile ; mv tmpFile script.sh sed '$d' <"$DAGGER_SANDBOX"/workspace/script.sh >"$DAGGER_SANDBOX"/tmpFile
mv "$DAGGER_SANDBOX"/tmpFile "$DAGGER_SANDBOX"/workspace/script.sh
chmod +x "$DAGGER_SANDBOX"/workspace/script.sh
"$DAGGER_SANDBOX"/workspace/script.sh
# Sync file from documentation
rsync -a test "$DAGGER_SANDBOX"
chmod +x script.sh
./script.sh
# Command removed from script.sh above # Command removed from script.sh above
dagger new staging -p ./test dagger -w "$DAGGER_SANDBOX" new staging -p "$DAGGER_SANDBOX"/test
run dagger up -e staging run dagger up -w "$DAGGER_SANDBOX" -e staging
assert_output --partial "input=run.gcpConfig.serviceKey" assert_output --partial "input=run.gcpConfig.serviceKey"
# Clean script.sh output
rm -rf ./test
} }

View File

@ -34,21 +34,15 @@ dagger() {
"${DAGGER}" "$@" "${DAGGER}" "$@"
} }
# dagger helper to run doc examples in clean environment # Setup sandbox for dagger example
# It clones the example repository and update Sandbox to
setup_example_sandbox() { setup_example_sandbox() {
# Tell Dagger not to use DAGGER WORKSPACE env var git -C "$DAGGER_SANDBOX" clone https://github.com/dagger/examples
unset DAGGER_WORKSPACE
export CODEBLOC_SRC="$(pwd)" export DAGGER_SANDBOX="$DAGGER_SANDBOX"/examples/todoapp
local tmpdir=$(mktemp -d)
cd $tmpdir
if [ "$1" = "doc" ]; then
git clone https://github.com/dagger/examples
cd examples/todoapp
cue mod init
fi
} }
# copy an environment from the current workspace to the sandbox. # copy an environment from the current workspace to the sandbox.
# #
# this is needed if the test requires altering inputs without dirtying the # this is needed if the test requires altering inputs without dirtying the