From ad2f9b3f1790a1c3386a89caf718b836a0bfb33a Mon Sep 17 00:00:00 2001 From: Guillaume de Rouville Date: Thu, 12 Aug 2021 12:47:50 +0200 Subject: [PATCH] 1003 test implementation Signed-off-by: Guillaume de Rouville --- Makefile | 5 ++ docs/learn/tests/cue.mod/module.cue | 1 + docs/learn/tests/cue.mod/pkg/.gitignore | 2 + docs/learn/tests/doc.bats | 29 ++++++++ docs/learn/tests/helpers.bash | 89 +++++++++++++++++++++++++ docs/learn/tests/package.json | 12 ++++ 6 files changed, 138 insertions(+) create mode 100644 docs/learn/tests/cue.mod/module.cue create mode 100644 docs/learn/tests/cue.mod/pkg/.gitignore create mode 100644 docs/learn/tests/doc.bats create mode 100644 docs/learn/tests/helpers.bash create mode 100644 docs/learn/tests/package.json diff --git a/Makefile b/Makefile index a11c410f..f585dc95 100644 --- a/Makefile +++ b/Makefile @@ -48,6 +48,11 @@ universe-test: dagger-debug yarn --cwd "./universe" install DAGGER_BINARY="../cmd/dagger/dagger-debug" yarn --cwd "./universe" test +.PHONY: doc-test +doc-test: dagger-debug + yarn --cwd "./docs/learn/tests" install + DAGGER_BINARY="$(shell pwd)/cmd/dagger/dagger-debug" yarn --cwd "./docs/learn/tests" test + .PHONY: install install: dagger go install ./cmd/dagger diff --git a/docs/learn/tests/cue.mod/module.cue b/docs/learn/tests/cue.mod/module.cue new file mode 100644 index 00000000..f8af9cef --- /dev/null +++ b/docs/learn/tests/cue.mod/module.cue @@ -0,0 +1 @@ +module: "" diff --git a/docs/learn/tests/cue.mod/pkg/.gitignore b/docs/learn/tests/cue.mod/pkg/.gitignore new file mode 100644 index 00000000..a572e9ee --- /dev/null +++ b/docs/learn/tests/cue.mod/pkg/.gitignore @@ -0,0 +1,2 @@ +# dagger universe +alpha.dagger.io diff --git a/docs/learn/tests/doc.bats b/docs/learn/tests/doc.bats new file mode 100644 index 00000000..1aaf017e --- /dev/null +++ b/docs/learn/tests/doc.bats @@ -0,0 +1,29 @@ +## Doc commands are being extracted from this file and helpers. +## Indentation is important, please append at the end + +setup() { + load 'helpers' + + common_setup +} + +# Test 1003-get-started +@test "doc-1003-get-started" { + setup_example_sandbox "doc" + + # Set examples private key + ./import-tutorial-key.sh + + # Collect url + dagger up + url=$(dagger query -f text url) + + # More commands + dagger list + ls -l ./s3 + dagger input list + + # Check output + run curl $url + assert_output --partial "My Todo app" +} \ No newline at end of file diff --git a/docs/learn/tests/helpers.bash b/docs/learn/tests/helpers.bash new file mode 100644 index 00000000..3729d857 --- /dev/null +++ b/docs/learn/tests/helpers.bash @@ -0,0 +1,89 @@ +## Doc commands are being extracted from this file and helpers. +## Indentation is important, please append at the end + +common_setup() { + load 'node_modules/bats-support/load' + load 'node_modules/bats-assert/load' + + # Dagger Binary + # FIXME: `command -v` must be wrapped in a sub-bash, + # otherwise infinite recursion when DAGGER_BINARY is not set. + export DAGGER="${DAGGER_BINARY:-$(bash -c 'command -v dagger')}" + + # Set the workspace to the universe directory (so tests can run from anywhere) + UNIVERSE="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )" + DAGGER_WORKSPACE="$UNIVERSE" + export DAGGER_WORKSPACE + + # Force pretty printing for error reporting + DAGGER_LOG_FORMAT="pretty" + export DAGGER_LOG_FORMAT + + # Sandbox workspace. + DAGGER_SANDBOX="$(mktemp -d -t dagger-workspace-XXXXXX)" + export DAGGER_SANDBOX + dagger init -w "$DAGGER_SANDBOX" + + # allows the use of `sops` + SOPS_AGE_KEY_FILE=~/.config/dagger/keys.txt + export SOPS_AGE_KEY_FILE +} + +# dagger helper to execute the right binary +dagger() { + "${DAGGER}" "$@" +} + +# dagger helper to run doc examples in clean environment +setup_example_sandbox() { + # Tell Dagger not to use DAGGER WORKSPACE env var + unset DAGGER_WORKSPACE + + export CODEBLOC_SRC="$(pwd)" + local tmpdir=$(mktemp -d) + cd $tmpdir + git clone https://github.com/dagger/examples + if [ "$1" = "doc" ]; then + cd examples/todoapp + cue mod init + fi +} + +# copy an environment from the current workspace to the sandbox. +# +# this is needed if the test requires altering inputs without dirtying the +# current environment. +# Usage: +# copy_to_sandbox myenv +# dagger input secret -w "$DAGGER_SANDBOX" -e myenv "temporary change" +# dagger up -w "$DAGGER_SANDBOX" -e myenv +# +# To use testdata directory in tests, add the package name as second flag +# Usage: +# copy_to_sandbox myenv mypackage +copy_to_sandbox() { + local name="$1" + local source="$DAGGER_WORKSPACE"/.dagger/env/"$name" + local target="$DAGGER_SANDBOX"/.dagger/env/"$name" + + cp -a "$source" "$target" + + if [ -d "$2" ]; then + local package="$2" + local source_package="$DAGGER_WORKSPACE"/"$package" + local target_package="$DAGGER_SANDBOX"/ + + cp -a "$source_package" "$target_package" + fi +} + +# Check if there is a local kubernetes cluster. +# +# This is need to do kubernetes test in the CI. +skip_unless_local_kube() { + if [ -f ~/.kube/config ] && grep -q "127.0.0.1" ~/.kube/config &> /dev/null; then + echo "Kubernetes available" + else + skip "local kubernetes cluster not available" + fi +} \ No newline at end of file diff --git a/docs/learn/tests/package.json b/docs/learn/tests/package.json new file mode 100644 index 00000000..805413da --- /dev/null +++ b/docs/learn/tests/package.json @@ -0,0 +1,12 @@ +{ + "license": "Apache-2.0", + "scripts": { + "test": "bats --report-formatter junit --jobs 4 ." + }, + "devDependencies": { + "bats": "https://github.com/bats-core/bats-core#master", + "bats-assert": "https://github.com/bats-core/bats-assert", + "bats-support": "https://github.com/bats-core/bats-support" + } +} +