From 044e7fa368064507430e297f1d5c4dd3e1093b76 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 14 Dec 2013 11:27:50 -0800 Subject: [PATCH] test: google compute engine acceptance tests --- .gitignore | 1 + test/README.md | 15 ++++++- test/builder_googlecompute.bats | 40 +++++++++++++++++++ .../builder-googlecompute/minimal.json | 20 ++++++++++ 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100755 test/builder_googlecompute.bats create mode 100644 test/fixtures/builder-googlecompute/minimal.json diff --git a/.gitignore b/.gitignore index 940b019bc..279aabcb4 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ /website/build .vagrant Vagrantfile +test/.env diff --git a/test/README.md b/test/README.md index 12b99ea86..79d1d7909 100644 --- a/test/README.md +++ b/test/README.md @@ -21,7 +21,11 @@ running on Mac OS X, most of these are available with `brew`: * [Bats](https://github.com/sstephenson/bats) -* [AWS cli](http://aws.amazon.com/cli/) +* [AWS cli](http://aws.amazon.com/cli/) for AWS tests as well as most + of the components. + +* [gcutil](https://developers.google.com/compute/docs/gcutil/#install) for + Google Compute Engine tests. ### Configuring Tests @@ -32,6 +36,15 @@ Set the following self-explanatory environmental variables: * `AWS_ACCESS_KEY_ID` * `AWS_SECRET_ACCESS_KEY` +**For tests that test Google Compute Engine:** + +Set the following environmental variables: + +* `GC_BUCKET_NAME` +* `GC_CLIENT_SECRETS_FILE` +* `GC_PRIVATE_KEY_FILE` +* `GC_PROJECT_ID` + ### Running These tests are meant to be run _one file at a time_. There are some diff --git a/test/builder_googlecompute.bats b/test/builder_googlecompute.bats new file mode 100755 index 000000000..7287f9cce --- /dev/null +++ b/test/builder_googlecompute.bats @@ -0,0 +1,40 @@ +#!/usr/bin/env bats +# +# This tests the googlecompute builder. The teardown function will +# delete any images with the text "packerbats" within the name. + +load test_helper +fixtures builder-googlecompute + +# Required parameters +: ${GC_BUCKET_NAME:?} +: ${GC_CLIENT_SECRETS_FILE:?} +: ${GC_PRIVATE_KEY_FILE:?} +: ${GC_PROJECT_ID:?} +command -v gcutil >/dev/null 2>&1 || { + echo "'gcutil' must be installed" >&2 + exit 1 +} + +USER_VARS="-var bucket_name=${GC_BUCKET_NAME}" +USER_VARS="${USER_VARS} -var client_secrets_file=${GC_CLIENT_SECRETS_FILE}" +USER_VARS="${USER_VARS} -var private_key_file=${GC_PRIVATE_KEY_FILE}" +USER_VARS="${USER_VARS} -var project_id=${GC_PROJECT_ID}" + +# This tests if GCE has an image that contains the given parameter. +gc_has_image() { + gcutil --format=names --project=${GC_PROJECT_ID} listimages \ + | grep $1 +} + +teardown() { + gcutil --format=names --project=${GC_PROJECT_ID} listimages \ + | grep packerbats \ + | xargs -n1 gcutil --project=${GC_PROJECT_ID} --force deleteimage +} + +@test "googlecompute: build minimal.json" { + run packer build ${USER_VARS} $FIXTURE_ROOT/minimal.json + [ "$status" -eq 0 ] + [ "$(gc_has_image "packerbats-minimal")" -eq 0 ] +} diff --git a/test/fixtures/builder-googlecompute/minimal.json b/test/fixtures/builder-googlecompute/minimal.json new file mode 100644 index 000000000..f2a206833 --- /dev/null +++ b/test/fixtures/builder-googlecompute/minimal.json @@ -0,0 +1,20 @@ +{ + "variables": { + "bucket_name": null, + "client_secrets_file": null, + "private_key_file": null, + "project_id": null + }, + + "builders": [{ + "type": "googlecompute", + "bucket_name": "{{user `bucket_name`}}", + "client_secrets_file": "{{user `client_secrets_file`}}", + "private_key_file": "{{user `private_key_file`}}", + "project_id": "{{user `project_id`}}", + + "image_name": "packerbats-minimal-{{timestamp}}", + "source_image": "debian-7-wheezy-v20131120", + "zone": "us-central1-a" + }] +}