{"id":37083041,"url":"https://github.com/bincyber/pitfall","last_synced_at":"2026-01-14T10:02:39.642Z","repository":{"id":57453100,"uuid":"216965913","full_name":"bincyber/pitfall","owner":"bincyber","description":"Pulumi Integration Testing Framework ","archived":true,"fork":false,"pushed_at":"2020-03-29T17:55:21.000Z","size":107,"stargazers_count":35,"open_issues_count":2,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-05T03:36:51.017Z","etag":null,"topics":["devops","infrastructure-as-code","pulumi","testing"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bincyber.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-23T04:11:36.000Z","updated_at":"2024-08-13T08:22:14.000Z","dependencies_parsed_at":"2022-08-28T17:33:11.495Z","dependency_job_id":null,"html_url":"https://github.com/bincyber/pitfall","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/bincyber/pitfall","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bincyber%2Fpitfall","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bincyber%2Fpitfall/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bincyber%2Fpitfall/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bincyber%2Fpitfall/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bincyber","download_url":"https://codeload.github.com/bincyber/pitfall/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bincyber%2Fpitfall/sbom","scorecard":{"id":238529,"data":{"date":"2025-08-11","repo":{"name":"github.com/bincyber/pitfall","commit":"680c33ae30a2ed1d2bbf742f74accc34b81b1f5b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/11 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 10 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"68 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2020-28 / GHSA-m6xf-fq7q-8743","Warn: Project is vulnerable to: PYSEC-2020-27 / GHSA-q65m-pv3f-wr5r","Warn: Project is vulnerable to: PYSEC-2020-340 / GHSA-vqhp-cxgc-6wmm","Warn: Project is vulnerable to: PYSEC-2021-865 / GHSA-vv2x-vrpj-qqpq","Warn: Project is vulnerable to: PYSEC-2022-42986 / GHSA-43fp-rhv2-5gv8","Warn: Project is vulnerable to: PYSEC-2023-135 / GHSA-xqr8-7jwr-rhp7","Warn: Project is vulnerable to: GHSA-3ww4-gg4f-jr7f","Warn: Project is vulnerable to: GHSA-5cpq-8wj7-hf2v","Warn: Project is vulnerable to: GHSA-9v9h-cgj8-h64p","Warn: Project is vulnerable to: PYSEC-2021-62 / GHSA-hggm-jpg3-v476","Warn: Project is vulnerable to: GHSA-jm77-qphf-c4w8","Warn: Project is vulnerable to: GHSA-v8gr-m533-ghj9","Warn: Project is vulnerable to: GHSA-w7pp-m8wf-vj6r","Warn: Project is vulnerable to: GHSA-x4qr-2fvf-3mr5","Warn: Project is vulnerable to: GHSA-wj6h-64fc-37mp","Warn: Project is vulnerable to: PYSEC-2022-42991 / GHSA-v3c5-jqr6-7qm8","Warn: Project is vulnerable to: PYSEC-2024-4 / GHSA-2mqj-m65w-jghx","Warn: Project is vulnerable to: PYSEC-2023-165 / GHSA-cwvm-v4w8-q58c","Warn: Project is vulnerable to: PYSEC-2022-42992 / GHSA-hcpj-qp55-gfph","Warn: Project is vulnerable to: PYSEC-2023-137 / GHSA-pr76-5cm5-w9cj","Warn: Project is vulnerable to: PYSEC-2023-161 / GHSA-wfm5-v35h-vwf4","Warn: Project is vulnerable to: GHSA-496j-2rq6-j6cc","Warn: Project is vulnerable to: GHSA-6628-q6j9-w8vg","Warn: Project is vulnerable to: GHSA-9hxf-ppjv-w6rq","Warn: Project is vulnerable to: GHSA-cfgp-2977-2fmm","Warn: Project is vulnerable to: PYSEC-2024-60 / GHSA-jjg7-2v4v-x38h","Warn: Project is vulnerable to: GHSA-29gw-9793-fvw7","Warn: Project is vulnerable to: PYSEC-2022-12 / GHSA-pq7m-3gw7-gq5x","Warn: Project is vulnerable to: GHSA-cpwx-vrp4-4pq7","Warn: Project is vulnerable to: PYSEC-2021-66 / GHSA-g3rq-g295-4j3m","Warn: Project is vulnerable to: GHSA-h5c8-rqwp-cp95","Warn: Project is vulnerable to: GHSA-h75v-3vvj-5mfj","Warn: Project is vulnerable to: GHSA-q2x7-8rv6-6q7h","Warn: Project is vulnerable to: PYSEC-2020-49 / GHSA-j66q-qmrc-89rx","Warn: Project is vulnerable to: PYSEC-2022-48 / GHSA-77rm-9x9h-xj3g","Warn: Project is vulnerable to: GHSA-8gq9-2x98-w8hf","Warn: Project is vulnerable to: GHSA-8qvm-5x2c-j2w7","Warn: Project is vulnerable to: PYSEC-2024-3 / GHSA-j225-cvw7-qrx7","Warn: Project is vulnerable to: PYSEC-2021-140 / GHSA-9w8r-397f-prfh","Warn: Project is vulnerable to: PYSEC-2023-117 / GHSA-mrwq-x4v8-fh7p","Warn: Project is vulnerable to: PYSEC-2021-141 / GHSA-pq64-v7f5-gqh8","Warn: Project is vulnerable to: PYSEC-2024-232 / GHSA-6c5p-j8vq-pqhj","Warn: Project is vulnerable to: PYSEC-2024-233 / GHSA-cjwg-qfpm-7377","Warn: Project is vulnerable to: PYSEC-2020-176 / GHSA-3pqx-4fqf-j49f","Warn: Project is vulnerable to: PYSEC-2020-96 / GHSA-6757-jp84-gxfx","Warn: Project is vulnerable to: PYSEC-2021-142 / GHSA-8q59-q68h-6hv4","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2023-74 / GHSA-j8r2-6x86-q33q","Warn: Project is vulnerable to: PYSEC-2020-99 / GHSA-537h-rv9q-vvph","Warn: Project is vulnerable to: PYSEC-2020-100 / GHSA-xrx6-fmxq-rjj2","Warn: Project is vulnerable to: GHSA-g7vv-2v7x-gj9p","Warn: Project is vulnerable to: GHSA-34jh-p97f-mpxf","Warn: Project is vulnerable to: PYSEC-2023-212 / GHSA-g4mx-q9vg-27p4","Warn: Project is vulnerable to: PYSEC-2020-149 / GHSA-hmv2-79q8-fv6g","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v","Warn: Project is vulnerable to: PYSEC-2021-108 / GHSA-q2q7-5pp4-w6pg","Warn: Project is vulnerable to: PYSEC-2023-192 / GHSA-v845-jxx5-vc9f","Warn: Project is vulnerable to: PYSEC-2020-148 / GHSA-wqvq-5m8c-6g24","Warn: Project is vulnerable to: GHSA-2g68-c3qc-8985","Warn: Project is vulnerable to: GHSA-f9vj-2wh5-fj8j","Warn: Project is vulnerable to: PYSEC-2023-221 / GHSA-hrfv-mqp8-q5rw","Warn: Project is vulnerable to: PYSEC-2023-57 / GHSA-px8h-6qxv-m22q","Warn: Project is vulnerable to: GHSA-q34m-jh98-gwm2","Warn: Project is vulnerable to: PYSEC-2023-58 / GHSA-xg9f-g7g7-2323","Warn: Project is vulnerable to: PYSEC-2022-203","Warn: Project is vulnerable to: PYSEC-2022-43017 / GHSA-qwmp-2cf2-g9g6","Warn: Project is vulnerable to: GHSA-jfmj-5v4g-7637"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T06:12:12.317Z","repository_id":57453100,"created_at":"2025-08-17T06:12:12.318Z","updated_at":"2025-08-17T06:12:12.318Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28416509,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["devops","infrastructure-as-code","pulumi","testing"],"created_at":"2026-01-14T10:02:38.737Z","updated_at":"2026-01-14T10:02:39.627Z","avatar_url":"https://github.com/bincyber.png","language":"Python","readme":"# Pulumi Integration Test Framework\n\n[![License](https://img.shields.io/badge/License-Apache-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0)\n[![Python](https://img.shields.io/badge/Python-3.7+-blue.svg)](#)\n[![Version](https://img.shields.io/badge/Pypi-v0.0.4-orange.svg)](#)\n[![Status](https://img.shields.io/badge/Status-abandoned-red.svg)](#)\n[![Coverage Status](https://coveralls.io/repos/github/bincyber/pitfall/badge.svg?branch=master)](https://coveralls.io/github/bincyber/pitfall?branch=master)\n[![CircleCI](https://circleci.com/gh/bincyber/pitfall.svg?style=svg)](https://circleci.com/gh/bincyber/pitfall)\n\n_pitfall_ is a Python integration testing framework for [Pulumi](https://github.com/pulumi/pulumi) Infrastructure as Code. It enables and encourages end to end testing to avoid errors, assumptions, and other pitfalls.\n\n**Note:** This project is no longer maintained. See: [#14](https://github.com/bincyber/pitfall/issues/14)\n\n## Installation\n\n_pitfall_ can be installed via pip:\n\n\t$ pip install pitfall\n\n## Compatibility\n\n_pitfall_ has been tested against versions 1.2.0 - 1.4.0 of Pulumi and will strive to work with the latest Pulumi release.\n\n**Warning**: this is alpha software. There are no guarantees of backwards compatibility.\n\n## Usage\n\n_pitfall_ is intended to be used in integration tests to verify the desired state of infrastructure provisioned by Pulumi.\n\nIt will do the following:\n\n* create a temp directory to store Pulumi code and state\n* copy the contents of the current directory (and all subdirectories) to the temp directory\n* move into the temp directory\n* create a new Pulumi project file: `Pulumi.yaml`\n* create a new Pulumi stack file: `Pulumi.\u003cstack name\u003e.yaml`\n* initialize a new Pulumi state file in `.pulumi/`\n* install Pulumi plugins\n* execute `pulumi preview`\n* execute `pulumi up`\n* execute `pulumi destroy`\n* delete the temp directory\n\n_pitfall_ supports a [context manager](https://docs.python.org/3/reference/datamodel.html#context-managers) to automatically do the above.\n\n_pitfall_ does not use the Pulumi Service backend.\n\n### Examples\n\n1. [Basic S3 Example](https://github.com/bincyber/pitfall/blob/master/examples/basic-s3/README.md) - provision a AWS S3 bucket and verify that required tags have been set on it\n2. [Advanced S3 Example](https://github.com/bincyber/pitfall/blob/master/examples/advanced-s3/README.md) - provision a AWS S3 bucket to host a static website and verify that it's functional\n3. [AWS VPC ComponentResource Example](https://github.com/bincyber/pitfall/blob/master/examples/aws-vpc/README.md) - provision a AWS VPC using a ComponentResource\n\n### Features\n\n#### Context Manager\n\n_pitfall_ includes a context manager to automatically setup a test and execute the Pulumi workflow:\n\n```python\nfrom pitfall import PulumiConfigurationKey, PulumiIntegrationTest\n\ndirectory = '/path/to/pulumi/code'\nopts      = PulumiIntegrationTestOptions(cleanup=True, preview=True, up=True, destroy=True)\n\nwith PulumiIntegrationTest(directory=directory, opts=opts) as t:\n    pass\n```\n\nThe context manager will create a temporary directory for the test, copy the entire contents of `directory` to the temporary directory, generate the Pulumi Project and Stack files, initialize a new Pulumi local state file, install Pulumi plugins, and execute `pulumi preview`, `pulumi up`, and `pulumi destroy`. Upon exit, the context manager will delete the temporary directory.\n\nTo control automatic execution of Pulumi commands, temporary directory deletion, and verbosity, set desired options with [PulumiIntegrationTestOptions](https://github.com/bincyber/pitfall/blob/master/pitfall/core.py#L36).\n\n#### Configuration and Secrets\n\n_pitfall_ supports Pulumi [Configuration and Secrets](https://www.pulumi.com/docs/intro/concepts/config/):\n\n```python\nfrom pitfall import PulumiConfigurationKey, PulumiIntegrationTest\nimport os\n\ndbpassword = os.urandom(32)\n\nconfig = [\n    PulumiConfigurationKey(name='aws:region', value=\"us-east-1\"),\n    PulumiConfigurationKey(name='dbpassword', value=dbpassword, encrypted=True)\n]\n\nt = PulumiIntegrationTest(config=config)\n\nt.setup()\n```\n\nWhen `t.setup()` is called, the Pulumi stack file (`Pulumi.\u003cstack name\u003e.yaml`) will automatically be created with the supplied configuration. Configuration keys are automatically namespaced with the name of the Pulumi Project and Secrets are encryped using the password set by the environment variable `PULUMI_CONFIG_PASSPHRASE`:\n\n```\n$ cat Pulumi.pitf-stack-91c13928d11648be.yaml\n\nconfig:\n  aws:region: us-east-1\n  pitf-project-99c24db7cc324cf9:dbpassword:\n    secure: v1:6UEXewJReYiPCgrg:fOFTB4ODFyZB0bvHA2lhoZJ3khCOQCkX8n5OhLXjgSECbu+WrcIQ+wl0HaZhZ/4v\nencryptionsalt: v1:GEHe83S30O0=:v1:s8vb7cVFSz64pUmv:Ff5AbbcbTSim8cBwDCQCwraGHEQQ/A==\n```\n\n#### Pulumi State\n\n_pitfall_ exposes the Pulumi state as a Python object [PulumiState](https://github.com/bincyber/pitfall/blob/master/pitfall/state.py#L39). Both the current and previous state are accessible as Class properties. The resources in the current state file can be viewed and searched:\n\n```python\nt = PulumiIntegrationTest()\n\nresources = t.state.resources\n\nfor i in resources:\n    print(i.urn, i.id, i.type)\n\nresources.providers  # {\"pulumi:providers:aws\": 1}\n\nresources.types  # {\"aws:s3/bucket:Bucket\": 1, \"pulumi:pulumi:Stack\": 1}\n\nresults = resources.lookup(key=\"type\", value=\"aws:s3/bucket:Bucket\")\n\ns3_bucket = results[0]\n\nprint(s3_bucket.id)  # pitfall-basic-example-649ce5f\n\nprint(s3_bucket.outputs[\"arn\"])  # arn:aws:s3:::pitfall-basic-example-649ce5f\n```\n\n#### Stack Outputs\n\n_pitfall_ collects Pulumi [Stack outputs](https://www.pulumi.com/docs/intro/concepts/programming-model/#stack-outputs), so that they can be accessed in tests:\n\n```python\nwith PulumiIntegrationTest(directory=directory, opts=opts) as t:\n    outputs = t.get_stack_outputs()\n\n    s3_bucket_arn = outputs[\"s3_bucket\"][\"arn\"]\n```\n\n#### Resources Graph\n\n_pitfall_ can export the resources in the Pulumi state file as a DOT file:\n\n```python\nwith PulumiIntegrationTest(directory=directory, opts=opts) as t:\n    resources = t.state.resources\n    resources.export_dotfile(filename='~/graph.dot')\n```\n\nView the DOT file:\n```\n$ cat ~/graph.dot\n\ndigraph tree {\n    \"pulumi:pulumi:Stack\";\n    \"aws:s3/bucket:Bucket (pitfall-basic-example-649ce5f)\";\n    \"pulumi:pulumi:Stack\" -\u003e \"aws:s3/bucket:Bucket (pitfall-basic-example-649ce5f)\";\n}\n```\n\nThis DOT file can then be viewed using the `dot` command or online at [webgraphviz.com](http://www.webgraphviz.com/).\n\n#### Test Helpers\n\n_pitfall_ includes useful helper classes and functions that can be used in integration tests. These can be found under [pitfall/helpers](https://github.com/bincyber/pitfall/tree/master/pitfall/helpers).\n\n\n### Environment Variables\n\nThe following environment variables are supported:\n\n| Environment Variable | Default Value | Description\n| -------- | -------- | --------\n| PULUMI_HOME | `~/.pulumi` | the location of Pulumi's home directory\n| PULUMI_CONFIG_PASSPHRASE | `pulumi` | the password for encrypting secrets\n\nIf they are set, they will be inherited by _pitfall_.\n\n\n## Documentation\n\nTODO\n\n## Testing\n\n[nose2](http://nose2.readthedocs.io/en/latest/) is used for unit and integration testing.\n\n`pulumi` must be installed for tests to pass.\n\n### Unit Tests\n\nUnit tests are located in `/tests`.\n\nTo run the unit tests:\n\n    $ make test\n\n### End to End Tests\n\nEnd to end tests are located in `e2e/`.\n\n1. testing using [localstack](https://github.com/localstack/localstack)\n\ne2e tests that use localstack are located in `e2e/localstack`. These tests require localstack running locally in a container.\n\nTo run localstack:\n\n    $ make run-localstack\n\nRun the e2e tests:\n\n    $ make e2e-test-localstack\n\n\n2. testing using [AWS](https://aws.amazon.com/)\n\ne2e tests that use AWS are located in `e2e/aws`. These tests require an AWS account and valid AWS API keys.\n\nRun the e2e tests:\n\n    $ make e2e-test-aws\n\n\n## Contributing\n\nWe encourage the following contributions at this time: user feedback, documentation, bug reports, and feature requests.\n\n## Acknowledgement\n\n_pitfall_ was built upon the Python libraries listed in its [Pipfile](https://github.com/bincyber/pitfall/blob/master/Pipfile).\n\n## License\n\nCopyright 2019 Ali (@bincyber)\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbincyber%2Fpitfall","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbincyber%2Fpitfall","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbincyber%2Fpitfall/lists"}