{"id":15044931,"url":"https://github.com/arakelian/docker-junit-rule","last_synced_at":"2025-04-10T00:43:06.381Z","repository":{"id":45289860,"uuid":"85648578","full_name":"arakelian/docker-junit-rule","owner":"arakelian","description":"JUnit Rule for creating reusable Docker containers that live across JUnit test clases","archived":false,"fork":false,"pushed_at":"2024-03-14T17:20:50.000Z","size":364,"stargazers_count":6,"open_issues_count":5,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-10T00:43:01.009Z","etag":null,"topics":["apache","docker","java","java-11","java-8","junit","junit-rule","unit-testing"],"latest_commit_sha":null,"homepage":null,"language":"Java","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/arakelian.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-03-21T02:13:35.000Z","updated_at":"2023-03-07T12:43:08.000Z","dependencies_parsed_at":"2024-09-28T23:20:47.677Z","dependency_job_id":null,"html_url":"https://github.com/arakelian/docker-junit-rule","commit_stats":null,"previous_names":["garakelian/docker-junit"],"tags_count":39,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arakelian%2Fdocker-junit-rule","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arakelian%2Fdocker-junit-rule/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arakelian%2Fdocker-junit-rule/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arakelian%2Fdocker-junit-rule/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arakelian","download_url":"https://codeload.github.com/arakelian/docker-junit-rule/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248137998,"owners_count":21053775,"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":["apache","docker","java","java-11","java-8","junit","junit-rule","unit-testing"],"created_at":"2024-09-24T20:51:14.610Z","updated_at":"2025-04-10T00:43:06.363Z","avatar_url":"https://github.com/arakelian.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# docker-junit-rule\n\nA junit rule to run docker containers.\n\n## Features\n\n* `DockerRule` will automatically start and stop your Docker container.\n* `DockerRule` will share your container across multiple JUnit tests; it will not start and stop your container\n  for each test, allowing your test suites to run much faster.\n\n## Requirements\n\n* Compatible with Java 8+\n\n## Usage\n\nStarting a Docker container as part of your unit test is as simple as including a `ClassRule` that looks like this:\n\n```java\n@ClassRule\npublic static RabbitMqDockerRule rabbitmq = new RabbitMqDockerRule();\n```\n\nTo configure your own rule, you'll extend from `DockerRule`:\n\n```java\npublic class RabbitDockerRule extends DockerRule {\n    public RabbitDockerRule() {\n        super(ImmutableDockerConfig.builder() //\n                .name(\"docker-test\") //\n                .image(\"rabbitmq:management\") //\n                .ports(\"5672\") //\n                .addStartedListener(container -\u003e {\n                    container.waitForPort(\"5672/tcp\");\n                    container.waitForLog(\"Server startup complete\");\n                }).build());\n    }\n}\n```\n\nA couple of things to note:\n* Your custom `ClassRule` will extend from `DockerRule`\n* Your constructor will provide `DockerRule` with an immutable configuration that describes the Docker container\n  that needs to be created.\n* The configuration you provide includes a user-defined callback for determining when the container has started. A few helper methods are\n  provided to help you do this.\n\n\n## Customizing Docker Container\n\nDockerRule provides two callback for customizing the Docker container, `addHostConfigurer` and `addContainerConfigurer`.  In the\nexample below we'll use these callback to configure an Elasticsearch container.\n\n```java\npublic class ElasticDockerRule extends DockerRule {\n    public ElasticDockerRule() {\n        super(ImmutableDockerConfig.builder() //\n                .name(name) //\n                .image(image) //\n                .ports(\"9200\") //\n                .addHostConfigurer(HostConfigurers.noUlimits()) //\n                .addContainerConfigurer(builder -\u003e {\n                    builder.env(\n                            \"http.host=0.0.0.0\", //\n                            \"transport.host=127.0.0.1\", //\n                            \"xpack.security.enabled=false\", //\n                            \"xpack.monitoring.enabled=false\", //\n                            \"xpack.graph.enabled=false\", //\n                            \"xpack.watcher.enabled=false\", //\n                            \"ES_JAVA_OPTS=-Xms512m -Xmx512m\");\n                }) //\n                .build());\n    }\n}\n```\n\nNotice that we used `addHostConfigurer` to remove ulimits and `addContainerConfigurer` to set environment variables.\n\n\n## Installation\n\nThe library is available on [Maven Central](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.arakelian%22%20AND%20a%3A%22docker-junit-rule%22).\n\n### Maven\n\nAdd the following to your `pom.xml`:\n\n```xml\n\u003crepositories\u003e\n    \u003crepository\u003e\n        \u003cid\u003ecentral\u003c/id\u003e\n        \u003cname\u003eCentral Repository\u003c/name\u003e\n        \u003curl\u003ehttp://repo.maven.apache.org/maven2\u003c/url\u003e\n        \u003creleases\u003e\n            \u003cenabled\u003etrue\u003c/enabled\u003e\n        \u003c/releases\u003e\n    \u003c/repository\u003e\n\u003c/repositories\u003e\n\n...\n\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.arakelian\u003c/groupId\u003e\n    \u003cartifactId\u003edocker-junit-rule\u003c/artifactId\u003e\n    \u003cversion\u003e4.1.0\u003c/version\u003e\n    \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n```\n\n### Gradle\n\nAdd the following to your `build.gradle`:\n\n```groovy\nrepositories {\n  mavenCentral()\n}\n\ndependencies {\n  testCompile 'com.arakelian:docker-junit-rule:4.1.0'\n}\n```\n\n## Licence\n\nApache Version 2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farakelian%2Fdocker-junit-rule","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farakelian%2Fdocker-junit-rule","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farakelian%2Fdocker-junit-rule/lists"}