{"id":15650520,"url":"https://github.com/dgroup/docker-unittests","last_synced_at":"2025-04-10T22:36:48.375Z","repository":{"id":28412354,"uuid":"108772404","full_name":"dgroup/docker-unittests","owner":"dgroup","description":"Testing of base docker images during CI/CD process","archived":false,"fork":false,"pushed_at":"2025-02-15T09:14:05.000Z","size":2233,"stargazers_count":34,"open_issues_count":78,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-08T05:51:24.467Z","etag":null,"topics":["containers","continuous-deployment","continuous-integration","docker","docker-image-testing"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dgroup.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":"docs/contributing.md","funding":null,"license":"license.txt","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-10-29T21:20:55.000Z","updated_at":"2025-02-11T20:14:43.000Z","dependencies_parsed_at":"2024-10-03T12:35:49.586Z","dependency_job_id":"cbd88e42-ee2f-4cb5-8d06-bd2006d13a61","html_url":"https://github.com/dgroup/docker-unittests","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgroup%2Fdocker-unittests","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgroup%2Fdocker-unittests/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgroup%2Fdocker-unittests/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgroup%2Fdocker-unittests/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dgroup","download_url":"https://codeload.github.com/dgroup/docker-unittests/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245334923,"owners_count":20598390,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["containers","continuous-deployment","continuous-integration","docker","docker-image-testing"],"created_at":"2024-10-03T12:34:55.874Z","updated_at":"2025-03-28T00:32:46.127Z","avatar_url":"https://github.com/dgroup.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n  \n[![Maven](https://img.shields.io/maven-central/v/com.github.dgroup/docker-unittests.svg)](https://mvnrepository.com/artifact/com.github.dgroup/docker-unittests)\n[![Javadocs](http://www.javadoc.io/badge/com.github.dgroup/docker-unittests.svg)](http://www.javadoc.io/doc/com.github.dgroup/docker-unittests)\n[![License: MIT](https://img.shields.io/github/license/mashape/apistatus.svg)](./license.txt) \n[![Commit activity](https://img.shields.io/github/commit-activity/y/dgroup/docker-unittests.svg?style=flat-square)](https://github.com/dgroup/docker-unittests/graphs/commit-activity)\n[![Hits-of-Code](https://hitsofcode.com/github/dgroup/docker-unittests)](https://hitsofcode.com/view/github/dgroup/docker-unittests)\n\n[![Build Status](https://travis-ci.org/dgroup/docker-unittests.svg?branch=master\u0026style=for-the-badge)](https://travis-ci.org/dgroup/docker-unittests)\n[![0pdd](http://www.0pdd.com/svg?name=dgroup/docker-unittests)](http://www.0pdd.com/p?name=dgroup/docker-unittests)\n[![Dependency Status](https://requires.io/github/dgroup/docker-unittests/requirements.svg?branch=master)](https://requires.io/github/dgroup/docker-unittests/requirements/?branch=master)\n[![Known Vulnerabilities](https://snyk.io/test/github/dgroup/docker-unittests/badge.svg)](https://snyk.io/org/dgroup/project/58b731a9-6b07-4ccf-9044-ad305ad243e6/?tab=dependencies\u0026vulns=vulnerable)\n\n\u003c!--- [![Open issues](https://milestone.sloppy.zone/github/dgroup/docker-unittests/milestone/2)](https://github.com/dgroup/docker-unittests/milestone/2) --\u003e\n\u003ca href=\"https://www.yegor256.com/2017/10/24/award-2018.html\"\u003e\n  \u003cimg src=\"docs/winner-dgroup.png\" height=45px alt='Winner Badge'/\u003e\n\u003c/a\u003e\n\n[![DevOps By Rultor.com](http://www.rultor.com/b/dgroup/docker-unittests)](http://www.rultor.com/p/dgroup/docker-unittests)\n[![EO badge](http://www.elegantobjects.org/badge.svg)](http://www.elegantobjects.org/#principles)\n[![We recommend IntelliJ IDEA](http://www.elegantobjects.org/intellij-idea.svg)](https://www.jetbrains.com/idea/)\n\n\u003c!--- [![jpeek report](http://i.jpeek.org/com.github.dgroup/docker-unittests/badge.svg)](http://i.jpeek.org/com.github.dgroup/docker-unittests) --\u003e\n[![Qulice](https://img.shields.io/badge/qulice-passed-blue.svg)](http://www.qulice.com/)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=com.github.dgroup%3Adocker-unittests\u0026metric=sqale_rating)](https://sonarcloud.io/dashboard?id=com.github.dgroup%3Adocker-unittests)\n[![Codebeat](https://codebeat.co/badges/f61cb4a4-660f-4149-bbc6-8b66fec90941)](https://codebeat.co/projects/github-com-dgroup-docker-unittests-master)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/a44d11a620da4ff0a6ff294ff9045aa3)](https://www.codacy.com/app/dgroup/docker-unittests?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=dgroup/docker-unittests\u0026amp;utm_campaign=Badge_Grade)\n[![SQ coverage](https://sonarcloud.io/api/project_badges/measure?project=com.github.dgroup%3Adocker-unittests\u0026metric=coverage)](https://sonarcloud.io/dashboard/index/com.github.dgroup:docker-unittests)\n[![Codecov](https://codecov.io/gh/dgroup/docker-unittests/branch/master/graph/badge.svg?token=Pqdeao3teI)](https://codecov.io/gh/dgroup/docker-unittests)\n\nThe main concept is that all tests should use the image as is without any 'internal' go-related features.\nWe, like users, receive the image and we are going to check what we've got.\n\nThe project has been started in Java as POC, however, I'm thinking about porting to python which is more suitable lang for the Ansible-oriented stack. \nKindly ask you to raise the issue in case of any suggestions/bugs.\n\n#### General image test\n1. Download the latest shaded dist from https://github.com/dgroup/docker-unittests/releases:\n   ```bash\n   wget https://github.com/dgroup/docker-unittests/releases/download/s1.1.1/docker-unittests-app-1.1.1.jar\n\n   ``` \n\n2. Define an [*.yml file](./docs/image-tests.yml) with tests.\n   ```yml\n\n   version: 1.1\n\n   setup:\n    - apt-get update\n    - apt-get install -y tree\n\n   tests:\n\n    - assume: java version is 1.9, Debian build\n      cmd:    java -version\n      output:\n        contains:\n         - openjdk version \"9.0.1\"\n         - build 9.0.1+11-Debian\n\n    - assume: curl version is 7.xxx\n      cmd:    curl --version\n      output:\n        startsWith: curl 7.\n        matches:\n         - \"^curl\\\\s7.*\\\\n.*\\\\nProtocols.+ftps.+https.+telnet.*\\\\n.*\\\\n$\"\n        contains:\n         - AsynchDNS IDN IPv6 Largefile GSS-API\n\n    - assume:  Setup section installed `tree`\n      cmd:     tree --version\n      output:\n        contains: [\"Steve Baker\", \"Florian Sesser\"]\n      \n    ```\n2. Run tests for image \n   ```bash\n    java -jar docker-unittests.jar -f image-tests.yml -i openjdk:9.0.1-11\n   ``` \n    ![docker image tests results](./docs/image-tests-results.png)\n\n#### General image test with output to xml file\n1. Use -o xml option in order to receive the testing report in xml format\n   ```bash\n    java -jar docker-unittests.jar -f image-tests.yml -i openjdk:9.0.1-11 -o xml\n   ``` \n    ![xml result of docker image testing](./docs/test-result-in-xml.png) \n   \n#### Test image by shell script\n1. Define the `test.yml` with tests.\n   ```yaml\n    version: 1.1\n    \n    tests:\n    \n      -  assume: \"java version is 1.9, Debian build\"\n         cmd:    \"java -version\"\n         output:\n            contains:\n             - openjdk version \"9.0.1\"\n             - build 9.0.1+11-Debian\n    \n      # The test below will fail due to wrong version of curl.\n      -  assume: \"curl version is 8000\"\n         cmd:    \"curl --version\"\n         output:\n            startsWith: \"curl 8000\"\n            matches:\n              - \"^curl\\\\s7.*\\\\n.*\\\\nProtocols.+ftps.+https.+telnet.*\\\\n.*\\\\n$\"\n            contains:\n              - \"AsynchDNS IDN IPv6 Largefile GSS-API\"\n   ``` \n2. Define an `test.sh` with testing command\n   ```bash\n    #!/usr/bin/env bash\n    set -e\n    echo Testing has been started\n    java -jar docker-unittests.jar -f test.yml -i openjdk:9.0.1-11\n    echo This line will not be executed as testing will fail\n    ```\n3. Run the `test.sh`\n    ![docker image tests results](./docs/image-tests-results-failure.png)\n\n#### Output matching predicates\n\n| Predicate   | Multiple | YML tag format                                   |\n|-------------|:--------:|--------------------------------------------------|\n| startsWith  | No       | `startsWith: \"curl 8000\"`                        |\n| endsWith    | No       | `endsWith: \"VM (build 25.181-b13, mixed mode)\"`  |\n| equals      | No       | `equals: \"curl 7.54.0\"`                          |\n| contains    | Yes      | `contains: [\"7.54\", \"LibreSSL\", \"pop3 pop3s\"]`   |\n| matches     | Yes      | `matches: [\"^curl\\\\s7.*\\\\n.*\\\\nProtocols.+ftps.+https.+.*\\\\n$\"]` |\n#### F.A.Q.\n - [Contributing guide](./docs/contributing.md)\n - [Github](./docs/github.md)\n - [Docker](https://github.com/dgroup/docker-on-windows#docker-faq)                                       \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdgroup%2Fdocker-unittests","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdgroup%2Fdocker-unittests","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdgroup%2Fdocker-unittests/lists"}