Skip to content

Commit

Permalink
Merge pull request #262 from paulpalamarchuk/move_tests_to_cloudbuild
Browse files Browse the repository at this point in the history
Update integration tests to use new approach
  • Loading branch information
morgante authored Oct 2, 2019
2 parents f99ddf4 + f7d2a6c commit 81eb717
Show file tree
Hide file tree
Showing 72 changed files with 670 additions and 2,438 deletions.
3 changes: 2 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ test/fixtures/*/.terraform
test/fixtures/*/terraform.tfstate.d
examples/.kitchen
examples/*/.terraform
examples/*/terraform.tfstate.d
examples/*/terraform.tfstate.d

46 changes: 26 additions & 20 deletions .kitchen.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,27 +29,31 @@ platforms:
- name: local

suites:
- name: "deploy_service"
driver:
root_module_directory: test/fixtures/deploy_service
verifier:
systems:
- name: deploy_service
backend: local
# Disabled due to issue #274
# (https://github.com/terraform-google-modules/terraform-google-kubernetes-engine/issues/274)
# - name: "deploy_service"
# driver:
# root_module_directory: test/fixtures/deploy_service
# verifier:
# systems:
# - name: deploy_service
# backend: local
- name: "disable_client_cert"
driver:
root_module_directory: test/fixtures/disable_client_cert
verifier:
systems:
- name: disable_client_cert
backend: local
- name: "node_pool"
driver:
root_module_directory: test/fixtures/node_pool
verifier:
systems:
- name: node_pool
backend: local
# Disabled due to issue #274
# (https://github.com/terraform-google-modules/terraform-google-kubernetes-engine/issues/274)
# - name: "node_pool"
# driver:
# root_module_directory: test/fixtures/node_pool
# verifier:
# systems:
# - name: node_pool
# backend: local
- name: "shared_vpc"
driver:
root_module_directory: test/fixtures/shared_vpc
Expand Down Expand Up @@ -98,12 +102,14 @@ suites:
systems:
- name: stub_domains
backend: local
- name: stub_domains_private
driver:
root_module_directory: test/fixtures/stub_domains_private
systems:
- name: stub_domains_private
backend: local
# Disabled due to issue #264
# (https://github.com/terraform-google-modules/terraform-google-kubernetes-engine/issues/264)
# - name: stub_domains_private
# driver:
# root_module_directory: test/fixtures/stub_domains_private
# systems:
# - name: stub_domains_private
# backend: local
- name: "upstream_nameservers"
driver:
root_module_directory: test/fixtures/upstream_nameservers
Expand Down
1 change: 0 additions & 1 deletion .ruby-version

This file was deleted.

122 changes: 122 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# Contributing

This document provides guidelines for contributing to the module.

## Dependencies

The following dependencies must be installed on the development system:

- [Docker Engine][docker-engine]
- [Google Cloud SDK][google-cloud-sdk]
- [make]

## Generating Documentation for Inputs and Outputs

The Inputs and Outputs tables in the READMEs of the root module,
submodules, and example modules are automatically generated based on
the `variables` and `outputs` of the respective modules. These tables
must be refreshed if the module interfaces are changed.

## Templating

To more cleanly handle cases where desired functionality would require complex duplication of Terraform resources (i.e. [PR 51](https://github.com/terraform-google-modules/terraform-google-kubernetes-engine/pull/51)), this repository is largely generated from the [`autogen`](/autogen) directory.

The root module is generated by running `make generate`. Changes to this repository should be made in the [`autogen`](/autogen) directory where appropriate.

Note: The correct sequence to update the repo using autogen functionality is to run
`make docker_generate && make docker_generate_docs`. This will create the various Terraform files, and then
generate the Terraform documentation using `terraform-docs`.

### Autogeneration of documentation from .tf files
To generate new Inputs and Outputs tables run
```
make docker_generate_docs
```

## Integration Testing

Integration tests are used to verify the behaviour of the root module,
submodules, and example modules. Additions, changes, and fixes should
be accompanied with tests.

The integration tests are run using [Kitchen][kitchen],
[Kitchen-Terraform][kitchen-terraform], and [InSpec][inspec]. These
tools are packaged within a Docker image for convenience.

The general strategy for these tests is to verify the behaviour of the
[example modules](./examples/), thus ensuring that the root module,
submodules, and example modules are all functionally correct.

Six test-kitchen instances are defined:

- `deploy-service`
- `node-pool`
- `shared-vpc`
- `simple-regional`
- `simple-zonal`
- `stub-domains`

The test-kitchen instances in `test/fixtures/` wrap identically-named examples in the `examples/` directory.`

### Test Environment
The easiest way to test the module is in an isolated test project. The setup for such a project is defined in [test/setup](./test/setup/) directory.

To use this setup, you need a service account with Project Creator access on a folder. Export the Service Account credentials to your environment like so:

```
export SERVICE_ACCOUNT_JSON=$(< credentials.json)
```

You will also need to set a few environment variables:
```
export TF_VAR_org_id="your_org_id"
export TF_VAR_folder_id="your_folder_id"
export TF_VAR_billing_account="your_billing_account_id"
```

With these settings in place, you can prepare a test project using Docker:
```
make docker_test_prepare
```

### Noninteractive Execution

Run `make docker_test_integration` to test all of the example modules
noninteractively, using the prepared test project.

### Interactive Execution

1. Run `make docker_run` to start the testing Docker container in
interactive mode.

1. Run `kitchen_do create <EXAMPLE_NAME>` to initialize the working
directory for an example module.

1. Run `kitchen_do converge <EXAMPLE_NAME>` to apply the example module.

1. Run `kitchen_do verify <EXAMPLE_NAME>` to test the example module.

1. Run `kitchen_do destroy <EXAMPLE_NAME>` to destroy the example module
state.

## Linting and Formatting

Many of the files in the repository can be linted or formatted to
maintain a standard of quality.

### Execution

Run `make docker_test_lint`.

[docker-engine]: https://www.docker.com/products/docker-engine
[flake8]: http://flake8.pycqa.org/en/latest/
[gofmt]: https://golang.org/cmd/gofmt/
[google-cloud-sdk]: https://cloud.google.com/sdk/install
[hadolint]: https://github.com/hadolint/hadolint
[inspec]: https://inspec.io/
[kitchen-terraform]: https://github.com/newcontext-oss/kitchen-terraform
[kitchen]: https://kitchen.ci/
[make]: https://en.wikipedia.org/wiki/Make_(software)
[shellcheck]: https://www.shellcheck.net/
[terraform-docs]: https://github.com/segmentio/terraform-docs
[terraform]: https://terraform.io/
Loading

0 comments on commit 81eb717

Please sign in to comment.