{"id":15874791,"url":"https://github.com/pgporada/pats","last_synced_at":"2026-05-03T06:35:21.527Z","repository":{"id":149290459,"uuid":"101801983","full_name":"pgporada/pats","owner":"pgporada","description":"Phil's Automated Test Suite","archived":false,"fork":false,"pushed_at":"2017-08-29T20:10:04.000Z","size":5,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-01T23:25:18.206Z","etag":null,"topics":["automation","bash","mtbf","testing"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pgporada.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-08-29T20:04:12.000Z","updated_at":"2019-10-22T03:13:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"56dceac9-6fdc-4181-90af-c158851fb400","html_url":"https://github.com/pgporada/pats","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pgporada/pats","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pgporada%2Fpats","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pgporada%2Fpats/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pgporada%2Fpats/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pgporada%2Fpats/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pgporada","download_url":"https://codeload.github.com/pgporada/pats/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pgporada%2Fpats/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32560738,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T03:21:47.309Z","status":"ssl_error","status_checked_at":"2026-05-03T03:21:43.884Z","response_time":103,"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":["automation","bash","mtbf","testing"],"created_at":"2024-10-06T01:41:31.303Z","updated_at":"2026-05-03T06:35:21.514Z","avatar_url":"https://github.com/pgporada.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Overview: Phil's Automated Test Suite aka PATS\nThis is my version of an automated test suite written entirely in bash shell script. I had a stipulation that we couldn't make any outbound network calls to pull down [BATS](https://github.com/sstephenson/bats) so I decided to write my own. We no longer use this, but I think it's a good reference to anyone who's ever thought about writing tests for their Ansible/Salt/Chef/Puppet code.\n\nThe philosophy is that you write some configuration management code or a shell script and you run a test or suite of tests against it so that you don't have to manually verify that commands are doing what you believe they should be doing. This helps you to iterate faster and reduce the mean time between failures which allows you to get working and hopefully proper functioning code released faster. You can choose to put all your trust in the system configuring your systems, but what happens when you need to upgrade that system? I personally would choose to use a 3rd party system in addition to my configuration management to verify that the upgrade was successfull and no state changes broke during the upgrade process. Testing also allows you to pass your code off to another engineer who may not be well versed with the application in question. They can read the tests, written in simple bash, to learn how to interact with the application which helps to promote learning.\n\n- - - -\n# How it works\n\nThe PATS engine is `pats_engine.bash`. Each `test_whatever.bash` script should `source pats_engine.bash`. From there, all your custom testing logic is written to `test_whatever.bash`. You can either run this against remote nodes or deploy it onto a node itself. It's really up to you!\n\nTo run a test script, simply issue\n\n    $ bash test_whatever.bash\n    ok - Whatever is active\n    ok - Whatever is running\n    not ok - Whatever is accessible on port 9090\n\nYou can also output in a somewhat TAPS style format\n\n    $ bash test_canned.bash -t\n    ..F..\n\nAssuming that I could show colors on Github, you can output in colors too!\n\n    $ bash test_canned -tc\n    ..F..   (but in colors!)\n\n- - - -\n# Music\n[Mischief Brew - Lowly Carpenter](https://www.youtube.com/watch?v=swW4mJuLzWw)\n\n- - - -\n# License and Author Information\nGPLv3\n[Phil Porada](https://philporada.com) - 2017\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpgporada%2Fpats","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpgporada%2Fpats","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpgporada%2Fpats/lists"}