Run functional tests on cloudformation stacks.
Project description
Cloud-Radar
Write functional tests for multi-region Cloudformation stacks.
Report Bug
·
Request Feature
Table of Contents
About The Project
This project is a wrapper around Taskcat. Taskcat is a great tool for ensuring your Cloudformation Template can be deployed in multiple AWS Regions. Cloud-Radar enhances Taskcat by making it easier to write more complete functional tests.
Here's How:
- You can interact with the deployed resources directly with tools you already know like boto3.
- You can control the lifecycle of the stack. This allows testing if resources were retained after the stacks were deleted.
- You can dynamically generate taskcat projects, tests and template parameters without hardcoding them in a config file.
This project is new and it's possible not all features or functionality of Taskcat are supported. If you find something missing or have a use case that isn't covered then please let me know =)
Built With
Getting Started
Cloud-Radar is available as an easy to install pip package.
Prerequisites
Cloud-Radar requires python >= 3.8
Installation
- Install with pip.
pip install cloud-radar
Usage
Using Cloud-Radar start by importing it into your test file or framework.
from cloud_radar import Test
# Test is a context manager that makes sure your stacks are deleted after testing.
# test-name is the name of your test from your taskcat project file.
# ./project_dir is the path to the folder that contains your Cloudformation template
# and taskcat config file.
with Test('test-name', './project_dir') as stacks:
# Stacks will be created and returned as a list in the stacks variable.
for stack in stacks:
# stack will be an instance of Taskcat's Stack class.
# It has all the expected properties like parameters, outputs and resources
print(f"Testing {stack.name}")
bucket_name = ""
for output in stack.outputs:
if output.key == "LogsBucketName":
bucket_name = output.value
break
assert "logs" in bucket_name
assert stack.region.name in bucket_name
print(f"Created bucket: {bucket_name}")
# Once the test is over then all resources will be cleaned up.
You can also supply a Taskcat config as a python dictionary.
config = {
"project": {
"name": "taskcat-test-logbucket",
"regions": ["us-west-1", "us-west-2"],
},
"tests": {
"log-bucket": {
"template": "./log_bucket.yaml",
"parameters": {
"BucketPrefix": "taskcat-$[taskcat_random-string]",
"KeepBucket": "FALSE",
},
}
},
}
with Test('log-bucket', './project_dir', config_input=config) as stacks:
for stack in stacks:
assert 'us-east' not in stack.region.name
You can also skip the context manager. Here is an example for unittest
import unittest
from cloud-radar import TestManager
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.tm = TestManager('test-name','./project_dir')
cls.tm.create()
@classmethod
def tearDownClass(cls):
cls.tm.delete()
def test_bucket(self):
stacks = self.__class__.tm.stacks
for stack in stacks:
# Test
Calling help(cloud-radar.Test)
Test(test_name: str, project_dir: str, config_input: dict = None, config_file: str = './.taskcat.yml', regions: str = 'ALL', wait_for_delete: bool = False) -> Iterator[taskcat._cfn.stack.Stacks]
Create Stacks for a Taskcat test and return the stacks.
Must pass in a Taskcat configuration as either a dictionary or file.
Args:
test_name (str): The name of the test from the Taskcat config file.
project_dir (str): The directory that contains your Taskcat config and cloudformation files.
config_input (dict, optional): Taskcat config file in the form of a dictionary. Defaults to None.
config_file (str, optional): The name of the Taskcat config file. Defaults to "./.taskcat.yml".
regions (str, optional): Overide the regions defined in the config file. Defaults to "ALL".
wait_for_delete (bool, optional): Wait until stacks have deleted. Defaults to False.
Yields:
Iterator[Stacks]: The stacks created for the tests.
All the properties and methods of a stack instance.
For more examples, please refer to how we test Cloud-Radar
Roadmap
- Python 3.7 support
- Add the ability to update a stack instance to Taskcat.
- Add logging to Cloud-Radar
- Add logo
See the open issues for a list of proposed features (and known issues).
Contributing
Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
This project uses poetry to manage dependencies and pre-commit to run formatting, linting and tests. You will need to have both installed to your system as well as python 3.9.
- Fork the Project
- Setup environment (
poetry install
) - Setup commit hooks (
pre-commit install
) - Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
License
Distributed under the Apache-2.0 License. See LICENSE.txt for more information.
Contact
Levi - @shadycuz_cuz
Acknowledgements
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for cloud_radar-0.3.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 56d323194bb41b5f9a072b057bf1e8c7616028e60c102e78cb23b29d2ab0c2a0 |
|
MD5 | 842d60f5f198be43757a64dc7b8c2e31 |
|
BLAKE2b-256 | 70e5743e2c26669e7e4d446054e44a1f610af45d30664bdb90bdb67870025cd2 |