Showing preview only (3,684K chars total). Download the full file or copy to clipboard to get everything.
Repository: testcontainers/testcontainers-java
Branch: main
Commit: 18e55b8dd8c5
Files: 1372
Total size: 3.2 MB
Directory structure:
gitextract_vplit3v1/
├── .circleci/
│ └── config.yml
├── .devcontainer/
│ └── devcontainer.json
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yaml
│ │ ├── config.yml
│ │ ├── enhancement.yaml
│ │ └── feature.yaml
│ ├── actions/
│ │ ├── setup-build/
│ │ │ └── action.yml
│ │ ├── setup-gradle/
│ │ │ └── action.yml
│ │ ├── setup-java/
│ │ │ └── action.yml
│ │ └── setup-junit-report/
│ │ └── action.yml
│ ├── bumper.yml
│ ├── dependabot.yml
│ ├── labeler.yml
│ ├── pull_request_template.md
│ ├── release-drafter.yml
│ ├── settings.yml
│ └── workflows/
│ ├── ci-docker-wormhole.yml
│ ├── ci-rootless.yml
│ ├── ci-windows-trigger.yml
│ ├── ci-windows.yml
│ ├── ci.yml
│ ├── combine-prs.yml
│ ├── labeler.yml
│ ├── moby-latest.yml
│ ├── release-drafter.yml
│ ├── release.yml
│ ├── scripts/
│ │ └── check_ci_status.sh
│ ├── update-docs-version.yml
│ ├── update-gradle-wrapper.yml
│ └── update-testcontainers-version.yml
├── .gitignore
├── .sdkmanrc
├── AUTHORS
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── RELEASING.md
├── annotations/
│ ├── com/
│ │ └── google/
│ │ └── common/
│ │ └── base/
│ │ └── annotations.xml
│ └── org/
│ └── rnorth/
│ └── ducttape/
│ └── annotations.xml
├── azure-pipelines.yml
├── bom/
│ └── build.gradle
├── build.gradle
├── buildSrc/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── groovy/
│ └── org/
│ └── testcontainers/
│ └── build/
│ ├── ComparePOMWithLatestReleasedTask.groovy
│ └── DelombokArgumentProvider.groovy
├── config/
│ └── checkstyle/
│ └── checkstyle.xml
├── core/
│ ├── build.gradle
│ ├── src/
│ │ ├── jarFileTest/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── AbstractJarFileTest.java
│ │ │ ├── JarFileShadingTest.java
│ │ │ └── PublicBinaryAPITest.java
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── DelegatingDockerClient.java
│ │ │ │ ├── DockerClientFactory.java
│ │ │ │ ├── Testcontainers.java
│ │ │ │ ├── UnstableAPI.java
│ │ │ │ ├── containers/
│ │ │ │ │ ├── BindMode.java
│ │ │ │ │ ├── ComposeCommand.java
│ │ │ │ │ ├── ComposeContainer.java
│ │ │ │ │ ├── ComposeDelegate.java
│ │ │ │ │ ├── ComposeServiceWaitStrategyTarget.java
│ │ │ │ │ ├── Container.java
│ │ │ │ │ ├── ContainerDef.java
│ │ │ │ │ ├── ContainerFetchException.java
│ │ │ │ │ ├── ContainerLaunchException.java
│ │ │ │ │ ├── ContainerState.java
│ │ │ │ │ ├── ContainerisedDockerCompose.java
│ │ │ │ │ ├── DockerCompose.java
│ │ │ │ │ ├── DockerComposeContainer.java
│ │ │ │ │ ├── DockerComposeFiles.java
│ │ │ │ │ ├── DockerMcpGatewayContainer.java
│ │ │ │ │ ├── DockerModelRunnerContainer.java
│ │ │ │ │ ├── ExecConfig.java
│ │ │ │ │ ├── ExecInContainerPattern.java
│ │ │ │ │ ├── FixedHostPortGenericContainer.java
│ │ │ │ │ ├── FutureContainer.java
│ │ │ │ │ ├── GenericContainer.java
│ │ │ │ │ ├── InternetProtocol.java
│ │ │ │ │ ├── LocalDockerCompose.java
│ │ │ │ │ ├── Network.java
│ │ │ │ │ ├── ParsedDockerComposeFile.java
│ │ │ │ │ ├── PortForwardingContainer.java
│ │ │ │ │ ├── SelinuxContext.java
│ │ │ │ │ ├── SocatContainer.java
│ │ │ │ │ ├── VncRecordingContainer.java
│ │ │ │ │ ├── output/
│ │ │ │ │ │ ├── BaseConsumer.java
│ │ │ │ │ │ ├── FrameConsumerResultCallback.java
│ │ │ │ │ │ ├── OutputFrame.java
│ │ │ │ │ │ ├── Slf4jLogConsumer.java
│ │ │ │ │ │ ├── ToStringConsumer.java
│ │ │ │ │ │ └── WaitingConsumer.java
│ │ │ │ │ ├── startupcheck/
│ │ │ │ │ │ ├── IndefiniteWaitOneShotStartupCheckStrategy.java
│ │ │ │ │ │ ├── IsRunningStartupCheckStrategy.java
│ │ │ │ │ │ ├── MinimumDurationRunningStartupCheckStrategy.java
│ │ │ │ │ │ ├── OneShotStartupCheckStrategy.java
│ │ │ │ │ │ └── StartupCheckStrategy.java
│ │ │ │ │ ├── traits/
│ │ │ │ │ │ └── LinkableContainer.java
│ │ │ │ │ └── wait/
│ │ │ │ │ ├── internal/
│ │ │ │ │ │ ├── ExternalPortListeningCheck.java
│ │ │ │ │ │ └── InternalCommandPortListeningCheck.java
│ │ │ │ │ └── strategy/
│ │ │ │ │ ├── AbstractWaitStrategy.java
│ │ │ │ │ ├── DockerHealthcheckWaitStrategy.java
│ │ │ │ │ ├── HostPortWaitStrategy.java
│ │ │ │ │ ├── HttpWaitStrategy.java
│ │ │ │ │ ├── LogMessageWaitStrategy.java
│ │ │ │ │ ├── ShellStrategy.java
│ │ │ │ │ ├── Wait.java
│ │ │ │ │ ├── WaitAllStrategy.java
│ │ │ │ │ ├── WaitStrategy.java
│ │ │ │ │ └── WaitStrategyTarget.java
│ │ │ │ ├── core/
│ │ │ │ │ └── CreateContainerCmdModifier.java
│ │ │ │ ├── dockerclient/
│ │ │ │ │ ├── AuditLoggingDockerClient.java
│ │ │ │ │ ├── AuthDelegatingDockerClientConfig.java
│ │ │ │ │ ├── DockerClientConfigUtils.java
│ │ │ │ │ ├── DockerClientProviderStrategy.java
│ │ │ │ │ ├── DockerDesktopClientProviderStrategy.java
│ │ │ │ │ ├── DockerMachineClientProviderStrategy.java
│ │ │ │ │ ├── EnvironmentAndSystemPropertyClientProviderStrategy.java
│ │ │ │ │ ├── HeadersAddingDockerHttpClient.java
│ │ │ │ │ ├── InvalidConfigurationException.java
│ │ │ │ │ ├── LogToStringContainerCallback.java
│ │ │ │ │ ├── NpipeSocketClientProviderStrategy.java
│ │ │ │ │ ├── RootlessDockerClientProviderStrategy.java
│ │ │ │ │ ├── TestcontainersHostPropertyClientProviderStrategy.java
│ │ │ │ │ ├── TransportConfig.java
│ │ │ │ │ └── UnixSocketClientProviderStrategy.java
│ │ │ │ ├── images/
│ │ │ │ │ ├── AbstractImagePullPolicy.java
│ │ │ │ │ ├── AgeBasedPullPolicy.java
│ │ │ │ │ ├── AlwaysPullPolicy.java
│ │ │ │ │ ├── DefaultPullPolicy.java
│ │ │ │ │ ├── ImageData.java
│ │ │ │ │ ├── ImagePullPolicy.java
│ │ │ │ │ ├── LocalImagesCache.java
│ │ │ │ │ ├── LoggedPullImageResultCallback.java
│ │ │ │ │ ├── ParsedDockerfile.java
│ │ │ │ │ ├── PullPolicy.java
│ │ │ │ │ ├── RemoteDockerImage.java
│ │ │ │ │ ├── TimeLimitedLoggedPullImageResultCallback.java
│ │ │ │ │ └── builder/
│ │ │ │ │ ├── ImageFromDockerfile.java
│ │ │ │ │ ├── Transferable.java
│ │ │ │ │ ├── dockerfile/
│ │ │ │ │ │ ├── DockerfileBuilder.java
│ │ │ │ │ │ ├── statement/
│ │ │ │ │ │ │ ├── KeyValuesStatement.java
│ │ │ │ │ │ │ ├── MultiArgsStatement.java
│ │ │ │ │ │ │ ├── RawStatement.java
│ │ │ │ │ │ │ ├── SingleArgumentStatement.java
│ │ │ │ │ │ │ └── Statement.java
│ │ │ │ │ │ └── traits/
│ │ │ │ │ │ ├── AddStatementTrait.java
│ │ │ │ │ │ ├── CmdStatementTrait.java
│ │ │ │ │ │ ├── CopyStatementTrait.java
│ │ │ │ │ │ ├── DockerfileBuilderTrait.java
│ │ │ │ │ │ ├── EntryPointStatementTrait.java
│ │ │ │ │ │ ├── EnvStatementTrait.java
│ │ │ │ │ │ ├── ExposeStatementTrait.java
│ │ │ │ │ │ ├── FromStatementTrait.java
│ │ │ │ │ │ ├── LabelStatementTrait.java
│ │ │ │ │ │ ├── RunStatementTrait.java
│ │ │ │ │ │ ├── UserStatementTrait.java
│ │ │ │ │ │ ├── VolumeStatementTrait.java
│ │ │ │ │ │ └── WorkdirStatementTrait.java
│ │ │ │ │ └── traits/
│ │ │ │ │ ├── BuildContextBuilderTrait.java
│ │ │ │ │ ├── ClasspathTrait.java
│ │ │ │ │ ├── DockerfileTrait.java
│ │ │ │ │ ├── FilesTrait.java
│ │ │ │ │ └── StringsTrait.java
│ │ │ │ ├── jib/
│ │ │ │ │ ├── JibDockerClient.java
│ │ │ │ │ ├── JibImage.java
│ │ │ │ │ └── JibImageDetails.java
│ │ │ │ ├── lifecycle/
│ │ │ │ │ ├── Startable.java
│ │ │ │ │ ├── Startables.java
│ │ │ │ │ ├── TestDescription.java
│ │ │ │ │ └── TestLifecycleAware.java
│ │ │ │ └── utility/
│ │ │ │ ├── AuditLogger.java
│ │ │ │ ├── AuthConfigUtil.java
│ │ │ │ ├── Base58.java
│ │ │ │ ├── ClasspathScanner.java
│ │ │ │ ├── CommandLine.java
│ │ │ │ ├── ComparableVersion.java
│ │ │ │ ├── ConfigurationFileImageNameSubstitutor.java
│ │ │ │ ├── DefaultImageNameSubstitutor.java
│ │ │ │ ├── DockerImageName.java
│ │ │ │ ├── DockerLoggerFactory.java
│ │ │ │ ├── DockerMachineClient.java
│ │ │ │ ├── DockerStatus.java
│ │ │ │ ├── DynamicPollInterval.java
│ │ │ │ ├── ImageNameSubstitutor.java
│ │ │ │ ├── JVMHookResourceReaper.java
│ │ │ │ ├── LazyFuture.java
│ │ │ │ ├── LicenseAcceptance.java
│ │ │ │ ├── LogUtils.java
│ │ │ │ ├── MountableFile.java
│ │ │ │ ├── PathUtils.java
│ │ │ │ ├── PrefixingImageNameSubstitutor.java
│ │ │ │ ├── RegistryAuthLocator.java
│ │ │ │ ├── ResourceReaper.java
│ │ │ │ ├── RyukContainer.java
│ │ │ │ ├── RyukResourceReaper.java
│ │ │ │ ├── TestEnvironment.java
│ │ │ │ ├── TestcontainersConfiguration.java
│ │ │ │ ├── ThrowingFunction.java
│ │ │ │ └── Versioning.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ ├── native-image/
│ │ │ │ └── org.testcontainers/
│ │ │ │ └── testcontainers/
│ │ │ │ └── native-image.properties
│ │ │ └── services/
│ │ │ └── org.testcontainers.dockerclient.DockerClientProviderStrategy
│ │ └── test/
│ │ ├── java/
│ │ │ ├── alt/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── README.md
│ │ │ │ └── images/
│ │ │ │ └── OutOfPackageImagePullPolicyTest.java
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── DaemonTest.java
│ │ │ ├── DockerClientFactoryTest.java
│ │ │ ├── DockerRegistryContainer.java
│ │ │ ├── TestImages.java
│ │ │ ├── containers/
│ │ │ │ ├── ComposeContainerTest.java
│ │ │ │ ├── ComposeContainerWithServicesTest.java
│ │ │ │ ├── ComposeOverridesTest.java
│ │ │ │ ├── ComposeProfilesOptionTest.java
│ │ │ │ ├── ContainerStateTest.java
│ │ │ │ ├── DockerComposeContainerCustomImageTest.java
│ │ │ │ ├── DockerComposeContainerWithServicesTest.java
│ │ │ │ ├── DockerComposeFilesTest.java
│ │ │ │ ├── DockerComposeOverridesTest.java
│ │ │ │ ├── DockerComposeProfilesOptionTest.java
│ │ │ │ ├── DockerMcpGatewayContainerTest.java
│ │ │ │ ├── DockerModelRunnerContainerTest.java
│ │ │ │ ├── ExposedHostTest.java
│ │ │ │ ├── GenericContainerTest.java
│ │ │ │ ├── JibTest.java
│ │ │ │ ├── MultiStageBuildTest.java
│ │ │ │ ├── NetworkTest.java
│ │ │ │ ├── ParsedDockerComposeFileBean.java
│ │ │ │ ├── ParsedDockerComposeFileValidationTest.java
│ │ │ │ ├── ReusabilityUnitTests.java
│ │ │ │ ├── output/
│ │ │ │ │ ├── ContainerLogsTest.java
│ │ │ │ │ ├── FrameConsumerResultCallbackTest.java
│ │ │ │ │ └── ToStringConsumerTest.java
│ │ │ │ ├── startupcheck/
│ │ │ │ │ └── IsRunningStartupCheckStrategyTest.java
│ │ │ │ └── wait/
│ │ │ │ ├── internal/
│ │ │ │ │ ├── ExternalPortListeningCheckTest.java
│ │ │ │ │ └── InternalCommandPortListeningCheckTest.java
│ │ │ │ └── strategy/
│ │ │ │ ├── DockerHealthcheckWaitStrategyTest.java
│ │ │ │ └── WaitAllStrategyTest.java
│ │ │ ├── custom/
│ │ │ │ └── TestCreateContainerCmdModifier.java
│ │ │ ├── dockerclient/
│ │ │ │ ├── AmbiguousImagePullTest.java
│ │ │ │ ├── DockerClientConfigUtilsTest.java
│ │ │ │ ├── EnvironmentAndSystemPropertyClientProviderStrategyTest.java
│ │ │ │ ├── EventStreamTest.java
│ │ │ │ ├── ImagePullTest.java
│ │ │ │ └── TestcontainersHostPropertyClientProviderStrategyTest.java
│ │ │ ├── images/
│ │ │ │ ├── AgeBasedPullPolicyTest.java
│ │ │ │ ├── ImageDataTest.java
│ │ │ │ ├── ImagePullPolicyTest.java
│ │ │ │ ├── LocalImagesCacheAccessor.java
│ │ │ │ ├── OverrideImagePullPolicyTest.java
│ │ │ │ ├── ParsedDockerfileTest.java
│ │ │ │ ├── RemoteDockerImageTest.java
│ │ │ │ └── builder/
│ │ │ │ ├── DockerfileBuildTest.java
│ │ │ │ ├── DockerignoreTest.java
│ │ │ │ ├── ImageFromDockerfileTest.java
│ │ │ │ └── dockerfile/
│ │ │ │ └── statement/
│ │ │ │ ├── AbstractStatementTest.java
│ │ │ │ ├── KeyValuesStatementTest.java
│ │ │ │ ├── MultiArgsStatementTest.java
│ │ │ │ ├── RawStatementTest.java
│ │ │ │ └── SingleArgumentStatementTest.java
│ │ │ ├── junit/
│ │ │ │ ├── BaseComposeTest.java
│ │ │ │ ├── BaseDockerComposeTest.java
│ │ │ │ ├── ComposeContainerOverrideTest.java
│ │ │ │ ├── ComposeContainerPortViaEnvTest.java
│ │ │ │ ├── ComposeContainerScalingTest.java
│ │ │ │ ├── ComposeContainerTest.java
│ │ │ │ ├── ComposeContainerVolumeRemovalTest.java
│ │ │ │ ├── ComposeContainerWithBuildTest.java
│ │ │ │ ├── ComposeContainerWithCopyFilesTest.java
│ │ │ │ ├── ComposeContainerWithOptionsTest.java
│ │ │ │ ├── ComposeContainerWithWaitStrategiesTest.java
│ │ │ │ ├── ComposeErrorHandlingTest.java
│ │ │ │ ├── ComposePassthroughTest.java
│ │ │ │ ├── ComposeWaitStrategyTest.java
│ │ │ │ ├── ComposeWithIdentifierTest.java
│ │ │ │ ├── ComposeWithNetworkTest.java
│ │ │ │ ├── CopyFileToContainerTest.java
│ │ │ │ ├── DependenciesTest.java
│ │ │ │ ├── DockerComposeContainerPortViaEnvTest.java
│ │ │ │ ├── DockerComposeContainerScalingTest.java
│ │ │ │ ├── DockerComposeContainerTest.java
│ │ │ │ ├── DockerComposeContainerVolumeRemovalTest.java
│ │ │ │ ├── DockerComposeContainerWithBuildTest.java
│ │ │ │ ├── DockerComposeContainerWithCopyFilesTest.java
│ │ │ │ ├── DockerComposeContainerWithOptionsTest.java
│ │ │ │ ├── DockerComposeErrorHandlingTest.java
│ │ │ │ ├── DockerComposeLocalImageTest.java
│ │ │ │ ├── DockerComposeLogConsumerTest.java
│ │ │ │ ├── DockerComposePassthroughTest.java
│ │ │ │ ├── DockerComposeServiceTest.java
│ │ │ │ ├── DockerComposeV2FormatTest.java
│ │ │ │ ├── DockerComposeV2FormatWithIdentifierTest.java
│ │ │ │ ├── DockerComposeV2WithNetworkTest.java
│ │ │ │ ├── DockerComposeWaitStrategyTest.java
│ │ │ │ ├── DockerNetworkModeTest.java
│ │ │ │ ├── DockerfileContainerTest.java
│ │ │ │ ├── DockerfileTest.java
│ │ │ │ ├── ExecInContainerTest.java
│ │ │ │ ├── FileOperationsTest.java
│ │ │ │ ├── FixedHostPortContainerTest.java
│ │ │ │ ├── GenericContainerRuleTest.java
│ │ │ │ ├── NonExistentImagePullTest.java
│ │ │ │ ├── OutputStreamTest.java
│ │ │ │ ├── OutputStreamWithTTYTest.java
│ │ │ │ ├── ParameterizedDockerfileContainerTest.java
│ │ │ │ ├── WorkingDirectoryTest.java
│ │ │ │ └── wait/
│ │ │ │ └── strategy/
│ │ │ │ ├── AbstractWaitStrategyTest.java
│ │ │ │ ├── HostPortWaitStrategyTest.java
│ │ │ │ ├── HttpWaitStrategyTest.java
│ │ │ │ ├── LogMessageWaitStrategyTest.java
│ │ │ │ └── ShellStrategyTest.java
│ │ │ └── utility/
│ │ │ ├── AuthenticatedImagePullTest.java
│ │ │ ├── ClasspathScannerTest.java
│ │ │ ├── ComparableVersionTest.java
│ │ │ ├── DefaultImageNameSubstitutorTest.java
│ │ │ ├── DirectoryTarResourceTest.java
│ │ │ ├── DockerImageNameCompatibilityTest.java
│ │ │ ├── DockerImageNameTest.java
│ │ │ ├── DockerLoggerFactoryTest.java
│ │ │ ├── DockerStatusTest.java
│ │ │ ├── FakeImagePullPolicy.java
│ │ │ ├── FakeImageSubstitutor.java
│ │ │ ├── FilterRegistryTest.java
│ │ │ ├── ImageNameSubstitutorTest.java
│ │ │ ├── LazyFutureTest.java
│ │ │ ├── LicenseAcceptanceTest.java
│ │ │ ├── MockTestcontainersConfigurationExtension.java
│ │ │ ├── MountableFileTest.java
│ │ │ ├── PrefixingImageNameSubstitutorTest.java
│ │ │ ├── RegistryAuthLocatorTest.java
│ │ │ ├── ResourceReaperTest.java
│ │ │ ├── TestEnvironmentTest.java
│ │ │ └── TestcontainersConfigurationTest.java
│ │ └── resources/
│ │ ├── Dockerfile
│ │ ├── Dockerfile-multistage
│ │ ├── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.core.CreateContainerCmdModifier
│ │ ├── auth-config/
│ │ │ ├── config-basic-auth.json
│ │ │ ├── config-empty-auth-with-helper.json
│ │ │ ├── config-empty.json
│ │ │ ├── config-existing-auth-with-helper.json
│ │ │ ├── config-with-helper-and-store.json
│ │ │ ├── config-with-helper-no-server-url-using-token.json
│ │ │ ├── config-with-helper-no-server-url.json
│ │ │ ├── config-with-helper-using-token.json
│ │ │ ├── config-with-helper.json
│ │ │ ├── config-with-json-key.json
│ │ │ ├── config-with-store-empty.json
│ │ │ ├── config-with-store.json
│ │ │ ├── docker-credential-fake
│ │ │ └── win/
│ │ │ └── docker-credential-fake.bat
│ │ ├── compose-build-test/
│ │ │ ├── Dockerfile
│ │ │ └── docker-compose.yml
│ │ ├── compose-dockerfile/
│ │ │ ├── Dockerfile
│ │ │ └── passthrough.sh
│ │ ├── compose-file-copy-inclusions/
│ │ │ ├── Dockerfile
│ │ │ ├── EnvVariableRestEndpoint.java
│ │ │ ├── compose-root-only.yml
│ │ │ ├── compose-test-only.yml
│ │ │ └── compose.yml
│ │ ├── compose-options-test/
│ │ │ └── with-deploy-block.yml
│ │ ├── compose-override/
│ │ │ ├── compose-override.yml
│ │ │ └── compose.yml
│ │ ├── compose-profile-option/
│ │ │ └── compose-test.yml
│ │ ├── compose-scaling-multiple-containers.yml
│ │ ├── compose-test.yml
│ │ ├── compose-v2-build-test/
│ │ │ ├── Dockerfile
│ │ │ └── docker-compose.yml
│ │ ├── compose-with-inline-scale-test.yml
│ │ ├── composev2/
│ │ │ ├── compose-test.yml
│ │ │ └── scaled-compose-test.yml
│ │ ├── container-license-acceptance.txt
│ │ ├── docker-compose-base.yml
│ │ ├── docker-compose-container-name-v1.yml
│ │ ├── docker-compose-deserialization.yml
│ │ ├── docker-compose-healthcheck.yml
│ │ ├── docker-compose-imagename-overriding-a.yml
│ │ ├── docker-compose-imagename-overriding-b.yml
│ │ ├── docker-compose-imagename-parsing-dockerfile-with-context.yml
│ │ ├── docker-compose-imagename-parsing-dockerfile.yml
│ │ ├── docker-compose-imagename-parsing-v1.yml
│ │ ├── docker-compose-imagename-parsing-v2-no-version.yml
│ │ ├── docker-compose-imagename-parsing-v2.yml
│ │ ├── docker-compose-non-default-override.yml
│ │ ├── dockerfile-build-invalid/
│ │ │ ├── .dockerignore
│ │ │ └── Dockerfile
│ │ ├── dockerfile-build-test/
│ │ │ ├── .dockerignore
│ │ │ ├── Dockerfile
│ │ │ ├── Dockerfile-alt
│ │ │ ├── Dockerfile-buildarg
│ │ │ ├── Dockerfile-currentdir
│ │ │ ├── Dockerfile-from-buildarg
│ │ │ ├── localfile.txt
│ │ │ ├── should_be_ignored.txt
│ │ │ └── should_not_be_ignored.txt
│ │ ├── expectedClasspathFile.txt
│ │ ├── fixtures/
│ │ │ └── statements/
│ │ │ ├── KeyValuesStatementTest/
│ │ │ │ ├── keyWithNewLinesTest
│ │ │ │ ├── keyWithSpacesTest
│ │ │ │ ├── keyWithTabsTest
│ │ │ │ ├── multilineTest
│ │ │ │ └── valueIsEscapedTest
│ │ │ ├── MultiArgsStatementTest/
│ │ │ │ ├── multilineTest
│ │ │ │ └── simpleTest
│ │ │ ├── RawStatementTest/
│ │ │ │ └── simpleTest
│ │ │ └── SingleArgumentStatementTest/
│ │ │ ├── multilineTest
│ │ │ └── simpleTest
│ │ ├── health-wait-strategy-dockerfile/
│ │ │ ├── Dockerfile
│ │ │ └── write_file_and_loop.sh
│ │ ├── https-wait-strategy-dockerfile/
│ │ │ ├── Dockerfile
│ │ │ └── nginx-ssl.conf
│ │ ├── internal-port-check-dockerfile/
│ │ │ ├── Dockerfile-bash
│ │ │ ├── Dockerfile-nc
│ │ │ ├── Dockerfile-tcp
│ │ │ └── nginx.conf
│ │ ├── invalid-compose.yml
│ │ ├── local-compose-test.yml
│ │ ├── logback-test.xml
│ │ ├── mappable-dockerfile/
│ │ │ └── Dockerfile
│ │ ├── mappable-resource/
│ │ │ └── test-resource.txt
│ │ ├── redis.conf
│ │ ├── scaled-compose-test.yml
│ │ ├── test-recursive-file.txt
│ │ ├── test_copy_to_container.txt
│ │ ├── v2-compose-test-passthrough.yml
│ │ ├── v2-compose-test-port-via-env.yml
│ │ ├── v2-compose-test-with-network.yml
│ │ └── v2-compose-test.yml
│ └── testlib/
│ ├── META-INF/
│ │ └── dummy_unique_name.txt
│ ├── README.md
│ ├── create_fakejar.sh
│ ├── recursive/
│ │ └── dir/
│ │ └── content.txt
│ └── repo/
│ └── fakejar/
│ └── fakejar/
│ ├── 0/
│ │ ├── fakejar-0.jar
│ │ └── fakejar-0.pom
│ └── maven-metadata-local.xml
├── docker-compose.yml
├── docs/
│ ├── _headers
│ ├── _redirects
│ ├── bounty.md
│ ├── contributing.md
│ ├── contributing_docs.md
│ ├── css/
│ │ ├── extra.css
│ │ └── tc-header.css
│ ├── error_missing_container_runtime_environment.md
│ ├── examples/
│ │ ├── junit4/
│ │ │ ├── generic/
│ │ │ │ ├── build.gradle
│ │ │ │ └── src/
│ │ │ │ └── test/
│ │ │ │ ├── java/
│ │ │ │ │ ├── generic/
│ │ │ │ │ │ ├── CmdModifierTest.java
│ │ │ │ │ │ ├── CommandsTest.java
│ │ │ │ │ │ ├── ContainerCreationTest.java
│ │ │ │ │ │ ├── ContainerLabelTest.java
│ │ │ │ │ │ ├── DependsOnTest.java
│ │ │ │ │ │ ├── ExampleImageNameSubstitutor.java
│ │ │ │ │ │ ├── ExecTest.java
│ │ │ │ │ │ ├── HostPortExposedTest.java
│ │ │ │ │ │ ├── ImageNameSubstitutionTest.java
│ │ │ │ │ │ ├── MultiplePortsExposedTest.java
│ │ │ │ │ │ ├── WaitStrategiesTest.java
│ │ │ │ │ │ └── support/
│ │ │ │ │ │ └── TestSpecificImageNameSubstitutor.java
│ │ │ │ │ └── org/
│ │ │ │ │ └── testcontainers/
│ │ │ │ │ └── containers/
│ │ │ │ │ └── startupcheck/
│ │ │ │ │ └── StartupCheckStrategyTest.java
│ │ │ │ └── resources/
│ │ │ │ ├── logback-test.xml
│ │ │ │ └── testcontainers.properties
│ │ │ └── redis/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ └── java/
│ │ │ │ └── quickstart/
│ │ │ │ └── RedisBackedCache.java
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── quickstart/
│ │ │ │ ├── RedisBackedCacheIntTest.java
│ │ │ │ └── RedisBackedCacheIntTestStep0.java
│ │ │ └── resources/
│ │ │ └── logback-test.xml
│ │ ├── junit5/
│ │ │ └── redis/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ └── java/
│ │ │ │ └── quickstart/
│ │ │ │ └── RedisBackedCache.java
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── quickstart/
│ │ │ │ ├── RedisBackedCacheIntTest.java
│ │ │ │ └── RedisBackedCacheIntTestStep0.java
│ │ │ └── resources/
│ │ │ └── logback-test.xml
│ │ └── spock/
│ │ └── redis/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── quickstart/
│ │ │ └── RedisBackedCache.java
│ │ └── test/
│ │ ├── groovy/
│ │ │ └── quickstart/
│ │ │ ├── RedisBackedCacheIntTest.groovy
│ │ │ └── RedisBackedCacheIntTestStep0.groovy
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── examples.md
│ ├── features/
│ │ ├── advanced_options.md
│ │ ├── commands.md
│ │ ├── configuration.md
│ │ ├── container_logs.md
│ │ ├── creating_container.md
│ │ ├── creating_images.md
│ │ ├── files.md
│ │ ├── image_name_substitution.md
│ │ ├── jib.md
│ │ ├── networking.md
│ │ ├── reuse.md
│ │ └── startup_and_waits.md
│ ├── getting_help.md
│ ├── index.md
│ ├── jitpack_dependencies.md
│ ├── js/
│ │ └── tc-header.js
│ ├── modules/
│ │ ├── activemq.md
│ │ ├── azure.md
│ │ ├── chromadb.md
│ │ ├── consul.md
│ │ ├── databases/
│ │ │ ├── cassandra.md
│ │ │ ├── clickhouse.md
│ │ │ ├── cockroachdb.md
│ │ │ ├── couchbase.md
│ │ │ ├── cratedb.md
│ │ │ ├── databend.md
│ │ │ ├── db2.md
│ │ │ ├── index.md
│ │ │ ├── influxdb.md
│ │ │ ├── jdbc.md
│ │ │ ├── mariadb.md
│ │ │ ├── mongodb.md
│ │ │ ├── mssqlserver.md
│ │ │ ├── mysql.md
│ │ │ ├── neo4j.md
│ │ │ ├── oceanbase.md
│ │ │ ├── oraclefree.md
│ │ │ ├── oraclexe.md
│ │ │ ├── orientdb.md
│ │ │ ├── postgres.md
│ │ │ ├── presto.md
│ │ │ ├── questdb.md
│ │ │ ├── r2dbc.md
│ │ │ ├── scylladb.md
│ │ │ ├── tidb.md
│ │ │ ├── timeplus.md
│ │ │ ├── trino.md
│ │ │ └── yugabytedb.md
│ │ ├── docker_compose.md
│ │ ├── docker_mcp_gateway.md
│ │ ├── docker_model_runner.md
│ │ ├── elasticsearch.md
│ │ ├── gcloud.md
│ │ ├── grafana.md
│ │ ├── hivemq.md
│ │ ├── k3s.md
│ │ ├── k6.md
│ │ ├── kafka.md
│ │ ├── ldap.md
│ │ ├── localstack.md
│ │ ├── milvus.md
│ │ ├── minio.md
│ │ ├── mockserver.md
│ │ ├── nginx.md
│ │ ├── ollama.md
│ │ ├── openfga.md
│ │ ├── pinecone.md
│ │ ├── pulsar.md
│ │ ├── qdrant.md
│ │ ├── rabbitmq.md
│ │ ├── redpanda.md
│ │ ├── solace.md
│ │ ├── solr.md
│ │ ├── toxiproxy.md
│ │ ├── typesense.md
│ │ ├── vault.md
│ │ ├── weaviate.md
│ │ └── webdriver_containers.md
│ ├── quickstart/
│ │ ├── junit_4_quickstart.md
│ │ ├── junit_5_quickstart.md
│ │ └── spock_quickstart.md
│ ├── supported_docker_environment/
│ │ ├── continuous_integration/
│ │ │ ├── aws_codebuild.md
│ │ │ ├── bitbucket_pipelines.md
│ │ │ ├── circle_ci.md
│ │ │ ├── concourse_ci.md
│ │ │ ├── dind_patterns.md
│ │ │ ├── drone.md
│ │ │ ├── gitlab_ci.md
│ │ │ ├── tekton.md
│ │ │ └── travis.md
│ │ ├── image_registry_rate_limiting.md
│ │ ├── index.md
│ │ ├── logging_config.md
│ │ └── windows.md
│ ├── test_framework_integration/
│ │ ├── external.md
│ │ ├── junit_4.md
│ │ ├── junit_5.md
│ │ ├── manual_lifecycle_control.md
│ │ └── spock.md
│ └── theme/
│ ├── main.html
│ └── partials/
│ ├── header.html
│ ├── nav.html
│ └── tc-header.html
├── examples/
│ ├── README.md
│ ├── build.gradle
│ ├── cucumber/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── examples/
│ │ │ ├── CucumberTest.java
│ │ │ └── Stepdefs.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── org/
│ │ └── testcontainers/
│ │ └── examples/
│ │ └── is_search_possible.feature
│ ├── gradle/
│ │ └── wrapper/
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── hazelcast/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── examples/
│ │ │ └── HazelcastTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── immudb/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── ImmuDbTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── kafka-cluster/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── kafkacluster/
│ │ │ ├── ApacheKafkaContainerCluster.java
│ │ │ ├── ApacheKafkaContainerClusterTest.java
│ │ │ ├── ConfluentKafkaContainerCluster.java
│ │ │ ├── ConfluentKafkaContainerClusterTest.java
│ │ │ ├── KafkaContainerCluster.java
│ │ │ ├── KafkaContainerClusterTest.java
│ │ │ └── KafkaContainerKraftCluster.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── nats/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── NatsContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── neo4j-container/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── containers/
│ │ │ └── Neo4jExampleTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── ollama-hugging-face/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── ollamahf/
│ │ │ ├── OllamaHuggingFaceContainer.java
│ │ │ └── OllamaHuggingFaceTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── redis-backed-cache/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── mycompany/
│ │ │ └── cache/
│ │ │ ├── Cache.java
│ │ │ └── RedisBackedCache.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── RedisBackedCacheTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── redis-backed-cache-testng/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── mycompany/
│ │ │ └── cache/
│ │ │ ├── Cache.java
│ │ │ └── RedisBackedCache.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── RedisBackedCacheTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── selenium-container/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ └── DemoApplication.java
│ │ │ └── resources/
│ │ │ └── static/
│ │ │ └── foo.html
│ │ └── test/
│ │ ├── java/
│ │ │ └── SeleniumContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── settings.gradle
│ ├── sftp/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── example/
│ │ │ └── SftpContainerTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ ├── ssh_host_rsa_key
│ │ ├── ssh_host_rsa_key.pub
│ │ └── testcontainers/
│ │ └── file.txt
│ ├── singleton-container/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── cache/
│ │ │ ├── Cache.java
│ │ │ └── RedisBackedCache.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ ├── AbstractIntegrationTest.java
│ │ │ ├── BarConcreteTestClass.java
│ │ │ └── FooConcreteTestClass.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── solr-container/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ ├── SearchEngine.java
│ │ │ ├── SearchResult.java
│ │ │ └── SolrSearchEngine.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── SolrQueryTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── spring-boot/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ ├── DemoApplication.java
│ │ │ │ ├── DemoController.java
│ │ │ │ ├── DemoEntity.java
│ │ │ │ ├── DemoRepository.java
│ │ │ │ └── DemoService.java
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ ├── AbstractIntegrationTest.java
│ │ │ └── DemoControllerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── spring-boot-kotlin-redis/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── main/
│ │ │ └── kotlin/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── redis/
│ │ │ ├── ExampleController.kt
│ │ │ └── RedisApplication.kt
│ │ └── test/
│ │ ├── kotlin/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── redis/
│ │ │ ├── AbstractIntegrationTest.kt
│ │ │ ├── RedisApplicationTests.kt
│ │ │ └── RedisTest.kt
│ │ └── resources/
│ │ └── logback-test.xml
│ └── zookeeper/
│ ├── build.gradle
│ └── src/
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── ZookeeperContainerTest.java
│ └── resources/
│ └── logback-test.xml
├── gradle/
│ ├── ci-support.gradle
│ ├── japicmp.gradle
│ ├── publishing.gradle
│ ├── shading.gradle
│ ├── spotless.gradle
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── mkdocs.yml
├── modules/
│ ├── activemq/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── activemq/
│ │ │ ├── ActiveMQContainer.java
│ │ │ └── ArtemisContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── activemq/
│ │ │ ├── ActiveMQContainerTest.java
│ │ │ └── ArtemisContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── azure/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── azure/
│ │ │ │ ├── AzuriteContainer.java
│ │ │ │ ├── EventHubsEmulatorContainer.java
│ │ │ │ └── ServiceBusEmulatorContainer.java
│ │ │ └── containers/
│ │ │ ├── CosmosDBEmulatorContainer.java
│ │ │ └── KeyStoreBuilder.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── azure/
│ │ │ │ ├── AzuriteContainerTest.java
│ │ │ │ ├── EventHubsEmulatorContainerTest.java
│ │ │ │ └── ServiceBusEmulatorContainerTest.java
│ │ │ └── containers/
│ │ │ └── CosmosDBEmulatorContainerTest.java
│ │ └── resources/
│ │ ├── certificate.pem
│ │ ├── eventhubs_config.json
│ │ ├── key.pem
│ │ ├── keystore.pfx
│ │ ├── logback-test.xml
│ │ └── service-bus-config.json
│ ├── build.gradle
│ ├── cassandra/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── cassandra/
│ │ │ │ │ ├── CassandraContainer.java
│ │ │ │ │ ├── CassandraDatabaseDelegate.java
│ │ │ │ │ └── CassandraQueryWaitStrategy.java
│ │ │ │ └── containers/
│ │ │ │ ├── CassandraContainer.java
│ │ │ │ ├── delegate/
│ │ │ │ │ └── CassandraDatabaseDelegate.java
│ │ │ │ └── wait/
│ │ │ │ └── CassandraQueryWaitStrategy.java
│ │ │ └── resources/
│ │ │ └── cqlshrc
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── cassandra/
│ │ │ │ ├── CassandraContainerTest.java
│ │ │ │ └── CompatibleCassandraImageTest.java
│ │ │ └── containers/
│ │ │ ├── CassandraContainerTest.java
│ │ │ └── CompatibleCassandraImageTest.java
│ │ └── resources/
│ │ ├── cassandra-auth-required-configuration/
│ │ │ └── cassandra.yaml
│ │ ├── cassandra-ssl-configuration/
│ │ │ ├── cassandra.cer
│ │ │ ├── cassandra.yaml
│ │ │ ├── keystore.p12
│ │ │ └── truststore.p12
│ │ ├── cassandra-test-configuration-example/
│ │ │ └── cassandra.yaml
│ │ ├── client-ssl/
│ │ │ ├── cassandra.cer.pem
│ │ │ └── cassandra.key.pem
│ │ ├── initial-with-error.cql
│ │ ├── initial.cql
│ │ └── logback-test.xml
│ ├── chromadb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── chromadb/
│ │ │ └── ChromaDBContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── chromadb/
│ │ │ └── ChromaDBContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── clickhouse/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── clickhouse/
│ │ │ │ │ ├── ClickHouseContainer.java
│ │ │ │ │ ├── ClickHouseR2DBCDatabaseContainer.java
│ │ │ │ │ └── ClickHouseR2DBCDatabaseContainerProvider.java
│ │ │ │ └── containers/
│ │ │ │ ├── ClickHouseContainer.java
│ │ │ │ └── ClickHouseProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ ├── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ │ └── org.testcontainers.r2dbc.R2DBCDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── ClickhouseTestImages.java
│ │ │ ├── clickhouse/
│ │ │ │ ├── ClickHouseContainerTest.java
│ │ │ │ └── ClickHouseR2DBCDatabaseContainerTest.java
│ │ │ ├── jdbc/
│ │ │ │ └── clickhouse/
│ │ │ │ └── ClickhouseJDBCDriverTest.java
│ │ │ └── junit/
│ │ │ └── clickhouse/
│ │ │ └── SimpleClickhouseTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── cockroachdb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── cockroachdb/
│ │ │ │ │ └── CockroachContainer.java
│ │ │ │ └── containers/
│ │ │ │ ├── CockroachContainer.java
│ │ │ │ └── CockroachContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── CockroachDBTestImages.java
│ │ │ ├── cockroachdb/
│ │ │ │ └── CockroachContainerTest.java
│ │ │ └── jdbc/
│ │ │ └── cockroachdb/
│ │ │ └── CockroachDBJDBCDriverTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── somepath/
│ │ └── init_postgresql.sql
│ ├── consul/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── consul/
│ │ │ └── ConsulContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── consul/
│ │ │ └── ConsulContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── couchbase/
│ │ ├── AUTHORS
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── couchbase/
│ │ │ ├── BucketDefinition.java
│ │ │ ├── CouchbaseContainer.java
│ │ │ └── CouchbaseService.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── couchbase/
│ │ │ └── CouchbaseContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── cratedb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── cratedb/
│ │ │ │ ├── CrateDBContainer.java
│ │ │ │ └── CrateDBContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── CrateDBTestImages.java
│ │ │ ├── jdbc/
│ │ │ │ └── cratedb/
│ │ │ │ └── CrateDBJDBCDriverTest.java
│ │ │ └── junit/
│ │ │ └── cratedb/
│ │ │ └── SimpleCrateDBTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── somepath/
│ │ └── init_cratedb.sql
│ ├── database-commons/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── delegate/
│ │ │ │ ├── AbstractDatabaseDelegate.java
│ │ │ │ └── DatabaseDelegate.java
│ │ │ ├── exception/
│ │ │ │ └── ConnectionCreationException.java
│ │ │ └── ext/
│ │ │ ├── ScriptScanner.java
│ │ │ ├── ScriptSplitter.java
│ │ │ └── ScriptUtils.java
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── testcontainers/
│ │ └── ext/
│ │ ├── ScriptScannerTest.java
│ │ └── ScriptSplittingTest.java
│ ├── databend/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── databend/
│ │ │ │ ├── DatabendContainer.java
│ │ │ │ └── DatabendContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── databend/
│ │ │ ├── DatabendContainerTest.java
│ │ │ └── DatabendJDBCDriverTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── db2/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ ├── Db2Container.java
│ │ │ │ │ └── Db2ContainerProvider.java
│ │ │ │ └── db2/
│ │ │ │ └── Db2Container.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── Db2TestImages.java
│ │ │ ├── db2/
│ │ │ │ └── Db2ContainerTest.java
│ │ │ └── jdbc/
│ │ │ └── db2/
│ │ │ └── DB2JDBCDriverTest.java
│ │ └── resources/
│ │ ├── container-license-acceptance.txt
│ │ └── logback-test.xml
│ ├── elasticsearch/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── elasticsearch/
│ │ │ │ └── ElasticsearchContainer.java
│ │ │ └── resources/
│ │ │ └── elasticsearch-default-memory-vm.options
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── elasticsearch/
│ │ │ └── ElasticsearchContainerTest.java
│ │ └── resources/
│ │ ├── http_ca.crt
│ │ ├── logback-test.xml
│ │ └── test-custom-memory-jvm.options
│ ├── gcloud/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ ├── BigQueryEmulatorContainer.java
│ │ │ │ ├── BigtableEmulatorContainer.java
│ │ │ │ ├── DatastoreEmulatorContainer.java
│ │ │ │ ├── FirestoreEmulatorContainer.java
│ │ │ │ ├── PubSubEmulatorContainer.java
│ │ │ │ └── SpannerEmulatorContainer.java
│ │ │ └── gcloud/
│ │ │ ├── BigQueryEmulatorContainer.java
│ │ │ ├── BigtableEmulatorContainer.java
│ │ │ ├── DatastoreEmulatorContainer.java
│ │ │ ├── FirestoreEmulatorContainer.java
│ │ │ ├── PubSubEmulatorContainer.java
│ │ │ └── SpannerEmulatorContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── gcloud/
│ │ │ ├── BigQueryEmulatorContainerTest.java
│ │ │ ├── BigtableEmulatorContainerTest.java
│ │ │ ├── DatastoreEmulatorContainerTest.java
│ │ │ ├── FirestoreEmulatorContainerTest.java
│ │ │ ├── PubSubEmulatorContainerTest.java
│ │ │ └── SpannerEmulatorContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── grafana/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── grafana/
│ │ │ └── LgtmStackContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── grafana/
│ │ │ └── LgtmStackContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── hivemq/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── hivemq/
│ │ │ ├── HiveMQContainer.java
│ │ │ ├── HiveMQExtension.java
│ │ │ └── PathUtil.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── hivemq/
│ │ │ ├── ContainerWithControlCenterIT.java
│ │ │ ├── ContainerWithCustomConfigIT.java
│ │ │ ├── ContainerWithExtensionFromDirectoryIT.java
│ │ │ ├── ContainerWithExtensionIT.java
│ │ │ ├── ContainerWithExtensionSubclassIT.java
│ │ │ ├── ContainerWithFileInExtensionHomeIT.java
│ │ │ ├── ContainerWithFileInHomeIT.java
│ │ │ ├── ContainerWithLicenseIT.java
│ │ │ ├── ContainerWithoutPlatformExtensionsIT.java
│ │ │ ├── CreateFileInCopiedDirectoryIT.java
│ │ │ ├── CreateFileInExtensionDirectoryIT.java
│ │ │ ├── DisableEnableExtensionFromDirectoryIT.java
│ │ │ ├── DisableEnableExtensionIT.java
│ │ │ ├── HiveMQExtensionTest.java
│ │ │ ├── HiveMQTestContainerCore.java
│ │ │ ├── PathUtilTest.java
│ │ │ ├── docs/
│ │ │ │ ├── DemoDisableExtensionsIT.java
│ │ │ │ ├── DemoExtensionTestsIT.java
│ │ │ │ ├── DemoFilesIT.java
│ │ │ │ └── DemoHiveMQContainerIT.java
│ │ │ └── util/
│ │ │ ├── MyExtension.java
│ │ │ ├── MyExtensionWithSubclasses.java
│ │ │ ├── PublishModifier.java
│ │ │ └── TestPublishModifiedUtil.java
│ │ └── resources/
│ │ ├── additionalFile.txt
│ │ ├── config.xml
│ │ ├── inMemoryConfig.xml
│ │ ├── logback-test.xml
│ │ ├── modifier-extension/
│ │ │ ├── hivemq-extension.xml
│ │ │ └── modifier-extension-1.0-SNAPSHOT.jar
│ │ ├── modifier-extension-wrong-name/
│ │ │ ├── hivemq-extension.xml
│ │ │ └── modifier-extension-1.0-SNAPSHOT.jar
│ │ ├── myExtensionLicense.elic
│ │ └── myLicense.lic
│ ├── influxdb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── containers/
│ │ │ └── InfluxDBContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── containers/
│ │ │ ├── InfluxDBContainerTest.java
│ │ │ ├── InfluxDBContainerV1Test.java
│ │ │ └── InfluxDBTestUtils.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── jdbc/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ ├── JdbcDatabaseContainer.java
│ │ │ │ │ └── JdbcDatabaseContainerProvider.java
│ │ │ │ └── jdbc/
│ │ │ │ ├── ConnectionDelegate.java
│ │ │ │ ├── ConnectionUrl.java
│ │ │ │ ├── ConnectionWrapper.java
│ │ │ │ ├── ContainerDatabaseDriver.java
│ │ │ │ ├── ContainerLessJdbcDelegate.java
│ │ │ │ ├── JdbcDatabaseDelegate.java
│ │ │ │ └── ext/
│ │ │ │ └── ScriptUtils.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── java.sql.Driver
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── JdbcDatabaseContainerTest.java
│ │ │ └── jdbc/
│ │ │ ├── ConnectionUrlDriversTests.java
│ │ │ ├── ConnectionUrlTest.java
│ │ │ ├── ContainerDatabaseDriverTest.java
│ │ │ ├── JdbcDatabaseDelegateTest.java
│ │ │ └── MissingJdbcDriverTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── jdbc-test/
│ │ ├── build.gradle
│ │ ├── sql/
│ │ │ └── init_mysql.sql
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── db/
│ │ │ │ └── AbstractContainerDatabaseTest.java
│ │ │ └── jdbc/
│ │ │ └── AbstractJDBCDriverTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── junit-jupiter/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── junit/
│ │ │ └── jupiter/
│ │ │ ├── Container.java
│ │ │ ├── DockerAvailableDetector.java
│ │ │ ├── EnabledIfDockerAvailable.java
│ │ │ ├── EnabledIfDockerAvailableCondition.java
│ │ │ ├── FilesystemFriendlyNameGenerator.java
│ │ │ ├── Testcontainers.java
│ │ │ ├── TestcontainersExtension.java
│ │ │ └── TestcontainersTestDescription.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── junit/
│ │ │ └── jupiter/
│ │ │ ├── ComposeContainerTests.java
│ │ │ ├── DockerComposeContainerTests.java
│ │ │ ├── EnabledIfDockerAvailableTests.java
│ │ │ ├── FilesystemFriendlyNameGeneratorTest.java
│ │ │ ├── JUnitJupiterTestImages.java
│ │ │ ├── MetaAnnotationTest.java
│ │ │ ├── MixedLifecycleTests.java
│ │ │ ├── ParallelExecutionTests.java
│ │ │ ├── PostgresContainerTests.java
│ │ │ ├── TestLifecycleAwareContainerMock.java
│ │ │ ├── TestLifecycleAwareExceptionCapturingTest.java
│ │ │ ├── TestLifecycleAwareMethodTest.java
│ │ │ ├── TestcontainersExtensionTests.java
│ │ │ ├── TestcontainersNestedRestartedContainerTests.java
│ │ │ ├── TestcontainersNestedSharedContainerTests.java
│ │ │ ├── TestcontainersRestartBetweenTests.java
│ │ │ ├── TestcontainersSharedContainerTests.java
│ │ │ ├── WrongAnnotationUsageTests.java
│ │ │ └── inheritance/
│ │ │ ├── AbstractTestBase.java
│ │ │ ├── InheritedTests.java
│ │ │ └── RedisContainer.java
│ │ └── resources/
│ │ ├── docker-compose.yml
│ │ └── logback-test.xml
│ ├── k3s/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── k3s/
│ │ │ └── K3sContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── k3s/
│ │ │ ├── Fabric8K3sContainerTest.java
│ │ │ ├── KubectlContainerTest.java
│ │ │ └── OfficialClientK3sContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── k6/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── k6/
│ │ │ └── K6Container.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── k6/
│ │ │ └── K6ContainerTests.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── scripts/
│ │ └── test.js
│ ├── kafka/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── KafkaContainer.java
│ │ │ └── kafka/
│ │ │ ├── ConfluentKafkaContainer.java
│ │ │ ├── KafkaContainer.java
│ │ │ └── KafkaHelper.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── AbstractKafka.java
│ │ │ ├── KCatContainer.java
│ │ │ ├── containers/
│ │ │ │ └── KafkaContainerTest.java
│ │ │ └── kafka/
│ │ │ ├── CompatibleApacheKafkaImageTest.java
│ │ │ ├── ConfluentKafkaContainerTest.java
│ │ │ └── KafkaContainerTest.java
│ │ └── resources/
│ │ ├── kafka_server_jaas.conf
│ │ └── logback-test.xml
│ ├── ldap/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── ldap/
│ │ │ └── LLdapContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── ldap/
│ │ │ └── LLdapContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── localstack/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── localstack/
│ │ │ │ └── LocalStackContainer.java
│ │ │ └── localstack/
│ │ │ └── LocalStackContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── localstack/
│ │ │ │ ├── LegacyModeTest.java
│ │ │ │ └── LocalstackTestImages.java
│ │ │ └── localstack/
│ │ │ └── LocalStackContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── mariadb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ ├── MariaDBContainer.java
│ │ │ │ │ ├── MariaDBContainerProvider.java
│ │ │ │ │ ├── MariaDBR2DBCDatabaseContainer.java
│ │ │ │ │ └── MariaDBR2DBCDatabaseContainerProvider.java
│ │ │ │ └── mariadb/
│ │ │ │ ├── MariaDBContainer.java
│ │ │ │ └── MariaDBR2DBCDatabaseContainer.java
│ │ │ └── resources/
│ │ │ ├── META-INF/
│ │ │ │ └── services/
│ │ │ │ ├── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ │ │ └── org.testcontainers.r2dbc.R2DBCDatabaseContainerProvider
│ │ │ └── mariadb-default-conf/
│ │ │ └── my.cnf
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── MariaDBTestImages.java
│ │ │ ├── containers/
│ │ │ │ └── MariaDBR2DBCDatabaseContainerTest.java
│ │ │ ├── jdbc/
│ │ │ │ └── mariadb/
│ │ │ │ └── MariaDBJDBCDriverTest.java
│ │ │ └── mariadb/
│ │ │ ├── MariaDBContainerTest.java
│ │ │ └── MariaDBR2DBCDatabaseContainerTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── somepath/
│ │ ├── init_mariadb.sql
│ │ ├── init_unicode_mariadb.sql
│ │ └── mariadb_conf_override/
│ │ └── my.cnf
│ ├── milvus/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── milvus/
│ │ │ │ └── MilvusContainer.java
│ │ │ └── resources/
│ │ │ └── testcontainers/
│ │ │ └── embedEtcd.yaml
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── milvus/
│ │ │ └── MilvusContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── minio/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── containers/
│ │ │ └── MinIOContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── containers/
│ │ │ └── MinIOContainerTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── object_to_upload.txt
│ ├── mockserver/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── MockServerContainer.java
│ │ │ └── mockserver/
│ │ │ └── MockServerContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── mockserver/
│ │ │ └── MockServerContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── mongodb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ └── MongoDBContainer.java
│ │ │ │ └── mongodb/
│ │ │ │ ├── MongoDBAtlasLocalContainer.java
│ │ │ │ └── MongoDBContainer.java
│ │ │ └── resources/
│ │ │ └── sharding.sh
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── mongodb/
│ │ │ ├── AbstractMongo.java
│ │ │ ├── AtlasLocalDataAccess.java
│ │ │ ├── CompatibleImageTest.java
│ │ │ ├── MongoDBAtlasLocalContainerTest.java
│ │ │ └── MongoDBContainerTest.java
│ │ └── resources/
│ │ ├── atlas-local-index.json
│ │ └── logback-test.xml
│ ├── mssqlserver/
│ │ ├── AUTHORS
│ │ ├── LICENSE
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ ├── MSSQLR2DBCDatabaseContainer.java
│ │ │ │ │ ├── MSSQLR2DBCDatabaseContainerProvider.java
│ │ │ │ │ ├── MSSQLServerContainer.java
│ │ │ │ │ └── MSSQLServerContainerProvider.java
│ │ │ │ └── mssqlserver/
│ │ │ │ ├── MSSQLR2DBCDatabaseContainer.java
│ │ │ │ └── MSSQLServerContainer.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ ├── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ │ └── org.testcontainers.r2dbc.R2DBCDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── MSSQLServerTestImages.java
│ │ │ ├── containers/
│ │ │ │ └── MSSQLR2DBCDatabaseContainerTest.java
│ │ │ ├── jdbc/
│ │ │ │ └── mssqlserver/
│ │ │ │ └── MSSQLServerJDBCDriverTest.java
│ │ │ └── mssqlserver/
│ │ │ ├── CustomPasswordMSSQLServerTest.java
│ │ │ ├── MSSQLR2DBCDatabaseContainerTest.java
│ │ │ └── MSSQLServerContainerTest.java
│ │ └── resources/
│ │ ├── container-license-acceptance.txt
│ │ └── logback-test.xml
│ ├── mysql/
│ │ ├── build.gradle
│ │ ├── sql/
│ │ │ └── init_mysql.sql
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ ├── MySQLContainer.java
│ │ │ │ │ ├── MySQLContainerProvider.java
│ │ │ │ │ ├── MySQLR2DBCDatabaseContainer.java
│ │ │ │ │ └── MySQLR2DBCDatabaseContainerProvider.java
│ │ │ │ └── mysql/
│ │ │ │ ├── MySQLContainer.java
│ │ │ │ └── MySQLR2DBCDatabaseContainer.java
│ │ │ └── resources/
│ │ │ ├── META-INF/
│ │ │ │ └── services/
│ │ │ │ ├── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ │ │ └── org.testcontainers.r2dbc.R2DBCDatabaseContainerProvider
│ │ │ └── mysql-default-conf/
│ │ │ └── my.cnf
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── MySQLTestImages.java
│ │ │ ├── containers/
│ │ │ │ ├── MySQLR2DBCDatabaseContainerTest.java
│ │ │ │ └── MySQLRootAccountTest.java
│ │ │ ├── jdbc/
│ │ │ │ └── mysql/
│ │ │ │ ├── JDBCDriverWithPoolTest.java
│ │ │ │ ├── MySQLDatabaseContainerDriverTest.java
│ │ │ │ └── MySQLJDBCDriverTest.java
│ │ │ └── mysql/
│ │ │ ├── MultiVersionMySQLTest.java
│ │ │ ├── MySQLContainerTest.java
│ │ │ └── MySQLR2DBCDatabaseContainerTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── somepath/
│ │ ├── init_mysql.sql
│ │ ├── init_unicode_mysql.sql
│ │ └── mysql_conf_override/
│ │ └── my.cnf
│ ├── neo4j/
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── custom-neo4j-plugin/
│ │ │ └── java/
│ │ │ └── ac/
│ │ │ └── simons/
│ │ │ └── neo4j/
│ │ │ └── demos/
│ │ │ └── plugins/
│ │ │ └── HelloWorld.java
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── Neo4jContainer.java
│ │ │ └── neo4j/
│ │ │ └── Neo4jContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── neo4j/
│ │ │ └── Neo4jContainerTest.java
│ │ └── resources/
│ │ ├── example-container-license-acceptance.txt
│ │ └── logback-test.xml
│ ├── nginx/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── NginxContainer.java
│ │ │ └── nginx/
│ │ │ └── NginxContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── nginx/
│ │ │ └── NginxContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── oceanbase/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── oceanbase/
│ │ │ │ ├── OceanBaseCEContainer.java
│ │ │ │ ├── OceanBaseCEContainerProvider.java
│ │ │ │ └── OceanBaseJdbcUtils.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── oceanbase/
│ │ │ ├── OceanBaseJdbcDriverTest.java
│ │ │ └── SimpleOceanBaseCETest.java
│ │ └── resources/
│ │ ├── init.sql
│ │ └── logback-test.xml
│ ├── ollama/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── ollama/
│ │ │ └── OllamaContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── ollama/
│ │ │ └── OllamaContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── openfga/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── openfga/
│ │ │ └── OpenFGAContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── openfga/
│ │ │ └── OpenFGAContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── oracle-free/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── oracle/
│ │ │ │ ├── OracleContainer.java
│ │ │ │ ├── OracleContainerProvider.java
│ │ │ │ ├── OracleR2DBCDatabaseContainer.java
│ │ │ │ └── OracleR2DBCDatabaseContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ ├── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ │ └── org.testcontainers.r2dbc.R2DBCDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── junit/
│ │ │ │ └── oracle/
│ │ │ │ └── SimpleOracleTest.java
│ │ │ └── oracle/
│ │ │ ├── jdbc/
│ │ │ │ └── OracleJDBCDriverTest.java
│ │ │ └── r2dbc/
│ │ │ └── OracleR2DBCDatabaseContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── oracle-xe/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── containers/
│ │ │ │ ├── OracleContainer.java
│ │ │ │ ├── OracleContainerProvider.java
│ │ │ │ ├── OracleR2DBCDatabaseContainer.java
│ │ │ │ └── OracleR2DBCDatabaseContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ ├── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ │ └── org.testcontainers.r2dbc.R2DBCDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ ├── jdbc/
│ │ │ │ │ └── OracleJDBCDriverTest.java
│ │ │ │ └── r2dbc/
│ │ │ │ └── OracleR2DBCDatabaseContainerTest.java
│ │ │ └── junit/
│ │ │ └── oracle/
│ │ │ └── SimpleOracleTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── orientdb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── OrientDBContainer.java
│ │ │ └── orientdb/
│ │ │ └── OrientDBContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── orientdb/
│ │ │ └── OrientDBContainerTest.java
│ │ └── resources/
│ │ ├── initscript.osql
│ │ ├── logback-test.xml
│ │ └── orientdb-server-config.xml
│ ├── pinecone/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── pinecone/
│ │ │ └── PineconeLocalContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── pinecone/
│ │ │ └── PineconeLocalContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── postgresql/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ ├── PgVectorContainerProvider.java
│ │ │ │ │ ├── PostgisContainerProvider.java
│ │ │ │ │ ├── PostgreSQLContainer.java
│ │ │ │ │ ├── PostgreSQLContainerProvider.java
│ │ │ │ │ ├── PostgreSQLR2DBCDatabaseContainer.java
│ │ │ │ │ ├── PostgreSQLR2DBCDatabaseContainerProvider.java
│ │ │ │ │ └── TimescaleDBContainerProvider.java
│ │ │ │ └── postgresql/
│ │ │ │ ├── PostgreSQLContainer.java
│ │ │ │ └── PostgreSQLR2DBCDatabaseContainer.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ ├── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ │ └── org.testcontainers.r2dbc.R2DBCDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── PostgreSQLTestImages.java
│ │ │ ├── containers/
│ │ │ │ ├── PostgreSQLConnectionURLTest.java
│ │ │ │ ├── PostgreSQLR2DBCDatabaseContainerTest.java
│ │ │ │ └── TimescaleDBContainerTest.java
│ │ │ ├── jdbc/
│ │ │ │ ├── DatabaseDriverShutdownTest.java
│ │ │ │ ├── DatabaseDriverTmpfsTest.java
│ │ │ │ ├── pgvector/
│ │ │ │ │ └── PgVectorJDBCDriverTest.java
│ │ │ │ ├── postgis/
│ │ │ │ │ └── PostgisJDBCDriverTest.java
│ │ │ │ ├── postgresql/
│ │ │ │ │ └── PostgreSQLJDBCDriverTest.java
│ │ │ │ └── timescaledb/
│ │ │ │ └── TimescaleDBJDBCDriverTest.java
│ │ │ └── postgresql/
│ │ │ ├── CompatibleImageTest.java
│ │ │ ├── PostgreSQLContainerTest.java
│ │ │ └── PostgreSQLR2DBCDatabaseContainerTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── somepath/
│ │ ├── init_postgresql.sql
│ │ ├── init_postgresql_2.sql
│ │ └── init_timescaledb.sql
│ ├── presto/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── containers/
│ │ │ │ ├── PrestoContainer.java
│ │ │ │ └── PrestoContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── PrestoTestImages.java
│ │ │ ├── containers/
│ │ │ │ └── PrestoContainerTest.java
│ │ │ └── jdbc/
│ │ │ └── presto/
│ │ │ └── PrestoJDBCDriverTest.java
│ │ └── resources/
│ │ ├── initial.sql
│ │ └── logback-test.xml
│ ├── pulsar/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── PulsarContainer.java
│ │ │ └── pulsar/
│ │ │ └── PulsarContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── pulsar/
│ │ │ ├── AbstractPulsar.java
│ │ │ ├── CompatibleApachePulsarImageTest.java
│ │ │ └── PulsarContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── qdrant/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── qdrant/
│ │ │ └── QdrantContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── qdrant/
│ │ │ └── QdrantContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── questdb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── containers/
│ │ │ │ ├── LegacyQuestDBProvider.java
│ │ │ │ ├── QuestDBContainer.java
│ │ │ │ └── QuestDBProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── QuestDBTestImages.java
│ │ │ ├── jdbc/
│ │ │ │ └── questdb/
│ │ │ │ └── QuestDBJDBCDriverTest.java
│ │ │ └── junit/
│ │ │ └── questdb/
│ │ │ └── SimpleQuestDBTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── r2dbc/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── r2dbc/
│ │ │ │ ├── CancellableSubscription.java
│ │ │ │ ├── ConnectionPublisher.java
│ │ │ │ ├── EmptySubscription.java
│ │ │ │ ├── Hidden.java
│ │ │ │ ├── R2DBCDatabaseContainer.java
│ │ │ │ ├── R2DBCDatabaseContainerProvider.java
│ │ │ │ └── TestcontainersR2DBCConnectionFactory.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── io.r2dbc.spi.ConnectionFactoryProvider
│ │ ├── test/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── r2dbc/
│ │ │ │ └── TestcontainersR2DBCConnectionFactoryTest.java
│ │ │ └── resources/
│ │ │ └── logback-test.xml
│ │ └── testFixtures/
│ │ └── java/
│ │ └── org/
│ │ └── testcontainers/
│ │ └── r2dbc/
│ │ └── AbstractR2DBCDatabaseContainerTest.java
│ ├── rabbitmq/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── RabbitMQContainer.java
│ │ │ └── rabbitmq/
│ │ │ └── RabbitMQContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── rabbitmq/
│ │ │ ├── RabbitMQContainerTest.java
│ │ │ └── RabbitMQTestImages.java
│ │ └── resources/
│ │ ├── certs/
│ │ │ ├── ca_certificate.pem
│ │ │ ├── ca_key.pem
│ │ │ ├── client_certificate.pem
│ │ │ ├── client_key.p12
│ │ │ ├── client_key.pem
│ │ │ ├── server_certificate.pem
│ │ │ ├── server_key.p12
│ │ │ ├── server_key.pem
│ │ │ └── truststore.jks
│ │ ├── logback-test.xml
│ │ ├── rabbitmq-custom.conf
│ │ └── rabbitmq-custom.config
│ ├── redpanda/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── redpanda/
│ │ │ │ └── RedpandaContainer.java
│ │ │ └── resources/
│ │ │ └── testcontainers/
│ │ │ ├── bootstrap.yaml.ftl
│ │ │ ├── entrypoint-tc.sh
│ │ │ └── redpanda.yaml.ftl
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── redpanda/
│ │ │ ├── AbstractRedpanda.java
│ │ │ ├── CompatibleImageTest.java
│ │ │ └── RedpandaContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── scylladb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── scylladb/
│ │ │ └── ScyllaDBContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── scylladb/
│ │ │ └── ScyllaDBContainerTest.java
│ │ └── resources/
│ │ ├── keys/
│ │ │ ├── node0.cer
│ │ │ ├── node0.p12
│ │ │ ├── scylla.cer.pem
│ │ │ ├── scylla.key.pem
│ │ │ ├── scylla.keystore
│ │ │ └── scylla.truststore
│ │ ├── logback-test.xml
│ │ └── scylla-test-ssl/
│ │ └── scylla.yaml
│ ├── selenium/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ ├── BrowserWebDriverContainer.java
│ │ │ │ ├── DefaultRecordingFileFactory.java
│ │ │ │ ├── RecordingFileFactory.java
│ │ │ │ └── SeleniumUtils.java
│ │ │ └── selenium/
│ │ │ └── BrowserWebDriverContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── DefaultRecordingFileFactoryTest.java
│ │ │ ├── junit/
│ │ │ │ ├── SeleniumStartTest.java
│ │ │ │ └── SeleniumUtilsTest.java
│ │ │ └── selenium/
│ │ │ ├── BaseWebDriverContainerTest.java
│ │ │ ├── BrowserWebDriverContainerTest.java
│ │ │ ├── ChromeRecordingWebDriverContainerTest.java
│ │ │ ├── ChromeWebDriverContainerTest.java
│ │ │ ├── ContainerWithoutCapabilitiesTest.java
│ │ │ ├── CustomWaitTimeoutWebDriverContainerTest.java
│ │ │ ├── EdgeWebDriverContainerTest.java
│ │ │ ├── FirefoxWebDriverContainerTest.java
│ │ │ ├── LocalServerWebDriverContainerTest.java
│ │ │ └── SpecificImageNameWebDriverContainerTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ ├── manifests/
│ │ │ ├── MANIFEST-2.45.0.MF
│ │ │ └── MANIFEST-3.5.2.MF
│ │ └── server/
│ │ └── index.html
│ ├── solace/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── solace/
│ │ │ ├── Service.java
│ │ │ └── SolaceContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── solace/
│ │ │ ├── SolaceContainerAMQPTest.java
│ │ │ ├── SolaceContainerMQTTTest.java
│ │ │ ├── SolaceContainerRESTTest.java
│ │ │ └── SolaceContainerSMFTest.java
│ │ └── resources/
│ │ ├── client.pfx
│ │ ├── logback-test.xml
│ │ ├── rootCA.crt
│ │ ├── solace.pem
│ │ └── truststore
│ ├── solr/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ ├── SolrClientUtils.java
│ │ │ │ ├── SolrClientUtilsException.java
│ │ │ │ ├── SolrContainer.java
│ │ │ │ └── SolrContainerConfiguration.java
│ │ │ └── solr/
│ │ │ └── SolrContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── solr/
│ │ │ └── SolrContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── spock/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── groovy/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── spock/
│ │ │ ├── DockerAvailableDetector.groovy
│ │ │ ├── SpockTestDescription.groovy
│ │ │ ├── Testcontainers.groovy
│ │ │ ├── TestcontainersExtension.groovy
│ │ │ └── TestcontainersMethodInterceptor.groovy
│ │ └── test/
│ │ ├── groovy/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── spock/
│ │ │ ├── ComposeContainerIT.groovy
│ │ │ ├── DockerComposeContainerIT.groovy
│ │ │ ├── MySqlContainerIT.groovy
│ │ │ ├── PostgresContainerIT.groovy
│ │ │ ├── SharedComposeContainerIT.groovy
│ │ │ ├── SharedDockerComposeContainerIT.groovy
│ │ │ ├── SpockTestImages.groovy
│ │ │ ├── TestHierarchyIT.groovy
│ │ │ ├── TestLifecycleAwareContainerMock.java
│ │ │ ├── TestLifecycleAwareIT.groovy
│ │ │ ├── TestcontainersExtensionTest.groovy
│ │ │ ├── TestcontainersRestartBetweenTestsIT.groovy
│ │ │ └── TestcontainersSharedContainerIT.groovy
│ │ └── resources/
│ │ ├── docker-compose.yml
│ │ └── logback-test.xml
│ ├── tidb/
│ │ ├── build.gradle
│ │ ├── sql/
│ │ │ └── init_mysql.sql
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── tidb/
│ │ │ │ ├── TiDBContainer.java
│ │ │ │ └── TiDBContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── TiDBTestImages.java
│ │ │ ├── jdbc/
│ │ │ │ └── tidb/
│ │ │ │ └── TiDBJDBCDriverTest.java
│ │ │ └── tidb/
│ │ │ └── TiDBContainerTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── somepath/
│ │ └── init_tidb.sql
│ ├── timeplus/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── timeplus/
│ │ │ │ ├── TimeplusContainer.java
│ │ │ │ └── TimeplusContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── TimeplusImages.java
│ │ │ ├── junit/
│ │ │ │ └── timeplus/
│ │ │ │ └── TimeplusJDBCDriverTest.java
│ │ │ └── timeplus/
│ │ │ └── TimeplusContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── toxiproxy/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── ToxiproxyContainer.java
│ │ │ └── toxiproxy/
│ │ │ └── ToxiproxyContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── toxiproxy/
│ │ │ └── ToxiproxyContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── trino/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ ├── TrinoContainer.java
│ │ │ │ │ └── TrinoContainerProvider.java
│ │ │ │ └── trino/
│ │ │ │ └── TrinoContainer.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── TrinoTestImages.java
│ │ │ ├── jdbc/
│ │ │ │ └── trino/
│ │ │ │ └── TrinoJDBCDriverTest.java
│ │ │ └── trino/
│ │ │ └── TrinoContainerTest.java
│ │ └── resources/
│ │ ├── initial.sql
│ │ └── logback-test.xml
│ ├── typesense/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── typesense/
│ │ │ └── TypesenseContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── typesense/
│ │ │ └── TypesenseContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── vault/
│ │ ├── AUTHORS
│ │ ├── LICENSE
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── vault/
│ │ │ ├── VaultContainer.java
│ │ │ └── VaultLogLevel.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── vault/
│ │ │ ├── VaultClientTest.java
│ │ │ └── VaultContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── weaviate/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── weaviate/
│ │ │ └── WeaviateContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── weaviate/
│ │ │ └── WeaviateContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ └── yugabytedb/
│ ├── build.gradle
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── containers/
│ │ │ ├── YugabyteDBYCQLContainer.java
│ │ │ ├── YugabyteDBYSQLContainer.java
│ │ │ ├── YugabyteDBYSQLContainerProvider.java
│ │ │ ├── delegate/
│ │ │ │ ├── AbstractYCQLDelegate.java
│ │ │ │ └── YugabyteDBYCQLDelegate.java
│ │ │ └── strategy/
│ │ │ ├── YugabyteDBYCQLWaitStrategy.java
│ │ │ └── YugabyteDBYSQLWaitStrategy.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── testcontainers/
│ │ ├── jdbc/
│ │ │ └── yugabytedb/
│ │ │ └── YugabyteDBYSQLJDBCDriverTest.java
│ │ └── junit/
│ │ └── yugabytedb/
│ │ ├── YugabyteDBYCQLTest.java
│ │ └── YugabyteDBYSQLTest.java
│ └── resources/
│ ├── init/
│ │ └── init_yql.sql
│ └── logback-test.xml
├── requirements.txt
├── runtime.txt
├── settings.gradle
├── smoke-test/
│ ├── build.gradle
│ ├── gradle/
│ │ └── wrapper/
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── settings.gradle
│ └── turbo-mode/
│ ├── build.gradle
│ └── src/
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── testcontainers/
│ │ └── example/
│ │ ├── AbstractRedisContainer.java
│ │ ├── RedisContainer1Test.java
│ │ ├── RedisContainer2Test.java
│ │ ├── RedisContainer3Test.java
│ │ └── RedisContainer4Test.java
│ └── resources/
│ └── logback-test.xml
└── test-support/
├── build.gradle
└── src/
├── main/
│ └── java/
│ └── org/
│ └── testcontainers/
│ └── testsupport/
│ ├── Flaky.java
│ └── FlakyTestJUnit4RetryRule.java
└── test/
├── java/
│ └── org/
│ └── testcontainers/
│ └── testsupport/
│ └── FlakyRuleTest.java
└── resources/
└── logback-test.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .circleci/config.yml
================================================
version: 2
jobs:
minimal_core:
machine:
enabled: true
steps:
- checkout
- run:
command: ./gradlew --no-daemon --continue --scan testcontainers:test --tests '*GenericContainerRuleTest'
- run:
name: Save test results
command: |
mkdir -p ~/junit/
find . -type f -regex ".*/build/test-results/.*xml" -exec cp {} ~/junit/ \;
when: always
- store_test_results:
path: ~/junit
- store_artifacts:
path: ~/junit
workflows:
version: 2
test_all:
jobs:
- minimal_core
================================================
FILE: .devcontainer/devcontainer.json
================================================
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.241.1/containers/java-8
{
"name": "Java 17",
"image": "mcr.microsoft.com/devcontainers/java:0-17",
// Configure tool-specific properties.
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"vscjava.vscode-java-pack"
]
}
},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "java -version",
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "vscode",
"features": {
"ghcr.io/devcontainers/features/git:1": {},
"ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/meaningful-ooo/devcontainer-features/homebrew:2": {},
"ghcr.io/devcontainers/features/java:1": {
"version": "none",
"installMaven": "false",
"installGradle": "false"
},
"ghcr.io/devcontainers/features/docker-outside-of-docker:1": {},
"ghcr.io/devcontainers/features/node:1": {},
"ghcr.io/devcontainers/features/sshd:1": {
"version": "latest"
}
},
"postStartCommand": ["./gradlew", "compileJava"]
}
================================================
FILE: .editorconfig
================================================
# EditorConfig is awesome: http://EditorConfig.org
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
[*.java]
indent_style = space
indent_size = 4
# Never use star imports
ij_java_names_count_to_use_import_on_demand = 99
ij_java_class_count_to_use_import_on_demand = 99
ij_java_layout_static_imports_separately = true
[*.{yml, yaml}]
indent_size = 2
ij_yaml_keep_indents_on_empty_lines = false
================================================
FILE: .gitattributes
================================================
*.sh text eol=lf
================================================
FILE: .github/CODEOWNERS
================================================
* @testcontainers/java-team
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: [testcontainers]
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yaml
================================================
name: Bug Report
description: File a bug report
title: "[Bug]: "
labels: ["type/bug"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report! Before submitting a `bug`, please make sure there is no existing issue for the one you encountered and it has been discussed with the team via [discussions](https://github.com/testcontainers/testcontainers-java/discussions) or Slack.
- type: dropdown
id: module
attributes:
label: Module
description: Which Testcontainers module are you using?
options:
- Core
- ActiveMQ
- Azure
- Cassandra
- ChromaDB
- Clickhouse
- CockroachDB
- Consul
- Couchbase
- CrateDB
- Databend
- DB2
- Dynalite
- Elasticsearch
- GCloud
- Grafana
- HiveMQ
- InfluxDB
- K3S
- K6
- Kafka
- LDAP
- LocalStack
- MariaDB
- Milvus
- MinIO
- MockServer
- MongoDB
- MSSQLServer
- MySQL
- Neo4j
- NGINX
- OceanBase
- Ollama
- OpenFGA
- Oracle Free
- Oracle XE
- OrientDB
- Pinecone
- PostgreSQL
- Presto
- Pulsar
- Qdrant
- QuestDB
- RabbitMQ
- Redpanda
- ScyllaDB
- Selenium
- Solace
- Solr
- TiDB
- Timeplus
- ToxiProxy
- Trino
- Typesense
- Vault
- Weaviate
- YugabyteDB
validations:
required: true
- type: input
id: tc-version
attributes:
label: Testcontainers version
description: Which Testcontainers version are you using?
placeholder: ex. 1.17.2
validations:
required: true
- type: dropdown
id: latest-version
attributes:
label: Using the latest Testcontainers version?
description: If you are not using the latest version, can you update your project and try to reproduce the issue? Is it still happening?
options:
- 'Yes'
- 'No'
validations:
required: true
- type: input
id: host-os
attributes:
label: Host OS
description: Which Operating System are you using?
placeholder: e.g. Linux, Windows
validations:
required: true
- type: input
id: host-arch
attributes:
label: Host Arch
description: Which architecture are you using?
placeholder: e.g. x86, ARM
validations:
required: true
- type: textarea
id: docker-version
attributes:
label: Docker version
description: Please run `docker version` and copy and paste the output into this field.
render: shell
validations:
required: true
- type: textarea
id: what-happened
attributes:
label: What happened?
description: Provide the context and the expected result.
validations:
required: true
- type: textarea
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant log output. The content will be automatically formatted as code, so no need for backticks.
render: shell
- type: textarea
id: additional-information
attributes:
label: Additional Information
description: |
Any links or references to have more context about the issue.
Tip: You can attach a minimal sample project to reproduce the issue or provide further log files by clicking into this area to focus it and then dragging files in.
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Need help or have a question?
url: https://slack.testcontainers.org/
about: Visit our slack channel.
- name: Have a question or want to drive a Community conversation?
url: https://github.com/testcontainers/testcontainers-java/discussions/
about: Visit our Discussions page.
================================================
FILE: .github/ISSUE_TEMPLATE/enhancement.yaml
================================================
name: Enhancement
description: Suggest an enhancement
title: "[Enhancement]: "
labels: ["type/enhancement"]
body:
- type: markdown
attributes:
value: |
Before submitting an `enhancement`, please make sure there is no existing enhancement for the one you are requesting and it has been discussed with the team via [discussions](https://github.com/testcontainers/testcontainers-java/discussions) or Slack. If so, please provide the following information:
- type: dropdown
id: module
attributes:
label: Module
description: For which Testcontainers module does the enhancement proposal apply?
options:
- Core
- ActiveMQ
- Azure
- Cassandra
- ChromaDB
- Clickhouse
- CockroachDB
- Consul
- Couchbase
- CrateDB
- Databend
- DB2
- Dynalite
- Elasticsearch
- GCloud
- Grafana
- HiveMQ
- InfluxDB
- K3S
- K6
- Kafka
- LDAP
- LocalStack
- MariaDB
- Milvus
- MinIO
- MockServer
- MongoDB
- MSSQLServer
- MySQL
- Neo4j
- NGINX
- OceanBase
- Ollama
- OpenFGA
- Oracle Free
- Oracle XE
- OrientDB
- Pinecone
- PostgreSQL
- Presto
- Pulsar
- Qdrant
- QuestDB
- RabbitMQ
- Redpanda
- ScyllaDB
- Selenium
- Solace
- Solr
- TiDB
- Timeplus
- ToxiProxy
- Trino
- Typesense
- Vault
- Weaviate
- YugabyteDB
validations:
required: true
- type: textarea
id: proposal
attributes:
label: Proposal
description: What should be improved? What are the limitations of the current implications that would be solved by the proposal?
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/feature.yaml
================================================
name: Feature
description: Suggest a new feature
title: "[Feature]: "
labels: ["type/feature"]
body:
- type: markdown
attributes:
value: |
Before submitting a `feature`, please make sure there is no existing feature for the one you are requesting and it has been discussed with the team via [discussions](https://github.com/testcontainers/testcontainers-java/discussions) or Slack. If so, please provide the following information:
- type: dropdown
id: module
attributes:
label: Module
description: Is this feature related to any of the existing modules?
options:
- Core
- ActiveMQ
- Azure
- Cassandra
- ChromaDB
- Clickhouse
- CockroachDB
- CrateDB
- Consul
- Couchbase
- Databend
- DB2
- Dynalite
- Elasticsearch
- GCloud
- Grafana
- HiveMQ
- InfluxDB
- K3S
- K6
- Kafka
- LDAP
- LocalStack
- MariaDB
- Milvus
- MinIO
- MockServer
- MongoDB
- MSSQLServer
- MySQL
- Neo4j
- NGINX
- OceanBase
- Ollama
- OpenFGA
- Oracle Free
- Oracle XE
- OrientDB
- Pinecone
- PostgreSQL
- Qdrant
- QuestDB
- Presto
- Pulsar
- RabbitMQ
- Redpanda
- ScyllaDB
- Selenium
- Solace
- Solr
- TiDB
- Timeplus
- ToxiProxy
- Trino
- Typesense
- Vault
- Weaviate
- YugabyteDB
- New Module
- type: textarea
id: problem
attributes:
label: Problem
description: Is this feature related to a problem? Please describe it.
validations:
required: true
- type: textarea
id: solution
attributes:
label: Solution
description: What's the proposed solution for this feature?
validations:
required: true
- type: textarea
id: benefit
attributes:
label: Benefit
description: What's the benefit of adding this feature to the project?
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives
description: Are there other alternatives? Please describe them.
validations:
required: true
- type: dropdown
id: contribute
attributes:
label: Would you like to help contributing this feature?
options:
- 'Yes'
- 'No'
validations:
required: true
================================================
FILE: .github/actions/setup-build/action.yml
================================================
name: Set up Build
description: Sets up Build
inputs:
java-version:
description: 'The Java version to set up'
required: true
default: '17'
runs:
using: "composite"
steps:
- uses: ./.github/actions/setup-java
with:
java-version: ${{ inputs.java-version }}
- name: Clear existing docker image cache
shell: bash
run: docker image prune -af
- uses: ./.github/actions/setup-gradle
================================================
FILE: .github/actions/setup-gradle/action.yml
================================================
name: Set up Gradle Action
description: Sets up Gradle Action
runs:
using: "composite"
steps:
- name: Setup Gradle Build Action
uses: gradle/actions/setup-gradle@v4
with:
gradle-home-cache-includes: |
caches
notifications
jdks
================================================
FILE: .github/actions/setup-java/action.yml
================================================
name: Set up Java
description: Sets up Java version
inputs:
java-version:
description: 'The Java version to set up'
required: true
default: '17'
runs:
using: "composite"
steps:
- uses: actions/setup-java@v4
with:
java-version: ${{ inputs.java-version }}
distribution: temurin
================================================
FILE: .github/actions/setup-junit-report/action.yml
================================================
name: Set up JUnit Report
description: Sets up JUnit Report
runs:
using: "composite"
steps:
- name: Publish Test Report
uses: mikepenz/action-junit-report@v4
if: always() # always run even if the previous step fails
with:
report_paths: '**/build/test-results/test/TEST-*.xml'
annotate_only: true
================================================
FILE: .github/bumper.yml
================================================
updates:
- path: mkdocs.yml
pattern: 'latest_version: (.*)'
================================================
FILE: .github/dependabot.yml
================================================
version: 2
registries:
gradle-plugin-portal:
type: maven-repository
url: https://plugins.gradle.org/m2
username: dummy # Required by dependabot
password: dummy # Required by dependabot
updates:
- package-ecosystem: "gradle"
directory: "/core"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "org.slf4j:slf4j-api"
update-types: [ "version-update:semver-major" ]
- dependency-name: "org.mockito:mockito-core"
update-types: [ "version-update:semver-major" ]
- dependency-name: "com.fasterxml.jackson.datatype:jackson-datatype-jsr310"
update-types: [ "version-update:semver-minor", "version-update:semver-patch" ]
- dependency-name: "org.junit.jupiter:junit-jupiter"
update-types: [ "version-update:semver-major" ]
- dependency-name: "org.junit.platform:junit-platform-launcher"
update-types: [ "version-update:semver-major" ]
- package-ecosystem: "gradle"
directory: "/"
allow:
- dependency-name: "com.gradle*"
registries:
- gradle-plugin-portal
schedule:
interval: "weekly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "com.gradleup.shadow"
update-types: [ "version-update:semver-major" ]
- dependency-name: "org.junit.jupiter:junit-jupiter"
update-types: [ "version-update:semver-major" ]
- dependency-name: "org.junit.platform:junit-platform-launcher"
update-types: [ "version-update:semver-major" ]
# Explicit entry for each module
- package-ecosystem: "gradle"
directory: "/modules/activemq"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/azure"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/cassandra"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "io.dropwizard.metrics:metrics-core"
update-types: [ "version-update:semver-major" ]
- package-ecosystem: "gradle"
directory: "/modules/chromadb"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/clickhouse"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/cockroachdb"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/consul"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/couchbase"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/cratedb"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/database-commons"
schedule:
interval: "monthly"
- package-ecosystem: "gradle"
directory: "/modules/databend"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/db2"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/dynalite"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/elasticsearch"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/gcloud"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/grafana"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/hivemq"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/influxdb"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "com.influxdb:influxdb-java-client"
update-types: [ "version-update:semver-major" ]
- package-ecosystem: "gradle"
directory: "/modules/jdbc"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "org.mockito:mockito-core"
update-types: [ "version-update:semver-major" ]
- package-ecosystem: "gradle"
directory: "/modules/jdbc-test"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "org.apache.tomcat:tomcat-jdbc"
update-types: [ "version-update:semver-minor" ]
- dependency-name: "org.junit.jupiter:junit-jupiter"
update-types: [ "version-update:semver-major" ]
- package-ecosystem: "gradle"
directory: "/modules/junit-jupiter"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "org.mockito:mockito-core"
update-types: [ "version-update:semver-major" ]
- dependency-name: "org.junit:junit-bom"
update-types: [ "version-update:semver-major" ]
- package-ecosystem: "gradle"
directory: "/modules/k3s"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml"
update-types: [ "version-update:semver-minor", "version-update:semver-patch" ]
- package-ecosystem: "gradle"
directory: "/modules/k6"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/kafka"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/ldap"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/localstack"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/mariadb"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "org.mariadb:r2dbc-mariadb"
update-types: [ "version-update:semver-minor" ]
- package-ecosystem: "gradle"
directory: "/modules/milvus"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/minio"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/mockserver"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/mongodb"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/mssqlserver"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/mysql"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/neo4j"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "org.neo4j.driver:neo4j-java-driver"
update-types: [ "version-update:semver-major" ]
- dependency-name: "org.neo4j:neo4j"
update-types: [ "version-update:semver-major" ]
- package-ecosystem: "gradle"
directory: "/modules/nginx"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/oceanbase"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/ollama"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/openfga"
schedule:
interval: "monthly"
- package-ecosystem: "gradle"
directory: "/modules/oracle-free"
schedule:
interval: "monthly"
- package-ecosystem: "gradle"
directory: "/modules/oracle-xe"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/orientdb"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/postgresql"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/presto"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/pinecone"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "io.pinecone:pinecone-client"
update-types: [ "version-update:semver-major" ]
- package-ecosystem: "gradle"
directory: "/modules/pulsar"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "org.apache.pulsar:pulsar-bom"
update-types: [ "version-update:semver-patch" ]
- package-ecosystem: "gradle"
directory: "/modules/qdrant"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/questdb"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/r2dbc"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "io.r2dbc:r2dbc-spi"
update-types: [ "version-update:semver-major", "version-update:semver-minor" ]
- dependency-name: "org.junit.jupiter:junit-jupiter"
update-types: [ "version-update:semver-major" ]
- package-ecosystem: "gradle"
directory: "/modules/rabbitmq"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/redpanda"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/scylladb"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/selenium"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "org.seleniumhq.selenium:selenium-bom"
update-types: [ "version-update:semver-minor" ]
- package-ecosystem: "gradle"
directory: "/modules/solace"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "org.apache.qpid:qpid-jms-client"
update-types: [ "version-update:semver-major" ]
- package-ecosystem: "gradle"
directory: "/modules/solr"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "org.apache.solr:solr-solrj"
update-types: [ "version-update:semver-major" ]
- package-ecosystem: "gradle"
directory: "/modules/spock"
schedule:
interval: "monthly"
ignore:
- dependency-name: "org.junit:junit-bom"
update-types: [ "version-update:semver-major" ]
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/tidb"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/timeplus"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/toxiproxy"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/trino"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/typesense"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/vault"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/weaviate"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
- package-ecosystem: "gradle"
directory: "/modules/yugabytedb"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
# Examples
- package-ecosystem: "gradle"
directory: "/examples"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "ch.qos.logback:logback-classic"
update-types: [ "version-update:semver-minor" ]
- dependency-name: "org.apache.solr:solr-solrj"
update-types: [ "version-update:semver-major" ]
- dependency-name: "org.neo4j.driver:neo4j-java-driver"
update-types: [ "version-update:semver-major" ]
- dependency-name: "org.testng:testng"
update-types: [ "version-update:semver-minor" ]
- dependency-name: "org.slf4j:slf4j-api"
update-types: [ "version-update:semver-major" ]
- dependency-name: "org.springframework.boot"
update-types: [ "version-update:semver-major" ]
- dependency-name: "com.diffplug.spotless"
update-types: [ "version-update:semver-major", "version-update:semver-minor" ]
- dependency-name: "com.hazelcast:hazelcast"
update-types: [ "version-update:semver-minor" ]
- dependency-name: "org.junit.jupiter:junit-jupiter"
update-types: [ "version-update:semver-major" ]
- dependency-name: "org.junit.platform:junit-platform-launcher"
update-types: [ "version-update:semver-major" ]
- dependency-name: "com.gradleup.shadow"
update-types: [ "version-update:semver-major" ]
# Smoke test
- package-ecosystem: "gradle"
directory: "/smoke-test"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
ignore:
- dependency-name: "ch.qos.logback:logback-classic"
update-types: [ "version-update:semver-minor" ]
- dependency-name: "com.diffplug.spotless"
update-types: [ "version-update:semver-major", "version-update:semver-minor" ]
- dependency-name: "org.junit.jupiter:junit-jupiter"
update-types: [ "version-update:semver-major" ]
- dependency-name: "org.junit.platform:junit-platform-launcher"
update-types: [ "version-update:semver-major" ]
- dependency-name: "com.gradleup.shadow"
update-types: [ "version-update:semver-major" ]
# GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
================================================
FILE: .github/labeler.yml
================================================
"area/docker-compose":
- changed-files:
- any-glob-to-any-file:
- core/src/main/java/org/testcontainers/containers/ComposeContainer.java
- core/src/main/java/org/testcontainers/containers/ComposeDelegate.java
- core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java
- core/src/main/java/org/testcontainers/containers/DockerComposeFiles.java
- core/src/test/java/org/testcontainers/containers/Compose*Test.java
- core/src/test/java/org/testcontainers/containers/DockerCompose*Test.java
- core/src/test/java/org/testcontainers/junit/Compose*Test.java
- core/src/test/java/org/testcontainers/junit/DockerCompose*Test.java
"github_actions":
- changed-files:
- any-glob-to-any-file:
- .github/workflows/*
"gradle-wrapper":
- changed-files:
- any-glob-to-any-file:
- gradle/wrapper/*
- gradlew
- gradlew.bat
"modules/activemq":
- changed-files:
- any-glob-to-any-file:
- modules/activemq/**/*
"modules/azure":
- changed-files:
- any-glob-to-any-file:
- modules/azure/**/*
"modules/cassandra":
- changed-files:
- any-glob-to-any-file:
- modules/cassandra/**/*
"modules/chromadb":
- changed-files:
- any-glob-to-any-file:
- modules/chromadb/**/*
"modules/clickhouse":
- changed-files:
- any-glob-to-any-file:
- modules/clickhouse/**/*
"modules/cockroachdb":
- changed-files:
- any-glob-to-any-file:
- modules/cockroachdb/**/*
"modules/consul":
- changed-files:
- any-glob-to-any-file:
- modules/consul/**/*
"modules/couchbase":
- changed-files:
- any-glob-to-any-file:
- modules/couchbase/**/*
"modules/cratedb":
- changed-files:
- any-glob-to-any-file:
- modules/cratedb/**/*
"modules/databend":
- changed-files:
- any-glob-to-any-file:
- modules/databend/**/*
"modules/db2":
- changed-files:
- any-glob-to-any-file:
- modules/db2/**/*
"modules/dynalite":
- changed-files:
- any-glob-to-any-file:
- modules/dynalite/**/*
"modules/elasticsearch":
- changed-files:
- any-glob-to-any-file:
- modules/elasticsearch/**/*
"modules/gcloud":
- changed-files:
- any-glob-to-any-file:
- modules/gcloud/**/*
"modules/grafana":
- changed-files:
- any-glob-to-any-file:
- modules/grafana/**/*
"modules/hivemq":
- changed-files:
- any-glob-to-any-file:
- modules/hivemq/**/*
"modules/influx":
- changed-files:
- any-glob-to-any-file:
- modules/influxdb/**/*
"modules/jdbc":
- changed-files:
- any-glob-to-any-file:
- modules/jdbc/**/*
"modules/jupiter":
- changed-files:
- any-glob-to-any-file:
- modules/junit-jupiter/**/*
"modules/k3s":
- changed-files:
- any-glob-to-any-file:
- modules/k3s/**/*
"modules/k6":
- changed-files:
- any-glob-to-any-file:
- modules/k6/**/*
"modules/kafka":
- changed-files:
- any-glob-to-any-file:
- modules/kafka/**/*
"modules/ldap":
- changed-files:
- any-glob-to-any-file:
- modules/ldap/**/*
"modules/localstack":
- changed-files:
- any-glob-to-any-file:
- modules/localstack/**/*
"modules/mariadb":
- changed-files:
- any-glob-to-any-file:
- modules/mariadb/**/*
"modules/milvus":
- changed-files:
- any-glob-to-any-file:
- modules/milvus/**/*
"modules/minio":
- changed-files:
- any-glob-to-any-file:
- modules/minio/**/*
"modules/mockserver":
- changed-files:
- any-glob-to-any-file:
- modules/mockserver/**/*
"modules/mongodb":
- changed-files:
- any-glob-to-any-file:
- modules/mongodb/**/*
"modules/sql-server":
- changed-files:
- any-glob-to-any-file:
- modules/mssqlserver/**/*
"modules/mysql":
- changed-files:
- any-glob-to-any-file:
- modules/mysql/**/*
"modules/neo4j":
- changed-files:
- any-glob-to-any-file:
- modules/neo4j/**/*
"modules/nginx":
- changed-files:
- any-glob-to-any-file:
- modules/nginx/**/*
"modules/oceanbase":
- changed-files:
- any-glob-to-any-file:
- modules/oceanbase/**/*
"modules/ollama":
- changed-files:
- any-glob-to-any-file:
- modules/ollama/**/*
"modules/openfga":
- changed-files:
- any-glob-to-any-file:
- modules/openfga/**/*
"modules/oracle":
- changed-files:
- any-glob-to-any-file:
- modules/oracle-free/**/*
- modules/oracle-xe/**/*
"modules/orientdb":
- changed-files:
- any-glob-to-any-file:
- modules/orientdb/**/*
"modules/pinecone":
- changed-files:
- any-glob-to-any-file:
- modules/pinecone/**/*
"modules/postgres":
- changed-files:
- any-glob-to-any-file:
- modules/postgresql/**/*
"modules/presto":
- changed-files:
- any-glob-to-any-file:
- modules/presto/**/*
"modules/pulsar":
- changed-files:
- any-glob-to-any-file:
- modules/pulsar/**/*
"modules/qdrant":
- changed-files:
- any-glob-to-any-file:
- modules/qdrant/**/*
"modules/questdb":
- changed-files:
- any-glob-to-any-file:
- modules/questdb/**/*
"modules/r2dbc":
- changed-files:
- any-glob-to-any-file:
- modules/r2dbc/**/*
"modules/rabbitmq":
- changed-files:
- any-glob-to-any-file:
- modules/rabbitmq/**/*
"modules/redpanda":
- changed-files:
- any-glob-to-any-file:
- modules/redpanda/**/*
"modules/scylladb":
- changed-files:
- any-glob-to-any-file:
- modules/scylladb/**/*
"modules/selenium":
- changed-files:
- any-glob-to-any-file:
- modules/selenium/**/*
"modules/solace":
- changed-files:
- any-glob-to-any-file:
- modules/solace/**/*
"modules/solr":
- changed-files:
- any-glob-to-any-file:
- modules/solr/**/*
"modules/spock":
- changed-files:
- any-glob-to-any-file:
- modules/spock/**/*
"modules/tidb":
- changed-files:
- any-glob-to-any-file:
- modules/tidb/**/*
"modules/timeplus":
- changed-files:
- any-glob-to-any-file:
- modules/timeplus/**/*
"modules/toxiproxy":
- changed-files:
- any-glob-to-any-file:
- modules/toxiproxy/**/*
"modules/trino":
- changed-files:
- any-glob-to-any-file:
- modules/trino/**/*
"modules/typesense":
- changed-files:
- any-glob-to-any-file:
- modules/typesense/**/*
"modules/vault":
- changed-files:
- any-glob-to-any-file:
- modules/vault/**/*
"modules/weaviate":
- changed-files:
- any-glob-to-any-file:
- modules/weaviate/**/*
"modules/yugabytedb":
- changed-files:
- any-glob-to-any-file:
- modules/yugabytedb/**/*
"type/docs":
- changed-files:
- any-glob-to-any-file:
- docs/**/*.md
================================================
FILE: .github/pull_request_template.md
================================================
<!--
Thanks for contributing to Testcontainers. Before submitting a pull request, please
review our contributing guidelines at https://java.testcontainers.org/contributing/
Please also review the following notes before submitting a pull request.
New Modules:
If you are contributing a new module, please add your module name to the following files:
* `./.github/ISSUE_TEMPLATE/bug_report.yaml`
* `./.github/ISSUE_TEMPLATE/enhancement.yaml`
* `./.github/ISSUE_TEMPLATE/feature.yaml`
* `./.github/dependabot.yml`
* `./.github/labeler.yml`
Also make sure that your new module has the appropriate documentation under `./docs/modules/`
Before committing any change, please run `./gradlew checkstyleMain checkstyleTest spotlessApply` and fix any issues that occur.
Dependency Upgrades:
Please do not open a pull request to update only a version dependency. Existing process will perform
the upgrade every week. However, if the upgrade involves more changes (changes for deprecated API) then
your pull request is very welcome.
Describing Your Changes:
If, after having reviewed the notes above, you're ready to submit your pull request, please
provide a brief description of the proposed changes and their context. If they fix a bug, please
describe the broken behaviour and how the changes fix it. If they make an enhancement,
please describe the new functionality and why you believe it's useful. If your pull
request relates to any existing issues, please reference them by using the issue number
prefixed with #.
-->
================================================
FILE: .github/release-drafter.yml
================================================
name-template: $NEXT_PATCH_VERSION
tag-template: $NEXT_PATCH_VERSION
template: |
# What's Changed
$CHANGES
categories:
- title: ⚠️ Breaking API changes
label: type/breaking-api-change
- title: 🚀 Features & Enhancements
labels:
- type/feature
- type/enhancement
- title: ☠️ Deprecations
label: type/deprecation
- title: 🐛 Bug Fixes
label: type/bug
- title: 📖 Documentation
label: type/docs
- title: 🧹 Housekeeping
labels:
- type/housekeeping
- type/test-improvement
- title: 📦 Dependency updates
label: dependencies
collapse-after: 5
================================================
FILE: .github/settings.yml
================================================
# These settings are synced to GitHub by https://probot.github.io/apps/settings/
repository:
# See https://docs.github.com/en/rest/reference/repos#update-a-repository for all available settings.
# The name of the repository. Changing this will rename the repository
name: testcontainers-java
# A short description of the repository that will show up on GitHub
description: Testcontainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.
# A URL with more information about the repository
homepage: https://testcontainers.org
# A comma-separated list of topics to set on the repository
topics: java,testing,docker,docker-compose,jvm,test-automation,junit,hacktoberfest,integration-testing
# Either `true` to make the repository private, or `false` to make it public.
private: false
# Either `true` to enable issues for this repository, `false` to disable them.
has_issues: true
# Either `true` to enable projects for this repository, or `false` to disable them.
# If projects are disabled for the organization, passing `true` will cause an API error.
has_projects: false
# Either `true` to enable the wiki for this repository, `false` to disable it.
has_wiki: false
# Either `true` to enable downloads for this repository, `false` to disable them.
has_downloads: false
# Updates the default branch for this repository.
default_branch: main
# Either `true` to allow squash-merging pull requests, or `false` to prevent
# squash-merging.
allow_squash_merge: true
# Either `true` to allow merging pull requests with a merge commit, or `false`
# to prevent merging pull requests with merge commits.
allow_merge_commit: false
# Either `true` to allow rebase-merging pull requests, or `false` to prevent
# rebase-merging.
allow_rebase_merge: false
# Either `true` to enable automatic deletion of branches on merge, or `false` to disable
delete_branch_on_merge: true
# Labels: define labels for Issues and Pull Requests
# If including a `#`, make sure to wrap it with quotes!
labels:
- name: area/bitbucket-pipelines
color: '#f9d0c4'
- name: area/docker-compose
color: '#f9d0c4'
- name: area/logging
color: '#f9d0c4'
- name: area/shading
color: '#f9d0c4'
- name: area/test frameworks
color: '#f9d0c4'
- name: blocker
color: '#b60205'
- name: client/docker-for-mac
color: '#c2e0c6'
- name: client/docker-for-windows
color: '#c2e0c6'
- name: client/docker-machine
color: '#c2e0c6'
- name: client/in-container
color: '#c2e0c6'
- name: client/podman
color: '#c2e0c6'
- name: dependencies
color: '#0025ff'
- name: github_actions
color: '#000000'
- name: good first issue
color: '#14d60a'
- name: gradle-wrapper
color: '#02303A'
- name: hacktoberfest
color: '#14d60a'
- name: hacktoberfest-accepted
color: '#79C259'
- name: help wanted
color: '#fef2c0'
- name: modules/activemq
color: '#006b75'
- name: modules/azure
color: '#006b75'
- name: modules/cassandra
color: '#006b75'
- name: modules/chromadb
color: '#006b75'
- name: modules/clickhouse
color: '#006b75'
- name: modules/cockroachdb
color: '#006b75'
- name: modules/consul
color: '#006b75'
- name: modules/couchbase
color: '#006b75'
- name: modules/cratedb
color: '#006b75'
- name: modules/db2
color: '#006b75'
- name: modules/dynalite
color: '#006b75'
- name: modules/elasticsearch
color: '#006b75'
- name: modules/gcloud
color: '#006b75'
- name: modules/grafana
color: '#006b75'
- name: modules/hivemq
color: '#006b75'
- name: modules/influx
color: '#006b75'
- name: modules/jdbc
color: '#006b75'
- name: modules/jupiter
color: '#006b75'
- name: modules/k3s
color: '#006b75'
- name: modules/k6
color: '#006b75'
- name: modules/kafka
color: '#006b75'
- name: modules/ldap
color: '#006b75'
- name: modules/localstack
color: '#006b75'
- name: modules/mariadb
color: '#006b75'
- name: modules/milvus
color: '#006b75'
- name: modules/minio
color: '#006b75'
- name: modules/mockserver
color: '#006b75'
- name: modules/mongodb
color: '#006b75'
- name: modules/mysql
color: '#006b75'
- name: modules/neo4j
color: '#006b75'
- name: modules/nginx
color: '#006b75'
- name: modules/oceanbase
color: '#006b75'
- name: modules/ollama
color: '#006b75'
- name: modules/openfga
color: '#006b75'
- name: modules/oracle
color: '#006b75'
- name: modules/orientdb
color: '#006b75'
- name: modules/pinecone
color: '#006b75'
- name: modules/postgres
color: '#006b75'
- name: modules/presto
color: '#006b75'
- name: modules/pulsar
color: '#006b75'
- name: modules/qdrant
color: '#006b75'
- name: modules/questdb
color: '#006b75'
- name: modules/r2dbc
color: '#006b75'
- name: modules/rabbitmq
color: '#006b75'
- name: modules/redpanda
color: '#006b75'
- name: modules/selenium
color: '#006b75'
- name: modules/solace
color: '#006b75'
- name: modules/solr
color: '#006b75'
- name: modules/spock
color: '#006b75'
- name: modules/sql-server
color: '#006b75'
- name: modules/tidb
color: '#006b75'
- name: modules/timeplus
color: '#006b75'
- name: modules/toxiproxy
color: '#006b75'
- name: modules/trino
color: '#006b75'
- name: modules/typesense
color: '#006b75'
- name: modules/vault
color: '#006b75'
- name: modules/weaviate
color: '#006b75'
- name: modules/yugabytedb
color: '#006b75'
- name: modules/databend
color: '#006b75'
- name: os/linux
color: '#1d76db'
- name: os/macOS
color: '#1d76db'
- name: os/windows
color: '#1d76db'
- name: resolution/acknowledged
color: '#fef2c0'
- name: resolution/answered
color: '#fef2c0'
- name: resolution/awaiting-release
color: '#fef2c0'
- name: resolution/duplicate
color: '#fef2c0'
- name: resolution/invalid
color: '#fef2c0'
- name: resolution/pr-submitted
color: '#fef2c0'
- name: resolution/somedaymaybe
color: '#fef2c0'
- name: resolution/waiting-for-info
color: '#fef2c0'
- name: resolution/wontfix
color: '#fef2c0'
- name: security
color: '#ee0701'
- name: stale
color: '#ffffff'
- name: type/breaking-api-change
color: '#d4c5f9'
- name: type/bug
color: '#d4c5f9'
- name: type/deprecation
color: '#d4c5f9'
- name: type/docs
color: '#d4c5f9'
- name: type/enhancement
color: '#d4c5f9'
- name: type/feature
color: '#d4c5f9'
- name: type/housekeeping
color: '#d4c5f9'
- name: type/new module
color: '#d4c5f9'
- name: type/question
color: '#d4c5f9'
- name: type/test-improvement
color: '#d4c5f9'
# Collaborators: give specific users access to this repository.
# See https://docs.github.com/en/rest/reference/repos#add-a-repository-collaborator for available options
# collaborators:
# - username:
# permission: maintain
# Note: `permission` is only valid on organization-owned repositories.
# The permission to grant the collaborator. Can be one of:
# * `pull` - can pull, but not push to or administer this repository.
# * `push` - can pull and push, but not administer this repository.
# * `admin` - can pull, push and administer this repository.
# * `maintain` - Recommended for project managers who need to manage the repository without access to sensitive or destructive actions.
# * `triage` - Recommended for contributors who need to proactively manage issues and pull requests without write access.
# See https://docs.github.com/en/rest/reference/teams#add-or-update-team-repository-permissions for available options
teams:
# Please make sure the team already exist in the organization, as the repository-settings application is not creating them.
# See https://github.com/repository-settings/app/discussions/639 for more information about teams and settings
- name: java-team
# The permission to grant the team. Can be one of:
# * `pull` - can pull, but not push to or administer this repository.
# * `push` - can pull and push, but not administer this repository.
# * `admin` - can pull, push and administer this repository.
# * `maintain` - Recommended for project managers who need to manage the repository without access to sensitive or destructive actions.
# * `triage` - Recommended for contributors who need to proactively manage issues and pull requests without write access.
permission: admin
- name: oss-team
permission: maintain
branches:
- name: main
# https://docs.github.com/en/rest/reference/repos#update-branch-protection
# Branch Protection settings. Set to null to disable
protection:
# Required. Require at least one approving review on a pull request, before merging. Set to null to disable.
required_pull_request_reviews:
# The number of approvals required. (1-6)
required_approving_review_count: 1
# Dismiss approved reviews automatically when a new commit is pushed.
dismiss_stale_reviews: true
# Blocks merge until code owners have reviewed.
require_code_owner_reviews: true
# Specify which users and teams can dismiss pull request reviews. Pass an empty dismissal_restrictions object to disable. User and team dismissal_restrictions are only available for organization-owned repositories. Omit this parameter for personal repositories.
dismissal_restrictions:
users: []
teams: [java-team]
# Required. Require status checks to pass before merging. Set to null to disable
required_status_checks:
# Required. Require branches to be up to date before merging.
strict: true
# Required. The list of status checks to require in order to merge into this branch
contexts: ["core (17)", "core (21)", "check_docs_examples (:docs:examples:check)", "in-docker_test", "ci/circleci: minimal_core", "test"]
# Required. Enforce all configured restrictions for administrators. Set to true to enforce required status checks for repository administrators. Set to null to disable.
enforce_admins: false
# Prevent merge commits from being pushed to matching branches
required_linear_history: true
# Required. Restrict who can push to this branch. Team and user restrictions are only available for organization-owned repositories. Set to null to disable.
restrictions:
apps: []
users: []
teams: [java-team]
================================================
FILE: .github/workflows/ci-docker-wormhole.yml
================================================
name: CI-Docker-Wormhole
on:
pull_request:
paths-ignore:
- '.github/ISSUE_TEMPLATE/*.yaml'
- '.github/CODEOWNERS'
- '.github/pull_request_template.md'
- 'docs/**/*.css'
- 'docs/**/*.html'
- 'docs/**/*.ico'
- 'docs/**/*.md'
- 'docs/**/*.png'
- 'docs/**/*.svg'
- 'mkdocs.yml'
- 'README.md'
- 'RELEASING.md'
- '.sdkmanrc'
push:
branches: [ main ]
paths-ignore:
- '.github/ISSUE_TEMPLATE/*.yaml'
- '.github/CODEOWNERS'
- '.github/pull_request_template.md'
- 'docs/**/*.css'
- 'docs/**/*.html'
- 'docs/**/*.ico'
- 'docs/**/*.md'
- 'docs/**/*.png'
- 'docs/**/*.svg'
- 'mkdocs.yml'
- 'README.md'
- 'RELEASING.md'
- '.sdkmanrc'
concurrency:
group: "${{ github.workflow }}-${{ github.head_ref || github.sha }}"
cancel-in-progress: true
permissions:
contents: read
jobs:
in-docker_test:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v5
- name: Build with Gradle
run: |
docker run -i --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$HOME:$HOME" \
-v "$PWD:$PWD" \
-w "$PWD" \
-e AUTO_APPLY_GIT_HOOKS=false \
eclipse-temurin:17-jdk-alpine \
./gradlew --no-daemon --continue --scan testcontainers:test --tests '*GenericContainerRuleTest'
================================================
FILE: .github/workflows/ci-rootless.yml
================================================
name: CI-Docker-Rootless
on:
pull_request:
paths-ignore:
- '.github/ISSUE_TEMPLATE/*.yaml'
- '.github/CODEOWNERS'
- '.github/pull_request_template.md'
- 'docs/**/*.css'
- 'docs/**/*.html'
- 'docs/**/*.ico'
- 'docs/**/*.md'
- 'docs/**/*.png'
- 'docs/**/*.svg'
- 'mkdocs.yml'
- 'README.md'
- 'RELEASING.md'
- '.sdkmanrc'
push:
branches: [ main ]
paths-ignore:
- '.github/ISSUE_TEMPLATE/*.yaml'
- '.github/CODEOWNERS'
- '.github/pull_request_template.md'
- 'docs/**/*.css'
- 'docs/**/*.html'
- 'docs/**/*.ico'
- 'docs/**/*.md'
- 'docs/**/*.png'
- 'docs/**/*.svg'
- 'mkdocs.yml'
- 'README.md'
- 'RELEASING.md'
- '.sdkmanrc'
concurrency:
group: "${{ github.workflow }}-${{ github.head_ref || github.sha }}"
cancel-in-progress: true
permissions:
contents: read
jobs:
test:
runs-on: ubuntu-22.04
permissions:
checks: write
steps:
- uses: actions/checkout@v5
- name: Setup rootless Docker
uses: docker/setup-docker-action@v4
with:
rootless: true
- name: Setup Gradle Build Action
uses: gradle/actions/setup-gradle@v5
- name: Build with Gradle
run: ./gradlew --no-daemon --scan testcontainers:test --tests '*GenericContainerRuleTest'
- uses: ./.github/actions/setup-junit-report
================================================
FILE: .github/workflows/ci-windows-trigger.yml
================================================
name: windows-test command dispatch
on:
issue_comment:
types: [created]
permissions:
contents: read
jobs:
windows-test-command-trigger:
permissions:
pull-requests: write # for peter-evans/slash-command-dispatch to create PR reaction
runs-on: ubuntu-latest
steps:
- name: Trigger windows-test command
uses: peter-evans/slash-command-dispatch@13bc09769d122a64f75aa5037256f6f2d78be8c4 # v4.0.0
with:
token: ${{ secrets.WINDOWS_WORKERS_TOKEN }}
# The command to trigger the pipeline: e.g. /windows-test
# The command name must match the name of the repository_dispatch.type in 'ci-windows.yml' workflow, using '-command' as suffix. E.g. 'windows-test-command'
commands: windows-test
issue-type: pull-request
# The user that owns the above token must belong to the elevated role of 'Maintainers'
permission: maintain
reactions: false
================================================
FILE: .github/workflows/ci-windows.yml
================================================
name: CI - Windows
on:
pull_request:
paths-ignore:
- '.github/ISSUE_TEMPLATE/*.yaml'
- '.github/CODEOWNERS'
- '.github/pull_request_template.md'
- 'docs/**/*.css'
- 'docs/**/*.html'
- 'docs/**/*.ico'
- 'docs/**/*.md'
- 'docs/**/*.png'
- 'docs/**/*.svg'
- 'mkdocs.yml'
- 'README.md'
- 'RELEASING.md'
- '.sdkmanrc'
push:
branches: [ main ]
paths-ignore:
- '.github/ISSUE_TEMPLATE/*.yaml'
- '.github/CODEOWNERS'
- '.github/pull_request_template.md'
- 'docs/**/*.css'
- 'docs/**/*.html'
- 'docs/**/*.ico'
- 'docs/**/*.md'
- 'docs/**/*.png'
- 'docs/**/*.svg'
- 'mkdocs.yml'
- 'README.md'
- 'RELEASING.md'
- '.sdkmanrc'
repository_dispatch:
types: [windows-test-command]
concurrency:
group: "${{ github.workflow }}-${{ github.head_ref || github.sha }}"
cancel-in-progress: true
permissions:
contents: read
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }}
jobs:
main:
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
runs-on: self-hosted
permissions:
checks: write
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-build
- name: Build with Gradle
run: ./gradlew.bat cleanTest testcontainers:test --no-daemon --continue --scan --no-build-cache
- uses: ./.github/actions/setup-junit-report
pr:
if: ${{ github.event.client_payload.slash_command.command == 'windows-test' }}
runs-on: self-hosted
permissions:
checks: write
statuses: write
steps:
- name: Create pending status
uses: actions/github-script@v8
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
github.rest.repos.createCommitStatus({
owner: context.repo.owner,
repo: context.repo.repo,
sha: context.payload.client_payload.pull_request.head.sha,
state: 'pending',
target_url: `https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`,
context: 'CI - Windows',
})
- uses: actions/checkout@v5
with:
token: ${{ secrets.GITHUB_TOKEN }}
repository: ${{ github.event.client_payload.pull_request.head.repo.full_name }}
ref: ${{ github.event.client_payload.pull_request.head.ref }}
- uses: ./.github/actions/setup-build
- name: Build with Gradle
run: ./gradlew.bat cleanTest testcontainers:test --no-daemon --continue --scan --no-build-cache
- uses: ./.github/actions/setup-junit-report
- name: Create success status
uses: actions/github-script@v8
if: success()
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
github.rest.repos.createCommitStatus({
owner: context.repo.owner,
repo: context.repo.repo,
sha: context.payload.client_payload.pull_request.head.sha,
state: 'success',
target_url: `https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`,
context: 'CI - Windows',
})
- name: Create failure status
uses: actions/github-script@v8
if: failure()
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
github.rest.repos.createCommitStatus({
owner: context.repo.owner,
repo: context.repo.repo,
sha: context.payload.client_payload.pull_request.head.sha,
state: 'failure',
target_url: `https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`,
context: 'CI - Windows',
})
================================================
FILE: .github/workflows/ci.yml
================================================
name: CI
on:
pull_request:
paths-ignore:
- '.github/ISSUE_TEMPLATE/*.yaml'
- '.github/CODEOWNERS'
- '.github/pull_request_template.md'
- 'docs/**/*.css'
- 'docs/**/*.html'
- 'docs/**/*.ico'
- 'docs/**/*.md'
- 'docs/**/*.png'
- 'docs/**/*.svg'
- 'mkdocs.yml'
- 'README.md'
- 'RELEASING.md'
- '.sdkmanrc'
push:
branches: [ main ]
paths-ignore:
- '.github/ISSUE_TEMPLATE/*.yaml'
- '.github/CODEOWNERS'
- '.github/pull_request_template.md'
- 'docs/**/*.css'
- 'docs/**/*.html'
- 'docs/**/*.ico'
- 'docs/**/*.md'
- 'docs/**/*.png'
- 'docs/**/*.svg'
- 'mkdocs.yml'
- 'README.md'
- 'RELEASING.md'
- '.sdkmanrc'
concurrency:
group: "${{ github.workflow }}-${{ github.head_ref || github.sha }}"
cancel-in-progress: true
permissions:
contents: read
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
DEVELOCITY_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }}
jobs:
core:
runs-on: ubuntu-22.04
permissions:
checks: write
strategy:
matrix:
java: [ '17', '21' ]
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-build
with:
java-version: ${{ matrix.java }}
- name: Build and test with Gradle
run: |
./gradlew :testcontainers:check --no-daemon --continue --scan
- uses: ./.github/actions/setup-junit-report
turbo-mode:
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
runs-on: ubuntu-22.04
permissions:
checks: write
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-build
- name: Setup Testcontainers Cloud Client
uses: atomicjar/testcontainers-cloud-setup-action@main
with:
token: ${{ secrets.TC_CLOUD_TOKEN }}
args: --max-concurrency=4
- name: Test using Testcontainers Cloud with Turbo Mode enabled
working-directory: ./smoke-test/
run: |
./gradlew check --no-daemon --continue --scan --info
- uses: ./.github/actions/setup-junit-report
find_gradle_jobs:
needs: [core]
runs-on: ubuntu-22.04
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-java
- name: Setup Gradle Build Action
uses: gradle/actions/setup-gradle@v5
- id: set-matrix
env:
# Since we override the tests executor,
# we should not push empty results to the cache
READ_ONLY_REMOTE_GRADLE_CACHE: true
run: |
TASKS=$(./gradlew --no-daemon --parallel -q testMatrix | jq 'del(.[] | select(. == ":testcontainers:check" or startswith(":docs:")))' --compact-output)
echo $TASKS
echo "matrix={\"gradle_args\":$TASKS}" >> $GITHUB_OUTPUT
check:
needs: [find_gradle_jobs]
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.find_gradle_jobs.outputs.matrix) }}
runs-on: ubuntu-22.04
permissions:
checks: write
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-build
- name: Build and test with Gradle (${{matrix.gradle_args}})
run: |
./gradlew --no-daemon --continue --scan ${{matrix.gradle_args}}
- uses: ./.github/actions/setup-junit-report
find_examples_jobs:
needs: [check]
runs-on: ubuntu-22.04
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-java
- name: Setup Gradle Build Action
uses: gradle/actions/setup-gradle@v5
- id: set-matrix
working-directory: ./examples/
env:
# Since we override the tests executor,
# we should not push empty results to the cache
READ_ONLY_REMOTE_GRADLE_CACHE: true
run: |
TASKS=$(./gradlew --no-daemon --parallel -q testMatrix)
echo $TASKS
echo "matrix={\"gradle_args\":$TASKS}" >> $GITHUB_OUTPUT
check_examples:
needs: [find_examples_jobs]
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.find_examples_jobs.outputs.matrix) }}
runs-on: ubuntu-22.04
permissions:
checks: write
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-build
- name: Build and test Examples with Gradle (${{matrix.gradle_args}})
working-directory: ./examples/
run: |
./gradlew --no-daemon --continue --scan --info ${{matrix.gradle_args}}
- uses: ./.github/actions/setup-junit-report
find_docs_examples_jobs:
needs: [check_examples]
runs-on: ubuntu-22.04
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-java
- name: Setup Gradle Build Action
uses: gradle/actions/setup-gradle@v5
- id: set-matrix
env:
# Since we override the tests executor,
# we should not push empty results to the cache
READ_ONLY_REMOTE_GRADLE_CACHE: true
run: |
TASKS=$(./gradlew --no-daemon --parallel -q testMatrix | jq 'map(select(startswith(":docs:")))' --compact-output)
echo $TASKS
echo "matrix={\"gradle_args\":$TASKS}" >> $GITHUB_OUTPUT
check_docs_examples:
needs: [find_docs_examples_jobs]
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.find_docs_examples_jobs.outputs.matrix) }}
runs-on: ubuntu-22.04
permissions:
checks: write
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-build
- name: Build and test with Gradle (${{matrix.gradle_args}})
run: |
./gradlew --no-daemon --continue --scan ${{matrix.gradle_args}}
- uses: ./.github/actions/setup-junit-report
================================================
FILE: .github/workflows/combine-prs.yml
================================================
name: Combine PRs
on:
workflow_dispatch:
jobs:
combine-prs:
permissions:
contents: write
pull-requests: write
checks: read
runs-on: ubuntu-latest
steps:
- name: combine-prs
id: combine-prs
uses: github/combine-prs@v5.2.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/labeler.yml
================================================
name: "Pull Request Labeler"
on:
- pull_request_target
jobs:
triage:
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v6
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
================================================
FILE: .github/workflows/moby-latest.yml
================================================
name: Tests against recent Docker engine releases
on:
workflow_dispatch:
inputs:
version:
description: 'Docker version'
required: false
default: 'latest'
type: string
schedule:
# nightly build, at 23:59 CEST
- cron: '59 23 * * *'
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }}
jobs:
test_docker:
strategy:
matrix:
include:
- { install-docker-type: "STABLE", version: "${{ inputs.version }}", channel: stable, rootless: false }
- { install-docker-type: "ROOTLESS", version: "${{ inputs.version }}", channel: stable, rootless: true }
- { install-docker-type: "ROOTFUL", version: edge, channel: test, rootless: false }
name: "Core tests using Docker ${{ matrix.install-docker-type }} (channel ${{ matrix.channel }})"
runs-on: ubuntu-22.04
continue-on-error: true
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-build
- name: Install Stable Docker
id: setup_docker
uses: docker/setup-docker-action@v4
with:
version: ${{ matrix.version }}
channel: ${{ matrix.channel }}
rootless: ${{ matrix.rootless }}
- name: Check Docker version
run: docker version
- name: Build with Gradle
run: ./gradlew cleanTest --no-daemon --continue --scan -Dscan.tag.DOCKER_${{ matrix.install-docker-type }} testcontainers:test -Dorg.gradle.caching=false
env:
DOCKER_HOST: ${{steps.setup_docker.outputs.sock}}
- uses: ./.github/actions/setup-junit-report
- name: Notify to Slack on failures
if: failure()
id: slack
uses: slackapi/slack-github-action@v2.1.1
with:
payload: |
{
"tc_project": "testcontainers-java",
"tc_docker_install_type": "${{ matrix.install-docker-type }}",
"tc_github_action_url": "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}/attempts/${{ github.run_attempt }}",
"tc_github_action_status": "FAILED",
"tc_slack_channel_id": "${{ secrets.SLACK_DOCKER_LATEST_CHANNEL_ID }}"
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_DOCKER_LATEST_WEBHOOK }}
================================================
FILE: .github/workflows/release-drafter.yml
================================================
name: Release Drafter
on:
push:
branches:
- main
pull_request:
types: [opened, reopened, synchronize]
permissions:
contents: read
jobs:
update_release_draft:
permissions:
contents: write # for release-drafter/release-drafter to create a github release
pull-requests: write # for release-drafter/release-drafter to add label to PR
if: github.repository == 'testcontainers/testcontainers-java'
runs-on: ubuntu-latest
steps:
- uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v5.19.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/release.yml
================================================
name: Release
on:
release:
types: [published]
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
permissions:
contents: read
jobs:
release:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v5
- uses: ./.github/actions/setup-java
- name: Clear existing docker image cache
run: docker image prune -af
- name: Setup Gradle Build Action
uses: gradle/actions/setup-gradle@v5
- name: Run Gradle Build
run: ./gradlew build --scan --no-daemon -i -x test
- name: Run Gradle Publish
run: |
./gradlew publish \
-Pversion="${{github.event.release.tag_name}}" --scan --no-daemon -i
- name: Run Gradle Deploy
run: |
./gradlew jreleaserDeploy -Pversion="${{github.event.release.tag_name}}" --scan --no-daemon -i
env:
JRELEASER_GPG_PUBLIC_KEY: ${{ vars.GPG_PUBLIC_KEY }}
JRELEASER_GPG_SECRET_KEY: ${{ secrets.GPG_SIGNING_KEY }}
JRELEASER_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.JRELEASER_MAVENCENTRAL_USERNAME }}
JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.JRELEASER_MAVENCENTRAL_PASSWORD }}
================================================
FILE: .github/workflows/scripts/check_ci_status.sh
================================================
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
set -o xtrace
if [ -z $1 ] ; then
echo "First parameter (commit SHA) is required!" && exit 1;
fi
STATUS=$(curl -s https://api.github.com/repos/testcontainers/testcontainers-java/commits/$1/status | jq -r '.state')
[ "$STATUS" == 'success' ]
================================================
FILE: .github/workflows/update-docs-version.yml
================================================
name: Update docs version
on:
release:
types: [ published ]
permissions:
contents: read
jobs:
build:
permissions:
contents: write # for peter-evans/create-pull-request to create branch
pull-requests: write # for peter-evans/create-pull-request to create a PR
if: github.repository == 'testcontainers/testcontainers-java'
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v5
with:
ref: main
- name: Update latest_version property in mkdocs.yml
run: |
sed -i "s/latest_version: .*/latest_version: ${GITHUB_REF_NAME}/g" mkdocs.yml
git diff
- name: Create Pull Request
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v3.10.1
with:
title: Update docs version to ${{ github.ref_name }}
body: |
Update docs version to ${{ github.ref_name }}
skip-checks: true
branch: update-docs-version
delete-branch: true
================================================
FILE: .github/workflows/update-gradle-wrapper.yml
================================================
name: Update Gradle Wrapper
on:
schedule:
- cron: "0 0 * * *"
permissions:
contents: read
jobs:
update-gradle-wrapper:
permissions:
contents: write # for gradle-update/update-gradle-wrapper-action
pull-requests: write # for gradle-update/update-gradle-wrapper-action
if: github.repository == 'testcontainers/testcontainers-java'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Update Gradle Wrapper
uses: gradle-update/update-gradle-wrapper-action@512b1875f3b6270828abfe77b247d5895a2da1e5 # v1.0.13
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
labels: dependencies
- uses: gradle/actions/wrapper-validation@v5
================================================
FILE: .github/workflows/update-testcontainers-version.yml
================================================
name: Update testcontainers version
on:
release:
types: [ published ]
permissions:
contents: read
jobs:
build:
permissions:
contents: write # for peter-evans/create-pull-request to create branch
pull-requests: write # for peter-evans/create-pull-request to create a PR
if: github.repository == 'testcontainers/testcontainers-java'
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v5
with:
ref: main
- name: Update testcontainers.version property in gradle.properties
run: |
sed -i "s/^testcontainers\.version=.*/testcontainers\.version=${GITHUB_REF_NAME}/g" gradle.properties
git diff
- name: Create Pull Request
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v3.10.1
with:
title: Update testcontainers version to ${{ github.ref_name }}
body: |
Update testcontainers version to ${{ github.ref_name }}
branch: update-tc-version
delete-branch: true
================================================
FILE: .gitignore
================================================
/.mvn/timing.properties
# Created by .ignore support plugin (hsz.mobi)
### Maven template
target/
dependency-reduced-pom.xml
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm
*.iml
## Directory-based project format:
.idea/*
!.idea/icon.png
# if you remove the above rule, at least ignore the following:
# User-specific stuff:
# .idea/workspace.xml
# .idea/tasks.xml
# .idea/dictionaries
# Sensitive or high-churn files:
# .idea/dataSources.ids
# .idea/dataSources.xml
# .idea/sqlDataSources.xml
# .idea/dynamic.xml
# .idea/uiDesigner.xml
# Gradle:
# .idea/gradle.xml
# .idea/libraries
# Mongo Explorer plugin:
# .idea/mongoSettings.xml
## File-based project format:
## Plugin-specific files:
# IntelliJ
*.lastchange
# Vagrant
.vagrant/
# Gitbook
_book/
node_modules/
.gradle/
build/
!buildSrc/src/main/groovy/org/testcontainers/build
out/
*.class
# Eclipse IDE files
**/.project
**/.classpath
**/.settings
**/bin/
**/out/
# Generated docs
site/
.direnv/
src/mkdocs-codeinclude-plugin
src/pip-delete-this-directory.txt
.DS_Store
# Codespaces / VSCode
/.vscode/
# Python virtual environment
/.venv/
================================================
FILE: .sdkmanrc
================================================
# Enable auto-env through the sdkman_auto_env config
# Add key=value pairs of SDKs to use below
java=17.0.16-tem
================================================
FILE: AUTHORS
================================================
This file is deprecated. Please see the [contributors](https://github.com/testcontainers/testcontainers-java/graphs/contributors) listing.
[Richard North](https://github.com/rnorth), [Sergei Egorov](https://github.com/bsideup) and [Kevin Wittek](https://github.com/kiview) are the core maintainers.
================================================
FILE: CHANGELOG.md
================================================
# Change Log
~All notable changes to this project will be documented in this file.~
# MOVED
**After version 1.8.3 all future releases will _only_ be documented in the [Releases](https://github.com/testcontainers/testcontainers-java/releases) section of the GitHub repository. This changelog file will eventually be removed.**
## [1.8.3] - 2018-08-05
### Fixed
- Fixed `with*` methods of `CouchbaseContainer` ([\#810](https://github.com/testcontainers/testcontainers-java/pull/810))
- Fix problem with gzip encoded streams (e.g. copy file from container), by adding decompression support to netty exec factory (#817, fixes #681, relates to docker-java/docker-java#1079)
## [1.8.2] - 2018-07-31
### Fixed
- Add support for transparently using local images with docker-compose ([\#798](https://github.com/testcontainers/testcontainers-java/pull/798), fixes [\#674](https://github.com/testcontainers/testcontainers-java/issues/674))
- Fix bug with Dockerfile image creation with Docker for Mac 18.06-ce ([\#808](https://github.com/testcontainers/testcontainers-java/pull/808), fixes [\#680](https://github.com/testcontainers/testcontainers-java/issues/680))
### Changed
- Update Visible Assertions to 2.1.1 ([\#779](https://github.com/testcontainers/testcontainers-java/pull/779)).
- KafkaContainer optimization (`group.initial.rebalance.delay.ms=0`) ([\#782](https://github.com/testcontainers/testcontainers-java/pull/782)).
## [1.8.1] - 2018-07-10
### Fixed
- Linux/Mac: Added support for docker credential helpers so that images may be pulled from private registries. See [\#729](https://github.com/testcontainers/testcontainers-java/issues/729), [\#647](https://github.com/testcontainers/testcontainers-java/issues/647) and [\#567](https://github.com/testcontainers/testcontainers-java/issues/567).
- Ensure that the `COMPOSE_FILE` environment variable is populated with all relevant compose file names when running docker-compose in local mode [\#755](https://github.com/testcontainers/testcontainers-java/issues/755).
- Fixed issue whereby specified command in MariaDB image was not being applied. ([\#534](https://github.com/testcontainers/testcontainers-java/issues/534))
- Changed Oracle thin URL to support both Oracle 11 and 12 XE ([\#769](https://github.com/testcontainers/testcontainers-java/issues/769))
- Ensure that full JDBC URL query string is passed to JdbcDatabaseDelegate during initscript invocation ([\#741](https://github.com/testcontainers/testcontainers-java/issues/741); fixes [\#727](https://github.com/testcontainers/testcontainers-java/issues/727))
- Ensure that necessary transitive dependency inclusions are applied to generated project POMs ([\#772](https://github.com/testcontainers/testcontainers-java/issues/772); fixes [\#753](https://github.com/testcontainers/testcontainers-java/issues/753) and [\#652](https://github.com/testcontainers/testcontainers-java/issues/652))
### Changed
- Update Apache Pulsar module to 2.0.1 [\#760](https://github.com/testcontainers/testcontainers-java/issues/760).
- Make JdbcDatabaseContainer#getDriverClassName public [\#743](https://github.com/testcontainers/testcontainers-java/pull/743).
- enable `copyFileToContainer` feature during container startup [\#742](https://github.com/testcontainers/testcontainers-java/pull/742).
- avoid using file mounting in KafkaContainer [\#775](https://github.com/testcontainers/testcontainers-java/pull/775).
- Added Apache Cassandra module [\#776](https://github.com/testcontainers/testcontainers-java/pull/776).
## [1.8.0] - 2018-06-14
### Fixed
- Fixed JDBC URL Regex Pattern to ensure all supported Database URL's are accepted ([\#596](https://github.com/testcontainers/testcontainers-java/issues/596))
- Filtered out TestContainer parameters (TC_*) from query string before passing to database ([\#345](https://github.com/testcontainers/testcontainers-java/issues/345))
- Use `latest` tag as default image tag ([\#676](https://github.com/testcontainers/testcontainers-java/issues/676))
### Changed
- Allow `HttpWaitStrategy` to wait for a specific port ([\#703](https://github.com/testcontainers/testcontainers-java/pull/703))
- New module: Apache Pulsar ([\#713](https://github.com/testcontainers/testcontainers-java/pull/713))
- Add support for defining container labels ([\#725](https://github.com/testcontainers/testcontainers-java/pull/725))
- Use `quay.io/testcontainers/ryuk` instead of `bsideup/ryuk` ([\#721](https://github.com/testcontainers/testcontainers-java/pull/721))
- Added Couchbase module ([\#688](https://github.com/testcontainers/testcontainers-java/pull/688))
- Enhancements and Fixes for JDBC URL usage to create Containers ([\#594](https://github.com/testcontainers/testcontainers-java/pull/594))
- Extracted JDBC URL manipulations to a separate class - `ConnectionUrl`.
- Added an overloaded method `JdbcDatabaseContainerProvider.newInstance(ConnectionUrl)`, with default implementation delegating to the existing `newInstance(tag)` method. (Relates to [\#566](https://github.com/testcontainers/testcontainers-java/issues/566))
- Added an implementation of `MySQLContainerProvider.newInstance(ConnectionUrl)` that uses Database Name, User, and Password from JDBC URL while creating new MySQL Container. ([\#566](https://github.com/testcontainers/testcontainers-java/issues/566) for MySQL Container)
- Changed **internal** port of KafkaContainer back to 9092 ([\#733](https://github.com/testcontainers/testcontainers-java/pull/733))
- Add support for Dockerfile based images to OracleContainer ([\#734](https://github.com/testcontainers/testcontainers-java/pull/734))
- Read from both `/proc/net/tcp` and `/proc/net/tcp6` in `InternalCommandPortListeningCheck` ([\#750](https://github.com/testcontainers/testcontainers-java/pull/750))
- Added builder methods for timeouts in `JdbcDatabaseContainer` ([\#748](https://github.com/testcontainers/testcontainers-java/pull/748))
- Added an alternative experimental transport based on OkHttp. Enable it with `transport.type=okhttp` property ([\#710](https://github.com/testcontainers/testcontainers-java/pull/710))
- Framework-agnostic container & test lifecycle ([\#702](https://github.com/testcontainers/testcontainers-java/pull/702))
## [1.7.3] - 2018-05-16
### Fixed
- Fix for setting `ryuk.container.timeout` causes a `ClassCastException` ([\#684](https://github.com/testcontainers/testcontainers-java/issues/684))
- Fixed provided but shaded dependencies in modules ([\#693](https://github.com/testcontainers/testcontainers-java/issues/693))
### Changed
- Added InfluxDB module ([\#686](https://github.com/testcontainers/testcontainers-java/pull/686))
- Added MockServer module ([\#696](https://github.com/testcontainers/testcontainers-java/pull/696))
- Changed LocalStackContainer to extend GenericContainer ([\#695](https://github.com/testcontainers/testcontainers-java/pull/695))
## [1.7.2] - 2018-04-30
- Add support for private repositories using docker credential stores/helpers (fixes [\#567](https://github.com/testcontainers/testcontainers-java/issues/567))
### Fixed
- Add support for private repositories using docker credential stores/helpers (fixes [\#567](https://github.com/testcontainers/testcontainers-java/issues/567))
- Retry any exceptions (not just `DockerClientException`) on image pull ([\#662](https://github.com/testcontainers/testcontainers-java/issues/662))
- Fixed handling of the paths with `+` in them ([\#664](https://github.com/testcontainers/testcontainers-java/issues/664))
### Changed
- Database container images are now pinned to a specific version rather than using `latest`. The tags selected are the most recent as of the time of this change. If a JDBC URL is used with no tag specified, a WARN level log message is output, pending a future change to make tags mandatory in the JDBC URL. ([\#671](https://github.com/testcontainers/testcontainers-java/issues/671))
- Updated docker-java to 3.1.0-rc-3, enforced `org.jetbrains:annotations:15.0`. ([\#672](https://github.com/testcontainers/testcontainers-java/issues/672))
## [1.7.1] - 2018-04-20
### Fixed
- Fixed missing `commons-codec` dependency ([\#642](https://github.com/testcontainers/testcontainers-java/issues/642))
- Fixed `HostPortWaitStrategy` throws `NumberFormatException` when port is exposed but not mapped ([\#640](https://github.com/testcontainers/testcontainers-java/issues/640))
- Fixed log processing: multibyte unicode, linebreaks and ASCII color codes. Color codes can be turned on with `withRemoveAnsiCodes(false)` ([\#643](https://github.com/testcontainers/testcontainers-java/pull/643))
- Fixed Docker host IP detection within docker container (detect only if not explicitly set) ([\#648](https://github.com/testcontainers/testcontainers-java/pull/648))
- Add support for private repositories using docker credential stores/helpers ([PR \#647](https://github.com/testcontainers/testcontainers-java/pull/647), fixes [\#567](https://github.com/testcontainers/testcontainers-java/issues/567))
### Changed
- Support multiple HTTP status codes for HttpWaitStrategy ([\#630](https://github.com/testcontainers/testcontainers-java/issues/630))
- Mark all long-living threads started by Testcontainers as daemons and group them. ([\#646](https://github.com/testcontainers/testcontainers-java/issues/646))
- Remove noisy `DEBUG` logging of Netty packets ([\#646](https://github.com/testcontainers/testcontainers-java/issues/646))
- Updated docker-java to 3.1.0-rc-2 ([\#646](https://github.com/testcontainers/testcontainers-java/issues/646))
## [1.7.0] - 2018-04-07
### Fixed
- Fixed extraneous insertion of `useSSL=false` in all JDBC URL strings, even for DBs that do not understand it. Usage is now restricted to MySQL by default and can be overridden by authors of `JdbcDatabaseContainer` subclasses ([\#568](https://github.com/testcontainers/testcontainers-java/issues/568))
- Fixed `getServicePort` on `DockerComposeContainer` throws NullPointerException if service instance number in not used. ([\#619](https://github.com/testcontainers/testcontainers-java/issues/619))
- Increase Ryuk's timeout and make it configurable with `ryuk.container.timeout`. ([\#621](https://github.com/testcontainers/testcontainers-java/issues/621)[\#635](https://github.com/testcontainers/testcontainers-java/issues/635))
### Changed
- Added compatibility with selenium greater than 3.X ([\#611](https://github.com/testcontainers/testcontainers-java/issues/611))
- Abstracted and changed database init script functionality to support use of SQL-like scripts with non-JDBC connections. ([\#551](https://github.com/testcontainers/testcontainers-java/pull/551))
- Added `JdbcDatabaseContainer(Future)` constructor. ([\#543](https://github.com/testcontainers/testcontainers-java/issues/543))
- Mark DockerMachineClientProviderStrategy as not persistable ([\#593](https://github.com/testcontainers/testcontainers-java/pull/593))
- Added `waitingFor(String serviceName, WaitStrategy waitStrategy)` and overloaded `withExposedService()` methods to `DockerComposeContainer` to allow user to define `WaitStrategy` for compose containers. ([\#174](https://github.com/testcontainers/testcontainers-java/issues/174), [\#515](https://github.com/testcontainers/testcontainers-java/issues/515) and ([\#600](https://github.com/testcontainers/testcontainers-java/pull/600)))
- Deprecated `WaitStrategy` and implementations in favour of classes with same names in `org.testcontainers.containers.strategy` ([\#600](https://github.com/testcontainers/testcontainers-java/pull/600))
- Added `ContainerState` interface representing the state of a started container ([\#600](https://github.com/testcontainers/testcontainers-java/pull/600))
- Added `WaitStrategyTarget` interface which is the target of the new `WaitStrategy` ([\#600](https://github.com/testcontainers/testcontainers-java/pull/600))
- *Breaking:* Removed hard-coded `wnameless` Oracle database image name. Users should instead place a file on the classpath named `testcontainers.properties` containing `oracle.container.image=IMAGE`, where IMAGE is a suitable image name and tag/SHA hash. For information, the approach recommended by Oracle for creating an Oracle XE docker image is described [here](https://blogs.oracle.com/oraclewebcentersuite/implement-oracle-database-xe-as-docker-containers).
- Added `DockerHealthcheckWaitStrategy` that is based on Docker's built-in [healthcheck](https://docs.docker.com/engine/reference/builder/#healthcheck) ([\#618](https://github.com/testcontainers/testcontainers-java/pull/618)).
- Added `withLogConsumer(String serviceName, Consumer<OutputFrame> consumer)` method to `DockerComposeContainer` ([\#605](https://github.com/testcontainers/testcontainers-java/issues/605))
- Added `withFixedExposedPort(int hostPort, int containerPort, InternetProtocol protocol)` method to `FixedHostPortGenericContainer` and `addFixedExposedPort(int hostPort, int containerPort, InternetProtocol protocol)` to `GenericContainer` ([\#586](https://github.com/testcontainers/testcontainers-java/pull/586))
## [1.6.0] - 2018-01-28
### Fixed
- Fixed incompatibility of Docker-Compose container with JDK9. ([\#562](https://github.com/testcontainers/testcontainers-java/pull/562))
- Fixed retrieval of Docker host IP when running inside Docker. ([\#479](https://github.com/testcontainers/testcontainers-java/issues/479))
- Compose is now able to pull images from private repositories. ([\#536](https://github.com/testcontainers/testcontainers-java/issues/536))
- Fixed overriding MySQL image command. ([\#534](https://github.com/testcontainers/testcontainers-java/issues/534))
- Fixed shading for javax.annotation.CheckForNull ([\#563](https://github.com/testcontainers/testcontainers-java/issues/563) and [testcontainers/testcontainers-scala\#11](https://github.com/testcontainers/testcontainers-scala/issues/11)).
### Changed
- Added JDK9 build and tests to Travis-CI. ([\#562](https://github.com/testcontainers/testcontainers-java/pull/562))
- Added Kafka module ([\#546](https://github.com/testcontainers/testcontainers-java/pull/546))
- Added "Death Note" to track & kill spawned containers even if the JVM was "kill -9"ed ([\#545](https://github.com/testcontainers/testcontainers-java/pull/545))
- Environment variables are now stored as Map instead of List ([\#550](https://github.com/testcontainers/testcontainers-java/pull/550))
- Added `withEnv(String name, Function<Optional<String>, String> mapper)` with optional previous value ([\#550](https://github.com/testcontainers/testcontainers-java/pull/550))
- Added `withFileSystemBind` overloaded method with `READ_WRITE` file mode by default ([\#550](https://github.com/testcontainers/testcontainers-java/pull/550))
- All connections to JDBC containers (e.g. MySQL) don't use SSL anymore. ([\#374](https://github.com/testcontainers/testcontainers-java/issues/374))
## [1.5.1] - 2017-12-19
### Fixed
- Fixed problem with case-sensitivity when checking internal port. ([\#524](https://github.com/testcontainers/testcontainers-java/pull/524))
- Add retry logic around checkExposedPort pre-flight check for improved robustness ([\#513](https://github.com/testcontainers/testcontainers-java/issues/513))
### Changed
- Added `getDatabaseName` method to JdbcDatabaseContainer, MySQLContainer, PostgreSQLContainer ([\#473](https://github.com/testcontainers/testcontainers-java/issues/473))
- Added `VncRecordingContainer` - Network-based, attachable re-implementation of `VncRecordingSidekickContainer` ([\#526](https://github.com/testcontainers/testcontainers-java/pull/526))
## [1.5.0] - 2017-12-12
### Fixed
- Fixed problems with using container based docker-compose on Windows ([\#514](https://github.com/testcontainers/testcontainers-java/pull/514))
- Fixed problems with copying files on Windows ([\#514](https://github.com/testcontainers/testcontainers-java/pull/514))
- Fixed regression in 1.4.3 when using Docker Compose on Windows ([\#439](https://github.com/testcontainers/testcontainers-java/issues/439))
- Fixed local Docker Compose executable name resolution on Windows ([\#416](https://github.com/testcontainers/testcontainers-java/issues/416))
- Fixed TAR composition on Windows ([\#444](https://github.com/testcontainers/testcontainers-java/issues/444))
- Allowing `addExposedPort` to be used after ports have been specified with `withExposedPorts` ([\#453](https://github.com/testcontainers/testcontainers-java/issues/453))
- Stopping creation of temporary directory prior to creating temporary file ([\#443](https://github.com/testcontainers/testcontainers-java/issues/443))
- Ensure that temp files are created in a temp directory ([\#423](https://github.com/testcontainers/testcontainers-java/issues/423))
- Added `WaitAllStrategy` as a mechanism for composing multiple startup `WaitStrategy` objects together
- Changed `BrowserWebDriverContainer` to use improved wait strategies, to eliminate race conditions when starting VNC recording containers. This should lead to far fewer 'error' messages logged when starting up selenium containers, and less exposure to race related bugs (fixes [\#466](https://github.com/testcontainers/testcontainers-java/issues/466)).
### Changed
- Make Network instances reusable (i.e. work with `@ClassRule`) ([\#469](https://github.com/testcontainers/testcontainers-java/issues/469))
- Added support for explicitly setting file mode when copying file into container ([\#446](https://github.com/testcontainers/testcontainers-java/issues/446), [\#467](https://github.com/testcontainers/testcontainers-java/issues/467))
- Use Visible Assertions 2.1.0 for pre-flight test output (eliminating Jansi/JNR-POSIX dependencies for lower likelihood of conflict. JNA is now used internally by Visible Assertions instead).
- Mark all links functionality as deprecated. This is pending removal in a later release. Please see [\#465](https://github.com/testcontainers/testcontainers-java/issues/465). `Network` features should be used instead.
- Added support for copying files to/from running containers ([\#378](https://github.com/testcontainers/testcontainers-java/issues/378))
- Add `getLivenessCheckPorts` as an eventual replacement for `getLivenessCheckPort`; this allows multiple ports to be included in post-startup wait strategies.
- Refactor wait strategy port checking and improve test coverage.
- Added support for customising the recording file name ([\#500](https://github.com/testcontainers/testcontainers-java/issues/500))
## [1.4.3] - 2017-10-14
### Fixed
- Fixed local Docker Compose executable name resolution on Windows ([\#416](https://github.com/testcontainers/testcontainers-java/issues/416), [\#460](https://github.com/testcontainers/testcontainers-java/issues/460))
- Fixed TAR composition on Windows ([\#444](https://github.com/testcontainers/testcontainers-java/issues/444))
- Allowing `addExposedPort` to be used after ports have been specified with `withExposedPorts` ([\#453](https://github.com/testcontainers/testcontainers-java/issues/453))
- Stopping creation of temporary directory prior to creating temporary file ([\#443](https://github.com/testcontainers/testcontainers-java/issues/443))
### Changed
- Added `forResponsePredicate` method to HttpWaitStrategy to test response body ([\#441](https://github.com/testcontainers/testcontainers-java/issues/441))
- Changed `DockerClientProviderStrategy` to be loaded via Service Loader ([\#434](https://github.com/testcontainers/testcontainers-java/issues/434), [\#435](https://github.com/testcontainers/testcontainers-java/issues/435))
- Made it possible to specify docker compose container in configuration ([\#422](https://github.com/testcontainers/testcontainers-java/issues/422), [\#425](https://github.com/testcontainers/testcontainers-java/issues/425))
- Clarified wording of pre-flight check messages ([\#457](https://github.com/testcontainers/testcontainers-java/issues/457), [\#436](https://github.com/testcontainers/testcontainers-java/issues/436))
- Added caching of failure to find a docker daemon, so that subsequent tests fail fast. This is likely to be a significant improvement in situations where there is no docker daemon available, dramatically reducing run time and log output when further attempts to find the docker daemon cannot succeed.
- Allowing JDBC containers' username, password and DB name to be customized ([\#400](https://github.com/testcontainers/testcontainers-java/issues/400), [\#354](https://github.com/testcontainers/testcontainers-java/issues/354))
## [1.4.2] - 2017-07-25
### Fixed
- Worked around incompatibility between Netty's Unix socket support and OS X 10.11. Reinstated use of TCP-Unix Socket proxy when running on OS X prior to v10.12. (Fixes [\#402](https://github.com/testcontainers/testcontainers-java/issues/402))
- Changed to use version 2.0 of the Visible Assertions library for startup pre-flight checks. This no longer has a dependency on Jansi, and is intended to resolve a JVM crash issue apparently caused by native lib version conflicts ([\#395](https://github.com/testcontainers/testcontainers-java/issues/395)). Please note that the newer ANSI code is less mature and thus has had less testing, particularly in interesting terminal environments such as Windows. If issues are encountered, coloured assertion output may be disabled by setting the system property `visibleassertions.ansi.enabled` to `true`.
- Fixed NullPointerException when calling GenericContainer#isRunning on not started container ([\#411](https://github.com/testcontainers/testcontainers-java/issues/411))
### Changed
- Removed Guava usage from `jdbc` module ([\#401](https://github.com/testcontainers/testcontainers-java/issues/401))
## [1.4.1] - 2017-07-10
### Fixed
- Fixed Guava shading in `jdbc` module
## [1.4.0] - 2017-07-09
### Fixed
- Fixed the case when disk's size is bigger than Integer's max value ([\#379](https://github.com/testcontainers/testcontainers-java/issues/379), [\#380](https://github.com/testcontainers/testcontainers-java/issues/380))
- Fixed erroneous version reference used during CI testing of shaded dependencies
- Fixed leakage of Vibur and Tomcat JDBC test dependencies in `jdbc-test` and `mysql` modules ([\#382](https://github.com/testcontainers/testcontainers-java/issues/382))
- Added timeout and retries for creation of `RemoteWebDriver` ([\#381](https://github.com/testcontainers/testcontainers-java/issues/381), [\#373](https://github.com/testcontainers/testcontainers-java/issues/373), [\#257](https://github.com/testcontainers/testcontainers-java/issues/257))
- Fixed various shading issues
- Improved removal of containers/networks when using Docker Compose, eliminating irrelevant errors during cleanup ([\#342](https://github.com/testcontainers/testcontainers-java/issues/342), [\#394](https://github.com/testcontainers/testcontainers-java/issues/394))
### Changed
- Added support for Docker networks ([\#372](https://github.com/testcontainers/testcontainers-java/issues/372))
- Added `getFirstMappedPort` method ([\#377](https://github.com/testcontainers/testcontainers-java/issues/377))
- Extracted Oracle XE container into a separate repository ([testcontainers/testcontainers-java-module-oracle-xe](https://github.com/testcontainers/testcontainers-java-module-oracle-xe))
- Added shading tests
- Updated docker-java to 3.0.12 ([\#393](https://github.com/testcontainers/testcontainers-java/issues/393))
## [1.3.1] - 2017-06-22
### Fixed
- Fixed non-POSIX fallback for file attribute reading ([\#371](https://github.com/testcontainers/testcontainers-java/issues/371))
- Fixed NullPointerException in AuditLogger when running using slf4j-log4j12 bridge ([\#375](https://github.com/testcontainers/testcontainers-java/issues/375))
- Improved cleanup of JDBC connections during database container startup checks
### Changed
- Extracted MariaDB into a separate repository ([\#337](https://github.com/testcontainers/testcontainers-java/issues/337))
- Added `TC_DAEMON` JDBC URL flag to prevent `ContainerDatabaseDriver` from shutting down containers at the time all connections are closed. ([\#359](https://github.com/testcontainers/testcontainers-java/issues/359), [\#360](https://github.com/testcontainers/testcontainers-java/issues/360))
- Added pre-flight checks (can be disabled with `checks.disable` configuration property) ([\#363](https://github.com/testcontainers/testcontainers-java/issues/363))
- Improved startup time by adding dynamic priorities to DockerClientProviderStrategy ([\#362](https://github.com/testcontainers/testcontainers-java/issues/362))
- Added global configuration file `~/.testcontainers.properties` ([\#362](https://github.com/testcontainers/testcontainers-java/issues/362))
- Added container arguments to specify SELinux contexts for mounts ([\#334](https://github.com/testcontainers/testcontainers-java/issues/334))
- Removed unused Jersey dependencies ([\#361](https://github.com/testcontainers/testcontainers-java/issues/361))
- Removed deprecated, wrongly-generated setters from `GenericContainer`
## [1.3.0] - 2017-06-05
### Fixed
- Improved container cleanup if startup failed ([\#336](https://github.com/testcontainers/testcontainers-java/issues/336), [\#335](https://github.com/testcontainers/testcontainers-java/issues/335))
### Changed
- Upgraded docker-java library to 3.0.10 ([\#349](https://github.com/testcontainers/testcontainers-java/issues/349))
- Added basic audit logging of Testcontainers' actions via a specific SLF4J logger name with metadata captured via MDC. Intended for use in highly shared Docker environments.
- Use string-based detection of Selenium container startup ([\#328](https://github.com/testcontainers/testcontainers-java/issues/328), [\#351](https://github.com/testcontainers/testcontainers-java/issues/351))
- Use string-based detection of PostgreSQL container startup ([\#327](https://github.com/testcontainers/testcontainers-java/issues/327), [\#317](https://github.com/testcontainers/testcontainers-java/issues/317))
- Update libraries to recent versions ([\#333](https://github.com/testcontainers/testcontainers-java/issues/333))
- Introduce abstraction over files and classpath resources, allowing recursive copying of directories ([\#313](https://github.com/testcontainers/testcontainers-java/issues/313))
## [1.2.1] - 2017-04-06
### Fixed
- Fix bug in space detection when `alpine:3.5` image has not yet been pulled ([\#323](https://github.com/testcontainers/testcontainers-java/issues/323), [\#324](https://github.com/testcontainers/testcontainers-java/issues/324))
- Minor documentation fixes
### Changed
- Add AOP Alliance dependencies to shaded deps to reduce chance of conflicts ([\#315](https://github.com/testcontainers/testcontainers-java/issues/315))
## [1.2.0] - 2017-03-12
### Fixed
- Fix various escaping issues that may arise when paths contain spaces ([\#263](https://github.com/testcontainers/testcontainers-java/issues/263), [\#279](https://github.com/testcontainers/testcontainers-java/issues/279))
- General documentation fixes/improvements ([\#300](https://github.com/testcontainers/testcontainers-java/issues/300), [\#303](https://github.com/testcontainers/testcontainers-java/issues/303), [\#304](https://github.com/testcontainers/testcontainers-java/issues/304))
- Improve reliability of `ResourceReaper` when there are a large number of containers returned by `docker ps -a` ([\#295](https://github.com/testcontainers/testcontainers-java/issues/295))
### Changed
- Support Docker for Windows via TCP socket connection ([\#291](https://github.com/testcontainers/testcontainers-java/issues/291), [\#297](https://github.com/testcontainers/testcontainers-java/issues/297), [\#309](https://github.com/testcontainers/testcontainers-java/issues/309)). _Note that Docker Compose is not yet supported under Docker for Windows (see [\#306](https://github.com/testcontainers/testcontainers-java/issues/306))
- Expose `docker-java`'s `CreateContainerCmd` API for low-level container tweaking ([\#301](https://github.com/testcontainers/testcontainers-java/issues/301))
- Shade `org.newsclub` and Guava dependencies ([\#299](https://github.com/testcontainers/testcontainers-java/issues/299), [\#292](https://github.com/testcontainers/testcontainers-java/issues/292))
- Add `org.testcontainers` label to all containers created by Testcontainers ([\#294](https://github.com/testcontainers/testcontainers-java/issues/294))
## [1.1.9] - 2017-02-12
### Fixed
- Fix inability to run Testcontainers on Alpine linux. Unix-socket-over-TCP is now used in linux environments where netty fails due to lack of glibc libraries ([\#290](https://github.com/testcontainers/testcontainers-java/issues/290))
- Fix slow feedback in the case of missing JDBC drivers by failing-fast if the required driver cannot be found ([\#280](https://github.com/testcontainers/testcontainers-java/issues/280), [\#230](https://github.com/testcontainers/testcontainers-java/issues/230))
### Changed
- Add ability to change 'tiny image' used for disk space checks ([\#287](https://github.com/testcontainers/testcontainers-java/issues/287))
- Add ability to attach volumes to a container using 'volumes from' ([\#244](https://github.com/testcontainers/testcontainers-java/issues/244), [\#289](https://github.com/testcontainers/testcontainers-java/issues/289))
## [1.1.8] - 2017-01-22
### Fixed
- Compatibility fixes for Docker for Mac v1.13.0 ([\#272](https://github.com/testcontainers/testcontainers-java/issues/272))
- Relax docker environment disk space check to accommodate unusual empty `df` output observed on Docker for Mac with OverlayFS ([\#273](https://github.com/testcontainers/testcontainers-java/issues/273), [\#278](https://github.com/testcontainers/testcontainers-java/issues/278))
- Fix inadvertent private-scoping of startup checks' `StartupStatus`, which made implementation of custom startup checks impossible ([\#266](https://github.com/testcontainers/testcontainers-java/issues/266))
- Fix potential resource lead/deadlock when errors are encountered building images from a Dockerfile ([\#274](https://github.com/testcontainers/testcontainers-java/issues/274))
### Changed
- Add support for execution within a Docker container ([\#267](https://github.com/testcontainers/testcontainers-java/issues/267)), correcting resolution of container addresses
- Add support for version 2 of private docker registries, configured via `$HOME/.docker/config.json` ([\#270](https://github.com/testcontainers/testcontainers-java/issues/270))
- Use current classloader instead of system classloader for loading JDBC drivers ([\#261](https://github.com/testcontainers/testcontainers-java/issues/261))
- Allow hardcoded container image names for Ambassador and VNC recorder containers to be changed via a configuration file ([\#277](https://github.com/testcontainers/testcontainers-java/issues/277), [\#259](https://github.com/testcontainers/testcontainers-java/issues/259))
- Allow Selenium Webdriver container image name to be specified as a constructor parameter ([\#249](https://github.com/testcontainers/testcontainers-java/issues/249), [\#171](https://github.com/testcontainers/testcontainers-java/issues/171))
## [1.1.7] - 2016-11-19
### Fixed
- Compensate for premature TCP socket opening in Docker for Mac ([\#160](https://github.com/testcontainers/testcontainers-java/issues/160), [\#236](https://github.com/testcontainers/testcontainers-java/issues/236))
- (Internal) Stabilise various parts of Testcontainers' self test suite ([\#241](https://github.com/testcontainers/testcontainers-java/issues/241))
- Fix mounting of classpath resources when those resources are in a JAR file ([\#213](https://github.com/testcontainers/testcontainers-java/issues/213))
- Reduce misleading error messages caused mainly by trying to perform operations on stopped containers ([\#243](https://github.com/testcontainers/testcontainers-java/issues/243))
### Changed
- Uses a default MySQL and MariaDB configuration to reduce memory footprint ([\#209](https://github.com/testcontainers/testcontainers-java/issues/209), [\#243](https://github.com/testcontainers/testcontainers-java/issues/243))
- Docker Compose can optionally now use a local `docker-compose` executable rather than running inside a container ([\#200](https://github.com/testcontainers/testcontainers-java/issues/200))
- Add support for privileged mode containers ([\#234](https://github.com/testcontainers/testcontainers-java/issues/234), [\#235](https://github.com/testcontainers/testcontainers-java/issues/235))
- Allow container/network cleanup (ResourceReaper) to be triggered programmatically ([\#231](https://github.com/testcontainers/testcontainers-java/issues/231))
- Add optional tailing of logs for containers spawned by Docker Compose ([\#233](https://github.com/testcontainers/testcontainers-java/issues/233))
- (Internal) Relocate non-proprietary database container tests to a single module
## [1.1.6] - 2016-09-22
### Fixed
- Fix logging of discovered Docker environment variables ([\#218](https://github.com/testcontainers/testcontainers-java/issues/218))
- Adopt longer timeout periods for testing docker client configurations, and allow these to be further customised through system properties ([\#217](https://github.com/testcontainers/testcontainers-java/issues/217), see *ClientProviderStrategy classes)
- Fix docker compose directory mounting on windows ([\#224](https://github.com/testcontainers/testcontainers-java/issues/224))
- Handle and ignore further categories of failure in retrieval of docker environment disk space ([\#225](https://github.com/testcontainers/testcontainers-java/issues/225))
### Changed
- Add extra configurability options (database name, username, password) for PostgreSQL DB containers ([\#220](https://github.com/testcontainers/testcontainers-java/issues/220))
- Add MariaDB container type ([\#215](https://github.com/testcontainers/testcontainers-java/issues/215))
- Use Docker Compose `down` action for more robust teardown of compose environments
- Ensure that Docker Compose operations run sequentially rather than concurrently if JUnit tests are parallelized ([\#226](https://github.com/testcontainers/testcontainers-java/issues/226))
- Allow multiple Docker Compose files to be specified, to allow for extension/composition of services ([\#227](https://github.com/testcontainers/testcontainers-java/issues/227))
## [1.1.5] - 2016-08-22
### Fixed
- Fix Docker Compose environment variable passthrough ([\#208](https://github.com/testcontainers/testcontainers-java/issues/208))
### Changed
- Remove Docker Compose networks when containers are shut down ([\#211](https://github.com/testcontainers/testcontainers-java/issues/211)) as well as at JVM shutdown
## [1.1.4] - 2016-08-16
### Fixed
- Fix JDBC proxy driver behaviour when used with Tomcat connection pool to avoid spawning excessive numbers of containers ([\#195](https://github.com/testcontainers/testcontainers-java/issues/195))
- Shade Jersey dependencies in JDBC module to avoid classpath conflicts ([\#202](https://github.com/testcontainers/testcontainers-java/issues/202))
- Fix NullPointerException when docker host has untagged images ([\#201](https://github.com/testcontainers/testcontainers-java/issues/201))
- Fix relative paths for volumes mounted in docker-compose containers ([\#189](https://github.com/testcontainers/testcontainers-java/issues/189))
### Changed
- Update to v3.0.2 of docker-java library
- Switch to a shared, single instance docker client rather than a separate client instance per container rule ([\#193](https://github.com/testcontainers/testcontainers-java/issues/193))
- Ensure that docker-compose pulls images (with no timeout), prior to trying to start ([\#188](https://github.com/testcontainers/testcontainers-java/issues/188))
- Use official `docker/compose` image for running docker-compose ([\#190](https://github.com/testcontainers/testcontainers-java/issues/190))
## [1.1.3] - 2016-07-27
### Fixed
- Further fix for shading of netty Linux native libs, specifically when run using Docker Compose support
- Ensure that file mode permissions are retained for Dockerfile builder
### Changed
- Add support for specifying container working directory, and set this to match the `/compose` directory for Docker Compose
- Improve resilience of Selenium container startup
- Add `withLogConsumer(...)` to allow a log consumer to be attached to a container from the moment of startup
## [1.1.2] - 2016-07-19
### Fixed
- Fix shading of netty Linux native libs
### Changed
- Shade guava artifacts to prevent classloader conflicts
## [1.1.1] - 2016-07-17
### Fixed
- Improve shutdown of unnecessary docker clients ([\#170](https://github.com/testcontainers/testcontainers-java/issues/170))
- Shade `io.netty` dependencies into the testcontainers core JAR to reduce conflicts ([\#170](https://github.com/testcontainers/testcontainers-java/issues/170) and [\#157](https://github.com/testcontainers/testcontainers-java/issues/157))
- Remove timeouts for docker compose execution, particularly useful when image pulls are involved
- Improve output logging from docker-compose, pausing to log output in case of failure rather than letting logs intermingle.
### Changed
- Reinstate container startup retry (removed in v1.1.0) as an optional setting, only used by default for Selenium webdriver containers
## [1.1.0] - 2016-07-05
### Fixed
- Apply shade relocation to Jersey repackaged Guava libs
- General logging and stability improvements to Docker Compose support
- Fix liveness checks to use specific IP address obtained using `getContainerIpAddress()`
### Changed
- Integrate interim support for Docker for Mac beta and Docker Machine for Windows. See [docs](docs/index.md) for known limitations.
- Add support for Docker Compose v2 and scaling of compose containers
- Add support for attaching containers to specific networks.
- Allow container environment variables to be set using a Map
## [1.0.5] - 2016-05-02
### Fixed
- Fix problems associated with changes to `tenforce/virtuoso:latest` container, and replace with a pinned version.
- Fix build-time dependency on visible-assertions library, which had downstream dependencies that started to break the Testcontainers build.
### Changed
- Add support for pluggable wait strategies, i.e. overriding the default TCP connect wait strategy with HTTP ping or any user-defined approach.
- Add 'self-typing' to allow easy use of fluent-style options even when `GenericContainer` is subclassed.
- Add support for defining extra entries for containers' `/etc/hosts` files.
- Add fluent setter for setting file-system file/directory binding
## [1.0.4] - 2016-04-17
### Fixed
- Prevent unnecessary and erroneous reconfiguration of container if startup needs to be retried
- Consolidate container cleanup to ensure that ambassador containers used for Docker Compose are cleaned up appropriately
- Fix container liveness check port lookup for FixedHostPortGenericContainer.
- Upgrade docker-compose container to dduportal/docker-compose:1.6.0 for compatibility with docker compose file format v2.
### Changed
- Add `docker exec` support for running commands against running containers
- Add support for building container images on the fly from Dockerfiles, including optional Dockerfile builder DSL
- Add container name as prefix for container logs that are streamed to SLF4J
- Improve container startup failure detection, including adding the option to specify a minimum up time that the container should achieve before being considered started successfully
## [1.0.3] - 2016-03-31
### Fixed
- Resolve issues where containers would not be cleaned up on JVM shutdown if they failed to start correctly
- Fix validation problem where docker image names that contained private registry URLs with port number would be rejected
- Resolve bug where `docker pull` would try infinitely for a non-existent image name
### Changed
- Set startup free disk space check to ensure that the Docker environment has a minimum of 2GB available rather than 10%
- Add streaming of container logs to SLF4J loggers, capture as Strings, and also the ability to wait for container log content to satisfy an expected predicate
- Allow configuration of docker container startup timeout
- Add detection of classpath Selenium version, and automatic selection of correct Selenium docker containers for compatibility
## [1.0.2] - 2016-02-27
### Fixed
- If a container fail to start up correctly, startup will now be retried up to a limit of 3 times
- Add resilience around `getMappedPort` method to fail fast when a port is not yet mapped, rather than generate misleading errors
### Changed
- Add JDBC container module for OpenLink Virtuoso
- Add additional debug level logging to aid with diagnosis of docker daemon discovery problems
- Add support for using a local Unix socket to connect to the Docker daemon
## [1.0.1] - 2016-02-18
### Fixed
- Remove extraneous service loader entries in the shaded JAR
- Upgrade to v2.2.0 of docker-java client library to take advantage of unix socket fixes (see https://github.com/docker-java/docker-java/issues/456)
- Validate that docker image names include a tag on creation
### Changed
- By default, use docker machine name from `DOCKER_MACHINE_NAME` environment, or `default` if it exists
- Allow container ports to map to a fixed port on the host through use of the `FixedHostPortGenericContainer` subclass of `GenericContainer`
## [1.0.0] - 2016-02-07
### Fixed
- Resolve Jersey/Jackson dependency clashes by shading (relocating) a version of these libraries into the core Testcontainers JAR
- Improve documentation and logging concerning discovery of Docker daemon
### Changed
- Rename container `getIpAddress()` method to `getContainerIpAddress()` and deprecate original method name.
- Rename container `getHostIpAddress()` method to `getTestHostIpAddress()`
## [0.9.9] - 2016-01-12
### Fixed
- Resolve thread safety issues associated with use of a singleton docker client
- Resolve disk space check problems when running on a Debian-based docker host
- Fix CircleCI problems where the build could hit memory limits
### Changed
- Remove bundled logback.xml to allow users more control over logging
- Add Travis CI support for improved breadth of testing
## [0.9.8] - 2015-08-12
### Changed
- Change from Spotify docker client library to docker-java, for improved compatibility with latest versions of Docker
- Change from JDK 1.7 minimum requirement to JDK 1.8
- Replace boot2docker support with docker-machine support
- Docker images are now prefetched when a @Rule is instantiated
- Combined Rule and Container classes throughout, for a reduced set of public classes and removal of some duplication
- Improvements to container cleanup, especially removal of data volumes
- General improvements to error handling, logging etc throughout
### Added
- Docker Compose support
- Automatic docker environment disk space check
## [0.9.7] - 2015-08-07
### Added
- Support for overriding MySQL container configuration (my.cnf file overrides)
### Changed
- Replace dependency on org.testpackage with org.rnorth.visible-assertions
## [0.9.6] - 2015-07-22
### Added
- Generic container support (allows use of any docker image) using a GenericContainerRule.
### Changed
- Renamed from org.rnorth.test-containers to org.testcontainers
- Explicit support for usage on linux and use with older versions of Docker (v1.2.0 tested)
## [0.9.5] - 2015-06-28
### Added
- Oracle XE container support
### Changed
- Support for JDK 1.7 (previously was JDK 1.8+)
## [0.9.4] and 0.9.3 - 2015-06-23
### Changed
- Refactored for better modularization
## [0.9.2] - 2015-06-13
### Added
- 'Sidekick' VNC recording container to record video of Selenium test sessions
### Changed
- Alter timezone used for time display inside Selenium containers
## [0.9.1] - 2015-06-07
### Added
- Support for Selenium webdriver containers
- Recording of Selenium test sessions using vnc2flv
## [0.9] - 2015-04-29
Initial release
[1.5.1]: https://github.com/testcontainers/testcontainers-java/releases/tag/1.5.1
[1.5.0]: https://github.com/testcontainers/testcontainers-java/releases/tag/1.5.0
[1.4.2]: https://github.com/testcontainers/testcontainers-java/releases/tag/1.4.3
[1.4.2]: https://github.com/testcontainers/testcontainers-java/releases/tag/1.4.2
[1.4.1]: https://github.com/testcontainers/testcontainers-java/releases/tag/1.4.1
[1.4.0]: https://github.com/testcontainers/testcontainers-java/releases/tag/1.4.0
[1.2.0]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.2.0
[1.1.9]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.1.9
[1.1.8]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.1.8
[1.1.7]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.1.7
[1.1.6]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.1.6
[1.1.5]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.1.5
[1.1.4]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.1.4
[1.1.3]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.1.3
[1.1.2]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.1.2
[1.1.1]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.1.1
[1.1.0]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.1.0
[1.0.5]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.0.5
[1.0.4]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.0.4
[1.0.3]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.0.3
[1.0.2]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.0.2
[1.0.1]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.0.1
[1.0.0]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-1.0.0
[0.9.9]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-0.9.9
[0.9.8]: https://github.com/testcontainers/testcontainers-java/releases/tag/testcontainers-0.9.8
[0.9.7]: https://github.com/testcontainers/testcontainers-java/releases/tag/test-containers-0.9.7
[0.9.6]: https://github.com/testcontainers/testcontainers-java/releases/tag/test-containers-0.9.6
[0.9.5]: https://github.com/testcontainers/testcontainers-java/releases/tag/test-containers-0.9.5
[0.9.4]: https://github.com/testcontainers/testcontainers-java/releases/tag/test-containers-0.9.4
[0.9.3]: https://github.com/testcontainers/testcontainers-java/releases/tag/test-containers-0.9.3
[0.9.2]: https://github.com/testcontainers/testcontainers-java/releases/tag/test-containers-0.9.2
[0.9.1]: https://github.com/testcontainers/testcontainers-java/releases/tag/test-containers-0.9.1
[0.9]: https://github.com/testcontainers/testcontainers-java/releases/tag/test-containers-0.9
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
Please see the [main contributing guidelines](./docs/contributing.md).
There are additional docs describing [contributing documentation changes](./docs/contributing_docs.md).
### GitHub Sponsorship
Testcontainers is [in the GitHub Sponsors program](https://github.com/sponsors/testcontainers)!
This repository is supported by our sponsors, meaning that issues are eligible to have a 'bounty' attached to them by sponsors.
Please see [the bounty policy page](https://www.testcontainers.org/bounty) if you are interested, either as a sponsor or as a contributor.
================================================
FILE: LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2015-2019 Richard North
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# Testcontainers
[](https://maven-badges.herokuapp.com/maven-central/org.testcontainers/testcontainers)
[](https://app.netlify.com/sites/testcontainers/deploys)
[](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=33816473&machine=standardLinux32gb&devcontainer_path=.devcontainer%2Fdevcontainer.json&location=EastUs)
[](https://ge.testcontainers.org/scans)
> Testcontainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.

# [Read the documentation here](https://java.testcontainers.org)
## License
See [LICENSE](LICENSE).
## Copyright
Copyright (c) 2015 - 2021 Richard North and other authors.
MS SQL Server module is (c) 2017 - 2021 G DATA Software AG and other authors.
Hashicorp Vault module is (c) 2017 - 2021 Capital One Services, LLC and other authors.
See [contributors](https://github.com/testcontainers/testcontainers-java/graphs/contributors) for all contributors.
================================================
FILE: RELEASING.md
================================================
# Release process
Testcontainers' release process is semi-automated through GitHub Actions. This describes the basic steps for a project member to perform a release.
## Steps
1. Ensure that the `main` branch is building and that tests are passing.
1. Create a new release on GitHub. **The tag name is used as the version**, so please keep the tag name plain (e.g. 1.2.3).
1. The release triggers a GitHub Action workflow.
1. Log in to [Sonatype](https://oss.sonatype.org/) to check the staging repository.
* Getting access to Sonatype requires a Sonatype JIRA account and [raising an issue](https://issues.sonatype.org/browse/OSSRH-74229), requesting access.
3. Get the staging URL from Sonatype after GitHub Action workflow finished. The general URL format should be `https://oss.sonatype.org/service/local/repositories/$staging-repo-id/content/`
4. Manually test the release with the staging URL as maven repository URL (e.g. critical issues and features).
5. Run [TinSalver](https://github.com/bsideup/tinsalver) from GitHub using `npx` to sign artifact (see [TinSalver README](https://github.com/bsideup/tinsalver/blob/main/README.md)).
* For TinSalver to correctly work with keybase on WSL on Windows, you might need to disable pinentry: `keybase config set -b pinentry.disabled true`.
7. Close the release in Sonatype. This will evaluate the release based on given Sonatype rules.
8. After successful closing, the release button needs to be clicked and afterwards it is automatically synced to Maven Central.
9. Handcraft and polish some of the release notes (e.g. substitute combined dependency PRs and highlight certain features).
10. Rename existing milestone corresponding to new release and close it. Then create a new `next` milestone.
11. When available through Maven Central, poke [Richard North](https://github.com/rnorth) to announce the release on Twitter!
12. Merge automated version update PRs in order to update the reference version in `mkdocs.yml` and `gradle.properties`.
## Internal details
* The process is done with GitHub Actions, TinSalver and Sonatype.
* Sonatype will automatically promote the staging release to Maven Central.
* Keybase needs to be installed on the developer machine.
* GPG key of signing developer needs to be uploaded to the [Ubuntu keyserver](https://keyserver.ubuntu.com/) (or other server supported by Sonatype).
================================================
FILE: annotations/com/google/common/base/annotations.xml
================================================
<root>
<item name='com.google.common.base.Preconditions void checkArgument(boolean, java.lang.Object)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val val=""false, _ -> fail; true, _ -> _""/>
</annotation>
</item>
</root>
================================================
FILE: annotations/org/rnorth/ducttape/annotations.xml
================================================
<root>
<item name='org.rnorth.ducttape.Preconditions void check(java.lang.String, boolean)'>
<annotation name='org.jetbrains.annotations.Contract'>
<val val=""_,true->_;_,false->fail""/>
</annotation>
</item>
</root>
================================================
FILE: azure-pipelines.yml
================================================
jobs:
- job: core_tests
timeoutInMinutes: 60
steps:
# Run all core tests when running the Windows CI tests
- task: Gradle@2
condition: eq(variables['Agent.OS'], 'Windows_NT')
displayName: Build & test (Windows - core)
env:
AWS_ACCESS_KEY_ID: $(aws.accessKeyId)
AWS_SECRET_ACCESS_KEY: $(aws.secretAccessKey)
inputs:
gradleWrapperFile: 'gradlew'
jdkVersionOption: '1.8'
options: '--no-daemon --continue'
tasks: 'clean testcontainers:check'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
- job: other_tests
timeoutInMinutes: 120
steps:
# Run all non-core tests when running the Windows CI tests
- task: Gradle@2
condition: eq(variables['Agent.OS'], 'Windows_NT')
displayName: Build & test (Windows - all non-core modules)
env:
AWS_ACCESS_KEY_ID: $(aws.accessKeyId)
AWS_SECRET_ACCESS_KEY: $(aws.secretAccessKey)
inputs:
gradleWrapperFile: 'gradlew'
jdkVersionOption: '1.8'
options: '--no-daemon --continue'
tasks: 'clean check -x testcontainers:test'
publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml'
================================================
FILE: bom/build.gradle
================================================
description = "Testcontainers :: BOM"
publishing {
publications {
mavenJava(MavenPublication) { publication ->
artifactId = "testcontainers-bom"
artifacts = []
pom.withXml {
def dependencyManagementNode = asNode().appendNode('dependencyManagement').appendNode('dependencies')
def bomProject = project
rootProject.subprojects.each { subProject ->
if (subProject != bomProject && subProject.plugins.findPlugin("maven-publish")) {
dependencyManagementNode.appendNode('dependency').with {
appendNode('groupId', subProject.group)
appendNode('artifactId',subProject.name)
appendNode('version', subProject.version)
}
}
}
}
}
}
}
================================================
FILE: build.gradle
================================================
buildscript {
repositories {
mavenCentral()
}
dependencies {
// https://github.com/melix/japicmp-gradle-plugin/issues/36
classpath 'com.google.guava:guava:33.3.1-jre'
classpath 'com.github.tjni.captainhook:captain-hook:0.1.5'
}
}
plugins {
id 'io.franzbecker.gradle-lombok' version '5.0.0'
id 'com.gradleup.shadow' version '8.3.9'
id 'me.champeau.gradle.japicmp' version '0.4.3' apply false
id 'com.diffplug.spotless' version '6.22.0' apply false
id 'org.jreleaser' version '1.20.0' apply false
}
apply from: "$rootDir/gradle/ci-support.gradle"
apply plugin: 'com.github.tjni.captainhook'
captainHook {
autoApplyGitHooks = Boolean.valueOf(System.getenv("AUTO_APPLY_GIT_HOOKS"))
preCommit = './gradlew spotlessApply'
}
subprojects {
apply plugin: 'java'
apply plugin: 'java-library'
apply plugin: 'idea'
apply plugin: 'io.franzbecker.gradle-lombok'
apply from: "$rootDir/gradle/shading.gradle"
apply from: "$rootDir/gradle/spotless.gradle"
apply plugin: 'checkstyle'
group = "org.testcontainers"
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
tasks.withType(JavaCompile) {
options.release.set(8)
options.encoding = 'UTF-8'
}
compileTestJava.options.encoding = 'UTF-8'
javadoc.options.encoding = 'UTF-8'
repositories {
mavenCentral()
}
configurations {
provided
api.extendsFrom(provided)
}
lombok {
version = '1.18.30'
}
task delombok(type: io.franzbecker.gradle.lombok.task.DelombokTask) {
outputs.cacheIf {
true
}
argumentProviders.addAll(
new org.testcontainers.build.DelombokArgumentProvider(srcDirs: project.sourceSets.main.java.srcDirs, outputDir: file("$buildDir/delombok"))
)
}
delombok.onlyIf {
project.sourceSets.main.java.srcDirs.find { it.exists() }
}
// specific modules should be excluded from publication
if ( ! ["test-support", "testcontainers-jdbc-test"].contains(it.name) && !it.path.startsWith(":docs:") && it != project(":docs") ) {
apply from: "$rootDir/gradle/publishing.gradle"
if (it.name != "bom") {
apply plugin: "me.champeau.gradle.japicmp"
tasks.register('japicmp', me.champeau.gradle.japicmp.JapicmpTask)
apply from: "$rootDir/gradle/japicmp.gradle"
}
}
test {
useJUnitPlatform()
defaultCharacterEncoding = "UTF-8"
testLogging {
displayGranularity 1
showStackTraces = true
exceptionFormat = 'full'
events "STARTED", "PASSED", "FAILED", "SKIPPED"
}
ext.isCI = System.getenv("CI") != null
if (isCI) {
develocity.testRetry {
maxRetries = 2
maxFailures = 5
failOnPassedAfterRetry = false
}
}
}
tasks.withType(Test).all {
reports {
junitXml.outputPerTestCase = true
}
}
// Ensure that Javadoc generation is always tested
check.dependsOn(javadoc)
def postCheckCommand = properties["postCheckCommand"]
if (postCheckCommand) {
check.finalizedBy(tasks.create("postCheckExec", Exec) {
if (org.gradle.internal.os.OperatingSystem.current().isWindows()) {
commandLine('cmd', '/c', postCheckCommand)
} else {
commandLine('sh', '-c', postCheckCommand)
}
})
}
javadoc {
dependsOn delombok
source = delombok.outputs
}
dependencies {
testImplementation 'ch.qos.logback:logback-classic:1.3.15'
testImplementation 'org.assertj:assertj-core:3.27.4'
testImplementation 'org.junit.jupiter:junit-jupiter:5.13.4'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.11.0'
}
checkstyle {
toolVersion = "10.23.0"
configFile = rootProject.file('config/checkstyle/checkstyle.xml')
}
}
================================================
FILE: buildSrc/build.gradle
================================================
plugins {
id 'java-gradle-plugin'
}
repositories {
mavenCentral()
}
================================================
FILE: buildSrc/src/main/groovy/org/testcontainers/build/ComparePOMWithLatestReleasedTask.groovy
================================================
package org.testcontainers.build
import groovy.xml.XmlSlurper
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction
class ComparePOMWithLatestReleasedTask extends DefaultTask {
@Input
Set<String> ignore = []
@TaskAction
def doCompare() {
def rootNode = new XmlSlurper().parse(project.tasks.generatePomFileForMavenJavaPublication.destination)
def artifactId = rootNode.artifactId.text()
def latestRelease = new XmlSlurper()
.parse("https://repo1.maven.org/maven2/org/testcontainers/${artifactId}/maven-metadata.xml")
.versioning.release.text()
def releasedRootNode = new XmlSlurper()
.parse("https://repo1.maven.org/maven2/org/testcontainers/${artifactId}/${latestRelease}/${artifactId}-${latestRelease}.pom")
Set<String> dependencies = releasedRootNode.dependencies.children()
.collect { "${it.groupId.text()}:${it.artifactId.text()}".toString() }
for (dependency in rootNode.dependencies.children()) {
def coordinates = "${dependency.groupId.text()}:${dependency.artifactId.text()}".toString()
if (!dependencies.contains(coordinates) && !ignore.contains(coordinates)) {
throw new IllegalStateException("A new dependency '${coordinates}' has been added to 'org.testcontainers:${artifactId}' - if this was intentional please add it to the ignore list in ${project.buildFile}")
}
}
}
}
================================================
FILE: buildSrc/src/main/groovy/org/testcontainers/build/DelombokArgumentProvider.groovy
================================================
package org.testcontainers.build
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.PathSensitive
import org.gradle.api.tasks.PathSensitivity
import org.gradle.process.CommandLineArgumentProvider
/**
* Allows build cache relocatability for Delombok task
*/
class DelombokArgumentProvider implements CommandLineArgumentProvider {
@InputFiles
@PathSensitive(PathSensitivity.RELATIVE)
Set<File> srcDirs
@OutputDirectory
File outputDir
@Override
Iterable<String> asArguments() {
return [srcDirs.collect { it.absolutePath }.join(" "), "-d", outputDir.absolutePath, "-f", "generateDelombokComment:skip"]
}
}
================================================
FILE: config/checkstyle/checkstyle.xml
================================================
<!DOCTYPE module PUBLIC "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
"https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name="Checker">
<module name="TreeWalker">
<module name="SuppressionCommentFilter"/>
<module name="NeedBraces">
<property name="tokens"
value="
LITERAL_DO,
LITERAL_ELSE,
LITERAL_FOR,
LITERAL_IF,
LITERAL_WHILE,
"
/>
</module>
<module name="NeedBraces">
<property name="tokens"
value="
LAMBDA,
"
/>
<property name="allowSingleLineStatement" value="true"/>
</module>
<module name="AvoidStarImport"/>
<module name="AvoidStaticImport">
<property name="excludes"
value="
io.restassured.RestAssured.*,
org.assertj.core.api.Assertions.*,
org.assertj.core.api.Assumptions.*,
org.awaitility.Awaitility.*,
org.junit.Assume.*,
org.mockito.Mockito.*,
org.mockito.ArgumentMatchers.*,
org.mockserver.model.HttpRequest.*,
org.mockserver.model.HttpResponse.*,
org.rnorth.ducttape.unreliables.Unreliables.*,
"
/>
</module>
<module name="RegexpSinglelineJava">
<property name="maximum" value="0"/>
<property name="format" value="org\.junit\.Assert\.assert" />
<property name="message"
value="Please use AssertJ imports." />
<property name="ignoreComments" value="true" />
</module>
<module name="RegexpSinglelineJava">
<property name="maximum" value="0"/>
<property name="format" value="org\.junit\.jupiter\.api\.Assertions\.assert" />
<property name="message"
value="Please use AssertJ imports." />
<property name="ignoreComments" value="true" />
</module>
<module name="EmptyLineSeparator">
<property name="allowNoEmptyLineBetweenFields" value="false" />
</module>
<module name="OneStatementPerLineCheck"/>
<module name="ModifierOrder" />
<module name="SingleSpaceSeparator" />
</module>
<module name="RegexpSingleline">
<property name="format" value="^\s*\*\s*@author"/>
<property name="message" value="Remove author tags from source files."/>
</module>
</module>
================================================
FILE: core/build.gradle
================================================
apply plugin: 'com.gradleup.shadow'
description = "Testcontainers Core"
sourceSets {
jarFileTest
}
test.maxParallelForks = 4
idea.module.testSourceDirs += sourceSets.jarFileTest.allSource.srcDirs
jar {
manifest {
attributes('Implementation-Version': project.getProperty("version"))
}
}
shadowJar {
[
'META-INF/NOTICE',
'META-INF/NOTICE.txt',
'META-INF/LICENSE',
'META-INF/LICENSE.txt',
'META-INF/maven/',
'META-INF/proguard/',
'META-INF/versions/*/module-info.class',
'META-INF/services/java.security.Provider',
].each { exclude(it) }
}
task jarFileTest(type: Test) {
useJUnitPlatform()
testClassesDirs = sourceSets.jarFileTest.output.classesDirs
classpath = sourceSets.jarFileTest.runtimeClasspath
file(shadowJar.outputs.files.singleFile) // input for correct caching
systemProperty("jarFile", shadowJar.outputs.files.singleFile)
dependsOn(shadowJar)
}
project.tasks.check.dependsOn(jarFileTest)
tasks.japicmp {
packageExcludes = [
"com.github.dockerjava.*",
"org.testcontainers.shaded.*",
]
classExcludes = []
methodExcludes = []
fieldExcludes = []
}
configurations.all {
resolutionStrategy {
force 'com.fasterxml.jackson.core:jackson-databind:2.18.4'
force 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.4'
}
}
dependencies {
api 'org.slf4j:slf4j-api:1.7.36'
compileOnly 'org.jetbrains:annotations:26.0.2-1'
testCompileOnly 'org.jetbrains:annotations:26.0.2-1'
api 'org.apache.commons:commons-compress:1.28.0'
api ('org.rnorth.duct-tape:duct-tape:1.0.8') {
exclude(group: 'org.jetbrains', module: 'annotations')
}
provided('com.google.cloud.tools:jib-core:0.27.3') {
exclude group: 'com.google.guava', module: 'guava'
exclude group: 'com.fasterxml.jackson.datatype', module: 'jackson-datatype-jsr310'
exclude group: 'com.fasterxml.jackson.core', module: 'jackson-core'
exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind'
exclude group: 'org.apache.commons', module: 'commons-compress'
}
shaded 'org.awaitility:awaitility:4.3.0'
api platform('com.github.docker-java:docker-java-bom:3.7.1')
shaded platform('com.github.docker-java:docker-java-bom:3.7.1')
api "com.github.docker-java:docker-java-api"
shaded('com.github.docker-java:docker-java-core') {
exclude group: 'com.google.guava', module: 'guava'
}
api 'com.github.docker-java:docker-java-transport-zerodep'
shaded 'com.google.guava:guava:33.3.1-jre'
shaded "org.yaml:snakeyaml:2.5"
shaded 'org.glassfish.main.external:trilead-ssh2-repackaged:4.1.2'
shaded 'org.zeroturnaround:zt-exec:1.12'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.11.0'
testImplementation 'org.junit.jupiter:junit-jupiter:5.13.4'
testImplementation('com.google.cloud.tools:jib-core:0.27.3') {
exclude group: 'com.google.guava', module: 'guava'
}
testImplementation 'org.apache.httpcomponents:httpclient:4.5.14'
testImplementation 'redis.clients:jedis:6.2.0'
testImplementation 'com.rabbitmq:amqp-client:5.26.0'
testImplementation 'org.mongodb:mongo-java-driver:3.12.14'
testImplementation ('org.mockito:mockito-core:4.11.0') {
exclude(module: 'hamcrest-core')
}
// Synthetic JAR used for MountableFileTest and DirectoryTarResourceTest
testImplementation files('testlib/repo/fakejar/fakejar/0/fakejar-0.jar')
testImplementation 'org.assertj:assertj-core:3.27.6'
testImplementation 'io.rest-assured:rest-assured:5.5.6'
jarFileTestCompileOnly "org.projectlombok:lombok:${lombok.version}"
jarFileTestAnnotationProcessor "org.projectlombok:lombok:${lombok.version}"
jarFileTestRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.11.0'
jarFileTestImplementation 'org.junit.jupiter:junit-jupiter:5.13.4'
jarFileTestImplementation 'org.assertj:assertj-core:3.27.6'
jarFileTestImplementation 'org.ow2.asm:asm-debug-all:5.2'
}
tasks.generatePomFileForMavenJavaPublication.finalizedBy(
tasks.register('checkPOMdependencies', org.testcontainers.build.ComparePOMWithLatestReleasedTask) {
ignore = [
]
}
)
compileTestJava {
javaCompiler = javaToolchains.compilerFor {
languageVersion = JavaLanguageVersion.of(17)
}
options.release.set(17)
}
test {
useJUnitPlatform()
}
================================================
FILE: core/src/jarFileTest/java/org/testcontainers/AbstractJarFileTest.java
================================================
package org.testcontainers;
import java.net.URI;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
public abstract class AbstractJarFileTest {
public static Path root;
static {
try {
Path jarFilePath = Paths.get(System.getProperty("jarFile"));
String decodedPath = URLDecoder.decode(jarFilePath.toUri().toString(), StandardCharsets.UTF_8.name());
URI jarFileUri = new URI("jar", decodedPath, null);
FileSystem fileSystem = FileSystems.newFileSystem(jarFileUri, Collections.emptyMap());
root = fileSystem.getPath("/");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
================================================
FILE: core/src/jarFileTest/java/org/testcontainers/JarFileShadingTest.java
================================================
package org.testcontainers;
import org.assertj.core.api.ListAssert;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import static org.assertj.core.api.Assertions.assertThat;
class JarFileShadingTest extends AbstractJarFileTest {
@Test
void testPackages() throws Exception {
assertThatFileList(root).containsOnly("org", "META-INF");
assertThatFileList(root.resolve("org")).containsOnly("testcontainers");
}
@Test
void testMetaInf() throws Exception {
assertThatFileList(root.resolve("META-INF"))
.containsOnly(
"MANIFEST.MF",
"services",
"versions",
"native-image",
"thirdparty-LICENSE",
"FastDoubleParser-NOTICE",
"FastDoubleParser-LICENSE"
);
}
@Test
void testMetaInfServices() throws Exception {
assertThatFileList(root.resolve("META-INF").resolve("services"))
.allMatch(it -> it.startsWith("org.testcontainers."));
}
private ListAssert<String> assertThatFileList(Path path) throws IOException {
return (ListAssert) assertThat(Files.list(path))
.extracting(Path::getFileName)
.extracting(Path::toString)
.extracting(it -> it.endsWith("/") ? it.substring(0, it.length() - 1) : it);
}
}
================================================
FILE: core/src/jarFileTest/java/org/testcontainers/PublicBinaryAPITest.java
================================================
package org.testcontainers;
import lombok.RequiredArgsConstructor;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.Parameter;
import org.junit.jupiter.params.ParameterizedClass;
import org.junit.jupiter.params.provider.MethodSource;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.FieldNode;
import org.objectweb.asm.tree.MethodNode;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
/**
* This test checks that we don't expose any shaded class in our public API.
*/
@ParameterizedClass
@MethodSource("data")
@RequiredArgsConstructor
public class PublicBinaryAPITest extends AbstractJarFileTest {
private static final String SHADED_PACKAGE = "org.testcontainers.shaded.";
private static final String SHADED_PACKAGE_PATH = SHADED_PACKAGE.replaceAll("\\.", "/");
static {
Assertions.registerFormatterForType(ClassNode.class, it -> it.name);
Assertions.registerFormatterForType(FieldNode.class, it -> it.name);
Assertions.registerFormatterForType(MethodNode.class, it -> it.name + it.desc);
}
public static List<Object[]> data() throws Exception {
List<Object[]> result = new ArrayList<>();
Files.walkFileTree(
root,
new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {
String fileName = path.toString();
if (!fileName.endsWith(".class")) {
return super.visitFile(path, attrs);
}
if (!fileName.startsWith("/org/testcontainers/")) {
return super.visitFile(path, attrs);
}
if (fileName.startsWith("/" + SHADED_PACKAGE_PATH)) {
return super.visitFile(path, attrs);
}
try (InputStream inputStream = Files.newInputStream(path)) {
ClassReader reader = new ClassReader(inputStream);
ClassNode node = new ClassNode();
reader.accept(node, ClassReader.SKIP_CODE);
if ((node.access & Opcodes.ACC_PUBLIC) != 0) {
result.add(new Object[] { fileName, node });
}
}
return super.visitFile(path, attrs);
}
}
);
return result;
}
@Parameter(0)
private String fileName;
@Parameter(1)
private ClassNode classNode;
@BeforeEach
public void setUp() {
switch (classNode.name) {
// Necessary evil
case "org/testcontainers/dockerclient/UnixSocketClientProviderStrategy":
case "org/testcontainers/dockerclient/DockerClientProviderStrategy":
case "org/testcontainers/dockerclient/WindowsClientProviderStrategy":
case "org/testcontainers/utility/DynamicPollInterval":
Assumptions.assumeTrue(false);
}
}
@Test
void testSuperClass() {
assertThat(classNode.superName).doesNotStartWith(SHADED_PACKAGE_PATH);
}
@Test
void testInterfaces() {
assertThat(classNode.interfaces).allSatisfy(it -> assertThat(it).doesNotStartWith(SHADED_PACKAGE_PATH));
}
@Test
void testMethodReturnTypes() {
assertThat(classNode.methods)
.filteredOn(it -> (it.access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED)) != 0)
.allSatisfy(it -> assertThat(Type.getReturnType(it.desc).getClassName()).doesNotStartWith(SHADED_PACKAGE));
}
@Test
void testMethodArguments() {
assertThat(classNode.methods)
.filteredOn(it -> (it.access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED)) != 0)
.allSatisfy(method -> {
assertThat(Arrays.asList(Type.getArgumentTypes(method.desc)))
.extracting(Type::getClassName)
.allSatisfy(it -> assertThat(it).doesNotStartWith(SHADED_PACKAGE));
});
}
@Test
void testFields() {
assertThat(classNode.fields)
.filteredOn(it -> (it.access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED)) != 0)
.allSatisfy(it -> assertThat(Type.getType(it.desc).getClassName()).doesNotStartWith(SHADED_PACKAGE));
}
}
================================================
FILE: core/src/main/java/org/testcontainers/DelegatingDockerClient.java
================================================
package org.testcontainers;
import com.github.dockerjava.api.DockerClient;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Delegate;
@RequiredArgsConstructor
class DelegatingDockerClient implements DockerClient {
@Delegate
private final DockerClient dockerClient;
}
================================================
FILE: core/src/main/java/org/testcontainers/DockerClientFactory.java
================================================
package org.testcontainers;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.DockerClientDelegate;
import com.github.dockerjava.api.command.CreateContainerCmd;
import com.github.dockerjava.api.command.PullImageCmd;
import com.github.dockerjava.api.exception.DockerClientException;
import com.github.dockerjava.api.exception.InternalServerErrorException;
import com.github.dockerjava.api.exception.NotFoundException;
import com.github.dockerjava.api.model.AccessMode;
import com.github.dockerjava.api.model.Bind;
import com.github.dockerjava.api.model.Info;
import com.github.dockerjava.api.model.Version;
import com.github.dockerjava.api.model.Volume;
import com.google.common.annotations.VisibleForTesting;
import lombok.Getter;
import lombok.SneakyThrows;
import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.SystemUtils;
import org.testcontainers.dockerclient.DockerClientProviderStrategy;
import org.testcontainers.dockerclient.DockerMachineClientProviderStrategy;
import org.testcontainers.dockerclient.TransportConfig;
import org.testcontainers.images.RemoteDockerImage;
import org.testcontainers.images.TimeLimitedLoggedPullImageResultCallback;
import org.testcontainers.utility.ComparableVersion;
import org.testcontainers.utility.DockerImageName;
import org.testcontainers.utility.MountableFile;
import org.testcontainers.utility.ResourceReaper;
import org.testcontainers.utility.TestcontainersConfiguration;
import java.io.InputStream;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
import java.util.UUID;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.stream.Collectors;
/**
* Singleton class that provides initialized Docker clients.
* <p>
* The correct client configuration to use will be determined on first use, and cached thereafter.
*/
@Slf4j
public class DockerClientFactory {
public static final ThreadGroup TESTCONTAINERS_THREAD_GROUP = new ThreadGroup("testcontainers");
public static final String TESTCONTAINERS_LABEL = DockerClientFactory.class.getPackage().getName();
public static final String TESTCONTAINERS_SESSION_ID_LABEL = TESTCONTAINERS_LABEL + ".sessionId";
public static final String TESTCONTAINERS_LANG_LABEL = TESTCONTAINERS_LABEL + ".lang";
public static final String TESTCONTAINERS_VERSION_LABEL = TESTCONTAINERS_LABEL + ".version";
public static final String SESSION_ID = UUID.randomUUID().toString();
public static final String TESTCONTAINERS_VERSION =
DockerClientFactory.class.getPackage().getImplementationVersion();
public static final Map<String, String> DEFAULT_LABELS = markerLabels();
static Map<String, String> markerLabels() {
String testcontainersVersion = TESTCONTAINERS_VERSION == null ? "unspecified" : TESTCONTAINERS_VERSION;
Map<String, String> labels = new HashMap<>();
labels.put(TESTCONTAINERS_LABEL, "true");
labels.put(TESTCONTAINERS_LANG_LABEL, "java");
labels.put(TESTCONTAINERS_VERSION_LABEL, testcontainersVersion);
return Collections.unmodifiableMap(labels);
}
private static final DockerImageName TINY_IMAGE = DockerImageName.parse("alpine:3.17");
private static DockerClientFactory instance;
// Cached client configuration
@VisibleForTesting
DockerClientProviderStrategy strategy;
@VisibleForTesting
DockerClient client;
@VisibleForTesting
RuntimeException cachedClientFailure;
private String activeApiVersion;
@Getter(lazy = true)
private final boolean fileMountingSupported = checkMountableFile();
@VisibleForTesting
DockerClientFactory() {}
public static DockerClient lazyClient() {
return new DockerClientDelegate() {
@Override
protected DockerClient getDockerClient() {
return instance().client();
}
@Override
public String toString() {
return "LazyDockerClient";
}
};
}
/**
* Obtain an instance of the DockerClientFactory.
*
* @return the singleton instance of DockerClientFactory
*/
public static synchronized DockerClientFactory instance() {
if (instance == null) {
instance = new DockerClientFactory();
}
return instance;
}
/**
* Checks whether Docker is accessible and {@link #client()} is able to produce a client.
*
* @return true if Docker is available, false if not.
*/
public synchronized boolean isDockerAvailable() {
try {
client();
return true;
} catch (IllegalStateException ex) {
return false;
}
}
@Synchronized
private DockerClientProviderStrategy getOrInitializeStrategy() {
if (strategy != null) {
return strategy;
}
log.info("Testcontainers version: {}", DEFAULT_LABELS.get(TESTCONTAINERS_VERSION_LABEL));
List<DockerClientProviderStrategy> configurationStrategies = new ArrayList<>();
ServiceLoader.load(DockerClientProviderStrategy.class).forEach(configurationStrategies::add);
strategy = DockerClientProviderStrategy.getFirstValidStrategy(configurationStrategies);
return strategy;
}
@UnstableAPI
public TransportConfig getTransportConfig() {
return getOrInitializeStrategy().getTransportConfig();
}
@UnstableAPI
public String getRemoteDockerUnixSocketPath() {
DockerClientProviderStrategy strategy = getOrInitializeStrategy();
if (strategy.allowUserOverrides()) {
String dockerSocketOverride = System.getenv("TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE");
if (!StringUtils.isBlank(dockerSocketOverride)) {
return dockerSocketOverride;
}
}
if (strategy.getRemoteDockerUnixSocketPath() != null) {
return strategy.getRemoteDockerUnixSocketPath();
}
URI dockerHost = getTransportConfig().getDockerHost();
String path = "unix".equals(dockerHost.getScheme()) ? dockerHost.getRawPath() : "/var/run/docker.sock";
return SystemUtils.IS_OS_WINDOWS ? "/" + path : path;
}
/**
* @return a new initialized Docker client
*/
@Synchronized
public DockerClient client() {
// fail-fast if checks have failed previously
if (cachedClientFailure != null) {
log.debug("There is a cached checks failure - throwing", cachedClientFailure);
throw cachedClientFailure;
}
if (client != null) {
return client;
}
final DockerClientProviderStrategy strategy = getOrInitializeStrategy();
client =
new DockerClientDelegate() {
@Getter
final DockerClient dockerClient = strategy.getDockerClient();
@Override
public void close() {
throw new IllegalStateException("You should never close the global DockerClient!");
}
};
log.info("Docker host IP address is {}", strategy.getDockerHostIpAddress());
Info dockerInfo = strategy.getInfo();
log.debug("Docker info: {}", dockerInfo.getRawValues());
Version version = client.versionCmd().exec();
log.debug("Docker version: {}", version.getRawValues());
activeApiVersion = version.getApiVersion();
String serverInfo =
"Connected to docker: \n" +
" Server Version: " +
dockerInfo.getServerVersion() +
"\n" +
" API Version: " +
activeApiVersion +
"\n" +
" Operating System: " +
dockerInfo.getOperatingSystem() +
"\n" +
" Total Memory: " +
dockerInfo.getMemTotal() /
(1024 * 1024) +
" MB";
String[] labels = dockerInfo.getLabels();
boolean hasLabels = labels != null && labels.length > 0;
if (hasLabels) {
String formattedLabels = Arrays
.stream(labels)
.map(label -> " " + label)
.collect(Collectors.joining("\n"));
serverInfo += "\n Labels: \n" + formattedLabels;
}
log.info(serverInfo);
try {
//noinspection deprecation
ResourceReaper.instance().init();
} catch (RuntimeException e) {
cachedClientFailure = e;
throw e;
}
boolean checksEnabled = !TestcontainersConfiguration.getInstance().isDisableChecks();
if (checksEnabled) {
log.debug("Checks are enabled");
try {
log.info("Checking the system...");
checkDockerVersion(version.getVersion());
} catch (RuntimeException e) {
cachedClientFailure = e;
throw e;
}
} else {
log.debug("Checks are disabled");
}
return client;
}
private void checkDockerVersion(String dockerVersion) {
boolean versionIsSufficient = new ComparableVersion(dockerVersion).compareTo(new ComparableVersion("1.6.0")) >=
0;
check("Docker server version should be at least 1.6.0", versionIsSufficient);
}
private void check(String message, boolean isSuccessful) {
if (isSuccessful) {
log.info("\u2714\ufe0e {}", message);
} else {
log.error("\u274c {}", message);
throw new IllegalStateException("Check failed: " + message);
}
}
private boolean checkMountableFile() {
DockerClient dockerClient = client();
MountableFile mountableFile = MountableFile.forClasspathResource(
ResourceReaper.class.getName().replace(".", "/") + ".class"
);
Volume volume = new Volume("/dummy");
try {
return runInsideDocker(
createContainerCmd -> {
createContainerCmd.withBinds(new Bind(mountableFile.getResolvedPath(), volume, AccessMode.ro));
},
(__, containerId) -> {
try (
InputStream stream = dockerClient
.copyArchiveFromContainerCmd(containerId, volume.getPath())
.exec()
) {
stream.read();
return true;
} catch (Exception e) {
return false;
}
}
);
} catch (Exception e) {
log.debug("Failure while checking for mountable file support", e);
return false;
}
}
/**
* Check whether the image is available locally and pull it otherwise
*
* @deprecated use {@link RemoteDockerImage}
*/
@SneakyThrows
@Deprecated
public void checkAndPullImage(DockerClient client, String image) {
try {
client.inspectImageCmd(image).exec();
} catch (NotFoundException notFoundException) {
PullImageCmd pullImageCmd = client.pullImageCmd(image);
try {
pullImageCmd.exec(new TimeLimitedLoggedPullImageResultCallback(log)).awaitCompletion();
} catch (DockerClientException e) {
// Try to fallback to x86
pullImageCmd
.withPlatform("linux/amd64")
.exec(new TimeLimitedLoggedPullImageResultCallback(log))
.awaitCompletion();
}
}
}
/**
* @return the IP address of the host running Docker
*/
public String dockerHostIpAddress() {
return getOrInitializeStrategy().getDockerHostIpAddress();
}
public <T> T runInsideDocker(
Consumer<CreateContainerCmd> createContainerCmdConsumer,
BiFunction<DockerClient, String, T> block
) {
return runInsideDocker(TINY_IMAGE, createContainerCmdConsumer, block);
}
<T> T runInsideDocker(
DockerImageName imageName,
Consumer<CreateContainerCmd> createContainerCmdConsumer,
BiFunction<DockerClient, String, T> block
) {
RemoteDockerImage dockerImage = new RemoteDockerImage(imageName);
HashMap<String, String> labels = new HashMap<>(DEFAULT_LABELS);
labels.putAll(ResourceReaper.instance().getLabels());
CreateContainerCmd createContainerCmd = client.createContainerCmd(dockerImage.get()).withLabels(labels);
createContainerCmdConsumer.accept(createContainerCmd);
String id = createContainerCmd.exec().getId();
try {
client.startContainerCmd(id).exec();
return block.apply(client, id);
} finally {
try {
client.removeContainerCmd(id).withRemoveVolumes(true).withForce(true).exec();
} catch (NotFoundException | InternalServerErrorException e) {
log.debug("Swallowed exception while removing container", e);
}
}
}
/**
* @return the docker API version of the daemon that we have connected to
*/
public String getActiveApiVersion() {
client();
return activeApiVersion;
}
/**
* @return the docker execution driver of the daemon that we have connected to
*/
public String getActiveExecutionDriver() {
return getInfo().getExecutionDriver();
}
/**
* @param providerStrategyClass a class that extends {@link DockerMachineClientProviderStrategy}
* @return whether or not the currently active strategy is of the provided type
*/
public boolean isUsing(Class<? extends DockerClientProviderStrategy> providerStrategyClass) {
return strategy != null && providerStrategyClass.isAssignableFrom(this.strategy.getClass());
}
@UnstableAPI
public Info getInfo() {
return getOrInitializeStrategy().getInfo();
}
}
================================================
FILE: core/src/main/java/org/testcontainers/Testcontainers.java
================================================
package org.testcontainers;
import lombok.experimental.UtilityClass;
import org.testcontainers.containers.PortForwardingContainer;
import java.util.Map;
import java.util.Map.Entry;
@UtilityClass
public class Testcontainers {
public void exposeHostPorts(int... ports) {
for (int port : ports) {
PortForwardingContainer.INSTANCE.exposeHostPort(port);
}
}
public void exposeHostPorts(Map<Integer, Integer> ports) {
for (Entry<Integer, Integer> entry : ports.entrySet()) {
PortForwardingContainer.INSTANCE.exposeHostPort(entry.getKey(), entry.getValue());
}
}
}
================================================
FILE: core/src/main/java/org/testcontainers/UnstableAPI.java
================================================
package org.testcontainers;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Marks that the annotated API is a subject to change and SHOULD NOT be considered
* a stable API.
*/
@Retention(RetentionPolicy.SOURCE)
@Target({ ElementType.TYPE, ElementType.METHOD, ElementType.FIELD })
@Documented
public @interface UnstableAPI {
}
================================================
FILE: core/src/main/java/org/testcontainers/containers/BindMode.java
================================================
package org.testcontainers.containers;
import com.github.dockerjava.api.model.AccessMode;
/**
* Possible modes for binding storage volumes.
*/
public enum BindMode {
READ_ONLY(AccessMode.ro),
READ_WRITE(AccessMode.rw);
public final AccessMode accessMode;
BindMode(AccessMode accessMode) {
this.accessMode = accessMode;
}
}
================================================
FILE: core/src/main/java/org/testcontainers/containers/ComposeCommand.java
================================================
package org.testcontainers.containers;
import java.util.Set;
class ComposeCommand {
static String getDownCommand(ComposeDelegate.ComposeVersion composeVersion, Set<String> options) {
String composeOptions = optionsAsString(options);
if (composeOptions.isEmpty()) {
return composeVersion == ComposeDelegate.ComposeVersion.V1 ? "down" : "compose down";
}
String cmd = composeVersion == ComposeDelegate.ComposeVersion.V1 ? "%s down" : "compose %s down";
return String.format(cmd, composeOptions);
}
static String getUpCommand(ComposeDelegate.ComposeVersion composeVersion, Set<String> options) {
String composeOptions = optionsAsString(options);
if (composeOptions.isEmpty()) {
return composeVersion == ComposeDelegate.ComposeVersion.V1 ? "up -d" : "compose up -d";
}
String cmd = composeVersion == ComposeDelegate.ComposeVersion.V1 ? "%s up -d" : "compose %s up -d";
return String.format(cmd, composeOptions);
}
private static String optionsAsString(final Set<String> options) {
String optionsString = String.join(" ", options);
if (!optionsString.isEmpty()) {
// ensures that there is a space between the options and 'up' if options are passed.
return optionsString;
} else {
// otherwise two spaces would appear between 'docker-compose' and 'up'
return "";
}
}
}
================================================
FILE: core/src/main/java/org/testcontainers/containers/ComposeContainer.java
================================================
package org.testcontainers.containers;
import com.github.dockerjava.api.model.Container;
import com.google.common.annotations.VisibleForTesting;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.SystemUtils;
import org.testcontainers.containers.output.OutputFrame;
import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.containers.wait.strategy.WaitStrategy;
import org.testcontainers.lifecycle.Startable;
import org.testcontainers.utility.Base58;
import org.testcontainers.utility.DockerImageName;
import java.io.File;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.Consumer;
/**
* Testcontainers implementation for Docker Compose V2. <br>
* It uses either Compose V2 contained within the Docker binary, or a containerised version of Compose V2.
*/
@Slf4j
public class ComposeContainer implements Startable {
private final Map<String, Integer> scalingPreferences = new HashMap<>();
private boolean localCompose;
private boolean pull = true;
private boolean build = false;
private Set<String> options = new HashSet<>();
private boolean tailChildContainers;
private static final Object MUTEX = new Object();
private List<String> services = new ArrayList<>();
/**
* Properties that should be passed through to all Compose and ambassador containers (not
* necessarily to containers that are spawned by Compose itself)
*/
private Map<String, String> env = new HashMap<>();
private RemoveImages removeImages;
private boolean removeVolumes = true;
public static final String COMPOSE_EXECUTABLE = SystemUtils.IS_OS_WINDOWS ? "docker.exe" : "docker";
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("docker");
private final ComposeDelegate composeDelegate;
private String project;
private List<String> filesInDirectory = new ArrayList<>();
/**
* Creates a new ComposeContainer using the specified Docker image and compose files.
*
* @param image The Docker image to use for the container
* @param composeFiles One or more Docker Compose configuration files
*/
public ComposeContainer(DockerImageName image, File... composeFiles) {
this(image, Arrays.asList(composeFiles));
}
/**
* Creates a new ComposeContainer using the specified Docker image and compose files.
*
* @param image The Docker image to use for the container
* @param composeFiles A list of Docker Compose configuration files
*/
public ComposeContainer(DockerImageName image, List<File> composeFiles) {
this(image, Base58.randomString(6).toLowerCase(), composeFiles);
}
/**
* Creates a new ComposeContainer with the specified Docker image, identifier, and compose files.
*
* @param image The Docker image to use for the container
* @param identifier A unique identifier for this compose environment
* @param composeFiles One or more Docker Compose configuration files
*/
public ComposeContainer(DockerImageName image, String identifier, File... composeFiles) {
this(image, identifier, Arrays.asList(composeFiles));
}
/**
* Creates a new ComposeContainer with the specified Docker image, identifier, and a single compose file.
*
* @param image The Docker image to use for the container
* @param identifier A unique identifier for this compose environment
* @param composeFile A Docker Compose configuration file
*/
public ComposeContainer(DockerImageName image, String identifier, File composeFile) {
this(image, identifier, Collections.singletonList(composeFile));
}
/**
* Creates a new ComposeContainer with the specified Docker image, identifier, and compose files.
*
* @param image The Docker image to use for the container
* @param identifier A unique identifier for this compose environment
* @param composeFiles A list of Docker Compose configuration files
*/
public ComposeContainer(DockerImageName image, String identifier, List<File> composeFiles) {
image.assertCompatibleWith(DEFAULT_IMAGE_NAME);
this.composeDelegate =
new ComposeDelegate(ComposeDelegate.ComposeVersion.V2, composeFiles, identifier, COMPOSE_EXECUTABLE, image);
this.project = this.composeDelegate.getProject();
}
/**
* Use the new constructor {@link #ComposeContainer(DockerImageName image, File... composeFiles)}
*/
public ComposeContainer(File... composeFiles) {
this(DEFAULT_IMAGE_NAME, Arrays.asList(composeFiles));
this.localCompose = true;
}
/**
* Use the new constructor {@link #ComposeContainer(DockerImageName image, List composeFiles)}
*/
public ComposeContainer(List<File> composeFiles) {
this(DEFAULT_IMAGE_NAME, composeFiles);
this.localCompose = true;
}
/**
* Use the new constructor {@link #ComposeContainer(DockerImageName image, String identifier, File... composeFile)}
*/
public ComposeContainer(String identifier, File... composeFiles) {
this(DEFAULT_IMAGE_NAME, identifier, Arrays.asList(composeFiles));
this.localCompose = true;
}
/**
* Use the new constructor {@link #ComposeContainer(DockerImageName image, String identifier, List composeFiles)}
*/
public ComposeContainer(String identifier, List<File> composeFiles) {
this(DEFAULT_IMAGE_NAME, identifier, composeFiles);
this.localCompose = true;
}
@Override
public void start() {
synchronized (MUTEX) {
this.composeDelegate.registerContainersForShutdown();
if (pull) {
try {
this.composeDelegate.pullImages();
} catch (ContainerLaunchException e) {
log.warn("Exception while pulling images, using local images if available", e);
}
}
this.composeDelegate.createServices(
this.localCompose,
this.build,
this.options,
this.services,
this.scalingPreferences,
this.env,
this.filesInDirectory
);
this.composeDelegate.startAmbassadorContainer();
this.composeDelegate.waitUntilServiceStarted(this.tailChildContainers);
}
}
@VisibleForTesting
List<Container> listChildContainers() {
return this.composeDelegate.listChildContainers();
}
public ComposeContainer withServices(@NonNull String... services) {
this.services = Arrays.asList(services);
return this;
}
@Override
public void stop() {
synchronized (MUTEX) {
try {
this.composeDelegate.getAmbassadorContainer().stop();
// Kill the services using docker
String cmd = ComposeCommand.getDownCommand(ComposeDelegate.ComposeVersion.V2, this.options);
if (removeVolumes) {
cmd += " -v";
}
if (removeImages != null) {
cmd += " --rmi " + removeImages.dockerRemoveImagesType();
}
this.composeDelegate.runWithCompose(this.localCompose, cmd, this.env, this.filesInDirectory);
} finally {
this.composeDelegate.clear();
this.project = this.composeDelegate.randomProjectId();
}
}
}
public ComposeContainer withExposedService(String serviceName, int servicePort) {
this.composeDelegate.withExposedService(serviceName, servicePort, Wait.defaultWaitStrategy());
return this;
}
public ComposeContainer withExposedService(String serviceName, int instance, int servicePort) {
return withExposedService(serviceName + "-" + instance, servicePort);
}
public ComposeContainer withExposedService(
String serviceName,
int instance,
int servicePort,
WaitStrategy waitStrategy
) {
this.composeDelegate.withExposedService(serviceName + "-" + instance, servicePort, waitStrategy);
return this;
}
public ComposeContainer withExposedService(
String serviceName,
int servicePort,
@NonNull WaitStrategy waitStrategy
) {
this.composeDelegate.withExposedService(serviceName, servicePort, waitStrategy);
return this;
}
/**
* Specify the {@link WaitStrategy} to use to determine if the container is ready.
*
* @param serviceName the name of the service to wait for
* @param waitStrategy the WaitStrategy to use
* @return this
* @see org.testcontainers.containers.wait.strategy.Wait#defaultWaitStrategy()
*/
public ComposeContainer waitingFor(String serviceName, @NonNull WaitStrategy waitStrategy) {
String serviceInstanceName = this.composeDelegate.getServiceInstanceName(serviceName);
this.composeDelegate.addWaitStrategy(serviceInstanceName, waitStrategy);
return this;
}
/**
* Get the host (e.g. IP address or hostname) that an exposed service can be found at, from the host machine
* (i.e. should be the machine that's running this Java process).
* <p>
* The service must have been declared using ComposeContainer#withExposedService.
*
* @param serviceName the name of the service as set in the docker-compose.yml file.
* @param servicePort the port exposed by the service container.
* @return a host IP address or hostname that can be used for accessing the service container.
*/
public String getServiceHost(String serviceName, Integer servicePort) {
return this.composeDelegate.getServiceHost();
}
/**
* Get the port that an exposed service can be found at, from the host machine
* (i.e. should be the machine that's running this Java process).
* <p>
* The service must have been declared using ComposeContainer#withExposedService.
*
* @param serviceName the name of the service as set in the docker-compose.yml file.
* @param servicePort the port exposed by the service container.
* @return a port that can be used for accessing the service container.
*/
public Integer getServicePort(String serviceName, Integer servicePort) {
return this.composeDelegate.getServicePort(serviceName, servicePort);
}
public ComposeContainer withScaledService(String serviceBaseName, int numInstances) {
scalingPreferences.put(serviceBaseName, numInstances);
return this;
}
public ComposeContainer withEnv(String key, String value) {
env.put(key, value);
return this;
}
public ComposeContainer withEnv(Map<String, String> env) {
env.forEach(this.env::put);
return this;
}
/**
* Whether to pull images first.
*
* @return this instance, for chaining
*/
public ComposeContainer withPull(boolean pull) {
this.pull = pull;
return this;
}
/**
* Whether to tail child container logs.
*
* @return this instance, for chaining
*/
public ComposeContainer withTailChildContainers(boolean tailChildContainers) {
this.tailChildContainers = tailChildContainers;
return this;
}
/**
* Attach an output consumer at container startup, enabling stdout and stderr to be followed, waited on, etc.
* <p>
* More than one consumer may be registered.
*
* @param serviceName the name of the service as set in the docker-compose.yml file
* @param consumer consumer that output frames should be sent to
* @return this instance, for chaining
*/
public ComposeContainer withLogConsumer(String serviceName, Consumer<OutputFrame> consumer) {
this.composeDelegate.withLogConsumer(serviceName, consumer);
return this;
}
/**
* Whether to always build images before starting containers.
*
* @return this instance, for chaining
*/
public ComposeContainer withBuild(boolean build) {
this.build = build;
return this;
}
/**
* Adds options to the docker command, e.g. docker --compatibility.
*
* @return this instance, for chaining
*/
public ComposeContainer withOptions(String... options) {
this.options = new HashSet<>(Arrays.asList(options));
return this;
}
/**
* Remove images after containers shutdown.
*
* @return this instance, for chaining
*/
public ComposeContainer withRemoveImages(ComposeContainer.RemoveImages removeImages) {
this.removeImages = removeImages;
return this;
}
/**
* Remove volumes after containers shut down.
*
* @param removeVolumes whether volumes are to be removed.
* @return this instance, for chaining.
*/
public ComposeContainer withRemoveVolumes(boolean removeVolumes) {
this.removeVolumes = removeVolumes;
return this;
}
/**
* Set the maximum startup timeout all the waits set are bounded to.
*
* @return this instance. for chaining
*/
public ComposeContainer withStartupTimeout(Duration startupTimeout) {
this.composeDelegate.setStartupTimeout(startupTimeout);
return this;
}
public ComposeContainer withCopyFilesInContainer(String... fileCopyInclusions) {
this.filesInDirectory = Arrays.asList(fileCopyInclusions);
return this;
}
public Optional<ContainerState> getContainerByServiceName(String serviceName) {
return this.composeDelegate.getContainerByServiceName(serviceName);
}
private void followLogs(String containerId, Consumer<OutputFrame> consumer) {
this.followLogs(containerId, consumer);
}
public enum RemoveImages {
/**
* Remove all images used by any service.
*/
ALL("all"),
/**
* Remove only images that don't have a custom tag set by the `image` field.
*/
LOCAL("local");
private final String dockerRemoveImagesType;
RemoveImages(final String dockerRemoveImagesType) {
this.dockerRemoveImagesType = dockerRemoveImagesType;
}
public String dockerRemoveImagesType() {
return dockerRemoveImagesType;
}
}
}
================================================
FILE: core/src/main/java/org/testcontainers/containers/ComposeDelegate.java
================================================
package org.testcontainers.containers;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.model.Container;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.common.collect.Sets;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.testcontainers.DockerClientFactory;
import org.testcontainers.containers.output.OutputFrame;
import org.testcontainers.containers.output.Slf4jLogConsumer;
import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.containers.wait.strategy.WaitAllStrategy;
import org.testcontainers.containers.wait.strategy.WaitStrategy;
import org.testcontainers.images.RemoteDockerImage;
import org.testcontainers.utility.Base58;
import org.testcontainers.utility.DockerImageName;
import org.testcontainers.utility.ImageNameSubstitutor;
import org.testcontainers.utility.LogUtils;
import org.testcontainers.utility.ResourceReaper;
import java.io.File;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Slf4j
class ComposeDelegate {
private final ComposeVersion composeVersion;
private final String composeSeparator;
private final DockerClient dockerClient;
private final List<File> composeFiles;
private final DockerComposeFiles dockerComposeFiles;
private final String identifier;
@Getter
private final String project;
private final String executable;
private final DockerImageName defaultImageName;
private final AtomicInteger nextAmbassadorPort = new AtomicInteger(2000);
private final Map<String, Map<Integer, Integer>> ambassadorPortMappings = new ConcurrentHashMap<>();
private final Map<String, List<Consumer<OutputFrame>>> logConsumers = new ConcurrentHashMap<>();
@Getter
private final SocatContainer ambassadorContainer = new SocatContainer();
private final Map<String, ComposeServiceWaitStrategyTarget> serviceInstanceMap = new ConcurrentHashMap<>();
private final Map<String, WaitAllStrategy> waitStrategyMap = new ConcurrentHashMap<>();
@Setter
private Duration startupTimeout = Duration.ofMinutes(30);
ComposeDelegate(
ComposeVersion composeVersion,
List<File> composeFiles,
String identifier,
String executable,
DockerImageName defaultImageName
) {
this.composeVersion = composeVersion;
this.composeSeparator = composeVersion.getSeparator();
this.dockerClient = DockerClientFactory.lazyClient();
this.composeFiles = composeFiles;
this.dockerComposeFiles = new DockerComposeFiles(this.composeFiles);
this.identifier = identifier.toLowerCase();
this.project = randomProjectId();
this.executable = executable;
this.defaultImageName = defaultImageName;
}
void pullImages() {
// Pull images using our docker client rather than compose itself,
// (a) as a workaround for https://github.com/docker/compose/issues/5854, which prevents authenticated image pulls being possible when credential helpers are in use
// (b) so that credential helper-based auth still works when compose is running from within a container
this.dockerComposeFiles.getDependencyImages()
.forEach(imageName -> {
try {
log.info(
"Preemptively checking local images for '{}', referenced via a compose file or transitive Dockerfile. If not available, it will be pulled.",
imageName
);
new RemoteDockerImage(DockerImageName.parse(imageName))
.withImageNameSubstitutor(ImageNameSubstitutor.noop())
.get();
} catch (Exception e) {
log.warn(
"Unable to pre-fetch an image ({}) depended upon by Docker Compose build - startup will continue but may fail. Exception message was: {}",
imageName,
e.getMessage()
);
}
});
}
void createServices(
boolean localCompose,
boolean build,
final Set<String> options,
final List<String> services,
final Map<String, Integer> scalingPreferences,
Map<String, String> env,
List<String> fileCopyInclusions
) {
// services that have been explicitly requested to be started. If empty, all services should be started.
final String serviceNameArgs = Stream
.concat(
services.stream(), // services that have been specified with `withServices`
scalingPreferences.keySet().stream() // services that are implicitly needed via `withScaledService`
)
.distinct()
.collect(Collectors.joining(" "));
// Apply scaling for the services specified using `withScaledService`
final String scalingOptions = scalingPreferences
.entrySet()
.stream()
.map(entry -> "--scale " + entry.getKey() + "=" + entry.getValue())
.distinct()
.collect(Collectors.joining(" "));
String command = ComposeCommand.getUpCommand(this.composeVersion, options);
if (build) {
command += " --build";
}
if (!Strings.isNullOrEmpty(scalingOptions)) {
command += " " + scalingOptions;
}
if (!Strings.isNullOrEmpty(serviceNameArgs)) {
command += " " + serviceNameArgs;
}
// Run the docker compose container, which starts up the services
runWithCompose(localCompose, command, env, fileCopyInclusions);
}
void waitUntilServiceStarted(boolean tailChildContainers) {
listChildContainers().forEach(container -> createServiceInstance(container, tailChildContainers));
Set<String> servicesToWaitFor = waitStrategyMap.keySet();
Set<String> instantiatedServices = serviceInstanceMap.keySet();
Sets.SetView<String> missingServiceInstances = Sets.difference(servicesToWaitFor, instantiatedServices);
if (!missingServiceInstances.isEmpty()) {
throw new IllegalStateException(
"Services named " +
missingServiceInstances +
" " +
"do not exist, but wait conditions have been defined " +
"for them. This might mean that you misspelled " +
"the service name when defining the wait condition."
);
}
serviceInstanceMap.forEach(this::waitUntilServiceStarted);
}
private void createServiceInstance(Container container, boolean tailChildContainers) {
String serviceName = getServiceNameFromContainer(container);
final ComposeServiceWaitStrategyTarget containerInstance = new ComposeServiceWaitStrategyTarget(
dockerClient,
container,
ambassadorContainer,
ambassadorPortMappings.getOrDefault(serviceName, new HashMap<>())
);
String containerId = containerInstance.getContainerId();
if (tailChildContainers) {
followLogs(containerId, new Slf4jLogConsumer(log).withPrefix(container.getNames()[0]));
}
//follow logs using registered consumers for this service
logConsumers
.getOrDefault(serviceName, Collections.emptyList())
.forEach(consumer -> followLogs(containerId, consumer));
serviceInstanceMap.putIfAbsent(serviceName, containerInstance);
}
private void waitUntilServiceStarted(String serviceName, ComposeServiceWaitStrategyTarget serviceInstance) {
final WaitAllStrategy waitAllStrategy = waitStrategyMap.get(serviceName);
if (waitAllStrategy != null) {
waitAllStrategy.waitUntilReady(serviceInstance);
}
}
private String getServiceNameFromContainer(com.github.dockerjava.api.model.Container container) {
final String containerName = container.getLabels().get("com.docker.compose.service");
final String containerNumber = container.getLabels().get("com.docker.compose.container-number");
return String.format("%s%s%s", containerName, this.composeSeparator, containerNumber);
}
public void runWithCompose(boolean localCompose, String cmd) {
runWithCompose(localCompose, cmd, Collections.emptyMap(), Collections.emptyList());
}
public void runWithCompose(
boolean localCompose,
String cmd,
Map<String, String> env,
List<String> fileCopyInclusions
) {
Preconditions.checkNotNull(composeFiles);
Preconditions.checkArgument(!composeFiles.isEmpty(), "No docker compose file have been provided");
final DockerCompose dockerCompose;
if (localCompose) {
dockerCompose = new LocalDockerCompose(this.executable, composeFiles, project);
} else {
dockerCompose =
new ContainerisedDockerCompose(this.defaultImageName, composeFiles, project, fileCopyInclusions);
}
dockerCompose.withCommand(cmd).withEnv(env).invoke();
}
void registerContainersForShutdown() {
ResourceReaper
.instance()
.registerLabelsFilterForCleanup(Collections.singletonMap("com.docker.compose.project", project));
}
@VisibleForTesting
List<Container> listChildContainers() {
return dockerClient
.listContainersCmd()
.withShowAll(true)
.exec()
.stream()
.filter(container -> Arrays.stream(container.getNames()).anyMatch(name -> name.startsWith("/" + project)))
.collect(Collectors.toList());
}
void startAmbassadorContainer() {
if (!this.ambassadorPortMappings.isEmpty()) {
this.ambassadorContainer.start();
}
}
public void withExposedService(String serviceName, int servicePort) {
withExposedService(serviceName, servicePort, Wait.defaultWaitStrategy());
}
public void withExposedService(String serviceName, int instance, int servicePort) {
withExposedService(serviceName + this.composeSeparator + instance, servicePort);
}
public void withExposedService(String serviceName, int instance, int servicePort, WaitStrategy waitStrategy) {
withExposedService(serviceName + this.composeSeparator + instance, servicePort, waitStrategy);
}
public void withExposedService(String serviceName, int servic
gitextract_vplit3v1/
├── .circleci/
│ └── config.yml
├── .devcontainer/
│ └── devcontainer.json
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── CODEOWNERS
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yaml
│ │ ├── config.yml
│ │ ├── enhancement.yaml
│ │ └── feature.yaml
│ ├── actions/
│ │ ├── setup-build/
│ │ │ └── action.yml
│ │ ├── setup-gradle/
│ │ │ └── action.yml
│ │ ├── setup-java/
│ │ │ └── action.yml
│ │ └── setup-junit-report/
│ │ └── action.yml
│ ├── bumper.yml
│ ├── dependabot.yml
│ ├── labeler.yml
│ ├── pull_request_template.md
│ ├── release-drafter.yml
│ ├── settings.yml
│ └── workflows/
│ ├── ci-docker-wormhole.yml
│ ├── ci-rootless.yml
│ ├── ci-windows-trigger.yml
│ ├── ci-windows.yml
│ ├── ci.yml
│ ├── combine-prs.yml
│ ├── labeler.yml
│ ├── moby-latest.yml
│ ├── release-drafter.yml
│ ├── release.yml
│ ├── scripts/
│ │ └── check_ci_status.sh
│ ├── update-docs-version.yml
│ ├── update-gradle-wrapper.yml
│ └── update-testcontainers-version.yml
├── .gitignore
├── .sdkmanrc
├── AUTHORS
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── RELEASING.md
├── annotations/
│ ├── com/
│ │ └── google/
│ │ └── common/
│ │ └── base/
│ │ └── annotations.xml
│ └── org/
│ └── rnorth/
│ └── ducttape/
│ └── annotations.xml
├── azure-pipelines.yml
├── bom/
│ └── build.gradle
├── build.gradle
├── buildSrc/
│ ├── build.gradle
│ └── src/
│ └── main/
│ └── groovy/
│ └── org/
│ └── testcontainers/
│ └── build/
│ ├── ComparePOMWithLatestReleasedTask.groovy
│ └── DelombokArgumentProvider.groovy
├── config/
│ └── checkstyle/
│ └── checkstyle.xml
├── core/
│ ├── build.gradle
│ ├── src/
│ │ ├── jarFileTest/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── AbstractJarFileTest.java
│ │ │ ├── JarFileShadingTest.java
│ │ │ └── PublicBinaryAPITest.java
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── DelegatingDockerClient.java
│ │ │ │ ├── DockerClientFactory.java
│ │ │ │ ├── Testcontainers.java
│ │ │ │ ├── UnstableAPI.java
│ │ │ │ ├── containers/
│ │ │ │ │ ├── BindMode.java
│ │ │ │ │ ├── ComposeCommand.java
│ │ │ │ │ ├── ComposeContainer.java
│ │ │ │ │ ├── ComposeDelegate.java
│ │ │ │ │ ├── ComposeServiceWaitStrategyTarget.java
│ │ │ │ │ ├── Container.java
│ │ │ │ │ ├── ContainerDef.java
│ │ │ │ │ ├── ContainerFetchException.java
│ │ │ │ │ ├── ContainerLaunchException.java
│ │ │ │ │ ├── ContainerState.java
│ │ │ │ │ ├── ContainerisedDockerCompose.java
│ │ │ │ │ ├── DockerCompose.java
│ │ │ │ │ ├── DockerComposeContainer.java
│ │ │ │ │ ├── DockerComposeFiles.java
│ │ │ │ │ ├── DockerMcpGatewayContainer.java
│ │ │ │ │ ├── DockerModelRunnerContainer.java
│ │ │ │ │ ├── ExecConfig.java
│ │ │ │ │ ├── ExecInContainerPattern.java
│ │ │ │ │ ├── FixedHostPortGenericContainer.java
│ │ │ │ │ ├── FutureContainer.java
│ │ │ │ │ ├── GenericContainer.java
│ │ │ │ │ ├── InternetProtocol.java
│ │ │ │ │ ├── LocalDockerCompose.java
│ │ │ │ │ ├── Network.java
│ │ │ │ │ ├── ParsedDockerComposeFile.java
│ │ │ │ │ ├── PortForwardingContainer.java
│ │ │ │ │ ├── SelinuxContext.java
│ │ │ │ │ ├── SocatContainer.java
│ │ │ │ │ ├── VncRecordingContainer.java
│ │ │ │ │ ├── output/
│ │ │ │ │ │ ├── BaseConsumer.java
│ │ │ │ │ │ ├── FrameConsumerResultCallback.java
│ │ │ │ │ │ ├── OutputFrame.java
│ │ │ │ │ │ ├── Slf4jLogConsumer.java
│ │ │ │ │ │ ├── ToStringConsumer.java
│ │ │ │ │ │ └── WaitingConsumer.java
│ │ │ │ │ ├── startupcheck/
│ │ │ │ │ │ ├── IndefiniteWaitOneShotStartupCheckStrategy.java
│ │ │ │ │ │ ├── IsRunningStartupCheckStrategy.java
│ │ │ │ │ │ ├── MinimumDurationRunningStartupCheckStrategy.java
│ │ │ │ │ │ ├── OneShotStartupCheckStrategy.java
│ │ │ │ │ │ └── StartupCheckStrategy.java
│ │ │ │ │ ├── traits/
│ │ │ │ │ │ └── LinkableContainer.java
│ │ │ │ │ └── wait/
│ │ │ │ │ ├── internal/
│ │ │ │ │ │ ├── ExternalPortListeningCheck.java
│ │ │ │ │ │ └── InternalCommandPortListeningCheck.java
│ │ │ │ │ └── strategy/
│ │ │ │ │ ├── AbstractWaitStrategy.java
│ │ │ │ │ ├── DockerHealthcheckWaitStrategy.java
│ │ │ │ │ ├── HostPortWaitStrategy.java
│ │ │ │ │ ├── HttpWaitStrategy.java
│ │ │ │ │ ├── LogMessageWaitStrategy.java
│ │ │ │ │ ├── ShellStrategy.java
│ │ │ │ │ ├── Wait.java
│ │ │ │ │ ├── WaitAllStrategy.java
│ │ │ │ │ ├── WaitStrategy.java
│ │ │ │ │ └── WaitStrategyTarget.java
│ │ │ │ ├── core/
│ │ │ │ │ └── CreateContainerCmdModifier.java
│ │ │ │ ├── dockerclient/
│ │ │ │ │ ├── AuditLoggingDockerClient.java
│ │ │ │ │ ├── AuthDelegatingDockerClientConfig.java
│ │ │ │ │ ├── DockerClientConfigUtils.java
│ │ │ │ │ ├── DockerClientProviderStrategy.java
│ │ │ │ │ ├── DockerDesktopClientProviderStrategy.java
│ │ │ │ │ ├── DockerMachineClientProviderStrategy.java
│ │ │ │ │ ├── EnvironmentAndSystemPropertyClientProviderStrategy.java
│ │ │ │ │ ├── HeadersAddingDockerHttpClient.java
│ │ │ │ │ ├── InvalidConfigurationException.java
│ │ │ │ │ ├── LogToStringContainerCallback.java
│ │ │ │ │ ├── NpipeSocketClientProviderStrategy.java
│ │ │ │ │ ├── RootlessDockerClientProviderStrategy.java
│ │ │ │ │ ├── TestcontainersHostPropertyClientProviderStrategy.java
│ │ │ │ │ ├── TransportConfig.java
│ │ │ │ │ └── UnixSocketClientProviderStrategy.java
│ │ │ │ ├── images/
│ │ │ │ │ ├── AbstractImagePullPolicy.java
│ │ │ │ │ ├── AgeBasedPullPolicy.java
│ │ │ │ │ ├── AlwaysPullPolicy.java
│ │ │ │ │ ├── DefaultPullPolicy.java
│ │ │ │ │ ├── ImageData.java
│ │ │ │ │ ├── ImagePullPolicy.java
│ │ │ │ │ ├── LocalImagesCache.java
│ │ │ │ │ ├── LoggedPullImageResultCallback.java
│ │ │ │ │ ├── ParsedDockerfile.java
│ │ │ │ │ ├── PullPolicy.java
│ │ │ │ │ ├── RemoteDockerImage.java
│ │ │ │ │ ├── TimeLimitedLoggedPullImageResultCallback.java
│ │ │ │ │ └── builder/
│ │ │ │ │ ├── ImageFromDockerfile.java
│ │ │ │ │ ├── Transferable.java
│ │ │ │ │ ├── dockerfile/
│ │ │ │ │ │ ├── DockerfileBuilder.java
│ │ │ │ │ │ ├── statement/
│ │ │ │ │ │ │ ├── KeyValuesStatement.java
│ │ │ │ │ │ │ ├── MultiArgsStatement.java
│ │ │ │ │ │ │ ├── RawStatement.java
│ │ │ │ │ │ │ ├── SingleArgumentStatement.java
│ │ │ │ │ │ │ └── Statement.java
│ │ │ │ │ │ └── traits/
│ │ │ │ │ │ ├── AddStatementTrait.java
│ │ │ │ │ │ ├── CmdStatementTrait.java
│ │ │ │ │ │ ├── CopyStatementTrait.java
│ │ │ │ │ │ ├── DockerfileBuilderTrait.java
│ │ │ │ │ │ ├── EntryPointStatementTrait.java
│ │ │ │ │ │ ├── EnvStatementTrait.java
│ │ │ │ │ │ ├── ExposeStatementTrait.java
│ │ │ │ │ │ ├── FromStatementTrait.java
│ │ │ │ │ │ ├── LabelStatementTrait.java
│ │ │ │ │ │ ├── RunStatementTrait.java
│ │ │ │ │ │ ├── UserStatementTrait.java
│ │ │ │ │ │ ├── VolumeStatementTrait.java
│ │ │ │ │ │ └── WorkdirStatementTrait.java
│ │ │ │ │ └── traits/
│ │ │ │ │ ├── BuildContextBuilderTrait.java
│ │ │ │ │ ├── ClasspathTrait.java
│ │ │ │ │ ├── DockerfileTrait.java
│ │ │ │ │ ├── FilesTrait.java
│ │ │ │ │ └── StringsTrait.java
│ │ │ │ ├── jib/
│ │ │ │ │ ├── JibDockerClient.java
│ │ │ │ │ ├── JibImage.java
│ │ │ │ │ └── JibImageDetails.java
│ │ │ │ ├── lifecycle/
│ │ │ │ │ ├── Startable.java
│ │ │ │ │ ├── Startables.java
│ │ │ │ │ ├── TestDescription.java
│ │ │ │ │ └── TestLifecycleAware.java
│ │ │ │ └── utility/
│ │ │ │ ├── AuditLogger.java
│ │ │ │ ├── AuthConfigUtil.java
│ │ │ │ ├── Base58.java
│ │ │ │ ├── ClasspathScanner.java
│ │ │ │ ├── CommandLine.java
│ │ │ │ ├── ComparableVersion.java
│ │ │ │ ├── ConfigurationFileImageNameSubstitutor.java
│ │ │ │ ├── DefaultImageNameSubstitutor.java
│ │ │ │ ├── DockerImageName.java
│ │ │ │ ├── DockerLoggerFactory.java
│ │ │ │ ├── DockerMachineClient.java
│ │ │ │ ├── DockerStatus.java
│ │ │ │ ├── DynamicPollInterval.java
│ │ │ │ ├── ImageNameSubstitutor.java
│ │ │ │ ├── JVMHookResourceReaper.java
│ │ │ │ ├── LazyFuture.java
│ │ │ │ ├── LicenseAcceptance.java
│ │ │ │ ├── LogUtils.java
│ │ │ │ ├── MountableFile.java
│ │ │ │ ├── PathUtils.java
│ │ │ │ ├── PrefixingImageNameSubstitutor.java
│ │ │ │ ├── RegistryAuthLocator.java
│ │ │ │ ├── ResourceReaper.java
│ │ │ │ ├── RyukContainer.java
│ │ │ │ ├── RyukResourceReaper.java
│ │ │ │ ├── TestEnvironment.java
│ │ │ │ ├── TestcontainersConfiguration.java
│ │ │ │ ├── ThrowingFunction.java
│ │ │ │ └── Versioning.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ ├── native-image/
│ │ │ │ └── org.testcontainers/
│ │ │ │ └── testcontainers/
│ │ │ │ └── native-image.properties
│ │ │ └── services/
│ │ │ └── org.testcontainers.dockerclient.DockerClientProviderStrategy
│ │ └── test/
│ │ ├── java/
│ │ │ ├── alt/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── README.md
│ │ │ │ └── images/
│ │ │ │ └── OutOfPackageImagePullPolicyTest.java
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── DaemonTest.java
│ │ │ ├── DockerClientFactoryTest.java
│ │ │ ├── DockerRegistryContainer.java
│ │ │ ├── TestImages.java
│ │ │ ├── containers/
│ │ │ │ ├── ComposeContainerTest.java
│ │ │ │ ├── ComposeContainerWithServicesTest.java
│ │ │ │ ├── ComposeOverridesTest.java
│ │ │ │ ├── ComposeProfilesOptionTest.java
│ │ │ │ ├── ContainerStateTest.java
│ │ │ │ ├── DockerComposeContainerCustomImageTest.java
│ │ │ │ ├── DockerComposeContainerWithServicesTest.java
│ │ │ │ ├── DockerComposeFilesTest.java
│ │ │ │ ├── DockerComposeOverridesTest.java
│ │ │ │ ├── DockerComposeProfilesOptionTest.java
│ │ │ │ ├── DockerMcpGatewayContainerTest.java
│ │ │ │ ├── DockerModelRunnerContainerTest.java
│ │ │ │ ├── ExposedHostTest.java
│ │ │ │ ├── GenericContainerTest.java
│ │ │ │ ├── JibTest.java
│ │ │ │ ├── MultiStageBuildTest.java
│ │ │ │ ├── NetworkTest.java
│ │ │ │ ├── ParsedDockerComposeFileBean.java
│ │ │ │ ├── ParsedDockerComposeFileValidationTest.java
│ │ │ │ ├── ReusabilityUnitTests.java
│ │ │ │ ├── output/
│ │ │ │ │ ├── ContainerLogsTest.java
│ │ │ │ │ ├── FrameConsumerResultCallbackTest.java
│ │ │ │ │ └── ToStringConsumerTest.java
│ │ │ │ ├── startupcheck/
│ │ │ │ │ └── IsRunningStartupCheckStrategyTest.java
│ │ │ │ └── wait/
│ │ │ │ ├── internal/
│ │ │ │ │ ├── ExternalPortListeningCheckTest.java
│ │ │ │ │ └── InternalCommandPortListeningCheckTest.java
│ │ │ │ └── strategy/
│ │ │ │ ├── DockerHealthcheckWaitStrategyTest.java
│ │ │ │ └── WaitAllStrategyTest.java
│ │ │ ├── custom/
│ │ │ │ └── TestCreateContainerCmdModifier.java
│ │ │ ├── dockerclient/
│ │ │ │ ├── AmbiguousImagePullTest.java
│ │ │ │ ├── DockerClientConfigUtilsTest.java
│ │ │ │ ├── EnvironmentAndSystemPropertyClientProviderStrategyTest.java
│ │ │ │ ├── EventStreamTest.java
│ │ │ │ ├── ImagePullTest.java
│ │ │ │ └── TestcontainersHostPropertyClientProviderStrategyTest.java
│ │ │ ├── images/
│ │ │ │ ├── AgeBasedPullPolicyTest.java
│ │ │ │ ├── ImageDataTest.java
│ │ │ │ ├── ImagePullPolicyTest.java
│ │ │ │ ├── LocalImagesCacheAccessor.java
│ │ │ │ ├── OverrideImagePullPolicyTest.java
│ │ │ │ ├── ParsedDockerfileTest.java
│ │ │ │ ├── RemoteDockerImageTest.java
│ │ │ │ └── builder/
│ │ │ │ ├── DockerfileBuildTest.java
│ │ │ │ ├── DockerignoreTest.java
│ │ │ │ ├── ImageFromDockerfileTest.java
│ │ │ │ └── dockerfile/
│ │ │ │ └── statement/
│ │ │ │ ├── AbstractStatementTest.java
│ │ │ │ ├── KeyValuesStatementTest.java
│ │ │ │ ├── MultiArgsStatementTest.java
│ │ │ │ ├── RawStatementTest.java
│ │ │ │ └── SingleArgumentStatementTest.java
│ │ │ ├── junit/
│ │ │ │ ├── BaseComposeTest.java
│ │ │ │ ├── BaseDockerComposeTest.java
│ │ │ │ ├── ComposeContainerOverrideTest.java
│ │ │ │ ├── ComposeContainerPortViaEnvTest.java
│ │ │ │ ├── ComposeContainerScalingTest.java
│ │ │ │ ├── ComposeContainerTest.java
│ │ │ │ ├── ComposeContainerVolumeRemovalTest.java
│ │ │ │ ├── ComposeContainerWithBuildTest.java
│ │ │ │ ├── ComposeContainerWithCopyFilesTest.java
│ │ │ │ ├── ComposeContainerWithOptionsTest.java
│ │ │ │ ├── ComposeContainerWithWaitStrategiesTest.java
│ │ │ │ ├── ComposeErrorHandlingTest.java
│ │ │ │ ├── ComposePassthroughTest.java
│ │ │ │ ├── ComposeWaitStrategyTest.java
│ │ │ │ ├── ComposeWithIdentifierTest.java
│ │ │ │ ├── ComposeWithNetworkTest.java
│ │ │ │ ├── CopyFileToContainerTest.java
│ │ │ │ ├── DependenciesTest.java
│ │ │ │ ├── DockerComposeContainerPortViaEnvTest.java
│ │ │ │ ├── DockerComposeContainerScalingTest.java
│ │ │ │ ├── DockerComposeContainerTest.java
│ │ │ │ ├── DockerComposeContainerVolumeRemovalTest.java
│ │ │ │ ├── DockerComposeContainerWithBuildTest.java
│ │ │ │ ├── DockerComposeContainerWithCopyFilesTest.java
│ │ │ │ ├── DockerComposeContainerWithOptionsTest.java
│ │ │ │ ├── DockerComposeErrorHandlingTest.java
│ │ │ │ ├── DockerComposeLocalImageTest.java
│ │ │ │ ├── DockerComposeLogConsumerTest.java
│ │ │ │ ├── DockerComposePassthroughTest.java
│ │ │ │ ├── DockerComposeServiceTest.java
│ │ │ │ ├── DockerComposeV2FormatTest.java
│ │ │ │ ├── DockerComposeV2FormatWithIdentifierTest.java
│ │ │ │ ├── DockerComposeV2WithNetworkTest.java
│ │ │ │ ├── DockerComposeWaitStrategyTest.java
│ │ │ │ ├── DockerNetworkModeTest.java
│ │ │ │ ├── DockerfileContainerTest.java
│ │ │ │ ├── DockerfileTest.java
│ │ │ │ ├── ExecInContainerTest.java
│ │ │ │ ├── FileOperationsTest.java
│ │ │ │ ├── FixedHostPortContainerTest.java
│ │ │ │ ├── GenericContainerRuleTest.java
│ │ │ │ ├── NonExistentImagePullTest.java
│ │ │ │ ├── OutputStreamTest.java
│ │ │ │ ├── OutputStreamWithTTYTest.java
│ │ │ │ ├── ParameterizedDockerfileContainerTest.java
│ │ │ │ ├── WorkingDirectoryTest.java
│ │ │ │ └── wait/
│ │ │ │ └── strategy/
│ │ │ │ ├── AbstractWaitStrategyTest.java
│ │ │ │ ├── HostPortWaitStrategyTest.java
│ │ │ │ ├── HttpWaitStrategyTest.java
│ │ │ │ ├── LogMessageWaitStrategyTest.java
│ │ │ │ └── ShellStrategyTest.java
│ │ │ └── utility/
│ │ │ ├── AuthenticatedImagePullTest.java
│ │ │ ├── ClasspathScannerTest.java
│ │ │ ├── ComparableVersionTest.java
│ │ │ ├── DefaultImageNameSubstitutorTest.java
│ │ │ ├── DirectoryTarResourceTest.java
│ │ │ ├── DockerImageNameCompatibilityTest.java
│ │ │ ├── DockerImageNameTest.java
│ │ │ ├── DockerLoggerFactoryTest.java
│ │ │ ├── DockerStatusTest.java
│ │ │ ├── FakeImagePullPolicy.java
│ │ │ ├── FakeImageSubstitutor.java
│ │ │ ├── FilterRegistryTest.java
│ │ │ ├── ImageNameSubstitutorTest.java
│ │ │ ├── LazyFutureTest.java
│ │ │ ├── LicenseAcceptanceTest.java
│ │ │ ├── MockTestcontainersConfigurationExtension.java
│ │ │ ├── MountableFileTest.java
│ │ │ ├── PrefixingImageNameSubstitutorTest.java
│ │ │ ├── RegistryAuthLocatorTest.java
│ │ │ ├── ResourceReaperTest.java
│ │ │ ├── TestEnvironmentTest.java
│ │ │ └── TestcontainersConfigurationTest.java
│ │ └── resources/
│ │ ├── Dockerfile
│ │ ├── Dockerfile-multistage
│ │ ├── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.core.CreateContainerCmdModifier
│ │ ├── auth-config/
│ │ │ ├── config-basic-auth.json
│ │ │ ├── config-empty-auth-with-helper.json
│ │ │ ├── config-empty.json
│ │ │ ├── config-existing-auth-with-helper.json
│ │ │ ├── config-with-helper-and-store.json
│ │ │ ├── config-with-helper-no-server-url-using-token.json
│ │ │ ├── config-with-helper-no-server-url.json
│ │ │ ├── config-with-helper-using-token.json
│ │ │ ├── config-with-helper.json
│ │ │ ├── config-with-json-key.json
│ │ │ ├── config-with-store-empty.json
│ │ │ ├── config-with-store.json
│ │ │ ├── docker-credential-fake
│ │ │ └── win/
│ │ │ └── docker-credential-fake.bat
│ │ ├── compose-build-test/
│ │ │ ├── Dockerfile
│ │ │ └── docker-compose.yml
│ │ ├── compose-dockerfile/
│ │ │ ├── Dockerfile
│ │ │ └── passthrough.sh
│ │ ├── compose-file-copy-inclusions/
│ │ │ ├── Dockerfile
│ │ │ ├── EnvVariableRestEndpoint.java
│ │ │ ├── compose-root-only.yml
│ │ │ ├── compose-test-only.yml
│ │ │ └── compose.yml
│ │ ├── compose-options-test/
│ │ │ └── with-deploy-block.yml
│ │ ├── compose-override/
│ │ │ ├── compose-override.yml
│ │ │ └── compose.yml
│ │ ├── compose-profile-option/
│ │ │ └── compose-test.yml
│ │ ├── compose-scaling-multiple-containers.yml
│ │ ├── compose-test.yml
│ │ ├── compose-v2-build-test/
│ │ │ ├── Dockerfile
│ │ │ └── docker-compose.yml
│ │ ├── compose-with-inline-scale-test.yml
│ │ ├── composev2/
│ │ │ ├── compose-test.yml
│ │ │ └── scaled-compose-test.yml
│ │ ├── container-license-acceptance.txt
│ │ ├── docker-compose-base.yml
│ │ ├── docker-compose-container-name-v1.yml
│ │ ├── docker-compose-deserialization.yml
│ │ ├── docker-compose-healthcheck.yml
│ │ ├── docker-compose-imagename-overriding-a.yml
│ │ ├── docker-compose-imagename-overriding-b.yml
│ │ ├── docker-compose-imagename-parsing-dockerfile-with-context.yml
│ │ ├── docker-compose-imagename-parsing-dockerfile.yml
│ │ ├── docker-compose-imagename-parsing-v1.yml
│ │ ├── docker-compose-imagename-parsing-v2-no-version.yml
│ │ ├── docker-compose-imagename-parsing-v2.yml
│ │ ├── docker-compose-non-default-override.yml
│ │ ├── dockerfile-build-invalid/
│ │ │ ├── .dockerignore
│ │ │ └── Dockerfile
│ │ ├── dockerfile-build-test/
│ │ │ ├── .dockerignore
│ │ │ ├── Dockerfile
│ │ │ ├── Dockerfile-alt
│ │ │ ├── Dockerfile-buildarg
│ │ │ ├── Dockerfile-currentdir
│ │ │ ├── Dockerfile-from-buildarg
│ │ │ ├── localfile.txt
│ │ │ ├── should_be_ignored.txt
│ │ │ └── should_not_be_ignored.txt
│ │ ├── expectedClasspathFile.txt
│ │ ├── fixtures/
│ │ │ └── statements/
│ │ │ ├── KeyValuesStatementTest/
│ │ │ │ ├── keyWithNewLinesTest
│ │ │ │ ├── keyWithSpacesTest
│ │ │ │ ├── keyWithTabsTest
│ │ │ │ ├── multilineTest
│ │ │ │ └── valueIsEscapedTest
│ │ │ ├── MultiArgsStatementTest/
│ │ │ │ ├── multilineTest
│ │ │ │ └── simpleTest
│ │ │ ├── RawStatementTest/
│ │ │ │ └── simpleTest
│ │ │ └── SingleArgumentStatementTest/
│ │ │ ├── multilineTest
│ │ │ └── simpleTest
│ │ ├── health-wait-strategy-dockerfile/
│ │ │ ├── Dockerfile
│ │ │ └── write_file_and_loop.sh
│ │ ├── https-wait-strategy-dockerfile/
│ │ │ ├── Dockerfile
│ │ │ └── nginx-ssl.conf
│ │ ├── internal-port-check-dockerfile/
│ │ │ ├── Dockerfile-bash
│ │ │ ├── Dockerfile-nc
│ │ │ ├── Dockerfile-tcp
│ │ │ └── nginx.conf
│ │ ├── invalid-compose.yml
│ │ ├── local-compose-test.yml
│ │ ├── logback-test.xml
│ │ ├── mappable-dockerfile/
│ │ │ └── Dockerfile
│ │ ├── mappable-resource/
│ │ │ └── test-resource.txt
│ │ ├── redis.conf
│ │ ├── scaled-compose-test.yml
│ │ ├── test-recursive-file.txt
│ │ ├── test_copy_to_container.txt
│ │ ├── v2-compose-test-passthrough.yml
│ │ ├── v2-compose-test-port-via-env.yml
│ │ ├── v2-compose-test-with-network.yml
│ │ └── v2-compose-test.yml
│ └── testlib/
│ ├── META-INF/
│ │ └── dummy_unique_name.txt
│ ├── README.md
│ ├── create_fakejar.sh
│ ├── recursive/
│ │ └── dir/
│ │ └── content.txt
│ └── repo/
│ └── fakejar/
│ └── fakejar/
│ ├── 0/
│ │ ├── fakejar-0.jar
│ │ └── fakejar-0.pom
│ └── maven-metadata-local.xml
├── docker-compose.yml
├── docs/
│ ├── _headers
│ ├── _redirects
│ ├── bounty.md
│ ├── contributing.md
│ ├── contributing_docs.md
│ ├── css/
│ │ ├── extra.css
│ │ └── tc-header.css
│ ├── error_missing_container_runtime_environment.md
│ ├── examples/
│ │ ├── junit4/
│ │ │ ├── generic/
│ │ │ │ ├── build.gradle
│ │ │ │ └── src/
│ │ │ │ └── test/
│ │ │ │ ├── java/
│ │ │ │ │ ├── generic/
│ │ │ │ │ │ ├── CmdModifierTest.java
│ │ │ │ │ │ ├── CommandsTest.java
│ │ │ │ │ │ ├── ContainerCreationTest.java
│ │ │ │ │ │ ├── ContainerLabelTest.java
│ │ │ │ │ │ ├── DependsOnTest.java
│ │ │ │ │ │ ├── ExampleImageNameSubstitutor.java
│ │ │ │ │ │ ├── ExecTest.java
│ │ │ │ │ │ ├── HostPortExposedTest.java
│ │ │ │ │ │ ├── ImageNameSubstitutionTest.java
│ │ │ │ │ │ ├── MultiplePortsExposedTest.java
│ │ │ │ │ │ ├── WaitStrategiesTest.java
│ │ │ │ │ │ └── support/
│ │ │ │ │ │ └── TestSpecificImageNameSubstitutor.java
│ │ │ │ │ └── org/
│ │ │ │ │ └── testcontainers/
│ │ │ │ │ └── containers/
│ │ │ │ │ └── startupcheck/
│ │ │ │ │ └── StartupCheckStrategyTest.java
│ │ │ │ └── resources/
│ │ │ │ ├── logback-test.xml
│ │ │ │ └── testcontainers.properties
│ │ │ └── redis/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ └── java/
│ │ │ │ └── quickstart/
│ │ │ │ └── RedisBackedCache.java
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── quickstart/
│ │ │ │ ├── RedisBackedCacheIntTest.java
│ │ │ │ └── RedisBackedCacheIntTestStep0.java
│ │ │ └── resources/
│ │ │ └── logback-test.xml
│ │ ├── junit5/
│ │ │ └── redis/
│ │ │ ├── build.gradle
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ └── java/
│ │ │ │ └── quickstart/
│ │ │ │ └── RedisBackedCache.java
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── quickstart/
│ │ │ │ ├── RedisBackedCacheIntTest.java
│ │ │ │ └── RedisBackedCacheIntTestStep0.java
│ │ │ └── resources/
│ │ │ └── logback-test.xml
│ │ └── spock/
│ │ └── redis/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── quickstart/
│ │ │ └── RedisBackedCache.java
│ │ └── test/
│ │ ├── groovy/
│ │ │ └── quickstart/
│ │ │ ├── RedisBackedCacheIntTest.groovy
│ │ │ └── RedisBackedCacheIntTestStep0.groovy
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── examples.md
│ ├── features/
│ │ ├── advanced_options.md
│ │ ├── commands.md
│ │ ├── configuration.md
│ │ ├── container_logs.md
│ │ ├── creating_container.md
│ │ ├── creating_images.md
│ │ ├── files.md
│ │ ├── image_name_substitution.md
│ │ ├── jib.md
│ │ ├── networking.md
│ │ ├── reuse.md
│ │ └── startup_and_waits.md
│ ├── getting_help.md
│ ├── index.md
│ ├── jitpack_dependencies.md
│ ├── js/
│ │ └── tc-header.js
│ ├── modules/
│ │ ├── activemq.md
│ │ ├── azure.md
│ │ ├── chromadb.md
│ │ ├── consul.md
│ │ ├── databases/
│ │ │ ├── cassandra.md
│ │ │ ├── clickhouse.md
│ │ │ ├── cockroachdb.md
│ │ │ ├── couchbase.md
│ │ │ ├── cratedb.md
│ │ │ ├── databend.md
│ │ │ ├── db2.md
│ │ │ ├── index.md
│ │ │ ├── influxdb.md
│ │ │ ├── jdbc.md
│ │ │ ├── mariadb.md
│ │ │ ├── mongodb.md
│ │ │ ├── mssqlserver.md
│ │ │ ├── mysql.md
│ │ │ ├── neo4j.md
│ │ │ ├── oceanbase.md
│ │ │ ├── oraclefree.md
│ │ │ ├── oraclexe.md
│ │ │ ├── orientdb.md
│ │ │ ├── postgres.md
│ │ │ ├── presto.md
│ │ │ ├── questdb.md
│ │ │ ├── r2dbc.md
│ │ │ ├── scylladb.md
│ │ │ ├── tidb.md
│ │ │ ├── timeplus.md
│ │ │ ├── trino.md
│ │ │ └── yugabytedb.md
│ │ ├── docker_compose.md
│ │ ├── docker_mcp_gateway.md
│ │ ├── docker_model_runner.md
│ │ ├── elasticsearch.md
│ │ ├── gcloud.md
│ │ ├── grafana.md
│ │ ├── hivemq.md
│ │ ├── k3s.md
│ │ ├── k6.md
│ │ ├── kafka.md
│ │ ├── ldap.md
│ │ ├── localstack.md
│ │ ├── milvus.md
│ │ ├── minio.md
│ │ ├── mockserver.md
│ │ ├── nginx.md
│ │ ├── ollama.md
│ │ ├── openfga.md
│ │ ├── pinecone.md
│ │ ├── pulsar.md
│ │ ├── qdrant.md
│ │ ├── rabbitmq.md
│ │ ├── redpanda.md
│ │ ├── solace.md
│ │ ├── solr.md
│ │ ├── toxiproxy.md
│ │ ├── typesense.md
│ │ ├── vault.md
│ │ ├── weaviate.md
│ │ └── webdriver_containers.md
│ ├── quickstart/
│ │ ├── junit_4_quickstart.md
│ │ ├── junit_5_quickstart.md
│ │ └── spock_quickstart.md
│ ├── supported_docker_environment/
│ │ ├── continuous_integration/
│ │ │ ├── aws_codebuild.md
│ │ │ ├── bitbucket_pipelines.md
│ │ │ ├── circle_ci.md
│ │ │ ├── concourse_ci.md
│ │ │ ├── dind_patterns.md
│ │ │ ├── drone.md
│ │ │ ├── gitlab_ci.md
│ │ │ ├── tekton.md
│ │ │ └── travis.md
│ │ ├── image_registry_rate_limiting.md
│ │ ├── index.md
│ │ ├── logging_config.md
│ │ └── windows.md
│ ├── test_framework_integration/
│ │ ├── external.md
│ │ ├── junit_4.md
│ │ ├── junit_5.md
│ │ ├── manual_lifecycle_control.md
│ │ └── spock.md
│ └── theme/
│ ├── main.html
│ └── partials/
│ ├── header.html
│ ├── nav.html
│ └── tc-header.html
├── examples/
│ ├── README.md
│ ├── build.gradle
│ ├── cucumber/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── examples/
│ │ │ ├── CucumberTest.java
│ │ │ └── Stepdefs.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── org/
│ │ └── testcontainers/
│ │ └── examples/
│ │ └── is_search_possible.feature
│ ├── gradle/
│ │ └── wrapper/
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── hazelcast/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── examples/
│ │ │ └── HazelcastTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── immudb/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── ImmuDbTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── kafka-cluster/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── kafkacluster/
│ │ │ ├── ApacheKafkaContainerCluster.java
│ │ │ ├── ApacheKafkaContainerClusterTest.java
│ │ │ ├── ConfluentKafkaContainerCluster.java
│ │ │ ├── ConfluentKafkaContainerClusterTest.java
│ │ │ ├── KafkaContainerCluster.java
│ │ │ ├── KafkaContainerClusterTest.java
│ │ │ └── KafkaContainerKraftCluster.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── nats/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── NatsContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── neo4j-container/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── containers/
│ │ │ └── Neo4jExampleTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── ollama-hugging-face/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── ollamahf/
│ │ │ ├── OllamaHuggingFaceContainer.java
│ │ │ └── OllamaHuggingFaceTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── redis-backed-cache/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── mycompany/
│ │ │ └── cache/
│ │ │ ├── Cache.java
│ │ │ └── RedisBackedCache.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── RedisBackedCacheTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── redis-backed-cache-testng/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── mycompany/
│ │ │ └── cache/
│ │ │ ├── Cache.java
│ │ │ └── RedisBackedCache.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── RedisBackedCacheTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── selenium-container/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ └── DemoApplication.java
│ │ │ └── resources/
│ │ │ └── static/
│ │ │ └── foo.html
│ │ └── test/
│ │ ├── java/
│ │ │ └── SeleniumContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── settings.gradle
│ ├── sftp/
│ │ ├── build.gradle
│ │ └── src/
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── example/
│ │ │ └── SftpContainerTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ ├── ssh_host_rsa_key
│ │ ├── ssh_host_rsa_key.pub
│ │ └── testcontainers/
│ │ └── file.txt
│ ├── singleton-container/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── cache/
│ │ │ ├── Cache.java
│ │ │ └── RedisBackedCache.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ ├── AbstractIntegrationTest.java
│ │ │ ├── BarConcreteTestClass.java
│ │ │ └── FooConcreteTestClass.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── solr-container/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ ├── SearchEngine.java
│ │ │ ├── SearchResult.java
│ │ │ └── SolrSearchEngine.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── SolrQueryTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── spring-boot/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ ├── DemoApplication.java
│ │ │ │ ├── DemoController.java
│ │ │ │ ├── DemoEntity.java
│ │ │ │ ├── DemoRepository.java
│ │ │ │ └── DemoService.java
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ └── test/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ ├── AbstractIntegrationTest.java
│ │ │ └── DemoControllerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── spring-boot-kotlin-redis/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── main/
│ │ │ └── kotlin/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── redis/
│ │ │ ├── ExampleController.kt
│ │ │ └── RedisApplication.kt
│ │ └── test/
│ │ ├── kotlin/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── redis/
│ │ │ ├── AbstractIntegrationTest.kt
│ │ │ ├── RedisApplicationTests.kt
│ │ │ └── RedisTest.kt
│ │ └── resources/
│ │ └── logback-test.xml
│ └── zookeeper/
│ ├── build.gradle
│ └── src/
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── ZookeeperContainerTest.java
│ └── resources/
│ └── logback-test.xml
├── gradle/
│ ├── ci-support.gradle
│ ├── japicmp.gradle
│ ├── publishing.gradle
│ ├── shading.gradle
│ ├── spotless.gradle
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── mkdocs.yml
├── modules/
│ ├── activemq/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── activemq/
│ │ │ ├── ActiveMQContainer.java
│ │ │ └── ArtemisContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── activemq/
│ │ │ ├── ActiveMQContainerTest.java
│ │ │ └── ArtemisContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── azure/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── azure/
│ │ │ │ ├── AzuriteContainer.java
│ │ │ │ ├── EventHubsEmulatorContainer.java
│ │ │ │ └── ServiceBusEmulatorContainer.java
│ │ │ └── containers/
│ │ │ ├── CosmosDBEmulatorContainer.java
│ │ │ └── KeyStoreBuilder.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── azure/
│ │ │ │ ├── AzuriteContainerTest.java
│ │ │ │ ├── EventHubsEmulatorContainerTest.java
│ │ │ │ └── ServiceBusEmulatorContainerTest.java
│ │ │ └── containers/
│ │ │ └── CosmosDBEmulatorContainerTest.java
│ │ └── resources/
│ │ ├── certificate.pem
│ │ ├── eventhubs_config.json
│ │ ├── key.pem
│ │ ├── keystore.pfx
│ │ ├── logback-test.xml
│ │ └── service-bus-config.json
│ ├── build.gradle
│ ├── cassandra/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── cassandra/
│ │ │ │ │ ├── CassandraContainer.java
│ │ │ │ │ ├── CassandraDatabaseDelegate.java
│ │ │ │ │ └── CassandraQueryWaitStrategy.java
│ │ │ │ └── containers/
│ │ │ │ ├── CassandraContainer.java
│ │ │ │ ├── delegate/
│ │ │ │ │ └── CassandraDatabaseDelegate.java
│ │ │ │ └── wait/
│ │ │ │ └── CassandraQueryWaitStrategy.java
│ │ │ └── resources/
│ │ │ └── cqlshrc
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── cassandra/
│ │ │ │ ├── CassandraContainerTest.java
│ │ │ │ └── CompatibleCassandraImageTest.java
│ │ │ └── containers/
│ │ │ ├── CassandraContainerTest.java
│ │ │ └── CompatibleCassandraImageTest.java
│ │ └── resources/
│ │ ├── cassandra-auth-required-configuration/
│ │ │ └── cassandra.yaml
│ │ ├── cassandra-ssl-configuration/
│ │ │ ├── cassandra.cer
│ │ │ ├── cassandra.yaml
│ │ │ ├── keystore.p12
│ │ │ └── truststore.p12
│ │ ├── cassandra-test-configuration-example/
│ │ │ └── cassandra.yaml
│ │ ├── client-ssl/
│ │ │ ├── cassandra.cer.pem
│ │ │ └── cassandra.key.pem
│ │ ├── initial-with-error.cql
│ │ ├── initial.cql
│ │ └── logback-test.xml
│ ├── chromadb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── chromadb/
│ │ │ └── ChromaDBContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── chromadb/
│ │ │ └── ChromaDBContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── clickhouse/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── clickhouse/
│ │ │ │ │ ├── ClickHouseContainer.java
│ │ │ │ │ ├── ClickHouseR2DBCDatabaseContainer.java
│ │ │ │ │ └── ClickHouseR2DBCDatabaseContainerProvider.java
│ │ │ │ └── containers/
│ │ │ │ ├── ClickHouseContainer.java
│ │ │ │ └── ClickHouseProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ ├── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ │ └── org.testcontainers.r2dbc.R2DBCDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── ClickhouseTestImages.java
│ │ │ ├── clickhouse/
│ │ │ │ ├── ClickHouseContainerTest.java
│ │ │ │ └── ClickHouseR2DBCDatabaseContainerTest.java
│ │ │ ├── jdbc/
│ │ │ │ └── clickhouse/
│ │ │ │ └── ClickhouseJDBCDriverTest.java
│ │ │ └── junit/
│ │ │ └── clickhouse/
│ │ │ └── SimpleClickhouseTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── cockroachdb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── cockroachdb/
│ │ │ │ │ └── CockroachContainer.java
│ │ │ │ └── containers/
│ │ │ │ ├── CockroachContainer.java
│ │ │ │ └── CockroachContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── CockroachDBTestImages.java
│ │ │ ├── cockroachdb/
│ │ │ │ └── CockroachContainerTest.java
│ │ │ └── jdbc/
│ │ │ └── cockroachdb/
│ │ │ └── CockroachDBJDBCDriverTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── somepath/
│ │ └── init_postgresql.sql
│ ├── consul/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── consul/
│ │ │ └── ConsulContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── consul/
│ │ │ └── ConsulContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── couchbase/
│ │ ├── AUTHORS
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── couchbase/
│ │ │ ├── BucketDefinition.java
│ │ │ ├── CouchbaseContainer.java
│ │ │ └── CouchbaseService.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── couchbase/
│ │ │ └── CouchbaseContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── cratedb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── cratedb/
│ │ │ │ ├── CrateDBContainer.java
│ │ │ │ └── CrateDBContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── CrateDBTestImages.java
│ │ │ ├── jdbc/
│ │ │ │ └── cratedb/
│ │ │ │ └── CrateDBJDBCDriverTest.java
│ │ │ └── junit/
│ │ │ └── cratedb/
│ │ │ └── SimpleCrateDBTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── somepath/
│ │ └── init_cratedb.sql
│ ├── database-commons/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── delegate/
│ │ │ │ ├── AbstractDatabaseDelegate.java
│ │ │ │ └── DatabaseDelegate.java
│ │ │ ├── exception/
│ │ │ │ └── ConnectionCreationException.java
│ │ │ └── ext/
│ │ │ ├── ScriptScanner.java
│ │ │ ├── ScriptSplitter.java
│ │ │ └── ScriptUtils.java
│ │ └── test/
│ │ └── java/
│ │ └── org/
│ │ └── testcontainers/
│ │ └── ext/
│ │ ├── ScriptScannerTest.java
│ │ └── ScriptSplittingTest.java
│ ├── databend/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── databend/
│ │ │ │ ├── DatabendContainer.java
│ │ │ │ └── DatabendContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── databend/
│ │ │ ├── DatabendContainerTest.java
│ │ │ └── DatabendJDBCDriverTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── db2/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ ├── Db2Container.java
│ │ │ │ │ └── Db2ContainerProvider.java
│ │ │ │ └── db2/
│ │ │ │ └── Db2Container.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── Db2TestImages.java
│ │ │ ├── db2/
│ │ │ │ └── Db2ContainerTest.java
│ │ │ └── jdbc/
│ │ │ └── db2/
│ │ │ └── DB2JDBCDriverTest.java
│ │ └── resources/
│ │ ├── container-license-acceptance.txt
│ │ └── logback-test.xml
│ ├── elasticsearch/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── elasticsearch/
│ │ │ │ └── ElasticsearchContainer.java
│ │ │ └── resources/
│ │ │ └── elasticsearch-default-memory-vm.options
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── elasticsearch/
│ │ │ └── ElasticsearchContainerTest.java
│ │ └── resources/
│ │ ├── http_ca.crt
│ │ ├── logback-test.xml
│ │ └── test-custom-memory-jvm.options
│ ├── gcloud/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ ├── BigQueryEmulatorContainer.java
│ │ │ │ ├── BigtableEmulatorContainer.java
│ │ │ │ ├── DatastoreEmulatorContainer.java
│ │ │ │ ├── FirestoreEmulatorContainer.java
│ │ │ │ ├── PubSubEmulatorContainer.java
│ │ │ │ └── SpannerEmulatorContainer.java
│ │ │ └── gcloud/
│ │ │ ├── BigQueryEmulatorContainer.java
│ │ │ ├── BigtableEmulatorContainer.java
│ │ │ ├── DatastoreEmulatorContainer.java
│ │ │ ├── FirestoreEmulatorContainer.java
│ │ │ ├── PubSubEmulatorContainer.java
│ │ │ └── SpannerEmulatorContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── gcloud/
│ │ │ ├── BigQueryEmulatorContainerTest.java
│ │ │ ├── BigtableEmulatorContainerTest.java
│ │ │ ├── DatastoreEmulatorContainerTest.java
│ │ │ ├── FirestoreEmulatorContainerTest.java
│ │ │ ├── PubSubEmulatorContainerTest.java
│ │ │ └── SpannerEmulatorContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── grafana/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── grafana/
│ │ │ └── LgtmStackContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── grafana/
│ │ │ └── LgtmStackContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── hivemq/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── hivemq/
│ │ │ ├── HiveMQContainer.java
│ │ │ ├── HiveMQExtension.java
│ │ │ └── PathUtil.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── hivemq/
│ │ │ ├── ContainerWithControlCenterIT.java
│ │ │ ├── ContainerWithCustomConfigIT.java
│ │ │ ├── ContainerWithExtensionFromDirectoryIT.java
│ │ │ ├── ContainerWithExtensionIT.java
│ │ │ ├── ContainerWithExtensionSubclassIT.java
│ │ │ ├── ContainerWithFileInExtensionHomeIT.java
│ │ │ ├── ContainerWithFileInHomeIT.java
│ │ │ ├── ContainerWithLicenseIT.java
│ │ │ ├── ContainerWithoutPlatformExtensionsIT.java
│ │ │ ├── CreateFileInCopiedDirectoryIT.java
│ │ │ ├── CreateFileInExtensionDirectoryIT.java
│ │ │ ├── DisableEnableExtensionFromDirectoryIT.java
│ │ │ ├── DisableEnableExtensionIT.java
│ │ │ ├── HiveMQExtensionTest.java
│ │ │ ├── HiveMQTestContainerCore.java
│ │ │ ├── PathUtilTest.java
│ │ │ ├── docs/
│ │ │ │ ├── DemoDisableExtensionsIT.java
│ │ │ │ ├── DemoExtensionTestsIT.java
│ │ │ │ ├── DemoFilesIT.java
│ │ │ │ └── DemoHiveMQContainerIT.java
│ │ │ └── util/
│ │ │ ├── MyExtension.java
│ │ │ ├── MyExtensionWithSubclasses.java
│ │ │ ├── PublishModifier.java
│ │ │ └── TestPublishModifiedUtil.java
│ │ └── resources/
│ │ ├── additionalFile.txt
│ │ ├── config.xml
│ │ ├── inMemoryConfig.xml
│ │ ├── logback-test.xml
│ │ ├── modifier-extension/
│ │ │ ├── hivemq-extension.xml
│ │ │ └── modifier-extension-1.0-SNAPSHOT.jar
│ │ ├── modifier-extension-wrong-name/
│ │ │ ├── hivemq-extension.xml
│ │ │ └── modifier-extension-1.0-SNAPSHOT.jar
│ │ ├── myExtensionLicense.elic
│ │ └── myLicense.lic
│ ├── influxdb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── containers/
│ │ │ └── InfluxDBContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── containers/
│ │ │ ├── InfluxDBContainerTest.java
│ │ │ ├── InfluxDBContainerV1Test.java
│ │ │ └── InfluxDBTestUtils.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── jdbc/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ ├── JdbcDatabaseContainer.java
│ │ │ │ │ └── JdbcDatabaseContainerProvider.java
│ │ │ │ └── jdbc/
│ │ │ │ ├── ConnectionDelegate.java
│ │ │ │ ├── ConnectionUrl.java
│ │ │ │ ├── ConnectionWrapper.java
│ │ │ │ ├── ContainerDatabaseDriver.java
│ │ │ │ ├── ContainerLessJdbcDelegate.java
│ │ │ │ ├── JdbcDatabaseDelegate.java
│ │ │ │ └── ext/
│ │ │ │ └── ScriptUtils.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── java.sql.Driver
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── JdbcDatabaseContainerTest.java
│ │ │ └── jdbc/
│ │ │ ├── ConnectionUrlDriversTests.java
│ │ │ ├── ConnectionUrlTest.java
│ │ │ ├── ContainerDatabaseDriverTest.java
│ │ │ ├── JdbcDatabaseDelegateTest.java
│ │ │ └── MissingJdbcDriverTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── jdbc-test/
│ │ ├── build.gradle
│ │ ├── sql/
│ │ │ └── init_mysql.sql
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── db/
│ │ │ │ └── AbstractContainerDatabaseTest.java
│ │ │ └── jdbc/
│ │ │ └── AbstractJDBCDriverTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── junit-jupiter/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── junit/
│ │ │ └── jupiter/
│ │ │ ├── Container.java
│ │ │ ├── DockerAvailableDetector.java
│ │ │ ├── EnabledIfDockerAvailable.java
│ │ │ ├── EnabledIfDockerAvailableCondition.java
│ │ │ ├── FilesystemFriendlyNameGenerator.java
│ │ │ ├── Testcontainers.java
│ │ │ ├── TestcontainersExtension.java
│ │ │ └── TestcontainersTestDescription.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── junit/
│ │ │ └── jupiter/
│ │ │ ├── ComposeContainerTests.java
│ │ │ ├── DockerComposeContainerTests.java
│ │ │ ├── EnabledIfDockerAvailableTests.java
│ │ │ ├── FilesystemFriendlyNameGeneratorTest.java
│ │ │ ├── JUnitJupiterTestImages.java
│ │ │ ├── MetaAnnotationTest.java
│ │ │ ├── MixedLifecycleTests.java
│ │ │ ├── ParallelExecutionTests.java
│ │ │ ├── PostgresContainerTests.java
│ │ │ ├── TestLifecycleAwareContainerMock.java
│ │ │ ├── TestLifecycleAwareExceptionCapturingTest.java
│ │ │ ├── TestLifecycleAwareMethodTest.java
│ │ │ ├── TestcontainersExtensionTests.java
│ │ │ ├── TestcontainersNestedRestartedContainerTests.java
│ │ │ ├── TestcontainersNestedSharedContainerTests.java
│ │ │ ├── TestcontainersRestartBetweenTests.java
│ │ │ ├── TestcontainersSharedContainerTests.java
│ │ │ ├── WrongAnnotationUsageTests.java
│ │ │ └── inheritance/
│ │ │ ├── AbstractTestBase.java
│ │ │ ├── InheritedTests.java
│ │ │ └── RedisContainer.java
│ │ └── resources/
│ │ ├── docker-compose.yml
│ │ └── logback-test.xml
│ ├── k3s/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── k3s/
│ │ │ └── K3sContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── k3s/
│ │ │ ├── Fabric8K3sContainerTest.java
│ │ │ ├── KubectlContainerTest.java
│ │ │ └── OfficialClientK3sContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── k6/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── k6/
│ │ │ └── K6Container.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── k6/
│ │ │ └── K6ContainerTests.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── scripts/
│ │ └── test.js
│ ├── kafka/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── KafkaContainer.java
│ │ │ └── kafka/
│ │ │ ├── ConfluentKafkaContainer.java
│ │ │ ├── KafkaContainer.java
│ │ │ └── KafkaHelper.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── AbstractKafka.java
│ │ │ ├── KCatContainer.java
│ │ │ ├── containers/
│ │ │ │ └── KafkaContainerTest.java
│ │ │ └── kafka/
│ │ │ ├── CompatibleApacheKafkaImageTest.java
│ │ │ ├── ConfluentKafkaContainerTest.java
│ │ │ └── KafkaContainerTest.java
│ │ └── resources/
│ │ ├── kafka_server_jaas.conf
│ │ └── logback-test.xml
│ ├── ldap/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── ldap/
│ │ │ └── LLdapContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── ldap/
│ │ │ └── LLdapContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── localstack/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── localstack/
│ │ │ │ └── LocalStackContainer.java
│ │ │ └── localstack/
│ │ │ └── LocalStackContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── localstack/
│ │ │ │ ├── LegacyModeTest.java
│ │ │ │ └── LocalstackTestImages.java
│ │ │ └── localstack/
│ │ │ └── LocalStackContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── mariadb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ ├── MariaDBContainer.java
│ │ │ │ │ ├── MariaDBContainerProvider.java
│ │ │ │ │ ├── MariaDBR2DBCDatabaseContainer.java
│ │ │ │ │ └── MariaDBR2DBCDatabaseContainerProvider.java
│ │ │ │ └── mariadb/
│ │ │ │ ├── MariaDBContainer.java
│ │ │ │ └── MariaDBR2DBCDatabaseContainer.java
│ │ │ └── resources/
│ │ │ ├── META-INF/
│ │ │ │ └── services/
│ │ │ │ ├── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ │ │ └── org.testcontainers.r2dbc.R2DBCDatabaseContainerProvider
│ │ │ └── mariadb-default-conf/
│ │ │ └── my.cnf
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── MariaDBTestImages.java
│ │ │ ├── containers/
│ │ │ │ └── MariaDBR2DBCDatabaseContainerTest.java
│ │ │ ├── jdbc/
│ │ │ │ └── mariadb/
│ │ │ │ └── MariaDBJDBCDriverTest.java
│ │ │ └── mariadb/
│ │ │ ├── MariaDBContainerTest.java
│ │ │ └── MariaDBR2DBCDatabaseContainerTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── somepath/
│ │ ├── init_mariadb.sql
│ │ ├── init_unicode_mariadb.sql
│ │ └── mariadb_conf_override/
│ │ └── my.cnf
│ ├── milvus/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── milvus/
│ │ │ │ └── MilvusContainer.java
│ │ │ └── resources/
│ │ │ └── testcontainers/
│ │ │ └── embedEtcd.yaml
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── milvus/
│ │ │ └── MilvusContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── minio/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── containers/
│ │ │ └── MinIOContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── containers/
│ │ │ └── MinIOContainerTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── object_to_upload.txt
│ ├── mockserver/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── MockServerContainer.java
│ │ │ └── mockserver/
│ │ │ └── MockServerContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── mockserver/
│ │ │ └── MockServerContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── mongodb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ └── MongoDBContainer.java
│ │ │ │ └── mongodb/
│ │ │ │ ├── MongoDBAtlasLocalContainer.java
│ │ │ │ └── MongoDBContainer.java
│ │ │ └── resources/
│ │ │ └── sharding.sh
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── mongodb/
│ │ │ ├── AbstractMongo.java
│ │ │ ├── AtlasLocalDataAccess.java
│ │ │ ├── CompatibleImageTest.java
│ │ │ ├── MongoDBAtlasLocalContainerTest.java
│ │ │ └── MongoDBContainerTest.java
│ │ └── resources/
│ │ ├── atlas-local-index.json
│ │ └── logback-test.xml
│ ├── mssqlserver/
│ │ ├── AUTHORS
│ │ ├── LICENSE
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ ├── MSSQLR2DBCDatabaseContainer.java
│ │ │ │ │ ├── MSSQLR2DBCDatabaseContainerProvider.java
│ │ │ │ │ ├── MSSQLServerContainer.java
│ │ │ │ │ └── MSSQLServerContainerProvider.java
│ │ │ │ └── mssqlserver/
│ │ │ │ ├── MSSQLR2DBCDatabaseContainer.java
│ │ │ │ └── MSSQLServerContainer.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ ├── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ │ └── org.testcontainers.r2dbc.R2DBCDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── MSSQLServerTestImages.java
│ │ │ ├── containers/
│ │ │ │ └── MSSQLR2DBCDatabaseContainerTest.java
│ │ │ ├── jdbc/
│ │ │ │ └── mssqlserver/
│ │ │ │ └── MSSQLServerJDBCDriverTest.java
│ │ │ └── mssqlserver/
│ │ │ ├── CustomPasswordMSSQLServerTest.java
│ │ │ ├── MSSQLR2DBCDatabaseContainerTest.java
│ │ │ └── MSSQLServerContainerTest.java
│ │ └── resources/
│ │ ├── container-license-acceptance.txt
│ │ └── logback-test.xml
│ ├── mysql/
│ │ ├── build.gradle
│ │ ├── sql/
│ │ │ └── init_mysql.sql
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ ├── MySQLContainer.java
│ │ │ │ │ ├── MySQLContainerProvider.java
│ │ │ │ │ ├── MySQLR2DBCDatabaseContainer.java
│ │ │ │ │ └── MySQLR2DBCDatabaseContainerProvider.java
│ │ │ │ └── mysql/
│ │ │ │ ├── MySQLContainer.java
│ │ │ │ └── MySQLR2DBCDatabaseContainer.java
│ │ │ └── resources/
│ │ │ ├── META-INF/
│ │ │ │ └── services/
│ │ │ │ ├── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ │ │ └── org.testcontainers.r2dbc.R2DBCDatabaseContainerProvider
│ │ │ └── mysql-default-conf/
│ │ │ └── my.cnf
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── MySQLTestImages.java
│ │ │ ├── containers/
│ │ │ │ ├── MySQLR2DBCDatabaseContainerTest.java
│ │ │ │ └── MySQLRootAccountTest.java
│ │ │ ├── jdbc/
│ │ │ │ └── mysql/
│ │ │ │ ├── JDBCDriverWithPoolTest.java
│ │ │ │ ├── MySQLDatabaseContainerDriverTest.java
│ │ │ │ └── MySQLJDBCDriverTest.java
│ │ │ └── mysql/
│ │ │ ├── MultiVersionMySQLTest.java
│ │ │ ├── MySQLContainerTest.java
│ │ │ └── MySQLR2DBCDatabaseContainerTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── somepath/
│ │ ├── init_mysql.sql
│ │ ├── init_unicode_mysql.sql
│ │ └── mysql_conf_override/
│ │ └── my.cnf
│ ├── neo4j/
│ │ ├── .gitignore
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── custom-neo4j-plugin/
│ │ │ └── java/
│ │ │ └── ac/
│ │ │ └── simons/
│ │ │ └── neo4j/
│ │ │ └── demos/
│ │ │ └── plugins/
│ │ │ └── HelloWorld.java
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── Neo4jContainer.java
│ │ │ └── neo4j/
│ │ │ └── Neo4jContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── neo4j/
│ │ │ └── Neo4jContainerTest.java
│ │ └── resources/
│ │ ├── example-container-license-acceptance.txt
│ │ └── logback-test.xml
│ ├── nginx/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── NginxContainer.java
│ │ │ └── nginx/
│ │ │ └── NginxContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── nginx/
│ │ │ └── NginxContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── oceanbase/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── oceanbase/
│ │ │ │ ├── OceanBaseCEContainer.java
│ │ │ │ ├── OceanBaseCEContainerProvider.java
│ │ │ │ └── OceanBaseJdbcUtils.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── oceanbase/
│ │ │ ├── OceanBaseJdbcDriverTest.java
│ │ │ └── SimpleOceanBaseCETest.java
│ │ └── resources/
│ │ ├── init.sql
│ │ └── logback-test.xml
│ ├── ollama/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── ollama/
│ │ │ └── OllamaContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── ollama/
│ │ │ └── OllamaContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── openfga/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── openfga/
│ │ │ └── OpenFGAContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── openfga/
│ │ │ └── OpenFGAContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── oracle-free/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── oracle/
│ │ │ │ ├── OracleContainer.java
│ │ │ │ ├── OracleContainerProvider.java
│ │ │ │ ├── OracleR2DBCDatabaseContainer.java
│ │ │ │ └── OracleR2DBCDatabaseContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ ├── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ │ └── org.testcontainers.r2dbc.R2DBCDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── junit/
│ │ │ │ └── oracle/
│ │ │ │ └── SimpleOracleTest.java
│ │ │ └── oracle/
│ │ │ ├── jdbc/
│ │ │ │ └── OracleJDBCDriverTest.java
│ │ │ └── r2dbc/
│ │ │ └── OracleR2DBCDatabaseContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── oracle-xe/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── containers/
│ │ │ │ ├── OracleContainer.java
│ │ │ │ ├── OracleContainerProvider.java
│ │ │ │ ├── OracleR2DBCDatabaseContainer.java
│ │ │ │ └── OracleR2DBCDatabaseContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ ├── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ │ └── org.testcontainers.r2dbc.R2DBCDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ ├── jdbc/
│ │ │ │ │ └── OracleJDBCDriverTest.java
│ │ │ │ └── r2dbc/
│ │ │ │ └── OracleR2DBCDatabaseContainerTest.java
│ │ │ └── junit/
│ │ │ └── oracle/
│ │ │ └── SimpleOracleTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── orientdb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── OrientDBContainer.java
│ │ │ └── orientdb/
│ │ │ └── OrientDBContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── orientdb/
│ │ │ └── OrientDBContainerTest.java
│ │ └── resources/
│ │ ├── initscript.osql
│ │ ├── logback-test.xml
│ │ └── orientdb-server-config.xml
│ ├── pinecone/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── pinecone/
│ │ │ └── PineconeLocalContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── pinecone/
│ │ │ └── PineconeLocalContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── postgresql/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ ├── PgVectorContainerProvider.java
│ │ │ │ │ ├── PostgisContainerProvider.java
│ │ │ │ │ ├── PostgreSQLContainer.java
│ │ │ │ │ ├── PostgreSQLContainerProvider.java
│ │ │ │ │ ├── PostgreSQLR2DBCDatabaseContainer.java
│ │ │ │ │ ├── PostgreSQLR2DBCDatabaseContainerProvider.java
│ │ │ │ │ └── TimescaleDBContainerProvider.java
│ │ │ │ └── postgresql/
│ │ │ │ ├── PostgreSQLContainer.java
│ │ │ │ └── PostgreSQLR2DBCDatabaseContainer.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ ├── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ │ └── org.testcontainers.r2dbc.R2DBCDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── PostgreSQLTestImages.java
│ │ │ ├── containers/
│ │ │ │ ├── PostgreSQLConnectionURLTest.java
│ │ │ │ ├── PostgreSQLR2DBCDatabaseContainerTest.java
│ │ │ │ └── TimescaleDBContainerTest.java
│ │ │ ├── jdbc/
│ │ │ │ ├── DatabaseDriverShutdownTest.java
│ │ │ │ ├── DatabaseDriverTmpfsTest.java
│ │ │ │ ├── pgvector/
│ │ │ │ │ └── PgVectorJDBCDriverTest.java
│ │ │ │ ├── postgis/
│ │ │ │ │ └── PostgisJDBCDriverTest.java
│ │ │ │ ├── postgresql/
│ │ │ │ │ └── PostgreSQLJDBCDriverTest.java
│ │ │ │ └── timescaledb/
│ │ │ │ └── TimescaleDBJDBCDriverTest.java
│ │ │ └── postgresql/
│ │ │ ├── CompatibleImageTest.java
│ │ │ ├── PostgreSQLContainerTest.java
│ │ │ └── PostgreSQLR2DBCDatabaseContainerTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── somepath/
│ │ ├── init_postgresql.sql
│ │ ├── init_postgresql_2.sql
│ │ └── init_timescaledb.sql
│ ├── presto/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── containers/
│ │ │ │ ├── PrestoContainer.java
│ │ │ │ └── PrestoContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── PrestoTestImages.java
│ │ │ ├── containers/
│ │ │ │ └── PrestoContainerTest.java
│ │ │ └── jdbc/
│ │ │ └── presto/
│ │ │ └── PrestoJDBCDriverTest.java
│ │ └── resources/
│ │ ├── initial.sql
│ │ └── logback-test.xml
│ ├── pulsar/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── PulsarContainer.java
│ │ │ └── pulsar/
│ │ │ └── PulsarContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── pulsar/
│ │ │ ├── AbstractPulsar.java
│ │ │ ├── CompatibleApachePulsarImageTest.java
│ │ │ └── PulsarContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── qdrant/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── qdrant/
│ │ │ └── QdrantContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── qdrant/
│ │ │ └── QdrantContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── questdb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── containers/
│ │ │ │ ├── LegacyQuestDBProvider.java
│ │ │ │ ├── QuestDBContainer.java
│ │ │ │ └── QuestDBProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── QuestDBTestImages.java
│ │ │ ├── jdbc/
│ │ │ │ └── questdb/
│ │ │ │ └── QuestDBJDBCDriverTest.java
│ │ │ └── junit/
│ │ │ └── questdb/
│ │ │ └── SimpleQuestDBTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── r2dbc/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── r2dbc/
│ │ │ │ ├── CancellableSubscription.java
│ │ │ │ ├── ConnectionPublisher.java
│ │ │ │ ├── EmptySubscription.java
│ │ │ │ ├── Hidden.java
│ │ │ │ ├── R2DBCDatabaseContainer.java
│ │ │ │ ├── R2DBCDatabaseContainerProvider.java
│ │ │ │ └── TestcontainersR2DBCConnectionFactory.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── io.r2dbc.spi.ConnectionFactoryProvider
│ │ ├── test/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── r2dbc/
│ │ │ │ └── TestcontainersR2DBCConnectionFactoryTest.java
│ │ │ └── resources/
│ │ │ └── logback-test.xml
│ │ └── testFixtures/
│ │ └── java/
│ │ └── org/
│ │ └── testcontainers/
│ │ └── r2dbc/
│ │ └── AbstractR2DBCDatabaseContainerTest.java
│ ├── rabbitmq/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── RabbitMQContainer.java
│ │ │ └── rabbitmq/
│ │ │ └── RabbitMQContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── rabbitmq/
│ │ │ ├── RabbitMQContainerTest.java
│ │ │ └── RabbitMQTestImages.java
│ │ └── resources/
│ │ ├── certs/
│ │ │ ├── ca_certificate.pem
│ │ │ ├── ca_key.pem
│ │ │ ├── client_certificate.pem
│ │ │ ├── client_key.p12
│ │ │ ├── client_key.pem
│ │ │ ├── server_certificate.pem
│ │ │ ├── server_key.p12
│ │ │ ├── server_key.pem
│ │ │ └── truststore.jks
│ │ ├── logback-test.xml
│ │ ├── rabbitmq-custom.conf
│ │ └── rabbitmq-custom.config
│ ├── redpanda/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── redpanda/
│ │ │ │ └── RedpandaContainer.java
│ │ │ └── resources/
│ │ │ └── testcontainers/
│ │ │ ├── bootstrap.yaml.ftl
│ │ │ ├── entrypoint-tc.sh
│ │ │ └── redpanda.yaml.ftl
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── redpanda/
│ │ │ ├── AbstractRedpanda.java
│ │ │ ├── CompatibleImageTest.java
│ │ │ └── RedpandaContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── scylladb/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── scylladb/
│ │ │ └── ScyllaDBContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── scylladb/
│ │ │ └── ScyllaDBContainerTest.java
│ │ └── resources/
│ │ ├── keys/
│ │ │ ├── node0.cer
│ │ │ ├── node0.p12
│ │ │ ├── scylla.cer.pem
│ │ │ ├── scylla.key.pem
│ │ │ ├── scylla.keystore
│ │ │ └── scylla.truststore
│ │ ├── logback-test.xml
│ │ └── scylla-test-ssl/
│ │ └── scylla.yaml
│ ├── selenium/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ ├── BrowserWebDriverContainer.java
│ │ │ │ ├── DefaultRecordingFileFactory.java
│ │ │ │ ├── RecordingFileFactory.java
│ │ │ │ └── SeleniumUtils.java
│ │ │ └── selenium/
│ │ │ └── BrowserWebDriverContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── DefaultRecordingFileFactoryTest.java
│ │ │ ├── junit/
│ │ │ │ ├── SeleniumStartTest.java
│ │ │ │ └── SeleniumUtilsTest.java
│ │ │ └── selenium/
│ │ │ ├── BaseWebDriverContainerTest.java
│ │ │ ├── BrowserWebDriverContainerTest.java
│ │ │ ├── ChromeRecordingWebDriverContainerTest.java
│ │ │ ├── ChromeWebDriverContainerTest.java
│ │ │ ├── ContainerWithoutCapabilitiesTest.java
│ │ │ ├── CustomWaitTimeoutWebDriverContainerTest.java
│ │ │ ├── EdgeWebDriverContainerTest.java
│ │ │ ├── FirefoxWebDriverContainerTest.java
│ │ │ ├── LocalServerWebDriverContainerTest.java
│ │ │ └── SpecificImageNameWebDriverContainerTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ ├── manifests/
│ │ │ ├── MANIFEST-2.45.0.MF
│ │ │ └── MANIFEST-3.5.2.MF
│ │ └── server/
│ │ └── index.html
│ ├── solace/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── solace/
│ │ │ ├── Service.java
│ │ │ └── SolaceContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── solace/
│ │ │ ├── SolaceContainerAMQPTest.java
│ │ │ ├── SolaceContainerMQTTTest.java
│ │ │ ├── SolaceContainerRESTTest.java
│ │ │ └── SolaceContainerSMFTest.java
│ │ └── resources/
│ │ ├── client.pfx
│ │ ├── logback-test.xml
│ │ ├── rootCA.crt
│ │ ├── solace.pem
│ │ └── truststore
│ ├── solr/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ ├── SolrClientUtils.java
│ │ │ │ ├── SolrClientUtilsException.java
│ │ │ │ ├── SolrContainer.java
│ │ │ │ └── SolrContainerConfiguration.java
│ │ │ └── solr/
│ │ │ └── SolrContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── solr/
│ │ │ └── SolrContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── spock/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── groovy/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── spock/
│ │ │ ├── DockerAvailableDetector.groovy
│ │ │ ├── SpockTestDescription.groovy
│ │ │ ├── Testcontainers.groovy
│ │ │ ├── TestcontainersExtension.groovy
│ │ │ └── TestcontainersMethodInterceptor.groovy
│ │ └── test/
│ │ ├── groovy/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── spock/
│ │ │ ├── ComposeContainerIT.groovy
│ │ │ ├── DockerComposeContainerIT.groovy
│ │ │ ├── MySqlContainerIT.groovy
│ │ │ ├── PostgresContainerIT.groovy
│ │ │ ├── SharedComposeContainerIT.groovy
│ │ │ ├── SharedDockerComposeContainerIT.groovy
│ │ │ ├── SpockTestImages.groovy
│ │ │ ├── TestHierarchyIT.groovy
│ │ │ ├── TestLifecycleAwareContainerMock.java
│ │ │ ├── TestLifecycleAwareIT.groovy
│ │ │ ├── TestcontainersExtensionTest.groovy
│ │ │ ├── TestcontainersRestartBetweenTestsIT.groovy
│ │ │ └── TestcontainersSharedContainerIT.groovy
│ │ └── resources/
│ │ ├── docker-compose.yml
│ │ └── logback-test.xml
│ ├── tidb/
│ │ ├── build.gradle
│ │ ├── sql/
│ │ │ └── init_mysql.sql
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── tidb/
│ │ │ │ ├── TiDBContainer.java
│ │ │ │ └── TiDBContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── TiDBTestImages.java
│ │ │ ├── jdbc/
│ │ │ │ └── tidb/
│ │ │ │ └── TiDBJDBCDriverTest.java
│ │ │ └── tidb/
│ │ │ └── TiDBContainerTest.java
│ │ └── resources/
│ │ ├── logback-test.xml
│ │ └── somepath/
│ │ └── init_tidb.sql
│ ├── timeplus/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ └── timeplus/
│ │ │ │ ├── TimeplusContainer.java
│ │ │ │ └── TimeplusContainerProvider.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── TimeplusImages.java
│ │ │ ├── junit/
│ │ │ │ └── timeplus/
│ │ │ │ └── TimeplusJDBCDriverTest.java
│ │ │ └── timeplus/
│ │ │ └── TimeplusContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── toxiproxy/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── containers/
│ │ │ │ └── ToxiproxyContainer.java
│ │ │ └── toxiproxy/
│ │ │ └── ToxiproxyContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── toxiproxy/
│ │ │ └── ToxiproxyContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── trino/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── org/
│ │ │ │ └── testcontainers/
│ │ │ │ ├── containers/
│ │ │ │ │ ├── TrinoContainer.java
│ │ │ │ │ └── TrinoContainerProvider.java
│ │ │ │ └── trino/
│ │ │ │ └── TrinoContainer.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── services/
│ │ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ ├── TrinoTestImages.java
│ │ │ ├── jdbc/
│ │ │ │ └── trino/
│ │ │ │ └── TrinoJDBCDriverTest.java
│ │ │ └── trino/
│ │ │ └── TrinoContainerTest.java
│ │ └── resources/
│ │ ├── initial.sql
│ │ └── logback-test.xml
│ ├── typesense/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── typesense/
│ │ │ └── TypesenseContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── typesense/
│ │ │ └── TypesenseContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── vault/
│ │ ├── AUTHORS
│ │ ├── LICENSE
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── vault/
│ │ │ ├── VaultContainer.java
│ │ │ └── VaultLogLevel.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── vault/
│ │ │ ├── VaultClientTest.java
│ │ │ └── VaultContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ ├── weaviate/
│ │ ├── build.gradle
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── weaviate/
│ │ │ └── WeaviateContainer.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── weaviate/
│ │ │ └── WeaviateContainerTest.java
│ │ └── resources/
│ │ └── logback-test.xml
│ └── yugabytedb/
│ ├── build.gradle
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── testcontainers/
│ │ │ └── containers/
│ │ │ ├── YugabyteDBYCQLContainer.java
│ │ │ ├── YugabyteDBYSQLContainer.java
│ │ │ ├── YugabyteDBYSQLContainerProvider.java
│ │ │ ├── delegate/
│ │ │ │ ├── AbstractYCQLDelegate.java
│ │ │ │ └── YugabyteDBYCQLDelegate.java
│ │ │ └── strategy/
│ │ │ ├── YugabyteDBYCQLWaitStrategy.java
│ │ │ └── YugabyteDBYSQLWaitStrategy.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ └── org.testcontainers.containers.JdbcDatabaseContainerProvider
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── testcontainers/
│ │ ├── jdbc/
│ │ │ └── yugabytedb/
│ │ │ └── YugabyteDBYSQLJDBCDriverTest.java
│ │ └── junit/
│ │ └── yugabytedb/
│ │ ├── YugabyteDBYCQLTest.java
│ │ └── YugabyteDBYSQLTest.java
│ └── resources/
│ ├── init/
│ │ └── init_yql.sql
│ └── logback-test.xml
├── requirements.txt
├── runtime.txt
├── settings.gradle
├── smoke-test/
│ ├── build.gradle
│ ├── gradle/
│ │ └── wrapper/
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── settings.gradle
│ └── turbo-mode/
│ ├── build.gradle
│ └── src/
│ └── test/
│ ├── java/
│ │ └── org/
│ │ └── testcontainers/
│ │ └── example/
│ │ ├── AbstractRedisContainer.java
│ │ ├── RedisContainer1Test.java
│ │ ├── RedisContainer2Test.java
│ │ ├── RedisContainer3Test.java
│ │ └── RedisContainer4Test.java
│ └── resources/
│ └── logback-test.xml
└── test-support/
├── build.gradle
└── src/
├── main/
│ └── java/
│ └── org/
│ └── testcontainers/
│ └── testsupport/
│ ├── Flaky.java
│ └── FlakyTestJUnit4RetryRule.java
└── test/
├── java/
│ └── org/
│ └── testcontainers/
│ └── testsupport/
│ └── FlakyRuleTest.java
└── resources/
└── logback-test.xml
Showing preview only (446K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5080 symbols across 768 files)
FILE: core/src/jarFileTest/java/org/testcontainers/AbstractJarFileTest.java
class AbstractJarFileTest (line 12) | public abstract class AbstractJarFileTest {
FILE: core/src/jarFileTest/java/org/testcontainers/JarFileShadingTest.java
class JarFileShadingTest (line 12) | class JarFileShadingTest extends AbstractJarFileTest {
method testPackages (line 14) | @Test
method testMetaInf (line 21) | @Test
method testMetaInfServices (line 35) | @Test
method assertThatFileList (line 41) | private ListAssert<String> assertThatFileList(Path path) throws IOExce...
FILE: core/src/jarFileTest/java/org/testcontainers/PublicBinaryAPITest.java
class PublicBinaryAPITest (line 34) | @ParameterizedClass
method data (line 49) | public static List<Object[]> data() throws Exception {
method setUp (line 93) | @BeforeEach
method testSuperClass (line 105) | @Test
method testInterfaces (line 110) | @Test
method testMethodReturnTypes (line 115) | @Test
method testMethodArguments (line 122) | @Test
method testFields (line 133) | @Test
FILE: core/src/main/java/org/testcontainers/DelegatingDockerClient.java
class DelegatingDockerClient (line 7) | @RequiredArgsConstructor
FILE: core/src/main/java/org/testcontainers/DockerClientFactory.java
class DockerClientFactory (line 52) | @Slf4j
method markerLabels (line 72) | static Map<String, String> markerLabels() {
method DockerClientFactory (line 101) | @VisibleForTesting
method lazyClient (line 104) | public static DockerClient lazyClient() {
method instance (line 123) | public static synchronized DockerClientFactory instance() {
method isDockerAvailable (line 136) | public synchronized boolean isDockerAvailable() {
method getOrInitializeStrategy (line 145) | @Synchronized
method getTransportConfig (line 158) | @UnstableAPI
method getRemoteDockerUnixSocketPath (line 163) | @UnstableAPI
method client (line 184) | @Synchronized
method checkDockerVersion (line 269) | private void checkDockerVersion(String dockerVersion) {
method check (line 275) | private void check(String message, boolean isSuccessful) {
method checkMountableFile (line 284) | private boolean checkMountableFile() {
method checkAndPullImage (line 321) | @SneakyThrows
method dockerHostIpAddress (line 343) | public String dockerHostIpAddress() {
method runInsideDocker (line 347) | public <T> T runInsideDocker(
method runInsideDocker (line 354) | <T> T runInsideDocker(
method getActiveApiVersion (line 381) | public String getActiveApiVersion() {
method getActiveExecutionDriver (line 389) | public String getActiveExecutionDriver() {
method isUsing (line 397) | public boolean isUsing(Class<? extends DockerClientProviderStrategy> p...
method getInfo (line 401) | @UnstableAPI
FILE: core/src/main/java/org/testcontainers/Testcontainers.java
class Testcontainers (line 9) | @UtilityClass
method exposeHostPorts (line 12) | public void exposeHostPorts(int... ports) {
method exposeHostPorts (line 18) | public void exposeHostPorts(Map<Integer, Integer> ports) {
FILE: core/src/main/java/org/testcontainers/containers/BindMode.java
type BindMode (line 8) | public enum BindMode {
method BindMode (line 14) | BindMode(AccessMode accessMode) {
FILE: core/src/main/java/org/testcontainers/containers/ComposeCommand.java
class ComposeCommand (line 5) | class ComposeCommand {
method getDownCommand (line 7) | static String getDownCommand(ComposeDelegate.ComposeVersion composeVer...
method getUpCommand (line 16) | static String getUpCommand(ComposeDelegate.ComposeVersion composeVersi...
method optionsAsString (line 25) | private static String optionsAsString(final Set<String> options) {
FILE: core/src/main/java/org/testcontainers/containers/ComposeContainer.java
class ComposeContainer (line 32) | @Slf4j
method ComposeContainer (line 77) | public ComposeContainer(DockerImageName image, File... composeFiles) {
method ComposeContainer (line 87) | public ComposeContainer(DockerImageName image, List<File> composeFiles) {
method ComposeContainer (line 98) | public ComposeContainer(DockerImageName image, String identifier, File...
method ComposeContainer (line 109) | public ComposeContainer(DockerImageName image, String identifier, File...
method ComposeContainer (line 120) | public ComposeContainer(DockerImageName image, String identifier, List...
method ComposeContainer (line 130) | public ComposeContainer(File... composeFiles) {
method ComposeContainer (line 138) | public ComposeContainer(List<File> composeFiles) {
method ComposeContainer (line 146) | public ComposeContainer(String identifier, File... composeFiles) {
method ComposeContainer (line 154) | public ComposeContainer(String identifier, List<File> composeFiles) {
method start (line 159) | @Override
method listChildContainers (line 184) | @VisibleForTesting
method withServices (line 189) | public ComposeContainer withServices(@NonNull String... services) {
method stop (line 194) | @Override
method withExposedService (line 217) | public ComposeContainer withExposedService(String serviceName, int ser...
method withExposedService (line 222) | public ComposeContainer withExposedService(String serviceName, int ins...
method withExposedService (line 226) | public ComposeContainer withExposedService(
method withExposedService (line 236) | public ComposeContainer withExposedService(
method waitingFor (line 253) | public ComposeContainer waitingFor(String serviceName, @NonNull WaitSt...
method getServiceHost (line 269) | public String getServiceHost(String serviceName, Integer servicePort) {
method getServicePort (line 283) | public Integer getServicePort(String serviceName, Integer servicePort) {
method withScaledService (line 287) | public ComposeContainer withScaledService(String serviceBaseName, int ...
method withEnv (line 292) | public ComposeContainer withEnv(String key, String value) {
method withEnv (line 297) | public ComposeContainer withEnv(Map<String, String> env) {
method withPull (line 307) | public ComposeContainer withPull(boolean pull) {
method withTailChildContainers (line 317) | public ComposeContainer withTailChildContainers(boolean tailChildConta...
method withLogConsumer (line 331) | public ComposeContainer withLogConsumer(String serviceName, Consumer<O...
method withBuild (line 341) | public ComposeContainer withBuild(boolean build) {
method withOptions (line 351) | public ComposeContainer withOptions(String... options) {
method withRemoveImages (line 361) | public ComposeContainer withRemoveImages(ComposeContainer.RemoveImages...
method withRemoveVolumes (line 372) | public ComposeContainer withRemoveVolumes(boolean removeVolumes) {
method withStartupTimeout (line 382) | public ComposeContainer withStartupTimeout(Duration startupTimeout) {
method withCopyFilesInContainer (line 387) | public ComposeContainer withCopyFilesInContainer(String... fileCopyInc...
method getContainerByServiceName (line 392) | public Optional<ContainerState> getContainerByServiceName(String servi...
method followLogs (line 396) | private void followLogs(String containerId, Consumer<OutputFrame> cons...
type RemoveImages (line 400) | public enum RemoveImages {
method RemoveImages (line 413) | RemoveImages(final String dockerRemoveImagesType) {
method dockerRemoveImagesType (line 417) | public String dockerRemoveImagesType() {
FILE: core/src/main/java/org/testcontainers/containers/ComposeDelegate.java
class ComposeDelegate (line 42) | @Slf4j
method ComposeDelegate (line 80) | ComposeDelegate(
method pullImages (line 98) | void pullImages() {
method createServices (line 122) | void createServices(
method waitUntilServiceStarted (line 166) | void waitUntilServiceStarted(boolean tailChildContainers) {
method createServiceInstance (line 187) | private void createServiceInstance(Container container, boolean tailCh...
method waitUntilServiceStarted (line 207) | private void waitUntilServiceStarted(String serviceName, ComposeServic...
method getServiceNameFromContainer (line 214) | private String getServiceNameFromContainer(com.github.dockerjava.api.m...
method runWithCompose (line 220) | public void runWithCompose(boolean localCompose, String cmd) {
method runWithCompose (line 224) | public void runWithCompose(
method registerContainersForShutdown (line 244) | void registerContainersForShutdown() {
method listChildContainers (line 250) | @VisibleForTesting
method startAmbassadorContainer (line 261) | void startAmbassadorContainer() {
method withExposedService (line 267) | public void withExposedService(String serviceName, int servicePort) {
method withExposedService (line 271) | public void withExposedService(String serviceName, int instance, int s...
method withExposedService (line 275) | public void withExposedService(String serviceName, int instance, int s...
method withExposedService (line 279) | public void withExposedService(String serviceName, int servicePort, @N...
method getServiceInstanceName (line 309) | String getServiceInstanceName(String serviceName) {
method addWaitStrategy (line 323) | void addWaitStrategy(String serviceInstanceName, @NonNull WaitStrategy...
method getServicePort (line 344) | public Integer getServicePort(String serviceName, Integer servicePort) {
method getContainerByServiceName (line 364) | Optional<ContainerState> getContainerByServiceName(String serviceName) {
method followLogs (line 369) | private void followLogs(String containerId, Consumer<OutputFrame> cons...
method randomProjectId (line 373) | String randomProjectId() {
method withLogConsumer (line 377) | void withLogConsumer(String serviceName, Consumer<OutputFrame> consume...
method getServiceHost (line 385) | String getServiceHost() {
method clear (line 389) | void clear() {
type ComposeVersion (line 396) | enum ComposeVersion {
method ComposeVersion (line 403) | ComposeVersion(String separator) {
method getSeparator (line 407) | public String getSeparator() {
FILE: core/src/main/java/org/testcontainers/containers/ComposeServiceWaitStrategyTarget.java
class ComposeServiceWaitStrategyTarget (line 19) | @EqualsAndHashCode
method ComposeServiceWaitStrategyTarget (line 34) | ComposeServiceWaitStrategyTarget(
method getExposedPorts (line 49) | @Override
method getMappedPort (line 57) | @Override
method getHost (line 65) | @Override
method getContainerId (line 73) | @Override
FILE: core/src/main/java/org/testcontainers/containers/Container.java
type Container (line 25) | public interface Container<SELF extends Container<SELF>> extends Linkabl...
method self (line 29) | @SuppressWarnings("unchecked")
class ExecResult (line 37) | @Value
method setCommand (line 54) | void setCommand(@NonNull String command);
method setCommand (line 62) | void setCommand(@NonNull String... commandParts);
method addEnv (line 71) | void addEnv(String key, String value);
method addFileSystemBind (line 82) | @Deprecated
method addFileSystemBind (line 97) | @Deprecated
method addLink (line 107) | @Deprecated
method addExposedPort (line 116) | void addExposedPort(Integer port);
method addExposedPorts (line 124) | void addExposedPorts(int... ports);
method waitingFor (line 133) | SELF waitingFor(@NonNull WaitStrategy waitStrategy);
method withFileSystemBind (line 143) | @Deprecated
method withFileSystemBind (line 157) | @Deprecated
method withVolumesFrom (line 167) | SELF withVolumesFrom(Container container, BindMode mode);
method withExposedPorts (line 175) | SELF withExposedPorts(Integer... ports);
method withCopyFileToContainer (line 186) | @Deprecated
method withCopyToContainer (line 196) | SELF withCopyToContainer(Transferable transferable, String containerPa...
method withEnv (line 205) | SELF withEnv(String key, String value);
method withEnv (line 214) | default SELF withEnv(String key, Function<Optional<String>, String> ma...
method withEnv (line 225) | SELF withEnv(Map<String, String> env);
method withLabel (line 234) | SELF withLabel(String key, String value);
method withLabels (line 241) | SELF withLabels(Map<String, String> labels);
method withCommand (line 249) | SELF withCommand(String cmd);
method withCommand (line 257) | SELF withCommand(String... commandParts);
method withExtraHost (line 265) | SELF withExtraHost(String hostname, String ipAddress);
method withNetworkMode (line 274) | SELF withNetworkMode(String networkMode);
method withNetwork (line 283) | SELF withNetwork(Network network);
method withNetworkAliases (line 292) | SELF withNetworkAliases(String... aliases);
method withImagePullPolicy (line 298) | SELF withImagePullPolicy(ImagePullPolicy policy);
method withClasspathResourceMapping (line 310) | @Deprecated
method withClasspathResourceMapping (line 331) | @Deprecated
method withStartupTimeout (line 346) | SELF withStartupTimeout(Duration startupTimeout);
method withPrivilegedMode (line 353) | SELF withPrivilegedMode(boolean mode);
method withMinimumRunningDuration (line 362) | SELF withMinimumRunningDuration(Duration minimumRunningDuration);
method withStartupCheckStrategy (line 369) | SELF withStartupCheckStrategy(StartupCheckStrategy strategy);
method withWorkingDirectory (line 376) | SELF withWorkingDirectory(String workDir);
method setDockerImageName (line 383) | void setDockerImageName(@NonNull String dockerImageName);
method getDockerImageName (line 390) | @NonNull
method getTestHostIpAddress (line 404) | @Deprecated
method followOutput (line 412) | default void followOutput(Consumer<OutputFrame> consumer) {
method followOutput (line 423) | default void followOutput(Consumer<OutputFrame> consumer, OutputFrame....
method withLogConsumer (line 435) | SELF withLogConsumer(Consumer<OutputFrame> consumer);
method getPortBindings (line 437) | List<String> getPortBindings();
method getExtraHosts (line 439) | List<String> getExtraHosts();
method getImage (line 441) | Future<String> getImage();
method getEnv (line 447) | @Deprecated
method getEnvMap (line 450) | Map<String, String> getEnvMap();
method getCommandParts (line 452) | String[] getCommandParts();
method getBinds (line 454) | List<Bind> getBinds();
method getLinkedContainers (line 459) | @Deprecated
method setExposedPorts (line 462) | void setExposedPorts(List<Integer> exposedPorts);
method setPortBindings (line 464) | void setPortBindings(List<String> portBindings);
method setExtraHosts (line 466) | void setExtraHosts(List<String> extraHosts);
method setImage (line 468) | void setImage(Future<String> image);
method setEnv (line 470) | void setEnv(List<String> env);
method setCommandParts (line 472) | void setCommandParts(String[] commandParts);
method setBinds (line 474) | void setBinds(List<Bind> binds);
method setLinkedContainers (line 479) | @Deprecated
method setWaitStrategy (line 482) | void setWaitStrategy(WaitStrategy waitStrategy);
FILE: core/src/main/java/org/testcontainers/containers/ContainerDef.java
class ContainerDef (line 28) | @UnstableAPI
method ContainerDef (line 63) | public ContainerDef() {}
method applyTo (line 65) | protected void applyTo(CreateContainerCmd createCommand) {
method setImage (line 140) | protected void setImage(RemoteDockerImage image) {
method setImage (line 144) | protected void setImage(String image) {
method setImage (line 148) | protected void setImage(DockerImageName image) {
method getExposedPorts (line 152) | public Set<ExposedPort> getExposedPorts() {
method setExposedPorts (line 156) | protected void setExposedPorts(Set<ExposedPort> exposedPorts) {
method addExposedPorts (line 161) | protected void addExposedPorts(ExposedPort... exposedPorts) {
method addExposedPort (line 165) | protected void addExposedPort(ExposedPort exposedPort) {
method setExposedTcpPorts (line 169) | protected void setExposedTcpPorts(Set<Integer> ports) {
method addExposedTcpPorts (line 174) | protected void addExposedTcpPorts(int... ports) {
method addExposedTcpPort (line 180) | protected void addExposedTcpPort(int port) {
method addExposedPort (line 184) | protected void addExposedPort(int port, InternetProtocol protocol) {
method getPortBindings (line 188) | public Set<PortBinding> getPortBindings() {
method setPortBindings (line 192) | protected void setPortBindings(Set<PortBinding> portBindings) {
method addPortBindings (line 197) | protected void addPortBindings(PortBinding... portBindings) {
method addPortBinding (line 201) | protected void addPortBinding(PortBinding portBinding) {
method getLabels (line 205) | public Map<String, String> getLabels() {
method setLabels (line 209) | protected void setLabels(Map<String, String> labels) {
method addLabels (line 214) | protected void addLabels(Map<String, String> labels) {
method addLabel (line 218) | protected void addLabel(String key, String value) {
method getEnvVars (line 222) | public Map<String, String> getEnvVars() {
method setEnvVars (line 226) | protected void setEnvVars(Map<String, String> envVars) {
method addEnvVars (line 231) | protected void addEnvVars(Map<String, String> envVars) {
method addEnvVar (line 235) | protected void addEnvVar(String key, String value) {
method getEntrypoint (line 239) | public String[] getEntrypoint() {
method setEntrypoint (line 243) | protected void setEntrypoint(String... entrypoint) {
method getCommand (line 247) | public String[] getCommand() {
method setCommand (line 251) | protected void setCommand(String... command) {
method setNetwork (line 255) | protected void setNetwork(Network network) {
method getNetworkAliases (line 259) | public Set<String> getNetworkAliases() {
method setNetworkAliases (line 263) | protected void setNetworkAliases(Set<String> aliases) {
method addNetworkAliases (line 268) | protected void addNetworkAliases(String... aliases) {
method addNetworkAlias (line 272) | protected void addNetworkAlias(String alias) {
method setNetworkMode (line 276) | protected void setNetworkMode(String networkMode) {
method setPrivilegedMode (line 280) | protected void setPrivilegedMode(boolean privilegedMode) {
method getBinds (line 284) | public List<Bind> getBinds() {
method setBinds (line 288) | protected void setBinds(List<Bind> binds) {
method addBinds (line 293) | protected void addBinds(Bind... binds) {
method addBind (line 297) | protected void addBind(Bind bind) {
method setWaitStrategy (line 301) | protected void setWaitStrategy(WaitStrategy waitStrategy) {
FILE: core/src/main/java/org/testcontainers/containers/ContainerFetchException.java
class ContainerFetchException (line 6) | public class ContainerFetchException extends RuntimeException {
method ContainerFetchException (line 8) | public ContainerFetchException(String s, Exception e) {
method ContainerFetchException (line 12) | public ContainerFetchException(String s) {
FILE: core/src/main/java/org/testcontainers/containers/ContainerLaunchException.java
class ContainerLaunchException (line 6) | public class ContainerLaunchException extends RuntimeException {
method ContainerLaunchException (line 8) | public ContainerLaunchException(String message) {
method ContainerLaunchException (line 12) | public ContainerLaunchException(String message, Throwable cause) {
FILE: core/src/main/java/org/testcontainers/containers/ContainerState.java
type ContainerState (line 39) | public interface ContainerState {
method getContainerIpAddress (line 49) | @Deprecated
method getDockerClient (line 54) | default DockerClient getDockerClient() {
method getHost (line 63) | default String getHost() {
method isRunning (line 70) | default boolean isRunning() {
method isCreated (line 86) | default boolean isCreated() {
method isHealthy (line 102) | default boolean isHealthy() {
method getCurrentContainerInfo (line 128) | default InspectContainerResponse getCurrentContainerInfo() {
method getFirstMappedPort (line 139) | default Integer getFirstMappedPort() {
method getMappedPort (line 160) | default Integer getMappedPort(int originalPort) {
method getExposedPorts (line 182) | List<Integer> getExposedPorts();
method getPortBindings (line 187) | default List<String> getPortBindings() {
method getBoundPortNumbers (line 201) | default List<Integer> getBoundPortNumbers() {
method getLogs (line 217) | default String getLogs() {
method getLogs (line 225) | default String getLogs(OutputFrame.OutputType... types) {
method getContainerId (line 232) | default String getContainerId() {
method getContainerInfo (line 242) | InspectContainerResponse getContainerInfo();
method execInContainer (line 250) | default Container.ExecResult execInContainer(String... command)
method execInContainer (line 260) | default Container.ExecResult execInContainer(Charset outputCharset, St...
method execInContainerWithUser (line 271) | @Deprecated
method execInContainerWithUser (line 287) | @Deprecated
method execInContainer (line 301) | default Container.ExecResult execInContainer(ExecConfig execConfig)
method execInContainer (line 309) | default Container.ExecResult execInContainer(Charset outputCharset, Ex...
method copyFileToContainer (line 321) | default void copyFileToContainer(MountableFile mountableFile, String c...
method copyFileToContainer (line 342) | @SneakyThrows({ IOException.class, InterruptedException.class })
method copyFileFromContainer (line 384) | default void copyFileFromContainer(String containerPath, String destin...
method copyFileFromContainer (line 403) | @SneakyThrows
FILE: core/src/main/java/org/testcontainers/containers/ContainerisedDockerCompose.java
class ContainerisedDockerCompose (line 23) | class ContainerisedDockerCompose extends GenericContainer<ContainerisedD...
method ContainerisedDockerCompose (line 27) | public ContainerisedDockerCompose(
method invoke (line 82) | @Override
method convertToUnixFilesystemPath (line 115) | private String convertToUnixFilesystemPath(String path) {
FILE: core/src/main/java/org/testcontainers/containers/DockerCompose.java
type DockerCompose (line 5) | interface DockerCompose {
method withCommand (line 10) | DockerCompose withCommand(String cmd);
method withEnv (line 12) | DockerCompose withEnv(Map<String, String> env);
method invoke (line 14) | void invoke();
FILE: core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java
class DockerComposeContainer (line 31) | @Slf4j
method DockerComposeContainer (line 74) | public DockerComposeContainer(DockerImageName image, File... composeFi...
method DockerComposeContainer (line 84) | public DockerComposeContainer(DockerImageName image, List<File> compos...
method DockerComposeContainer (line 95) | public DockerComposeContainer(DockerImageName image, String identifier...
method DockerComposeContainer (line 106) | public DockerComposeContainer(DockerImageName image, String identifier...
method DockerComposeContainer (line 117) | public DockerComposeContainer(DockerImageName image, String identifier...
method DockerComposeContainer (line 126) | public DockerComposeContainer(File composeFile, String identifier) {
method DockerComposeContainer (line 134) | public DockerComposeContainer(File... composeFiles) {
method DockerComposeContainer (line 142) | @Deprecated
method DockerComposeContainer (line 151) | public DockerComposeContainer(String identifier, File... composeFiles) {
method DockerComposeContainer (line 159) | public DockerComposeContainer(String identifier, List<File> composeFil...
method start (line 172) | @Override
method listChildContainers (line 197) | @VisibleForTesting
method withServices (line 202) | public SELF withServices(@NonNull String... services) {
method stop (line 207) | @Override
method withExposedService (line 230) | public SELF withExposedService(String serviceName, int servicePort) {
method withExposedService (line 235) | public DockerComposeContainer withExposedService(String serviceName, i...
method withExposedService (line 239) | public DockerComposeContainer withExposedService(
method withExposedService (line 249) | public SELF withExposedService(String serviceName, int servicePort, @N...
method waitingFor (line 262) | public SELF waitingFor(String serviceName, @NonNull WaitStrategy waitS...
method getServiceHost (line 278) | public String getServiceHost(String serviceName, Integer servicePort) {
method getServicePort (line 292) | public Integer getServicePort(String serviceName, Integer servicePort) {
method withScaledService (line 296) | public SELF withScaledService(String serviceBaseName, int numInstances) {
method withEnv (line 301) | public SELF withEnv(String key, String value) {
method withEnv (line 306) | public SELF withEnv(Map<String, String> env) {
method withPull (line 316) | public SELF withPull(boolean pull) {
method withTailChildContainers (line 326) | public SELF withTailChildContainers(boolean tailChildContainers) {
method withLogConsumer (line 340) | public SELF withLogConsumer(String serviceName, Consumer<OutputFrame> ...
method withBuild (line 350) | public SELF withBuild(boolean build) {
method withOptions (line 360) | public SELF withOptions(String... options) {
method withRemoveImages (line 370) | public SELF withRemoveImages(RemoveImages removeImages) {
method withRemoveVolumes (line 381) | public SELF withRemoveVolumes(boolean removeVolumes) {
method withStartupTimeout (line 391) | public SELF withStartupTimeout(Duration startupTimeout) {
method withCopyFilesInContainer (line 396) | public SELF withCopyFilesInContainer(String... fileCopyInclusions) {
method getContainerByServiceName (line 401) | public Optional<ContainerState> getContainerByServiceName(String servi...
method followLogs (line 405) | private void followLogs(String containerId, Consumer<OutputFrame> cons...
method self (line 409) | private SELF self() {
type RemoveImages (line 413) | public enum RemoveImages {
method RemoveImages (line 426) | RemoveImages(final String dockerRemoveImagesType) {
method dockerRemoveImagesType (line 430) | public String dockerRemoveImagesType() {
FILE: core/src/main/java/org/testcontainers/containers/DockerComposeFiles.java
class DockerComposeFiles (line 13) | public class DockerComposeFiles {
method DockerComposeFiles (line 17) | public DockerComposeFiles(List<File> composeFiles) {
method getDependencyImages (line 21) | public Set<String> getDependencyImages() {
method mergeServiceDependencyImageNames (line 27) | private Map<String, Set<String>> mergeServiceDependencyImageNames() {
method getImageNames (line 35) | private Set<String> getImageNames(Map<String, Set<String>> serviceToIm...
FILE: core/src/main/java/org/testcontainers/containers/DockerMcpGatewayContainer.java
class DockerMcpGatewayContainer (line 21) | public class DockerMcpGatewayContainer extends GenericContainer<DockerMc...
method DockerMcpGatewayContainer (line 37) | public DockerMcpGatewayContainer(String dockerImageName) {
method DockerMcpGatewayContainer (line 41) | public DockerMcpGatewayContainer(DockerImageName dockerImageName) {
method configure (line 49) | @Override
method containerIsCreated (line 69) | @Override
method withServer (line 80) | public DockerMcpGatewayContainer withServer(String server, List<String...
method withServer (line 86) | public DockerMcpGatewayContainer withServer(String server, String... t...
method withSecrets (line 92) | public DockerMcpGatewayContainer withSecrets(Map<String, String> secre...
method withSecret (line 97) | public DockerMcpGatewayContainer withSecret(String secretKey, String s...
method getEndpoint (line 102) | public String getEndpoint() {
FILE: core/src/main/java/org/testcontainers/containers/DockerModelRunnerContainer.java
class DockerModelRunnerContainer (line 24) | @Slf4j
method DockerModelRunnerContainer (line 33) | public DockerModelRunnerContainer(String image) {
method DockerModelRunnerContainer (line 37) | public DockerModelRunnerContainer(DockerImageName image) {
method containerIsStarted (line 43) | @Override
method withModel (line 77) | public DockerModelRunnerContainer withModel(String model) {
method getBaseEndpoint (line 87) | public String getBaseEndpoint() {
method getOpenAIEndpoint (line 96) | public String getOpenAIEndpoint() {
FILE: core/src/main/java/org/testcontainers/containers/ExecConfig.java
class ExecConfig (line 11) | @Builder
FILE: core/src/main/java/org/testcontainers/containers/ExecInContainerPattern.java
class ExecInContainerPattern (line 26) | @UtilityClass
method execInContainer (line 34) | @Deprecated
method execInContainer (line 45) | @Deprecated
method execInContainer (line 64) | public Container.ExecResult execInContainer(
method execInContainer (line 82) | public Container.ExecResult execInContainer(
method execInContainerWithUser (line 105) | @Deprecated
method execInContainerWithUser (line 131) | @Deprecated
method execInContainer (line 160) | public Container.ExecResult execInContainer(
method execInContainer (line 182) | public Container.ExecResult execInContainer(
method isRunning (line 256) | private boolean isRunning(InspectContainerResponse containerInfo) {
FILE: core/src/main/java/org/testcontainers/containers/FixedHostPortGenericContainer.java
class FixedHostPortGenericContainer (line 14) | public class FixedHostPortGenericContainer<SELF extends FixedHostPortGen...
method FixedHostPortGenericContainer (line 20) | @Deprecated
method withFixedExposedPort (line 31) | public SELF withFixedExposedPort(int hostPort, int containerPort) {
method withFixedExposedPort (line 42) | public SELF withFixedExposedPort(int hostPort, int containerPort, Inte...
FILE: core/src/main/java/org/testcontainers/containers/FutureContainer.java
class FutureContainer (line 9) | @Data
FILE: core/src/main/java/org/testcontainers/containers/GenericContainer.java
class GenericContainer (line 103) | @Data
method createContainerDef (line 201) | ContainerDef createContainerDef() {
method getContainerDef (line 205) | ContainerDef getContainerDef() {
method loadCreateContainerCmdCustomizers (line 209) | private Set<CreateContainerCmdModifier> loadCreateContainerCmdCustomiz...
method GenericContainer (line 220) | public GenericContainer(@NonNull final DockerImageName dockerImageName) {
method GenericContainer (line 224) | public GenericContainer(@NonNull final RemoteDockerImage image) {
method GenericContainer (line 234) | @Deprecated
method GenericContainer (line 239) | public GenericContainer(@NonNull final String dockerImageName) {
method GenericContainer (line 243) | public GenericContainer(@NonNull final Future<String> image) {
method GenericContainer (line 247) | GenericContainer(@NonNull final ContainerDef containerDef) {
method setImage (line 252) | public void setImage(Future<String> image) {
method getExposedPorts (line 257) | @Override
method setExposedPorts (line 266) | @Override
method dependsOn (line 277) | public SELF dependsOn(Startable... startables) {
method dependsOn (line 285) | public SELF dependsOn(List<? extends Startable> startables) {
method dependsOn (line 296) | public SELF dependsOn(Iterable<? extends Startable> startables) {
method getContainerId (line 301) | public String getContainerId() {
method start (line 308) | @Override
method doStart (line 320) | protected void doStart() {
method canBeReused (line 350) | @UnstableAPI
method tryStart (line 368) | private void tryStart() {
method hashCopiedFiles (line 555) | @VisibleForTesting
method hash (line 572) | @UnstableAPI
method findContainerForReuse (line 588) | @VisibleForTesting
method buildHostConfig (line 605) | private HostConfig buildHostConfig(HostConfig config) {
method connectToPortForwardingNetwork (line 615) | private void connectToPortForwardingNetwork(String networkMode) {
method stop (line 636) | @Override
method logger (line 665) | protected Logger logger() {
method createVolumeDirectory (line 675) | @Deprecated
method configure (line 696) | protected void configure() {}
method containerIsCreated (line 698) | @SuppressWarnings({ "EmptyMethod", "UnusedParameters" })
method containerIsStarting (line 701) | @SuppressWarnings({ "EmptyMethod", "UnusedParameters" })
method containerIsStarting (line 704) | @SuppressWarnings({ "EmptyMethod", "UnusedParameters" })
method containerIsStarted (line 710) | @SuppressWarnings({ "EmptyMethod", "UnusedParameters" })
method containerIsStarted (line 713) | @SuppressWarnings({ "EmptyMethod", "UnusedParameters" })
method containerIsStopping (line 724) | @SuppressWarnings({ "EmptyMethod", "UnusedParameters" })
method containerIsStopped (line 732) | @SuppressWarnings({ "EmptyMethod", "UnusedParameters" })
method getLivenessCheckPort (line 739) | @Deprecated
method getLivenessCheckPorts (line 758) | @NotNull
method getLivenessCheckPortNumbers (line 772) | @Override
method applyConfiguration (line 777) | private void applyConfiguration(CreateContainerCmd createCommand) {
method findLinksFromThisContainer (line 844) | private Set<Link> findLinksFromThisContainer(String alias, LinkableCon...
method findAllNetworksForLinkedContainers (line 856) | private Set<String> findAllNetworksForLinkedContainers(LinkableContain...
method waitingFor (line 873) | @Override
method getWaitStrategy (line 885) | protected WaitStrategy getWaitStrategy() {
method setWaitStrategy (line 889) | @Override
method waitUntilContainerStarted (line 901) | protected void waitUntilContainerStarted() {
method checkForEmulation (line 908) | private String checkForEmulation() {
method setCommand (line 937) | @Override
method setCommand (line 945) | @Override
method getEnvMap (line 950) | @Override
method getEnv (line 958) | @Override
method setEnv (line 967) | @Override
method addEnv (line 977) | @Override
method addFileSystemBind (line 985) | @Override
method withFileSystemBind (line 1013) | @Override
method withVolumesFrom (line 1022) | @Override
method addVolumesFrom (line 1028) | private void addVolumesFrom(Container container, BindMode mode) {
method addLink (line 1035) | @Deprecated
method addExposedPort (line 1041) | @Override
method addExposedPorts (line 1046) | @Override
method withExposedPorts (line 1054) | @Override
method addFixedExposedPort (line 1070) | protected void addFixedExposedPort(int hostPort, int containerPort) {
method addFixedExposedPort (line 1085) | protected void addFixedExposedPort(int hostPort, int containerPort, In...
method withEnv (line 1097) | @Override
method withEnv (line 1106) | @Override
method withLabel (line 1115) | @Override
method withLabels (line 1127) | @Override
method withCommand (line 1136) | @Override
method withCommand (line 1145) | @Override
method withExtraHost (line 1154) | @Override
method withNetworkMode (line 1160) | @Override
method withNetwork (line 1166) | @Override
method withNetworkAliases (line 1172) | @Override
method withImagePullPolicy (line 1178) | @Override
method withClasspathResourceMapping (line 1187) | @Override
method withClasspathResourceMapping (line 1199) | @Override
method withStartupTimeout (line 1220) | @Override
method withPrivilegedMode (line 1226) | @Override
method withMinimumRunningDuration (line 1235) | @Override
method withStartupCheckStrategy (line 1244) | @Override
method withWorkingDirectory (line 1253) | @Override
method withCopyFileToContainer (line 1262) | @Override
method withCopyToContainer (line 1274) | @Override
method getIpAddress (line 1286) | @Deprecated
method setDockerImageName (line 1294) | @Override
method getDockerImageName (line 1302) | @Override
method getTestHostIpAddress (line 1315) | @Override
method withLogConsumer (line 1358) | @Override
method copyFileFromContainer (line 1368) | @Override
method withStartupAttempts (line 1380) | public SELF withStartupAttempts(int attempts) {
method withCreateContainerCmdModifier (line 1393) | public SELF withCreateContainerCmdModifier(Consumer<CreateContainerCmd...
method withSharedMemorySize (line 1407) | public SELF withSharedMemorySize(Long bytes) {
method withTmpFs (line 1418) | public SELF withTmpFs(Map<String, String> mapping) {
method withReuse (line 1423) | @UnstableAPI
method withAccessToHost (line 1436) | public SELF withAccessToHost(boolean value) {
method equals (line 1441) | @Override
method hashCode (line 1446) | @Override
method getContainerName (line 1451) | @Override
method getNetwork (line 1456) | public Network getNetwork() {
method getBinds (line 1460) | @Override
method setBinds (line 1465) | @Override
method getCommandParts (line 1470) | @Override
method setCommandParts (line 1475) | @Override
method getNetworkAliases (line 1480) | public List<String> getNetworkAliases() {
method setNetworkAliases (line 1484) | public void setNetworkAliases(List<String> aliases) {
method getPortBindings (line 1488) | @Override
method setPortBindings (line 1495) | @Override
method setPrivilegedMode (line 1500) | public void setPrivilegedMode(boolean mode) {
method isPrivilegedMode (line 1504) | public boolean isPrivilegedMode() {
method getLabels (line 1508) | public Map<String, String> getLabels() {
method setLabels (line 1512) | public void setLabels(Map<String, String> labels) {
method getNetworkMode (line 1516) | public String getNetworkMode() {
method setNetworkMode (line 1520) | public void setNetworkMode(String networkMode) {
method setNetwork (line 1524) | public void setNetwork(Network network) {
FILE: core/src/main/java/org/testcontainers/containers/InternetProtocol.java
type InternetProtocol (line 6) | public enum InternetProtocol {
method toDockerNotation (line 10) | public String toDockerNotation() {
method fromDockerNotation (line 14) | public static InternetProtocol fromDockerNotation(String protocol) {
FILE: core/src/main/java/org/testcontainers/containers/LocalDockerCompose.java
class LocalDockerCompose (line 27) | class LocalDockerCompose implements DockerCompose {
method LocalDockerCompose (line 39) | public LocalDockerCompose(String composeExecutable, List<File> compose...
method withCommand (line 45) | @Override
method withEnv (line 51) | @Override
method invoke (line 57) | @Override
method logger (line 131) | private Logger logger() {
FILE: core/src/main/java/org/testcontainers/containers/Network.java
type Network (line 18) | public interface Network extends AutoCloseable {
method close (line 20) | @Override
method getId (line 26) | String getId();
method close (line 28) | @Override
method newNetwork (line 31) | static Network newNetwork() {
method builder (line 35) | static NetworkImpl.NetworkImplBuilder builder() {
class NetworkImpl (line 39) | @Builder
method getId (line 57) | @Override
method create (line 73) | private String create() {
method close (line 101) | @Override
FILE: core/src/main/java/org/testcontainers/containers/ParsedDockerComposeFile.java
class ParsedDockerComposeFile (line 31) | @Slf4j
method ParsedDockerComposeFile (line 44) | ParsedDockerComposeFile(File composeFile) {
method ParsedDockerComposeFile (line 70) | @VisibleForTesting
method parseAndValidate (line 79) | private void parseAndValidate() {
method validateNoContainerNameSpecified (line 132) | private void validateNoContainerNameSpecified(String serviceName, Map<...
method findServiceImageName (line 144) | private void findServiceImageName(String serviceName, Map<String, ?> s...
method findImageNamesInDockerfile (line 153) | private void findImageNamesInDockerfile(String serviceName, Map<String...
FILE: core/src/main/java/org/testcontainers/containers/PortForwardingContainer.java
type PortForwardingContainer (line 20) | public enum PortForwardingContainer {
method createSSHSession (line 40) | @SneakyThrows
method exposeHostPort (line 61) | @SneakyThrows
method exposeHostPort (line 66) | @SneakyThrows
method start (line 73) | void start() {
method getNetwork (line 77) | Optional<ContainerNetwork> getNetwork() {
method reset (line 84) | void reset() {
FILE: core/src/main/java/org/testcontainers/containers/SelinuxContext.java
type SelinuxContext (line 9) | @AllArgsConstructor
FILE: core/src/main/java/org/testcontainers/containers/SocatContainer.java
class SocatContainer (line 14) | public class SocatContainer extends GenericContainer<SocatContainer> {
method SocatContainer (line 18) | public SocatContainer() {
method SocatContainer (line 22) | public SocatContainer(final DockerImageName dockerImageName) {
method withTarget (line 28) | public SocatContainer withTarget(int exposedPort, String host) {
method withTarget (line 32) | public SocatContainer withTarget(int exposedPort, String host, int int...
method configure (line 38) | @Override
FILE: core/src/main/java/org/testcontainers/containers/VncRecordingContainer.java
class VncRecordingContainer (line 25) | @Getter
method VncRecordingContainer (line 47) | public VncRecordingContainer(@NonNull GenericContainer<?> targetContai...
method VncRecordingContainer (line 61) | public VncRecordingContainer(@NonNull Network network, @NonNull String...
method withVncPassword (line 73) | public VncRecordingContainer withVncPassword(@NonNull String vncPasswo...
method withVncPort (line 78) | public VncRecordingContainer withVncPort(int vncPort) {
method withVideoFormat (line 83) | public VncRecordingContainer withVideoFormat(VncRecordingFormat videoF...
method withFrameRate (line 90) | public VncRecordingContainer withFrameRate(int frameRate) {
method configure (line 95) | @Override
method streamRecording (line 115) | @SneakyThrows
method saveRecordingToFile (line 126) | @SneakyThrows
type VncRecordingFormat (line 133) | @RequiredArgsConstructor
method reencodeRecording (line 136) | @Override
method reencodeRecording (line 145) | @Override
method reencodeRecording (line 165) | abstract String reencodeRecording(VncRecordingContainer container, S...
FILE: core/src/main/java/org/testcontainers/containers/output/BaseConsumer.java
class BaseConsumer (line 8) | public abstract class BaseConsumer<SELF extends BaseConsumer<SELF>> impl...
method withRemoveAnsiCodes (line 14) | public SELF withRemoveAnsiCodes(boolean removeAnsiCodes) {
FILE: core/src/main/java/org/testcontainers/containers/output/FrameConsumerResultCallback.java
class FrameConsumerResultCallback (line 20) | public class FrameConsumerResultCallback extends ResultCallbackTemplate<...
method addConsumer (line 34) | public void addConsumer(OutputFrame.OutputType outputType, Consumer<Ou...
method onNext (line 38) | @Override
method onError (line 53) | @Override
method close (line 61) | @Override
method getCompletionLatch (line 77) | public CountDownLatch getCompletionLatch() {
class LineConsumer (line 81) | private static class LineConsumer {
method LineConsumer (line 93) | LineConsumer(final OutputFrame.OutputType type, final Consumer<Outpu...
method processFrame (line 98) | void processFrame(final byte[] b) {
method processBuffer (line 128) | void processBuffer() {
method end (line 134) | void end() {
method consume (line 138) | private void consume() {
method processAnsiColorCodes (line 145) | private String processAnsiColorCodes(final String utf8String) {
FILE: core/src/main/java/org/testcontainers/containers/output/OutputFrame.java
class OutputFrame (line 11) | public class OutputFrame {
method OutputFrame (line 19) | public OutputFrame(final OutputType type, final byte[] bytes) {
method getType (line 24) | public OutputType getType() {
method getBytes (line 28) | public byte[] getBytes() {
method getUtf8String (line 32) | public String getUtf8String() {
method getUtf8StringWithoutLineEnding (line 36) | public String getUtf8StringWithoutLineEnding() {
method determineLineEndingLength (line 43) | private static int determineLineEndingLength(final byte[] bytes) {
type OutputType (line 55) | public enum OutputType {
method forStreamType (line 60) | public static OutputType forStreamType(StreamType streamType) {
method forFrame (line 73) | public static OutputFrame forFrame(Frame frame) {
FILE: core/src/main/java/org/testcontainers/containers/output/Slf4jLogConsumer.java
class Slf4jLogConsumer (line 12) | public class Slf4jLogConsumer extends BaseConsumer<Slf4jLogConsumer> {
method Slf4jLogConsumer (line 22) | public Slf4jLogConsumer(Logger logger) {
method Slf4jLogConsumer (line 26) | public Slf4jLogConsumer(Logger logger, boolean separateOutputStreams) {
method withPrefix (line 31) | public Slf4jLogConsumer withPrefix(String prefix) {
method withMdc (line 36) | public Slf4jLogConsumer withMdc(String key, String value) {
method withMdc (line 41) | public Slf4jLogConsumer withMdc(Map<String, String> mdc) {
method withSeparateOutputStreams (line 46) | public Slf4jLogConsumer withSeparateOutputStreams() {
method accept (line 51) | @Override
FILE: core/src/main/java/org/testcontainers/containers/output/ToStringConsumer.java
class ToStringConsumer (line 12) | public class ToStringConsumer extends BaseConsumer<ToStringConsumer> {
method accept (line 16) | @Override
method toUtf8String (line 28) | public String toUtf8String() {
method toString (line 33) | public String toString(Charset charset) {
FILE: core/src/main/java/org/testcontainers/containers/output/WaitingConsumer.java
class WaitingConsumer (line 15) | public class WaitingConsumer extends BaseConsumer<WaitingConsumer> {
method accept (line 21) | @Override
method getFrames (line 32) | public LinkedBlockingDeque<OutputFrame> getFrames() {
method waitUntil (line 44) | public void waitUntil(Predicate<OutputFrame> predicate) throws Timeout...
method waitUntil (line 59) | public void waitUntil(Predicate<OutputFrame> predicate, int limit, Tim...
method waitUntil (line 74) | public void waitUntil(Predicate<OutputFrame> predicate, long limit, Ti...
method waitUntil (line 81) | private void waitUntil(Predicate<OutputFrame> predicate, long timeoutL...
method waitUntilEnd (line 119) | public void waitUntilEnd() {
method waitUntilEnd (line 134) | public void waitUntilEnd(long limit, TimeUnit limitUnit) throws Timeou...
method waitUntilEnd (line 140) | private void waitUntilEnd(Long expiry) throws TimeoutException {
FILE: core/src/main/java/org/testcontainers/containers/startupcheck/IndefiniteWaitOneShotStartupCheckStrategy.java
class IndefiniteWaitOneShotStartupCheckStrategy (line 14) | public class IndefiniteWaitOneShotStartupCheckStrategy extends OneShotSt...
method waitUntilStartupSuccessful (line 16) | @Override
FILE: core/src/main/java/org/testcontainers/containers/startupcheck/IsRunningStartupCheckStrategy.java
class IsRunningStartupCheckStrategy (line 12) | public class IsRunningStartupCheckStrategy extends StartupCheckStrategy {
method waitUntilStartupSuccessful (line 14) | @SuppressWarnings("deprecation")
method checkStartupState (line 24) | @Override
method checkState (line 30) | private StartupStatus checkState(InspectContainerResponse.ContainerSta...
FILE: core/src/main/java/org/testcontainers/containers/startupcheck/MinimumDurationRunningStartupCheckStrategy.java
class MinimumDurationRunningStartupCheckStrategy (line 15) | public class MinimumDurationRunningStartupCheckStrategy extends StartupC...
method MinimumDurationRunningStartupCheckStrategy (line 20) | public MinimumDurationRunningStartupCheckStrategy(@NotNull Duration mi...
method checkStartupState (line 24) | @Override
FILE: core/src/main/java/org/testcontainers/containers/startupcheck/OneShotStartupCheckStrategy.java
class OneShotStartupCheckStrategy (line 11) | public class OneShotStartupCheckStrategy extends StartupCheckStrategy {
method checkStartupState (line 13) | @Override
FILE: core/src/main/java/org/testcontainers/containers/startupcheck/StartupCheckStrategy.java
class StartupCheckStrategy (line 16) | public abstract class StartupCheckStrategy {
method withTimeout (line 26) | @SuppressWarnings("unchecked")
method waitUntilStartupSuccessful (line 36) | @Deprecated
method waitUntilStartupSuccessful (line 41) | public boolean waitUntilStartupSuccessful(DockerClient dockerClient, S...
method checkStartupState (line 66) | public abstract StartupStatus checkStartupState(DockerClient dockerCli...
method getCurrentState (line 68) | protected InspectContainerResponse.ContainerState getCurrentState(Dock...
type StartupStatus (line 72) | public enum StartupStatus {
FILE: core/src/main/java/org/testcontainers/containers/traits/LinkableContainer.java
type LinkableContainer (line 8) | @Deprecated
method getContainerName (line 10) | String getContainerName();
FILE: core/src/main/java/org/testcontainers/containers/wait/internal/ExternalPortListeningCheck.java
class ExternalPortListeningCheck (line 15) | @RequiredArgsConstructor
method call (line 22) | @Override
FILE: core/src/main/java/org/testcontainers/containers/wait/internal/InternalCommandPortListeningCheck.java
class InternalCommandPortListeningCheck (line 16) | @RequiredArgsConstructor
method call (line 24) | @Override
FILE: core/src/main/java/org/testcontainers/containers/wait/strategy/AbstractWaitStrategy.java
class AbstractWaitStrategy (line 15) | public abstract class AbstractWaitStrategy implements WaitStrategy {
method newThread (line 21) | @Override
method waitUntilReady (line 49) | @Override
method waitUntilReady (line 58) | protected abstract void waitUntilReady();
method withStartupTimeout (line 67) | public WaitStrategy withStartupTimeout(Duration startupTimeout) {
method getLivenessCheckPorts (line 75) | protected Set<Integer> getLivenessCheckPorts() {
method getRateLimiter (line 82) | protected RateLimiter getRateLimiter() {
method withRateLimiter (line 92) | public WaitStrategy withRateLimiter(RateLimiter rateLimiter) {
FILE: core/src/main/java/org/testcontainers/containers/wait/strategy/DockerHealthcheckWaitStrategy.java
class DockerHealthcheckWaitStrategy (line 14) | public class DockerHealthcheckWaitStrategy extends AbstractWaitStrategy {
method waitUntilReady (line 16) | @Override
FILE: core/src/main/java/org/testcontainers/containers/wait/strategy/HostPortWaitStrategy.java
class HostPortWaitStrategy (line 26) | @Slf4j
method waitUntilReady (line 31) | @Override
method getInternalPorts (line 120) | private Set<Integer> getInternalPorts(Set<Integer> externalLivenessChe...
method forPorts (line 127) | public HostPortWaitStrategy forPorts(int... ports) {
FILE: core/src/main/java/org/testcontainers/containers/wait/strategy/HttpWaitStrategy.java
class HttpWaitStrategy (line 39) | @Slf4j
method forStatusCode (line 82) | public HttpWaitStrategy forStatusCode(int statusCode) {
method forStatusCodeMatching (line 92) | public HttpWaitStrategy forStatusCodeMatching(Predicate<Integer> statu...
method forPath (line 103) | public HttpWaitStrategy forPath(String path) {
method forPort (line 114) | public HttpWaitStrategy forPort(int port) {
method usingTls (line 124) | public HttpWaitStrategy usingTls() {
method withMethod (line 135) | public HttpWaitStrategy withMethod(String method) {
method allowInsecure (line 145) | public HttpWaitStrategy allowInsecure() {
method withBasicCredentials (line 157) | public HttpWaitStrategy withBasicCredentials(String username, String p...
method withHeader (line 169) | public HttpWaitStrategy withHeader(String name, String value) {
method withHeaders (line 179) | public HttpWaitStrategy withHeaders(Map<String, String> headers) {
method withReadTimeout (line 190) | public HttpWaitStrategy withReadTimeout(Duration timeout) {
method forResponsePredicate (line 203) | public HttpWaitStrategy forResponsePredicate(Predicate<String> respons...
method waitUntilReady (line 208) | @Override
method openConnection (line 330) | private HttpURLConnection openConnection(final String uri) throws IOEx...
method buildLivenessUri (line 385) | private URI buildLivenessUri(int livenessCheckPort) {
method buildAuthString (line 404) | private String buildAuthString(String username, String password) {
method getResponseBody (line 408) | private String getResponseBody(HttpURLConnection connection) throws IO...
FILE: core/src/main/java/org/testcontainers/containers/wait/strategy/LogMessageWaitStrategy.java
class LogMessageWaitStrategy (line 15) | public class LogMessageWaitStrategy extends AbstractWaitStrategy {
method waitUntilReady (line 21) | @Override
method withRegEx (line 52) | public LogMessageWaitStrategy withRegEx(String regEx) {
method withTimes (line 57) | public LogMessageWaitStrategy withTimes(int times) {
FILE: core/src/main/java/org/testcontainers/containers/wait/strategy/ShellStrategy.java
class ShellStrategy (line 9) | public class ShellStrategy extends AbstractWaitStrategy {
method withCommand (line 13) | public ShellStrategy withCommand(String command) {
method waitUntilReady (line 18) | @Override
FILE: core/src/main/java/org/testcontainers/containers/wait/strategy/Wait.java
class Wait (line 7) | public class Wait {
method defaultWaitStrategy (line 14) | public static WaitStrategy defaultWaitStrategy() {
method forListeningPort (line 24) | public static HostPortWaitStrategy forListeningPort() {
method forListeningPorts (line 34) | public static HostPortWaitStrategy forListeningPorts(int... ports) {
method forHttp (line 45) | public static HttpWaitStrategy forHttp(String path) {
method forHttps (line 56) | public static HttpWaitStrategy forHttps(String path) {
method forLogMessage (line 67) | public static LogMessageWaitStrategy forLogMessage(String regex, int t...
method forHealthcheck (line 76) | public static DockerHealthcheckWaitStrategy forHealthcheck() {
method forSuccessfulCommand (line 86) | public static ShellStrategy forSuccessfulCommand(String command) {
FILE: core/src/main/java/org/testcontainers/containers/wait/strategy/WaitAllStrategy.java
class WaitAllStrategy (line 10) | public class WaitAllStrategy implements WaitStrategy {
type Mode (line 12) | public enum Mode {
method WaitAllStrategy (line 41) | public WaitAllStrategy() {
method WaitAllStrategy (line 45) | public WaitAllStrategy(Mode mode) {
method waitUntilReady (line 49) | @Override
method waitUntilNestedStrategiesAreReady (line 64) | private void waitUntilNestedStrategiesAreReady(WaitStrategyTarget wait...
method withStrategy (line 70) | public WaitAllStrategy withStrategy(WaitStrategy strategy) {
method withStartupTimeout (line 79) | @Override
method applyStartupTimeout (line 95) | private void applyStartupTimeout(WaitStrategy childStrategy) {
FILE: core/src/main/java/org/testcontainers/containers/wait/strategy/WaitStrategy.java
type WaitStrategy (line 5) | public interface WaitStrategy {
method waitUntilReady (line 6) | void waitUntilReady(WaitStrategyTarget waitStrategyTarget);
method withStartupTimeout (line 8) | WaitStrategy withStartupTimeout(Duration startupTimeout);
FILE: core/src/main/java/org/testcontainers/containers/wait/strategy/WaitStrategyTarget.java
type WaitStrategyTarget (line 8) | public interface WaitStrategyTarget extends ContainerState {
method getLivenessCheckPortNumbers (line 12) | default Set<Integer> getLivenessCheckPortNumbers() {
FILE: core/src/main/java/org/testcontainers/core/CreateContainerCmdModifier.java
type CreateContainerCmdModifier (line 8) | public interface CreateContainerCmdModifier {
method modify (line 12) | CreateContainerCmd modify(CreateContainerCmd createContainerCmd);
FILE: core/src/main/java/org/testcontainers/dockerclient/AuditLoggingDockerClient.java
class AuditLoggingDockerClient (line 26) | @Slf4j
method AuditLoggingDockerClient (line 33) | public AuditLoggingDockerClient(DockerClient wrappedClient) {
method createContainerCmd (line 37) | @Override
method startContainerCmd (line 47) | @Override
method removeContainerCmd (line 57) | @Override
method stopContainerCmd (line 67) | @Override
method killContainerCmd (line 77) | @Override
method createNetworkCmd (line 87) | @Override
method removeNetworkCmd (line 97) | @Override
method wrappedCommand (line 107) | private <T extends SyncDockerCmd<R>, R> T wrappedCommand(
type InterceptedMethods (line 136) | @SuppressWarnings("unused")
method createContainerCmd (line 138) | CreateContainerCmd createContainerCmd(String image);
method startContainerCmd (line 140) | StartContainerCmd startContainerCmd(String containerId);
method removeContainerCmd (line 142) | RemoveContainerCmd removeContainerCmd(String containerId);
method stopContainerCmd (line 144) | StopContainerCmd stopContainerCmd(String containerId);
method killContainerCmd (line 146) | KillContainerCmd killContainerCmd(String containerId);
method createNetworkCmd (line 148) | CreateNetworkCmd createNetworkCmd();
method removeNetworkCmd (line 150) | RemoveNetworkCmd removeNetworkCmd(String networkId);
FILE: core/src/main/java/org/testcontainers/dockerclient/AuthDelegatingDockerClientConfig.java
class AuthDelegatingDockerClientConfig (line 19) | @Slf4j
method AuthDelegatingDockerClientConfig (line 22) | public AuthDelegatingDockerClientConfig(DockerClientConfig delegate) {
method effectiveAuthConfig (line 26) | @Override
FILE: core/src/main/java/org/testcontainers/dockerclient/DockerClientConfigUtils.java
class DockerClientConfigUtils (line 13) | @Slf4j
method getDockerHostIpAddress (line 50) | @Deprecated
FILE: core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java
class DockerClientProviderStrategy (line 69) | @Slf4j
method getDescription (line 91) | public abstract String getDescription();
method isApplicable (line 93) | protected boolean isApplicable() {
method isPersistable (line 97) | protected boolean isPersistable() {
method allowUserOverrides (line 101) | public boolean allowUserOverrides() {
method getRemoteDockerUnixSocketPath (line 108) | public String getRemoteDockerUnixSocketPath() {
method getPriority (line 115) | protected int getPriority() {
method getTransportConfig (line 122) | public abstract TransportConfig getTransportConfig() throws InvalidCon...
method getClient (line 129) | @Deprecated
method test (line 155) | @UnstableAPI
method getFirstValidStrategy (line 227) | public static DockerClientProviderStrategy getFirstValidStrategy(List<...
method tryOutStrategy (line 280) | private static boolean tryOutStrategy(List<String> configurationFailur...
method loadConfiguredStrategy (line 348) | private static Optional<? extends DockerClientProviderStrategy> loadCo...
method getClientForConfig (line 388) | public static DockerClient getClientForConfig(TransportConfig transpor...
method getDockerHostIpAddress (line 434) | public synchronized String getDockerHostIpAddress() {
method resolveDockerHostIpAddress (line 446) | @VisibleForTesting
FILE: core/src/main/java/org/testcontainers/dockerclient/DockerDesktopClientProviderStrategy.java
class DockerDesktopClientProviderStrategy (line 23) | @Slf4j
method resolveSocketPath (line 33) | private Path resolveSocketPath() {
method getDescription (line 42) | @Override
method getTransportConfig (line 47) | @Override
method getPriority (line 52) | @Override
method isPersistable (line 57) | @Override
method getRemoteDockerUnixSocketPath (line 62) | @Override
method isApplicable (line 67) | @Override
method tryFolder (line 72) | private Optional<Path> tryFolder(Path path) {
FILE: core/src/main/java/org/testcontainers/dockerclient/DockerMachineClientProviderStrategy.java
class DockerMachineClientProviderStrategy (line 20) | @Slf4j
method resolveTransportConfig (line 27) | private TransportConfig resolveTransportConfig() throws InvalidConfigu...
method isApplicable (line 60) | @Override
method isPersistable (line 79) | @Override
method getPriority (line 84) | @Override
method getDescription (line 89) | @Override
FILE: core/src/main/java/org/testcontainers/dockerclient/EnvironmentAndSystemPropertyClientProviderStrategy.java
class EnvironmentAndSystemPropertyClientProviderStrategy (line 22) | @Deprecated
method EnvironmentAndSystemPropertyClientProviderStrategy (line 32) | public EnvironmentAndSystemPropertyClientProviderStrategy() {
method EnvironmentAndSystemPropertyClientProviderStrategy (line 37) | EnvironmentAndSystemPropertyClientProviderStrategy(DefaultDockerClient...
method getSetting (line 60) | private Optional<String> getSetting(final String name) {
method getTransportConfig (line 64) | @Override
method getPriority (line 73) | @Override
method getDescription (line 78) | @Override
method isPersistable (line 86) | @Override
FILE: core/src/main/java/org/testcontainers/dockerclient/HeadersAddingDockerHttpClient.java
class HeadersAddingDockerHttpClient (line 11) | @RequiredArgsConstructor
method execute (line 20) | @Override
FILE: core/src/main/java/org/testcontainers/dockerclient/InvalidConfigurationException.java
class InvalidConfigurationException (line 6) | public class InvalidConfigurationException extends RuntimeException {
method InvalidConfigurationException (line 8) | public InvalidConfigurationException(String s) {
method InvalidConfigurationException (line 12) | public InvalidConfigurationException(String message, Throwable cause) {
FILE: core/src/main/java/org/testcontainers/dockerclient/LogToStringContainerCallback.java
class LogToStringContainerCallback (line 10) | @Deprecated
method onNext (line 15) | @Override
method toString (line 20) | @Override
FILE: core/src/main/java/org/testcontainers/dockerclient/NpipeSocketClientProviderStrategy.java
class NpipeSocketClientProviderStrategy (line 11) | @Deprecated
method getTransportConfig (line 20) | @Override
method isApplicable (line 25) | @Override
method getDescription (line 30) | @Override
method getPriority (line 35) | @Override
FILE: core/src/main/java/org/testcontainers/dockerclient/RootlessDockerClientProviderStrategy.java
class RootlessDockerClientProviderStrategy (line 21) | @Deprecated
method resolveSocketPath (line 31) | private Path resolveSocketPath() {
method tryEnv (line 43) | private Optional<Path> tryEnv() {
method tryFolder (line 62) | private Optional<Path> tryFolder(Path path) {
method getTransportConfig (line 75) | @Override
method isApplicable (line 80) | @Override
method getDescription (line 85) | @Override
method getPriority (line 90) | @Override
type LibC (line 95) | private interface LibC extends Library {
method getuid (line 98) | int getuid();
FILE: core/src/main/java/org/testcontainers/dockerclient/TestcontainersHostPropertyClientProviderStrategy.java
class TestcontainersHostPropertyClientProviderStrategy (line 15) | @Deprecated
method TestcontainersHostPropertyClientProviderStrategy (line 22) | public TestcontainersHostPropertyClientProviderStrategy() {
method TestcontainersHostPropertyClientProviderStrategy (line 26) | TestcontainersHostPropertyClientProviderStrategy(DefaultDockerClientCo...
method getDescription (line 37) | @Override
method getTransportConfig (line 42) | @Override
method isApplicable (line 51) | @Override
method getPriority (line 56) | @Override
method isPersistable (line 61) | @Override
method allowUserOverrides (line 66) | @Override
FILE: core/src/main/java/org/testcontainers/dockerclient/TransportConfig.java
class TransportConfig (line 10) | @Builder
FILE: core/src/main/java/org/testcontainers/dockerclient/UnixSocketClientProviderStrategy.java
class UnixSocketClientProviderStrategy (line 15) | @Deprecated
method getTransportConfig (line 26) | @Override
method isApplicable (line 45) | @Override
method getDescription (line 50) | @Override
method getPriority (line 55) | @Override
FILE: core/src/main/java/org/testcontainers/images/AbstractImagePullPolicy.java
class AbstractImagePullPolicy (line 8) | @Slf4j
method shouldPull (line 13) | @Override
method shouldPullCached (line 47) | protected abstract boolean shouldPullCached(DockerImageName imageName,...
FILE: core/src/main/java/org/testcontainers/images/AgeBasedPullPolicy.java
class AgeBasedPullPolicy (line 13) | @Slf4j
method shouldPullCached (line 19) | @Override
FILE: core/src/main/java/org/testcontainers/images/AlwaysPullPolicy.java
class AlwaysPullPolicy (line 11) | @Slf4j
method shouldPull (line 15) | @Override
FILE: core/src/main/java/org/testcontainers/images/DefaultPullPolicy.java
class DefaultPullPolicy (line 10) | @Slf4j
method shouldPullCached (line 14) | @Override
FILE: core/src/main/java/org/testcontainers/images/ImageData.java
class ImageData (line 12) | @Value
method from (line 19) | static ImageData from(InspectImageResponse inspectImageResponse) {
method from (line 27) | static ImageData from(Image image) {
FILE: core/src/main/java/org/testcontainers/images/ImagePullPolicy.java
type ImagePullPolicy (line 5) | public interface ImagePullPolicy {
method shouldPull (line 6) | boolean shouldPull(DockerImageName imageName);
FILE: core/src/main/java/org/testcontainers/images/LocalImagesCache.java
type LocalImagesCache (line 20) | @Slf4j
method get (line 30) | public ImageData get(DockerImageName imageName) {
method refreshCache (line 35) | public Optional<ImageData> refreshCache(DockerImageName imageName) {
method maybeInitCache (line 59) | private synchronized boolean maybeInitCache(DockerClient dockerClient) {
method populateFromList (line 73) | private void populateFromList(List<Image> images) {
FILE: core/src/main/java/org/testcontainers/images/LoggedPullImageResultCallback.java
class LoggedPullImageResultCallback (line 20) | class LoggedPullImageResultCallback extends PullImageResultCallback {
method LoggedPullImageResultCallback (line 38) | LoggedPullImageResultCallback(final Logger logger) {
method onStart (line 42) | @Override
method onNext (line 50) | @Override
method onComplete (line 108) | @Override
method downloadedLayerSize (line 126) | private long downloadedLayerSize() {
method totalLayerSize (line 130) | private long totalLayerSize() {
FILE: core/src/main/java/org/testcontainers/images/ParsedDockerfile.java
class ParsedDockerfile (line 21) | @Slf4j
method ParsedDockerfile (line 34) | public ParsedDockerfile(Path dockerFilePath) {
method ParsedDockerfile (line 39) | @VisibleForTesting
method read (line 45) | private List<String> read() {
method parse (line 59) | private Set<String> parse(List<String> lines) {
FILE: core/src/main/java/org/testcontainers/images/PullPolicy.java
class PullPolicy (line 14) | @Slf4j
method defaultPolicy (line 28) | public static synchronized ImagePullPolicy defaultPolicy() {
method alwaysPull (line 68) | public static ImagePullPolicy alwaysPull() {
method ageBased (line 76) | public static ImagePullPolicy ageBased(Duration maxAge) {
FILE: core/src/main/java/org/testcontainers/images/RemoteDockerImage.java
class RemoteDockerImage (line 35) | @ToString
method RemoteDockerImage (line 55) | public RemoteDockerImage(DockerImageName dockerImageName) {
method RemoteDockerImage (line 59) | @Deprecated
method RemoteDockerImage (line 64) | @Deprecated
method RemoteDockerImage (line 69) | public RemoteDockerImage(@NonNull Future<String> imageFuture) {
method resolve (line 73) | @Override
method tryImagePullCommand (line 132) | private Callable<Boolean> tryImagePullCommand(
method pullImage (line 158) | private TimeLimitedLoggedPullImageResultCallback pullImage(PullImageCm...
method getImageName (line 171) | private DockerImageName getImageName() throws InterruptedException, Ex...
method imageNameToString (line 178) | @ToString.Include(name = "imageName", rank = 1)
FILE: core/src/main/java/org/testcontainers/images/TimeLimitedLoggedPullImageResultCallback.java
class TimeLimitedLoggedPullImageResultCallback (line 24) | public class TimeLimitedLoggedPullImageResultCallback extends LoggedPull...
method TimeLimitedLoggedPullImageResultCallback (line 50) | public TimeLimitedLoggedPullImageResultCallback(Logger logger) {
method awaitCompletion (line 55) | @Override
method awaitCompletion (line 62) | @Override
method onNext (line 68) | @Override
method onStart (line 76) | @Override
method onError (line 82) | @Override
method onComplete (line 88) | @Override
method resetProgressWatchdog (line 99) | private void resetProgressWatchdog(boolean isFinished) {
method abortPull (line 113) | private void abortPull() {
FILE: core/src/main/java/org/testcontainers/images/builder/ImageFromDockerfile.java
class ImageFromDockerfile (line 43) | @Slf4j
method ImageFromDockerfile (line 72) | public ImageFromDockerfile() {
method ImageFromDockerfile (line 76) | public ImageFromDockerfile(String dockerImageName) {
method ImageFromDockerfile (line 80) | public ImageFromDockerfile(String dockerImageName, boolean deleteOnExi...
method withFileFromTransferable (line 85) | @Override
method resolve (line 96) | @Override
method configure (line 173) | protected void configure(BuildImageCmd buildImageCmd) {
method prePullDependencyImages (line 192) | private void prePullDependencyImages(Set<String> imagesToPull) {
method applyBuildArgsToImageName (line 216) | private String applyBuildArgsToImageName(String imageName) {
method withBuildArg (line 227) | public ImageFromDockerfile withBuildArg(final String key, final String...
method withBuildArgs (line 232) | public ImageFromDockerfile withBuildArgs(final Map<String, String> arg...
method withTarget (line 242) | public ImageFromDockerfile withTarget(String target) {
method withDockerfilePath (line 255) | @Deprecated
method withDockerfile (line 267) | public ImageFromDockerfile withDockerfile(Path dockerfile) {
method withBuildImageCmdModifier (line 279) | public ImageFromDockerfile withBuildImageCmdModifier(Consumer<BuildIma...
FILE: core/src/main/java/org/testcontainers/images/builder/Transferable.java
type Transferable (line 11) | public interface Transferable {
method of (line 16) | static Transferable of(String string) {
method of (line 20) | static Transferable of(String string, int fileMode) {
method of (line 24) | static Transferable of(byte[] bytes) {
method of (line 28) | static Transferable of(byte[] bytes, int fileMode) {
method getFileMode (line 58) | default int getFileMode() {
method getSize (line 67) | long getSize();
method transferTo (line 75) | default void transferTo(TarArchiveOutputStream tarArchiveOutputStream,...
method getBytes (line 89) | default byte[] getBytes() {
method getDescription (line 93) | default String getDescription() {
method updateChecksum (line 97) | default void updateChecksum(Checksum checksum) {
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/DockerfileBuilder.java
class DockerfileBuilder (line 23) | @Data
method build (line 43) | public String build() {
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/statement/KeyValuesStatement.java
class KeyValuesStatement (line 10) | public class KeyValuesStatement extends Statement {
method KeyValuesStatement (line 16) | public KeyValuesStatement(String type, Map<String, String> entries) {
method appendArguments (line 21) | @Override
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/statement/MultiArgsStatement.java
class MultiArgsStatement (line 8) | public class MultiArgsStatement extends Statement {
method MultiArgsStatement (line 14) | public MultiArgsStatement(String type, String... args) {
method appendArguments (line 19) | @Override
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/statement/RawStatement.java
class RawStatement (line 3) | public class RawStatement extends Statement {
method RawStatement (line 7) | public RawStatement(String type, String rawValue) {
method appendArguments (line 12) | @Override
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/statement/SingleArgumentStatement.java
class SingleArgumentStatement (line 3) | public class SingleArgumentStatement extends Statement {
method SingleArgumentStatement (line 7) | public SingleArgumentStatement(String type, String argument) {
method appendArguments (line 12) | @Override
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/statement/Statement.java
class Statement (line 5) | @Data
method appendArguments (line 10) | public abstract void appendArguments(StringBuilder dockerfileStringBui...
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/AddStatementTrait.java
type AddStatementTrait (line 5) | public interface AddStatementTrait<SELF extends AddStatementTrait<SELF> ...
method add (line 6) | default SELF add(String source, String destination) {
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/CmdStatementTrait.java
type CmdStatementTrait (line 6) | public interface CmdStatementTrait<SELF extends CmdStatementTrait<SELF> ...
method cmd (line 7) | default SELF cmd(String command) {
method cmd (line 11) | default SELF cmd(String... commandParts) {
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/CopyStatementTrait.java
type CopyStatementTrait (line 5) | public interface CopyStatementTrait<SELF extends CopyStatementTrait<SELF...
method copy (line 6) | default SELF copy(String source, String destination) {
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/DockerfileBuilderTrait.java
type DockerfileBuilderTrait (line 7) | public interface DockerfileBuilderTrait<SELF extends DockerfileBuilderTr...
method getStatements (line 8) | List<Statement> getStatements();
method withStatement (line 10) | default SELF withStatement(Statement statement) {
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/EntryPointStatementTrait.java
type EntryPointStatementTrait (line 6) | public interface EntryPointStatementTrait<SELF extends EntryPointStateme...
method entryPoint (line 7) | default SELF entryPoint(String command) {
method entryPoint (line 11) | default SELF entryPoint(String... commandParts) {
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/EnvStatementTrait.java
type EnvStatementTrait (line 8) | public interface EnvStatementTrait<SELF extends EnvStatementTrait<SELF> ...
method env (line 9) | default SELF env(String key, String value) {
method env (line 13) | default SELF env(Map<String, String> entries) {
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/ExposeStatementTrait.java
type ExposeStatementTrait (line 8) | public interface ExposeStatementTrait<SELF extends ExposeStatementTrait<...
method expose (line 9) | default SELF expose(Integer... ports) {
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/FromStatementTrait.java
type FromStatementTrait (line 6) | public interface FromStatementTrait<SELF extends FromStatementTrait<SELF...
method from (line 7) | default SELF from(String dockerImageName) {
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/LabelStatementTrait.java
type LabelStatementTrait (line 8) | public interface LabelStatementTrait<SELF extends LabelStatementTrait<SE...
method label (line 9) | default SELF label(String key, String value) {
method label (line 13) | default SELF label(Map<String, String> entries) {
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/RunStatementTrait.java
type RunStatementTrait (line 6) | public interface RunStatementTrait<SELF extends RunStatementTrait<SELF> ...
method run (line 7) | default SELF run(String... commandParts) {
method run (line 11) | default SELF run(String command) {
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/UserStatementTrait.java
type UserStatementTrait (line 5) | public interface UserStatementTrait<SELF extends UserStatementTrait<SELF...
method user (line 6) | default SELF user(String user) {
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/VolumeStatementTrait.java
type VolumeStatementTrait (line 5) | public interface VolumeStatementTrait<SELF extends VolumeStatementTrait<...
method volume (line 6) | default SELF volume(String... volumes) {
FILE: core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/WorkdirStatementTrait.java
type WorkdirStatementTrait (line 5) | public interface WorkdirStatementTrait<SELF extends WorkdirStatementTrai...
method workDir (line 6) | default SELF workDir(String workdir) {
FILE: core/src/main/java/org/testcontainers/images/builder/traits/BuildContextBuilderTrait.java
type BuildContextBuilderTrait (line 9) | public interface BuildContextBuilderTrait<SELF extends BuildContextBuild...
method withFileFromTransferable (line 10) | SELF withFileFromTransferable(String path, Transferable transferable);
FILE: core/src/main/java/org/testcontainers/images/builder/traits/ClasspathTrait.java
type ClasspathTrait (line 11) | public interface ClasspathTrait<SELF extends ClasspathTrait<SELF> & Buil...
method withFileFromClasspath (line 12) | default SELF withFileFromClasspath(String path, String resourcePath) {
FILE: core/src/main/java/org/testcontainers/images/builder/traits/DockerfileTrait.java
type DockerfileTrait (line 13) | public interface DockerfileTrait<
method withDockerfileFromBuilder (line 16) | default SELF withDockerfileFromBuilder(Consumer<DockerfileBuilder> bui...
FILE: core/src/main/java/org/testcontainers/images/builder/traits/FilesTrait.java
type FilesTrait (line 12) | public interface FilesTrait<SELF extends FilesTrait<SELF> & BuildContext...
method withFileFromFile (line 19) | default SELF withFileFromFile(String path, File file) {
method withFileFromPath (line 29) | default SELF withFileFromPath(String path, Path filePath) {
method withFileFromFile (line 40) | default SELF withFileFromFile(String path, File file, Integer mode) {
method withFileFromPath (line 51) | default SELF withFileFromPath(String path, Path filePath, Integer mode) {
FILE: core/src/main/java/org/testcontainers/images/builder/traits/StringsTrait.java
type StringsTrait (line 11) | public interface StringsTrait<SELF extends StringsTrait<SELF> & BuildCon...
method withFileFromString (line 12) | default SELF withFileFromString(String path, String content) {
FILE: core/src/main/java/org/testcontainers/jib/JibDockerClient.java
class JibDockerClient (line 29) | @UnstableAPI
method instance (line 36) | public static JibDockerClient instance() {
method supported (line 44) | @Override
method load (line 49) | @Override
method save (line 64) | @Override
method inspect (line 77) | @Override
FILE: core/src/main/java/org/testcontainers/jib/JibImage.java
class JibImage (line 20) | public class JibImage extends LazyFuture<String> {
method JibImage (line 36) | public JibImage(String baseImage, Function<JibContainerBuilder, JibCon...
method resolve (line 41) | @SneakyThrows
FILE: core/src/main/java/org/testcontainers/jib/JibImageDetails.java
class JibImageDetails (line 10) | class JibImageDetails implements ImageDetails {
method JibImageDetails (line 18) | public JibImageDetails(long size, String imageId, List<String> layers) {
method getSize (line 24) | @Override
method getImageId (line 29) | @Override
method getDiffIds (line 34) | @Override
FILE: core/src/main/java/org/testcontainers/lifecycle/Startable.java
type Startable (line 6) | public interface Startable extends AutoCloseable {
method getDependencies (line 7) | default Set<Startable> getDependencies() {
method start (line 11) | void start();
method stop (line 13) | void stop();
method close (line 15) | @Override
FILE: core/src/main/java/org/testcontainers/lifecycle/Startables.java
class Startables (line 17) | @UtilityClass
method newThread (line 24) | @Override
method deepStart (line 36) | public CompletableFuture<Void> deepStart(Collection<? extends Startabl...
method deepStart (line 43) | public CompletableFuture<Void> deepStart(Iterable<? extends Startable>...
method deepStart (line 50) | public CompletableFuture<Void> deepStart(Startable... startables) {
method deepStart (line 72) | public CompletableFuture<Void> deepStart(Stream<? extends Startable> s...
method deepStart (line 81) | private CompletableFuture<Void> deepStart(
method allOfFailfast (line 105) | private static <T> CompletableFuture<Void> allOfFailfast(CompletableFu...
FILE: core/src/main/java/org/testcontainers/lifecycle/TestDescription.java
type TestDescription (line 3) | public interface TestDescription {
method getTestId (line 4) | String getTestId();
method getFilesystemFriendlyName (line 6) | String getFilesystemFriendlyName();
FILE: core/src/main/java/org/testcontainers/lifecycle/TestLifecycleAware.java
type TestLifecycleAware (line 5) | public interface TestLifecycleAware {
method beforeTest (line 6) | default void beforeTest(TestDescription description) {}
method afterTest (line 8) | default void afterTest(TestDescription description, Optional<Throwable...
FILE: core/src/main/java/org/testcontainers/utility/AuditLogger.java
class AuditLogger (line 23) | @Slf4j
method doLog (line 31) | public static void doLog(
method doLog (line 40) | public static void doLog(
method doComposeLog (line 73) | public static void doComposeLog(@NotNull String[] commandParts, @Nulla...
FILE: core/src/main/java/org/testcontainers/utility/AuthConfigUtil.java
class AuthConfigUtil (line 12) | @UtilityClass
method toSafeString (line 15) | public static String toSafeString(AuthConfig authConfig) {
method obfuscated (line 31) | @NotNull
FILE: core/src/main/java/org/testcontainers/utility/Base58.java
class Base58 (line 8) | public class Base58 {
method randomString (line 14) | public static String randomString(int length) {
FILE: core/src/main/java/org/testcontainers/utility/ClasspathScanner.java
class ClasspathScanner (line 16) | @Slf4j
method scanFor (line 19) | @VisibleForTesting
method filesFileSchemeFirst (line 33) | private static Integer filesFileSchemeFirst(final URL t) {
method scanFor (line 42) | static Stream<URL> scanFor(final String name) {
method getAllPropertyFilesOnClassloader (line 46) | @Nullable
FILE: core/src/main/java/org/testcontainers/utility/CommandLine.java
class CommandLine (line 21) | public class CommandLine {
method runShellCommand (line 31) | public static String runShellCommand(String... command) {
method executableExists (line 51) | public static boolean executableExists(String executable) {
method getSystemPath (line 68) | @NotNull
class ShellCommandException (line 73) | private static class ShellCommandException extends RuntimeException {
method ShellCommandException (line 75) | public ShellCommandException(String message, Exception e) {
FILE: core/src/main/java/org/testcontainers/utility/ComparableVersion.java
class ComparableVersion (line 9) | public final class ComparableVersion implements Comparable<ComparableVer...
method ComparableVersion (line 15) | public ComparableVersion(String version) {
method compareTo (line 19) | @Override
method isSemanticVersion (line 34) | public boolean isSemanticVersion() {
method isLessThan (line 38) | public boolean isLessThan(String other) {
method isGreaterThanOrEqualTo (line 42) | public boolean isGreaterThanOrEqualTo(String other) {
method parseVersion (line 46) | @VisibleForTesting
FILE: core/src/main/java/org/testcontainers/utility/ConfigurationFileImageNameSubstitutor.java
class ConfigurationFileImageNameSubstitutor (line 10) | @Slf4j
method ConfigurationFileImageNameSubstitutor (line 15) | public ConfigurationFileImageNameSubstitutor() {
method ConfigurationFileImageNameSubstitutor (line 19) | @VisibleForTesting
method apply (line 24) | @Override
method getDescription (line 41) | @Override
FILE: core/src/main/java/org/testcontainers/utility/DefaultImageNameSubstitutor.java
class DefaultImageNameSubstitutor (line 10) | @Slf4j
method DefaultImageNameSubstitutor (line 17) | public DefaultImageNameSubstitutor() {
method DefaultImageNameSubstitutor (line 22) | @VisibleForTesting
method apply (line 31) | @Override
method getDescription (line 36) | @Override
FILE: core/src/main/java/org/testcontainers/utility/DockerImageName.java
class DockerImageName (line 16) | @EqualsAndHashCode(exclude = { "rawName", "compatibleSubstituteFor" })
method parse (line 56) | public static DockerImageName parse(String fullImageName) {
method DockerImageName (line 68) | @Deprecated
method DockerImageName (line 114) | @Deprecated
method getUnversionedPart (line 149) | public String getUnversionedPart() {
method getVersionPart (line 160) | public String getVersionPart() {
method asCanonicalNameString (line 167) | public String asCanonicalNameString() {
method toString (line 171) | @Override
method assertValid (line 181) | public void assertValid() {
method withTag (line 198) | public DockerImageName withTag(final String newTag) {
method asCompatibleSubstituteFor (line 209) | public DockerImageName asCompatibleSubstituteFor(String otherImageName) {
method asCompatibleSubstituteFor (line 220) | public DockerImageName asCompatibleSubstituteFor(DockerImageName other...
method isCompatibleWith (line 235) | public boolean isCompatibleWith(DockerImageName other) {
method assertCompatibleWith (line 265) | public void assertCompatibleWith(DockerImageName... anyOthers) {
FILE: core/src/main/java/org/testcontainers/utility/DockerLoggerFactory.java
class DockerLoggerFactory (line 8) | @NoArgsConstructor(access = AccessLevel.PRIVATE)
method getLogger (line 11) | public static Logger getLogger(String dockerImageName) {
FILE: core/src/main/java/org/testcontainers/utility/DockerMachineClient.java
class DockerMachineClient (line 15) | public class DockerMachineClient {
method DockerMachineClient (line 34) | private DockerMachineClient() {}
method instance (line 41) | public static synchronized DockerMachineClient instance() {
method isInstalled (line 49) | public boolean isInstalled() {
method getDefaultMachine (line 53) | public Optional<String> getDefaultMachine() {
method ensureMachineRunning (line 76) | public void ensureMachineRunning(@NonNull String machineName) {
method getDockerDaemonIpAddress (line 86) | @Deprecated
method getDockerDaemonUrl (line 91) | public String getDockerDaemonUrl(@NonNull String machineName) {
method isMachineRunning (line 95) | public boolean isMachineRunning(String machineName) {
method isDefaultMachineRunning (line 100) | public boolean isDefaultMachineRunning() {
FILE: core/src/main/java/org/testcontainers/utility/DockerStatus.java
class DockerStatus (line 20) | public class DockerStatus {
method isContainerRunning (line 36) | public static boolean isContainerRunning(
method isContainerStopped (line 60) | public static boolean isContainerStopped(InspectContainerResponse.Cont...
method isDockerTimestampNonEmpty (line 72) | public static boolean isDockerTimestampNonEmpty(String dockerTimestamp) {
method isContainerExitCodeSuccess (line 83) | public static boolean isContainerExitCodeSuccess(InspectContainerRespo...
FILE: core/src/main/java/org/testcontainers/utility/DynamicPollInterval.java
class DynamicPollInterval (line 14) | @Deprecated
method DynamicPollInterval (line 21) | private DynamicPollInterval(Duration interval) {
method of (line 26) | public static DynamicPollInterval of(Duration duration) {
method ofMillis (line 30) | public static DynamicPollInterval ofMillis(long millis) {
method next (line 34) | @Override
FILE: core/src/main/java/org/testcontainers/utility/ImageNameSubstitutor.java
class ImageNameSubstitutor (line 19) | @Slf4j
method instance (line 29) | public static synchronized ImageNameSubstitutor instance() {
method instance (line 33) | @VisibleForTesting
method getImageNameSubstitutor (line 61) | private static ImageNameSubstitutor getImageNameSubstitutor(ClassLoade...
method noop (line 81) | public static ImageNameSubstitutor noop() {
method wrapWithLogging (line 85) | private static ImageNameSubstitutor wrapWithLogging(final ImageNameSub...
method apply (line 96) | public abstract DockerImageName apply(DockerImageName original);
method getDescription (line 101) | protected abstract String getDescription();
class LogWrappedImageNameSubstitutor (line 106) | static class LogWrappedImageNameSubstitutor extends ImageNameSubstitut...
method LogWrappedImageNameSubstitutor (line 111) | public LogWrappedImageNameSubstitutor(final ImageNameSubstitutor wra...
method apply (line 115) | @Override
method getDescription (line 137) | @Override
class ChainedImageNameSubstitutor (line 146) | static class ChainedImageNameSubstitutor extends ImageNameSubstitutor {
method ChainedImageNameSubstitutor (line 152) | public ChainedImageNameSubstitutor(
method apply (line 160) | @Override
method getDescription (line 165) | @Override
method toString (line 174) | @Override
class NoopImageNameSubstitutor (line 180) | private static class NoopImageNameSubstitutor extends ImageNameSubstit...
method apply (line 182) | @Override
method getDescription (line 187) | @Override
FILE: core/src/main/java/org/testcontainers/utility/JVMHookResourceReaper.java
class JVMHookResourceReaper (line 14) | class JVMHookResourceReaper extends ResourceReaper {
method init (line 16) | @Override
method performCleanup (line 21) | @Override
method prune (line 32) | private void prune(PruneType pruneType, List<Map.Entry<String, String>...
FILE: core/src/main/java/org/testcontainers/utility/LazyFuture.java
class LazyFuture (line 17) | public abstract class LazyFuture<T> implements Future<T> {
method resolve (line 22) | protected abstract T resolve();
method cancel (line 24) | @Override
method isCancelled (line 29) | @Override
method isDone (line 34) | @Override
method get (line 39) | @Override
method get (line 44) | @Override
FILE: core/src/main/java/org/testcontainers/utility/LicenseAcceptance.java
class LicenseAcceptance (line 13) | @UtilityClass
method assertLicenseAccepted (line 18) | public static void assertLicenseAccepted(final String imageName) {
FILE: core/src/main/java/org/testcontainers/utility/LogUtils.java
class LogUtils (line 19) | @UtilityClass
method followOutput (line 31) | public void followOutput(
method followOutput (line 48) | public void followOutput(DockerClient dockerClient, String containerId...
method getOutput (line 60) | @SneakyThrows(IOException.class)
method attachConsumer (line 78) | private static Closeable attachConsumer(
FILE: core/src/main/java/org/testcontainers/utility/MountableFile.java
class MountableFile (line 41) | @RequiredArgsConstructor(access = AccessLevel.PACKAGE)
method forClasspathResource (line 71) | public static MountableFile forClasspathResource(@NotNull final String...
method forHostPath (line 81) | public static MountableFile forHostPath(@NotNull final String path) {
method forHostPath (line 91) | public static MountableFile forHostPath(final Path path) {
method forClasspathResource (line 102) | public static MountableFile forClasspathResource(@NotNull final String...
method forHostPath (line 113) | public static MountableFile forHostPath(@NotNull final String path, In...
method forHostPath (line 124) | public static MountableFile forHostPath(final Path path, Integer mode) {
method getClasspathResource (line 128) | @NotNull
method unencodeResourceURIToFilePath (line 166) | private static String unencodeResourceURIToFilePath(@NotNull final Str...
method resolvePath (line 186) | private String resolvePath() {
method resolveFilesystemPath (line 207) | private String resolveFilesystemPath() {
method getResourcePath (line 217) | private String getResourcePath() {
method extractClassPathResourceToTempLocation (line 233) | private String extractClassPathResourceToTempLocation(final String hos...
method createTempDirectory (line 273) | private File createTempDirectory() {
method copyFromJarToLocation (line 284) | @SuppressWarnings("ResultOfMethodCallIgnored")
method deleteOnExit (line 314) | private void deleteOnExit(final Path path) {
method transferTo (line 325) | @Override
method recursiveTar (line 333) | private void recursiveTar(
method getSize (line 385) | @Override
method getDescription (line 395) | @Override
method updateChecksum (line 400) | @Override
method checksumFile (line 406) | @SneakyThrows(IOException.class)
method getFileMode (line 423) | @Override
method getUnixFileMode (line 428) | private int getUnixFileMode(final String pathAsString) {
method getUnixFileMode (line 436) | @UnstableAPI
method getModeValue (line 463) | private int getModeValue(final Path path) {
FILE: core/src/main/java/org/testcontainers/utility/PathUtils.java
class PathUtils (line 16) | @UtilityClass
method recursiveDeleteDir (line 24) | public static void recursiveDeleteDir(final @NonNull Path directory) {
method mkdirp (line 50) | public static void mkdirp(Path directory) {
method createMinGWPath (line 63) | public static String createMinGWPath(String path) {
FILE: core/src/main/java/org/testcontainers/utility/PrefixingImageNameSubstitutor.java
class PrefixingImageNameSubstitutor (line 12) | @NoArgsConstructor
method PrefixingImageNameSubstitutor (line 21) | @VisibleForTesting
method apply (line 26) | @Override
method getDescription (line 50) | @Override
FILE: core/src/main/java/org/testcontainers/utility/RegistryAuthLocator.java
class RegistryAuthLocator (line 33) | public class RegistryAuthLocator {
method RegistryAuthLocator (line 61) | @VisibleForTesting
method RegistryAuthLocator (line 79) | protected RegistryAuthLocator() {
method instance (line 91) | public static synchronized RegistryAuthLocator instance() {
method setInstance (line 99) | @VisibleForTesting
method lookupAuthConfig (line 121) | public AuthConfig lookupAuthConfig(DockerImageName dockerImageName, Au...
method lookupUncachedAuthConfig (line 143) | private Optional<AuthConfig> lookupUncachedAuthConfig(String registryN...
method getDockerAuthConfig (line 178) | private JsonNode getDockerAuthConfig() throws Exception {
method findExistingAuthConfig (line 205) | private AuthConfig findExistingAuthConfig(final JsonNode config, final...
method authConfigUsingHelper (line 232) | private AuthConfig authConfigUsingHelper(final JsonNode config, final ...
method authConfigUsingStore (line 244) | private AuthConfig authConfigUsingStore(final JsonNode config, final S...
method findAuthNode (line 257) | private Map.Entry<String, JsonNode> findAuthNode(final JsonNode config...
method runCredentialProvider (line 271) | private AuthConfig runCredentialProvider(String hostName, String helpe...
method getCredentialProgramName (line 337) | private String getCredentialProgramName(String credHelper) {
method effectiveRegistryName (line 341) | private String effectiveRegistryName(DockerImageName dockerImageName) {
method getGenericCredentialsNotFoundMsg (line 352) | private String getGenericCredentialsNotFoundMsg(String credentialsNotF...
method runCredentialProgram (line 359) | private CredentialOutput runCredentialProgram(String hostName, String ...
class CredentialOutput (line 394) | static class CredentialOutput {
method CredentialOutput (line 402) | public CredentialOutput(int exitValue, String stdout, String stderr) {
method getExitValue (line 408) | int getExitValue() {
method getStdout (line 412) | String getStdout() {
method getStderr (line 416) | String getStderr() {
FILE: core/src/main/java/org/testcontainers/utility/ResourceReaper.java
class ResourceReaper (line 39) | @Slf4j
method ResourceReaper (line 73) | ResourceReaper() {}
method instance (line 75) | public static synchronized ResourceReaper instance() {
method performCleanup (line 102) | @Deprecated
method registerFilterForCleanup (line 115) | @Deprecated
method registerLabelsFilterForCleanup (line 128) | public void registerLabelsFilterForCleanup(Map<String, String> labels) {
method registerContainerForCleanup (line 145) | @Deprecated
method stopAndRemoveContainer (line 157) | @Deprecated
method stopAndRemoveContainer (line 171) | @Deprecated
method removeContainer (line 178) | private void removeContainer(String containerId, String imageName) {
method registerNetworkIdForCleanup (line 235) | @Deprecated
method removeNetworkById (line 246) | @Deprecated
method removeNetwork (line 251) | private void removeNetwork(String id) {
method unregisterNetwork (line 288) | @Deprecated
method unregisterContainer (line 296) | @Deprecated
method registerImageForCleanup (line 304) | @Deprecated
method removeImage (line 310) | private void removeImage(String dockerImageName) {
method setHook (line 319) | void setHook() {
method getLabels (line 332) | @Deprecated
method register (line 341) | @Deprecated
method init (line 350) | @Deprecated
class FilterRegistry (line 353) | static class FilterRegistry {
method FilterRegistry (line 362) | FilterRegistry(InputStream ryukInputStream, OutputStream ryukOutputS...
method register (line 374) | protected boolean register(List<Map.Entry<String, String>> filters) ...
method waitForAcknowledgment (line 396) | private static boolean waitForAcknowledgment(BufferedReader in) thro...
FILE: core/src/main/java/org/testcontainers/utility/RyukContainer.java
class RyukContainer (line 9) | class RyukContainer extends GenericContainer<RyukContainer> {
method RyukContainer (line 11) | RyukContainer() {
FILE: core/src/main/java/org/testcontainers/utility/RyukResourceReaper.java
class RyukResourceReaper (line 25) | @Slf4j
method init (line 38) | @Override
method registerLabelsFilterForCleanup (line 49) | @Override
method getLabels (line 55) | @Override
method register (line 61) | @Override
method maybeStart (line 72) | @SneakyThrows(InterruptedException.class)
FILE: core/src/main/java/org/testcontainers/utility/TestEnvironment.java
class TestEnvironment (line 9) | public class TestEnvironment {
method TestEnvironment (line 11) | private TestEnvironment() {}
method dockerApiAtLeast (line 13) | public static boolean dockerApiAtLeast(String minimumVersion) {
method dockerExecutionDriverSupportsExec (line 20) | public static boolean dockerExecutionDriverSupportsExec() {
method dockerIsDockerMachine (line 27) | public static boolean dockerIsDockerMachine() {
FILE: core/src/main/java/org/testcontainers/utility/TestcontainersConfiguration.java
class TestcontainersConfiguration (line 44) | @Data
method getInstanceField (line 92) | @SuppressWarnings({ "ConstantConditions", "unchecked", "rawtypes" })
method TestcontainersConfiguration (line 105) | TestcontainersConfiguration(
method getAmbassadorContainerImage (line 115) | @Deprecated
method getSocatContainerImage (line 120) | @Deprecated
method getVncRecordedContainerImage (line 125) | @Deprecated
method getDockerComposeContainerImage (line 130) | @Deprecated
method getTinyImage (line 135) | @Deprecated
method isRyukPrivileged (line 140) | public boolean isRyukPrivileged() {
method getRyukImage (line 144) | @Deprecated
method getSSHdImage (line 149) | @Deprecated
method getRyukTimeout (line 154) | public Integer getRyukTimeout() {
method getKafkaImage (line 158) | @Deprecated
method getOracleImage (line 163) | @Deprecated
method getPulsarImage (line 168) | @Deprecated
method getLocalStackImage (line 173) | @Deprecated
method isDisableChecks (line 178) | public boolean isDisableChecks() {
method environmentSupportsReuse (line 182) | @UnstableAPI
method getDockerClientStrategyClassName (line 187) | public String getDockerClientStrategyClassName() {
method getTransportType (line 203) | public String getTransportType() {
method getImagePullPauseTimeout (line 207) | public Integer getImagePullPauseTimeout() {
method getImagePullTimeout (line 211) | public Integer getImagePullTimeout() {
method getImageSubstitutorClassName (line 215) | public String getImageSubstitutorClassName() {
method getImagePullPolicy (line 219) | public String getImagePullPolicy() {
method getClientPingTimeout (line 223) | public Integer getClientPingTimeout() {
method getConfigurable (line 227) | @Nullable
method getEnvVarOrProperty (line 267) | @Contract("_, !null -> !null")
method getEnvVarOrUserProperty (line 283) | @Contract("_, !null -> !null")
method getUserProperty (line 294) | @Contract("_, !null -> !null")
method getProperties (line 308) | @Deprecated
method updateGlobalConfig (line 321) | @Deprecated
method updateUserConfig (line 326) | @Synchronized
method loadConfiguration (line 349) | @SneakyThrows(MalformedURLException.class)
method readProperties (line 369) | private static Properties readProperties(URL url) {
method getImage (line 390) | private DockerImageName getImage(final String defaultValue) {
method getConfiguredSubstituteImage (line 394) | DockerImageName getConfiguredSubstituteImage(DockerImageName original) {
FILE: core/src/main/java/org/testcontainers/utility/ThrowingFunction.java
type ThrowingFunction (line 3) | public interface ThrowingFunction<T, R> {
method apply (line 4) | R apply(T t) throws Exception;
FILE: core/src/main/java/org/testcontainers/utility/Versioning.java
type Versioning (line 10) | interface Versioning {
method isValid (line 13) | boolean isValid();
method getSeparator (line 15) | String getSeparator();
class AnyVersion (line 17) | @NoArgsConstructor(access = AccessLevel.PRIVATE)
method isValid (line 20) | @Override
method getSeparator (line 25) | @Override
method toString (line 30) | @Override
method equals (line 35) | @Override
method hashCode (line 40) | @Override
class TagVersioning (line 46) | @EqualsAndHashCode
method TagVersioning (line 55) | TagVersioning(String tag) {
method isValid (line 59) | @Override
method getSeparator (line 64) | @Override
method toString (line 69) | @Override
class Sha256Versioning (line 75) | @EqualsAndHashCode
method Sha256Versioning (line 82) | Sha256Versioning(String hash) {
method isValid (line 86) | @Override
method getSeparator (line 91) | @Override
method toString (line 96) | @Override
FILE: core/src/test/java/alt/testcontainers/images/OutOfPackageImagePullPolicyTest.java
class OutOfPackageImagePullPolicyTest (line 11) | class OutOfPackageImagePullPolicyTest {
method shouldSupportCustomPoliciesOutOfTestcontainersPackage (line 13) | @Test
FILE: core/src/test/java/org/testcontainers/DaemonTest.java
class DaemonTest (line 17) | class DaemonTest {
method main (line 19) | public static void main(String[] args) {
method testThatAllThreadsAreDaemons (line 48) | @Test
FILE: core/src/test/java/org/testcontainers/DockerClientFactoryTest.java
class DockerClientFactoryTest (line 15) | @ExtendWith(MockTestcontainersConfigurationExtension.class)
method runCommandInsideDockerShouldNotFailIfImageDoesNotExistsLocally (line 18) | @Test
method dockerHostIpAddress (line 40) | @Test
method failedChecksFailFast (line 47) | @Test
FILE: core/src/test/java/org/testcontainers/DockerRegistryContainer.java
class DockerRegistryContainer (line 24) | public class DockerRegistryContainer extends GenericContainer<DockerRegi...
method DockerRegistryContainer (line 29) | public DockerRegistryContainer() {
method DockerRegistryContainer (line 33) | public DockerRegistryContainer(@NonNull Future<String> image) {
method configure (line 37) | @Override
method containerIsStarting (line 46) | @Override
method createImage (line 83) | public DockerImageName createImage() {
method createImage (line 87) | public DockerImageName createImage(String tag) {
method createImage (line 91) | @SneakyThrows(InterruptedException.class)
FILE: core/src/test/java/org/testcontainers/TestImages.java
type TestImages (line 5) | public interface TestImages {
FILE: core/src/test/java/org/testcontainers/containers/ComposeContainerTest.java
class ComposeContainerTest (line 11) | class ComposeContainerTest {
method testWithCustomDockerImage (line 17) | @Test
method testWithCustomDockerImageAndIdentifier (line 28) | @Test
method verifyContainerCreation (line 40) | private void verifyContainerCreation(ComposeContainer composeContainer) {
FILE: core/src/test/java/org/testcontainers/containers/ComposeContainerWithServicesTest.java
class ComposeContainerWithServicesTest (line 17) | class ComposeContainerWithServicesTest {
method testDesiredSubsetOfServicesAreStarted (line 31) | @Test
method testDesiredSubsetOfScaledServicesAreStarted (line 43) | @Test
method testDesiredSubsetOfSpecifiedAndScaledServicesAreStarted (line 55) | @Test
method testDesiredSubsetOfSpecifiedOrScaledServicesAreStarted (line 68) | @Test
method testAllServicesAreStartedIfNotSpecified (line 81) | @Test
method testScaleInComposeFileIsRespected (line 92) | @Test
method testStartupTimeoutSetsTheHighestTimeout (line 107) | @Test
method testWaitingForHealthcheck (line 132) | @Test
method testWaitingForHealthcheckWithRestartDoesNotCrash (line 147) | @Test
method verifyStartedContainers (line 164) | private void verifyStartedContainers(final ComposeContainer compose, f...
FILE: core/src/test/java/org/testcontainers/containers/ComposeOverridesTest.java
class ComposeOverridesTest (line 19) | class ComposeOverridesTest {
method data (line 37) | public static Iterable<Object[]> data() {
method test (line 48) | @ParameterizedTest(name = "{index}: local[{0}], composeFiles[{2}], exp...
FILE: core/src/test/java/org/testcontainers/containers/ComposeProfilesOptionTest.java
class ComposeProfilesOptionTest (line 13) | class ComposeProfilesOptionTest {
method local (line 15) | public static Boolean[] local() {
method testProfileOption (line 21) | @ParameterizedTest
FILE: core/src/test/java/org/testcontainers/containers/ContainerStateTest.java
class ContainerStateTest (line 14) | class ContainerStateTest {
method params (line 16) | public static Object[][] params() {
method test (line 27) | @ParameterizedTest(name = "{0} ({1} -> {2})")
FILE: core/src/test/java/org/testcontainers/containers/DockerComposeContainerCustomImageTest.java
class DockerComposeContainerCustomImageTest (line 11) | class DockerComposeContainerCustomImageTest {
method testWithCustomDockerImage (line 17) | @Test
method testWithCustomDockerImageAndIdentifier (line 29) | @Test
method verifyContainerCreation (line 41) | private void verifyContainerCreation(DockerComposeContainer<?> compose...
FILE: core/src/test/java/org/testcontainers/containers/DockerComposeContainerWithServicesTest.java
class DockerComposeContainerWithServicesTest (line 17) | class DockerComposeContainerWithServicesTest {
method testDesiredSubsetOfServicesAreStarted (line 31) | @Test
method testDesiredSubsetOfScaledServicesAreStarted (line 46) | @Test
method testDesiredSubsetOfSpecifiedAndScaledServicesAreStarted (line 61) | @Test
method testDesiredSubsetOfSpecifiedOrScaledServicesAreStarted (line 77) | @Test
method testAllServicesAreStartedIfNotSpecified (line 93) | @Test
method testScaleInComposeFileIsRespected (line 107) | @Test
method testStartupTimeoutSetsTheHighestTimeout (line 122) | @Test
method testWaitingForHealthcheck (line 147) | @Test
method testWaitingForHealthcheckWithRestartDoesNotCrash (line 162) | @Test
method verifyStartedContainers (line 179) | private void verifyStartedContainers(final DockerComposeContainer<?> c...
FILE: core/src/test/java/org/testcontainers/containers/DockerComposeFilesTest.java
class DockerComposeFilesTest (line 10) | class DockerComposeFilesTest {
method shouldGetDependencyImages (line 12) | @Test
method shouldGetDependencyImagesWhenOverriding (line 21) | @Test
FILE: core/src/test/java/org/testcontainers/containers/DockerComposeOverridesTest.java
class DockerComposeOverridesTest (line 18) | class DockerComposeOverridesTest {
method data (line 34) | public static Iterable<Object[]> data() {
method test (line 45) | @ParameterizedTest(name = "{index}: local[{0}], composeFiles[{2}], exp...
FILE: core/src/test/java/org/testcontainers/containers/DockerComposeProfilesOptionTest.java
class DockerComposeProfilesOptionTest (line 13) | class DockerComposeProfilesOptionTest {
method local (line 15) | public static Boolean[] local() {
method testProfileOption (line 21) | @ParameterizedTest(name = "{0}")
FILE: core/src/test/java/org/testcontainers/containers/DockerMcpGatewayContainerTest.java
class DockerMcpGatewayContainerTest (line 9) | class DockerMcpGatewayContainerTest {
method serviceSuccessfullyStarts (line 11) | @Test
method gatewayStartsWithServers (line 20) | @Test
FILE: core/src/test/java/org/testcontainers/containers/DockerModelRunnerContainerTest.java
class DockerModelRunnerContainerTest (line 10) | class DockerModelRunnerContainerTest {
method checkStatus (line 12) | @Test
method pullsModelAndExposesInference (line 28) | @Test
FILE: core/src/test/java/org/testcontainers/containers/ExposedHostTest.java
class ExposedHostTest (line 24) | class ExposedHostTest {
method setUpClass (line 28) | @BeforeAll
method tearDownClass (line 45) | @AfterAll
method tearDown (line 50) | @AfterEach
method testExposedHostAfterContainerIsStarted (line 55) | @Test
method testExposedHost (line 64) | @Test
method testExposedHostWithNetwork (line 70) | @Test
method testExposedHostPortOnFixedInternalPorts (line 81) | @Test
method testExposedHostWithReusableContainerAndFixedNetworkName (line 90) | @Test
method testExposedHostOnFixedInternalPortsWithReusableContainerAndFixedNetworkName (line 117) | @Test
method assertResponse (line 145) | @SneakyThrows
method tinyContainerDef (line 160) | private ContainerDef tinyContainerDef() {
class TinyContainerDef (line 164) | private static class TinyContainerDef extends ContainerDef {
method TinyContainerDef (line 166) | TinyContainerDef() {
method assertHttpResponseFromHost (line 172) | private void assertHttpResponseFromHost(GenericContainer<?> container,...
method createReusableNetwork (line 180) | private static Network createReusableNetwork(UUID name) {
FILE: core/src/test/java/org/testcontainers/containers/GenericContainerTest.java
class GenericContainerTest (line 49) | class GenericContainerTest {
method shouldReportOOMAfterWait (line 51) | @Test
method shouldReportErrorAfterWait (line 77) | @Test
method shouldCopyTransferableAsFile (line 92) | @Test
method shouldCopyTransferableAsFileWithFileMode (line 109) | @Test
method shouldCopyTransferableAfterMountableFile (line 126) | @Test
method shouldOnlyPublishExposedPorts (line 142) | @Test
method shouldWaitUntilExposedPortIsMapped (line 178) | @Test
method testArchitectureCheck (line 200) | @Test
method shouldReturnTheProvidedImage (line 235) | @Test
method shouldContainDefaultNetworkAlias (line 243) | @Test
method shouldContainDefaultNetworkAliasWhenUsingGenericContainer (line 251) | @Test
method shouldContainDefaultNetworkAliasWhenUsingContainerDef (line 259) | @Test
method shouldRespectWaitStrategy (line 267) | @Test
method testStartupAttemptsDoesNotLeaveContainersRunningWhenWrongWaitStrategyIsUsed (line 282) | @Test
method reportLeakedContainers (line 298) | private static Optional<String> reportLeakedContainers() {
class NoopStartupCheckStrategy (line 339) | static class NoopStartupCheckStrategy extends StartupCheckStrategy {
method checkStartupState (line 341) | @Override
class WaitForExitedState (line 347) | @RequiredArgsConstructor
method waitUntilReady (line 354) | @Override
class HelloWorldContainer (line 376) | static class HelloWorldContainer extends GenericContainer<HelloWorldCo...
method HelloWorldContainer (line 378) | public HelloWorldContainer(String image) {
class TcHelloWorldContainer (line 384) | static class TcHelloWorldContainer extends GenericContainer<HelloWorld...
method TcHelloWorldContainer (line 386) | public TcHelloWorldContainer(String image) {
method createContainerDef (line 390) | @Override
class HelloWorldContainerDef (line 395) | class HelloWorldContainerDef extends ContainerDef {
method HelloWorldContainerDef (line 397) | HelloWorldContainerDef() {
class HelloWorldLogStrategyContainer (line 403) | static class HelloWorldLogStrategyContainer extends GenericContainer<H...
method HelloWorldLogStrategyContainer (line 405) | public HelloWorldLogStrategyContainer(String image) {
FILE: core/src/test/java/org/testcontainers/containers/JibTest.java
class JibTest (line 15) | class JibTest {
method buildImage (line 17) | @Test
method standardLabelsAreAddedWhenUsingJibSetLabels (line 38) | @Test
method standardLabelsAreAddedWhenUsingJibAddLabel (line 58) | @Test
method assertImageLabels (line 76) | private static void assertImageLabels(GenericContainer<?> busybox) {
FILE: core/src/test/java/org/testcontainers/containers/MultiStageBuildTest.java
class MultiStageBuildTest (line 11) | class MultiStageBuildTest {
method testDockerMultistageBuild (line 13) | @Test
method shouldBuildMultistageBuildWithBuildImageCmdModifier (line 29) | @Test
FILE: core/src/test/java/org/testcontainers/containers/NetworkTest.java
class NetworkTest (line 10) | class NetworkTest {
class WithRules (line 12) | @Nested
method testNetworkSupport (line 26) | void testNetworkSupport() throws Exception {
class WithoutRules (line 34) | @Nested
method testNetworkSupport (line 37) | @Test
method testBuilder (line 63) | @Test
method testModifiers (line 75) | @Test
method testReusability (line 89) | @Test
FILE: core/src/test/java/org/testcontainers/containers/ParsedDockerComposeFileBean.java
class ParsedDockerComposeFileBean (line 3) | public class ParsedDockerComposeFileBean {
method ParsedDockerComposeFileBean (line 7) | public ParsedDockerComposeFileBean(String foo) {
FILE: core/src/test/java/org/testcontainers/containers/ParsedDockerComposeFileValidationTest.java
class ParsedDockerComposeFileValidationTest (line 19) | class ParsedDockerComposeFileValidationTest {
method shouldValidate (line 24) | @Test
method shouldRejectContainerNameV1 (line 34) | @Test
method shouldRejectContainerNameV2 (line 42) | @Test
method shouldIgnoreUnknownStructure (line 57) | @Test
method shouldRejectDeserializationOfArbitraryClasses (line 72) | @Test
method shouldObtainImageNamesV1 (line 88) | @Test
method shouldObtainImageNamesV2 (line 101) | @Test
method shouldObtainImageNamesV2WithNoVersionTag (line 114) | @Test
method shouldObtainImageFromDockerfileBuild (line 127) | @Test
method shouldObtainImageFromDockerfileBuildWithContext (line 140) | @Test
method shouldSupportALotOfAliases (line 153) | @Test
FILE: core/src/test/java/org/testcontainers/containers/ReusabilityUnitTests.java
class ReusabilityUnitTests (line 54) | class ReusabilityUnitTests {
class CanBeReusedTest (line 56) | @Nested
method data (line 59) | public static Object[][] data() {
method shouldBeReusable (line 69) | @ParameterizedTest(name = "{0}")
class CustomContainer (line 79) | static class CustomContainer extends GenericContainer<CustomContaine...
method CustomContainer (line 81) | CustomContainer() {
class CustomContainerWithContainerIsCreated (line 86) | static class CustomContainerWithContainerIsCreated
method CustomContainerWithContainerIsCreated (line 89) | CustomContainerWithContainerIsCreated() {
method containerIsCreated (line 93) | @Override
class HooksTest (line 100) | @Nested
method canBeReused (line 107) | @Override
method containerIsCreated (line 113) | @Override
method containerIsStarting (line 118) | @Override
method containerIsStarted (line 123) | @Override
method shouldSetLabelsIfEnvironmentDoesNotSupportReuse (line 130) | @Test
method shouldCallHookIfReused (line 149) | @Test
method shouldNotCallHookIfNotReused (line 162) | @Test
class HashTest (line 180) | @Nested
method copyFileToContainer (line 185) | @Override
method shouldStartIfListReturnsEmpty (line 192) | @Test
method shouldReuseIfListReturnsID (line 205) | @Test
method shouldSetLabelsIfEnvironmentDoesNotSupportReuse (line 220) | @Test
method shouldSetCopiedFilesHashLabel (line 239) | @Test
method shouldHashCopiedFiles (line 255) | @Test
class CopyFilesHashTest (line 293) | @Nested
type TestStrategy (line 300) | interface TestStrategy {
method withCopyFileToContainer (line 301) | void withCopyFileToContainer(MountableFile mountableFile, String p...
method clear (line 303) | void clear();
class MountableFileTestStrategy (line 306) | private static class MountableFileTestStrategy implements TestStrate...
method MountableFileTestStrategy (line 310) | private MountableFileTestStrategy(GenericContainer<?> container) {
method withCopyFileToContainer (line 314) | @Override
method clear (line 319) | @Override
class TransferableTestStrategy (line 325) | private static class TransferableTestStrategy implements TestStrategy {
method TransferableTestStrategy (line 329) | private TransferableTestStrategy(GenericContainer<?> container) {
method withCopyFileToContainer (line 333) | @Override
method clear (line 338) | @Override
method strategies (line 344) | public static List<Function<GenericContainer<?>, TestStrategy>> stra...
method CopyFilesHashTest (line 350) | public CopyFilesHashTest(Function<GenericContainer<?>, TestStrategy>...
method empty (line 354) | @Test
method oneFile (line 359) | @Test
method differentPath (line 371) | @Test
method detectsChangesInFile (line 385) | @Test
method multipleFiles (line 398) | @Test
method folder (line 414) | @Test
method changesInFolder (line 425) | @Test
method folderAndFile (line 444) | @Test
method filePermissions (line 461) | @Test
method folderPermissions (line 476) | @Test
class AbstractReusabilityTest (line 495) | @ExtendWith(MockTestcontainersConfigurationExtension.class)
method makeReusable (line 500) | protected <T extends GenericContainer<?>> T makeReusable(T container) {
method randomContainerId (line 527) | protected String randomContainerId() {
method listContainersAnswer (line 531) | protected Answer<ListContainersCmd> listContainersAnswer(String... i...
method createContainerAnswer (line 544) | protected Answer<CreateContainerCmd> createContainerAnswer(String co...
method createContainerAnswer (line 548) | protected Answer<CreateContainerCmd> createContainerAnswer(
method startContainerAnswer (line 563) | protected Answer<StartContainerCmd> startContainerAnswer() {
method inspectContainerAnswer (line 572) | protected Answer<InspectContainerCmd> inspectContainerAnswer() {
FILE: core/src/test/java/org/testcontainers/containers/output/ContainerLogsTest.java
class ContainerLogsTest (line 11) | class ContainerLogsTest {
method getLogsReturnsAllLogsToDate (line 13) | @Test
method getLogsContainsBothOutputTypes (line 24) | @Test
method getLogsReturnsStdOutToDate (line 37) | @Test
method getLogsReturnsStdErrToDate (line 49) | @Test
method getLogsForLongRunningContainer (line 61) | @Test
method shortLivedContainer (line 73) | private static GenericContainer<?> shortLivedContainer() {
method longRunningContainer (line 79) | private static GenericContainer<?> longRunningContainer() {
FILE: core/src/test/java/org/testcontainers/containers/output/FrameConsumerResultCallbackTest.java
class FrameConsumerResultCallbackTest (line 15) | class FrameConsumerResultCallbackTest {
method passStderrFrameWithoutColors (line 22) | @Test
method passStderrFrameWithColors (line 32) | @Test
method passStdoutFrameWithoutColors (line 42) | @Test
method passStdoutFrameWithColors (line 52) | @Test
method basicConsumer (line 62) | @Test
method passStdoutNull (line 72) | @Test
method passStdoutEmptyLine (line 82) | @Test
method passStdoutSingleLine (line 93) | @Test
method passStdoutSingleLineWithNewline (line 104) | @Test
method passRawFrameWithoutColors (line 115) | @Test
method passRawFrameWithColors (line 150) | @Test
method reconstructBreakedUnicode (line 205) | @Test
class BasicConsumer (line 222) | private static class BasicConsumer implements Consumer<OutputFrame> {
method accept (line 226) | @Override
method toString (line 231) | @Override
FILE: core/src/test/java/org/testcontainers/containers/output/ToStringConsumerTest.java
class ToStringConsumerTest (line 12) | class ToStringConsumerTest {
method newlines_are_not_added_to_exec_output (line 25) | @Test
method newlines_are_not_added_to_exec_output_with_tty (line 36) | @Test
method newlines_are_not_added_to_container_output (line 51) | @Test
method newlines_are_not_added_to_container_output_with_tty (line 64) | @Test
FILE: core/src/test/java/org/testcontainers/containers/startupcheck/IsRunningStartupCheckStrategyTest.java
class IsRunningStartupCheckStrategyTest (line 10) | class IsRunningStartupCheckStrategyTest {
method testCommandQuickExitSuccess (line 12) | @Test
method testCommandQuickExitFailure (line 19) | @Test
method testCommandStaysRunning (line 29) | @Test
FILE: core/src/test/java/org/testcontainers/containers/wait/internal/ExternalPortListeningCheckTest.java
class ExternalPortListeningCheckTest (line 16) | class ExternalPortListeningCheckTest {
method setUp (line 26) | @BeforeEach
method singleListening (line 38) | @Test
method multipleListening (line 50) | @Test
method oneNotListening (line 62) | @Test
method tearDown (line 74) | @AfterEach
FILE: core/src/test/java/org/testcontainers/containers/wait/internal/InternalCommandPortListeningCheckTest.java
class InternalCommandPortListeningCheckTest (line 18) | @ParameterizedClass(name = "{index} - {0}")
method data (line 22) | public static List<String> data() {
method InternalCommandPortListeningCheckTest (line 32) | public InternalCommandPortListeningCheckTest(String dockerfile) {
method singleListening (line 42) | @Test
method nonListening (line 52) | @Test
method lowAndHighPortListening (line 65) | @Test
FILE: core/src/test/java/org/testcontainers/containers/wait/strategy/DockerHealthcheckWaitStrategyTest.java
class DockerHealthcheckWaitStrategyTest (line 14) | class DockerHealthcheckWaitStrategyTest {
method setUp (line 18) | @BeforeEach
method startsOnceHealthy (line 33) | @Test
method containerStartFailsIfContainerIsUnhealthy (line 38) | @Test
FILE: core/src/test/java/org/testcontainers/containers/wait/strategy/WaitAllStrategyTest.java
class WaitAllStrategyTest (line 23) | class WaitAllStrategyTest {
method setUp (line 37) | @BeforeEach
method parentTimeoutApplies (line 45) | @Test
method parentTimeoutAppliesToMultipleChildren (line 57) | @Test
method parentTimeoutAppliesToAdditionalChildren (line 75) | @Test
method childExecutionTest (line 96) | @Test
method withoutOuterTimeoutShouldRelyOnInnerStrategies (line 110) | @Test
method timeoutChangeShouldNotBePossibleWithIndividualTimeoutMode (line 134) | @Test
method shouldNotMessWithIndividualTimeouts (line 147) | @Test
method shouldOverwriteIndividualTimeouts (line 157) | @Test
class DummyStrategy (line 166) | static class DummyStrategy extends AbstractWaitStrategy {
method DummyStrategy (line 168) | DummyStrategy(Duration defaultInnerWait) {
method waitUntilReady (line 172) | @Override
FILE: core/src/test/java/org/testcontainers/custom/TestCreateContainerCmdModifier.java
class TestCreateContainerCmdModifier (line 9) | public class TestCreateContainerCmdModifier implements CreateContainerCm...
method modify (line 11) | @Override
FILE: core/src/test/java/org/testcontainers/dockerclient/AmbiguousImagePullTest.java
class AmbiguousImagePullTest (line 9) | class AmbiguousImagePullTest {
method testNotUsingParse (line 11) | @Test
FILE: core/src/test/java/org/testcontainers/dockerclient/DockerClientConfigUtilsTest.java
class DockerClientConfigUtilsTest (line 13) | class DockerClientConfigUtilsTest {
method getDockerHostIpAddressShouldReturnLocalhostWhenUnixSocket (line 17) | @Test
method getDockerHostIpAddressShouldReturnDockerHostIpWhenHttpsUri (line 29) | @Test
method getDockerHostIpAddressShouldReturnDockerHostIpWhenTcpUri (line 39) | @Test
method getDockerHostIpAddressShouldReturnNullWhenUnsupportedUriScheme (line 49) | @Test
method getDefaultGateway (line 59) | @Test
FILE: core/src/test/java/org/testcontainers/dockerclient/EnvironmentAndSystemPropertyClientProviderStrategyTest.java
class EnvironmentAndSystemPropertyClientProviderStrategyTest (line 28) | @ExtendWith(MockTestcontainersConfigurationExtension.class)
method checkEnvironmentClear (line 35) | @BeforeEach
method testWhenConfigAbsent (line 43) | @Test
method testWhenDockerHostPresent (line 69) | @Test
method testWhenDockerHostAndSSLConfigPresent (line 95) | @Test
method applicableWhenIgnoringUserPropertiesAndConfigured (line 126) | @Test
method notApplicableWhenIgnoringUserPropertiesAndNotConfigured (line 144) | @Test
FILE: core/src/test/java/org/testcontainers/dockerclient/EventStreamTest.java
class EventStreamTest (line 22) | @Timeout(10)
method test (line 28) | @Test
FILE: core/src/test/java/org/testcontainers/dockerclient/ImagePullTest.java
class ImagePullTest (line 9) | class ImagePullTest {
method parameters (line 11) | public static String[] parameters() {
method test (line 24) | @ParameterizedTest(name = "{0}")
FILE: core/src/test/java/org/testcontainers/dockerclient/TestcontainersHostPropertyClientProviderStrategyTest.java
class TestcontainersHostPropertyClientProviderStrategyTest (line 13) | @ExtendWith(MockTestcontainersConfigurationExtension.class)
method tcHostPropertyIsProvided (line 16) | @Test
method tcHostPropertyIsNotProvided (line 30) | @Test
FILE: core/src/test/java/org/testcontainers/images/AgeBasedPullPolicyTest.java
class AgeBasedPullPolicyTest (line 13) | class AgeBasedPullPolicyTest {
method shouldPull (line 17) | @Test
FILE: core/src/test/java/org/testcontainers/images/ImageDataTest.java
class ImageDataTest (line 10) | class ImageDataTest {
method shouldReadTimestampWithoutOffsetFromInspectImageResponse (line 12) | @Test
method shouldReadTimestampWithOffsetFromInspectImageResponse (line 19) | @Test
FILE: core/src/test/java/org/testcontainers/images/ImagePullPolicyTest.java
class ImagePullPolicyTest (line 17) | class ImagePullPolicyTest {
method pullsByDefault (line 28) | @Test
method shouldAlwaysPull (line 35) | @Test
method shouldSupportCustomPolicies (line 58) | @Test
method shouldCheckPolicy (line 78) | @Test
method shouldNotForcePulling (line 99) | @Test
method expectToFailWithNotFoundException (line 110) | private void expectToFailWithNotFoundException(GenericContainer<?> con...
method removeImage (line 126) | private void removeImage() {
FILE: core/src/test/java/org/testcontainers/images/LocalImagesCacheAccessor.java
class LocalImagesCacheAccessor (line 3) | public final class LocalImagesCacheAccessor {
method clearCache (line 5) | public static synchronized void clearCache() {
FILE: core/src/test/java/org/testcontainers/images/OverrideImagePullPolicyTest.java
class OverrideImagePullPolicyTest (line 16) | @ExtendWith(MockTestcontainersConfigurationExtension.class)
method setUp (line 23) | @BeforeEach
method tearDown (line 31) | @AfterEach
method simpleConfigurationTest (line 37) | @Test
method alwaysPullConfigurationTest (line 53) | @Test
FILE: core/src/test/java/org/testcontainers/images/ParsedDockerfileTest.java
class ParsedDockerfileTest (line 11) | class ParsedDockerfileTest {
method doesSimpleParsing (line 13) | @Test
method isCaseInsensitive (line 23) | @Test
method handlesTags (line 33) | @Test
method handlesDigests (line 43) | @Test
method ignoringCommentedFromLines (line 53) | @Test
method ignoringBuildStageNames (line 63) | @Test
method ignoringPlatformArgs (line 73) | @Test
method ignoringExtraPlatformArgs (line 83) | @Test
method handlesGracefullyIfNoFromLine (line 93) | @Test
method handlesGracefullyIfDockerfileNotFound (line 103) | @Test
FILE: core/src/test/java/org/testcontainers/images/RemoteDockerImageTest.java
class RemoteDockerImageTest (line 15) | class RemoteDockerImageTest {
method toStringContainsOnlyImageName (line 17) | @Test
method toStringWithExceptionContainsOnlyImageNameFuture (line 24) | @Test
method toStringDoesntResolveImageNameFuture (line 33) | @Test
method toStringDoesntResolveLazyFuture (line 52) | @Test
FILE: core/src/test/java/org/testcontainers/images/builder/DockerfileBuildTest.java
class DockerfileBuildTest (line 17) | class DockerfileBuildTest {
method parameters (line 21) | public static Stream<Arguments> parameters() {
method performTest (line 70) | @ParameterizedTest
FILE: core/src/test/java/org/testcontainers/images/builder/DockerignoreTest.java
class DockerignoreTest (line 15) | class DockerignoreTest {
method testInvalidDockerignore (line 19) | @Test
method testValidDockerignore (line 34) | @SuppressWarnings("resource")
FILE: core/src/test/java/org/testcontainers/images/builder/ImageFromDockerfileTest.java
class ImageFromDockerfileTest (line 11) | class ImageFromDockerfileTest {
method shouldAddDefaultLabels (line 13) | @Test
method shouldNotAddSessionLabelIfDeleteOnExitIsFalse (line 27) | @Test
FILE: core/src/test/java/org/testcontainers/images/builder/dockerfile/statement/AbstractStatementTest.java
class AbstractStatementTest (line 14) | public abstract class AbstractStatementTest {
method AbstractStatementTest (line 18) | AbstractStatementTest(TestInfo testInfo) {
method assertStatement (line 22) | protected void assertStatement(Statement statement) {
FILE: core/src/test/java/org/testcontainers/images/builder/dockerfile/statement/KeyValuesStatementTest.java
class KeyValuesStatementTest (line 9) | class KeyValuesStatementTest extends AbstractStatementTest {
method KeyValuesStatementTest (line 11) | KeyValuesStatementTest(TestInfo testInfo) {
method multilineTest (line 15) | @Test
method keyWithSpacesTest (line 27) | @Test
method keyWithNewLinesTest (line 32) | @Test
method keyWithTabsTest (line 37) | @Test
method valueIsEscapedTest (line 42) | @Test
FILE: core/src/test/java/org/testcontainers/images/builder/dockerfile/statement/MultiArgsStatementTest.java
class MultiArgsStatementTest (line 6) | class MultiArgsStatementTest extends AbstractStatementTest {
method MultiArgsStatementTest (line 8) | MultiArgsStatementTest(TestInfo testInfo) {
method simpleTest (line 12) | @Test
method multilineTest (line 17) | @Test
FILE: core/src/test/java/org/testcontainers/images/builder/dockerfile/statement/RawStatementTest.java
class RawStatementTest (line 6) | class RawStatementTest extends AbstractStatementTest {
method RawStatementTest (line 8) | RawStatementTest(TestInfo testInfo) {
method simpleTest (line 12) | @Test
FILE: core/src/test/java/org/testcontainers/images/builder/dockerfile/statement/SingleArgumentStatementTest.java
class SingleArgumentStatementTest (line 6) | class SingleArgumentStatementTest extends AbstractStatementTest {
method SingleArgumentStatementTest (line 8) | SingleArgumentStatementTest(TestInfo testInfo) {
method simpleTest (line 12) | @Test
method multilineTest (line 17) | @Test
FILE: core/src/test/java/org/testcontainers/junit/BaseComposeTest.java
class BaseComposeTest (line 20) | public abstract class BaseComposeTest {
method getEnvironment (line 24) | protected abstract ComposeContainer getEnvironment();
method checkVersion (line 28) | @BeforeAll
method simpleTest (line 33) | @Test
method secondTest (line 47) | @Test
method captureNetworks (line 64) | @BeforeEach
method verifyNoNetworks (line 69) | @AfterEach
method findAllNetworks (line 74) | private List<String> findAllNetworks() {
FILE: core/src/test/java/org/testcontainers/junit/BaseDockerComposeTest.java
class BaseDockerComposeTest (line 23) | public abstract class BaseDockerComposeTest {
method getEnvironment (line 27) | protected abstract DockerComposeContainer getEnvironment();
method checkVersion (line 31) | @BeforeAll
method simpleTest (line 36) | @Test
method secondTest (line 50) | @Test
method captureNetworks (line 67) | @BeforeEach
method verifyNoNetworks (line 72) | @AfterEach
method findAllNetworks (line 77) | private List<String> findAllNetworks() {
FILE: core/src/test/java/org/testcontainers/junit/ComposeContainerOverrideTest.java
class ComposeContainerOverrideTest (line 13) | class ComposeContainerOverrideTest {
method readEnvironment (line 19) | @Test
method resetEnvironment (line 34) | @Test
FILE: core/src/test/java/org/testcontainers/junit/ComposeContainerPortViaEnvTest.java
class ComposeContainerPortViaEnvTest (line 9) | class ComposeContainerPortViaEnvTest extends BaseComposeTest {
method ComposeContainerPortViaEnvTest (line 19) | ComposeContainerPortViaEnvTest() {
method getEnvironment (line 23) | @Override
FILE: core/src/test/java/org/testcontainers/junit/ComposeContainerScalingTest.java
class ComposeContainerScalingTest (line 17) | class ComposeContainerScalingTest {
method checkVersion (line 23) | @BeforeAll
method ComposeContainerScalingTest (line 38) | ComposeContainerScalingTest() {
method setupClients (line 42) | @BeforeEach
method simpleTest (line 52) | @Test
FILE: core/src/test/java/org/testcontainers/junit/ComposeContainerTest.java
class ComposeContainerTest (line 17) | class ComposeContainerTest extends BaseComposeTest {
method ComposeContainerTest (line 29) | ComposeContainerTest() {
method getEnvironment (line 33) | @Override
method testGetServiceHostAndPort (line 38) | @Test
method shouldRetrieveContainerByServiceName (line 53) | @Test
method shouldReturnEmptyResultOnNoneExistingService (line 65) | @Test
method shouldCreateContainerWhenFileNotPrefixedWithPath (line 74) | @Test
FILE: core/src/test/java/org/testcontainers/junit/ComposeContainerVolumeRemovalTest.java
class ComposeContainerVolumeRemovalTest (line 20) | @Disabled
method params (line 23) | public static Stream<Arguments> params() {
method performTest (line 27) | @ParameterizedTest
method volumeNameForRunningContainer (line 55) | private String volumeNameForRunningContainer(final String containerNam...
method isVolumePresent (line 68) | private boolean isVolumePresent(final String volumeName) {
FILE: core/src/test/java/org/testcontainers/junit/ComposeContainerWithBuildTest.java
class ComposeContainerWithBuildTest (line 20) | class ComposeContainerWithBuildTest {
method params (line 22) | public static Stream<Arguments> params() {
method performTest (line 30) | @ParameterizedTest
method imageNameForRunningContainer (line 83) | private String imageNameForRunningContainer(final String containerName...
method isImagePresent (line 96) | private boolean isImagePresent(final String imageName) {
FILE: core/src/test/java/org/testcontainers/junit/ComposeContainerWithCopyFilesTest.java
class ComposeContainerWithCopyFilesTest (line 15) | class ComposeContainerWithCopyFilesTest {
method testShouldCopyAllFilesByDefault (line 17) | @Test
method testWithFileCopyInclusionUsingFilePath (line 33) | @Test
method testWithFileCopyInclusionUsingDirectoryPath (line 52) | @Test
method testShouldNotBeAbleToStartIfNeededEnvFileIsNotCopied (line 72) | @Test
method readStringFromURL (line 88) | private static String readStringFromURL(ComposeContainer container) th...
FILE: core/src/test/java/org/testcontainers/junit/ComposeContainerWithOptionsTest.java
class ComposeContainerWithOptionsTest (line 21) | class ComposeContainerWithOptionsTest {
method params (line 23) | public static Stream<Arguments> params() {
method performTest (line 56) | @ParameterizedTest(name = "docker-compose test [compose file: {0}, loc...
FILE: core/src/test/java/org/testcontainers/junit/ComposeContainerWithWaitStrategiesTest.java
class ComposeContainerWithWaitStrategiesTest (line 13) | class ComposeContainerWithWaitStrategiesTest {
method testComposeContainerConstructor (line 17) | @Test
method testComposeContainerWaitForPortWithTimeout (line 34) | @Test
method containsStartedServices (line 54) | private void containsStartedServices(ComposeContainer compose, String....
FILE: core/src/test/java/org/testcontainers/junit/ComposeErrorHandlingTest.java
class ComposeErrorHandlingTest (line 12) | class ComposeErrorHandlingTest {
method simpleTest (line 14) | @Test
FILE: core/src/test/java/org/testcontainers/junit/ComposePassthroughTest.java
class ComposePassthroughTest (line 19) | class ComposePassthroughTest {
method checkVersion (line 23) | @BeforeAll
method ComposePassthroughTest (line 36) | ComposePassthroughTest() {
method testContainerInstanceProperties (line 40) | @Test
class TestWaitStrategy (line 59) | class TestWaitStrategy extends HostPortWaitStrategy {
method getContainer (line 61) | @SuppressWarnings("unchecked")
FILE: core/src/test/java/org/testcontainers/junit/ComposeWaitStrategyTest.java
class ComposeWaitStrategyTest (line 19) | class ComposeWaitStrategyTest {
method setUp (line 25) | @BeforeEach
method cleanUp (line 34) | @AfterEach
method testWaitOnListeningPort (line 39) | @Test
method testWaitOnMultipleStrategiesPassing (line 50) | @Test
method testWaitingFails (line 64) | @Test
method testWaitOnOneOfMultipleStrategiesFailing (line 76) | @Test
method testWaitingForNonexistentServices (line 95) | @Test
FILE: core/src/test/java/org/testcontainers/junit/ComposeWithIdentifierTest.java
class ComposeWithIdentifierTest (line 9) | class ComposeWithIdentifierTest extends BaseComposeTest {
method ComposeWithIdentifierTest (line 19) | ComposeWithIdentifierTest() {
method getEnvironment (line 23) | @Override
FILE: core/src/test/java/org/testcontainers/junit/ComposeWithNetworkTest.java
class ComposeWithNetworkTest (line 9) | class ComposeWithNetworkTest extends BaseComposeTest {
method ComposeWithNetworkTest (line 18) | ComposeWithNetworkTest() {
method getEnvironment (line 22) | @Override
FILE: core/src/test/java/org/testcontainers/junit/CopyFileToContainerTest.java
class CopyFileToContainerTest (line 19) | class CopyFileToContainerTest {
method setup (line 27) | @BeforeEach
method checkFileCopied (line 32) | @Test
method shouldUseCopyForReadOnlyClasspathResources (line 57) | @Test
method shouldUseCopyOnlyWithReadOnlyClasspathResources (line 70) | @Test
method shouldCreateFoldersStructureWithCopy (line 84) | @Test
FILE: core/src/test/java/org/testcontainers/junit/DependenciesTest.java
class DependenciesTest (line 21) | class DependenciesTest {
method shouldWorkWithSimpleDependency (line 23) | @Test
method shouldWorkWithMultipleDependencies (line 39) | @Test
method shouldStartEveryTime (line 56) | @Test
method shouldStartTransitiveDependencies (line 78) | @Test
method shouldHandleDiamondDependencies (line 103) | @Test
method shouldHandleParallelStream (line 126) | @Test
class InvocationCountingStartable (line 140) | private static class InvocationCountingStartable implements Startable {
method start (line 151) | @Override
method stop (line 156) | @Override
FILE: core/src/test/java/org/testcontainers/junit/DockerComposeContainerPortViaEnvTest.java
class DockerComposeContainerPortViaEnvTest (line 10) | @Disabled
method DockerComposeContainerPortViaEnvTest (line 21) | DockerComposeContainerPortViaEnvTest() {
method getEnvironment (line 25) | @Override
FILE: core/src/test/java/org/testcontainers/junit/DockerComposeContainerScalingTest.java
class DockerComposeContainerScalingTest (line 20) | class DockerComposeContainerScalingTest {
method checkVersion (line 26) | @BeforeAll
method setupClients (line 41) | @BeforeEach
method simpleTest (line 52) | @Test
FILE: core/src/test/java/org/testcontainers/junit/DockerComposeContainerTest.java
class DockerComposeContainerTest (line 22) | @Disabled
method DockerComposeContainerTest (line 33) | DockerComposeContainerTest() {
method getEnvironment (line 37) | @Override
method testGetServicePort (line 42) | @Test
method shouldRetrieveContainerByServiceName (line 51) | @Test
method shouldRetrieveContainerByServiceNameWithoutNumberedSuffix (line 64) | @Test
method shouldReturnEmptyResultOnNoneExistingService (line 77) | @Test
method shouldCreateContainerWhenFileNotPrefixedWithPath (line 86) | @Test
FILE: core/src/test/java/org/testcontainers/junit/DockerComposeContainerVolumeRemovalTest.java
class DockerComposeContainerVolumeRemovalTest (line 19) | @Disabled
method params (line 22) | public static Object[][] params() {
method performTest (line 26) | @ParameterizedTest
method volumeNameForRunningContainer (line 57) | private String volumeNameForRunningContainer(final String containerNam...
method isVolumePresent (line 70) | private boolean isVolumePresent(final String volumeName) {
FILE: core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithBuildTest.java
class DockerComposeContainerWithBuildTest (line 20) | class DockerComposeContainerWithBuildTest {
method params (line 22) | public static Stream<Arguments> params() {
method performTest (line 30) | @ParameterizedTest
method imageNameForRunningContainer (line 88) | private String imageNameForRunningContainer(final String containerName...
method isImagePresent (line 101) | private boolean isImagePresent(final String imageName) {
FILE: core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithCopyFilesTest.java
class DockerComposeContainerWithCopyFilesTest (line 13) | class DockerComposeContainerWithCopyFilesTest {
method testShouldCopyAllFilesByDefault (line 15) | @Test
method testWithFileCopyInclusionUsingFilePath (line 31) | @Test
method testWithFileCopyInclusionUsingDirectoryPath (line 50) | @Test
method readStringFromURL (line 68) | private static String readStringFromURL(DockerComposeContainer contain...
FILE: core/src/test/java/org/testcontainers/junit/DockerComposeContainerWithOptionsTest.java
class DockerComposeContainerWithOptionsTest (line 21) | class DockerComposeContainerWithOptionsTest {
method params (line 23) | public static Stream<Arguments> params() {
method performTest (line 56) | @ParameterizedTest(name = "docker-compose test [compose file: {0}, loc...
FILE: core/src/test/java/org/testcontainers/junit/DockerComposeErrorHandlingTest.java
class DockerComposeErrorHandlingTest (line 12) | class DockerComposeErrorHandlingTest {
method simpleTest (line 14) | @Test
FILE: core/src/test/java/org/testcontainers/junit/DockerComposeLocalImageTest.java
class DockerComposeLocalImageTest (line 12) | class DockerComposeLocalImageTest {
method usesLocalImageEvenWhenPullFails (line 14) | @Test
method tagImage (line 26) | private void tagImage(String sourceImage, String targetImage, String t...
FILE: core/src/test/java/org/testcontainers/junit/DockerComposeLogConsumerTest.java
class DockerComposeLogConsumerTest (line 13) | class DockerComposeLogConsumerTest {
method testLogConsumer (line 15) | @Test
FILE: core/src/test/java/org/testcontainers/junit/DockerComposePassthroughTest.java
class DockerComposePassthroughTest (line 20) | class DockerComposePassthroughTest {
method testContainerInstanceProperties (line 22) | @Test
class TestWaitStrategy (line 55) | class TestWaitStrategy extends HostPortWaitStrategy {
method getContainer (line 57) | @SuppressWarnings("unchecked")
FILE: core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java
class DockerComposeServiceTest (line 14) | @Disabled
method DockerComposeServiceTest (line 25) | DockerComposeServiceTest() {
method getEnvironment (line 29) | @Override
method testDbIsNotStarting (line 34) | @Test
method testRedisIsStarting (line 42) | @Test
FILE: core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatTest.java
class DockerComposeV2FormatTest (line 13) | @Disabled
method DockerComposeV2FormatTest (line 23) | DockerComposeV2FormatTest() {
method getEnvironment (line 27) | @Override
FILE: core/src/test/java/org/testcontainers/junit/DockerComposeV2FormatWithIdentifierTest.java
class DockerComposeV2FormatWithIdentifierTest (line 10) | @Disabled
method DockerComposeV2FormatWithIdentifierTest (line 21) | DockerComposeV2FormatWithIdentifierTest() {
method getEnvironment (line 25) | @Override
FILE: core/src/test/java/org/testcontainers/junit/DockerComposeV2WithNetworkTest.java
class DockerComposeV2WithNetworkTest (line 10) | @Disabled
method DockerComposeV2WithNetworkTest (line 20) | DockerComposeV2WithNetworkTest() {
method getEnvironment (line 24) | @Override
FILE: core/src/test/java/org/testcontainers/junit/DockerComposeWaitStrategyTest.java
class DockerComposeWaitStrategyTest (line 19) | class DockerComposeWaitStrategyTest {
method setUp (line 25) | @BeforeEach
method cleanUp (line 34) | @AfterEach
method testWaitOnListeningPort (line 39) | @Test
method testWaitOnMultipleStrategiesPassing (line 50) | @Test
method testWaitingFails (line 64) | @Test
method testWaitOnOneOfMultipleStrategiesFailing (line 76) | @Test
method testWaitingForNonexistentServices (line 95) | @Test
FILE: core/src/test/java/org/testcontainers/junit/DockerNetworkModeTest.java
class DockerNetworkModeTest (line 16) | @Slf4j
method testNoNetworkContainer (line 19) | @Test
method testHostNetworkContainer (line 35) | @Test
FILE: core/src/test/java/org/testcontainers/junit/DockerfileContainerTest.java
class DockerfileContainerTest (line 19) | class DockerfileContainerTest {
method simpleDslTest (line 34) | @Test
FILE: core/src/test/java/org/testcontainers/junit/DockerfileTest.java
class DockerfileTest (line 19) | class DockerfileTest {
method simpleDockerfileWorks (line 23) | @Test
method customizableImage (line 33) | @Test
method dockerfileBuilderWorks (line 54) | @Test
method filePermissions (line 73) | @Test
method verifyImage (line 126) | protected void verifyImage(ImageFromDockerfile image) {
FILE: core/src/test/java/org/testcontainers/junit/ExecInContainerTest.java
class ExecInContainerTest (line 15) | class ExecInContainerTest {
method shouldExecuteCommand (line 24) | @Test
method shouldExecuteCommandWithUser (line 39) | @Test
method shouldExecuteCommandWithWorkdir (line 54) | @Test
method shouldExecuteCommandWithEnvVars (line 64) | @Test
FILE: core/src/test/java/org/testcontainers/junit/FileOperationsTest.java
class FileOperationsTest (line 24) | class FileOperationsTest {
method copyFileToContainerFileTest (line 29) | @Test
method copyLargeFilesToContainer (line 47) | @Test
method copyFileToContainerFolderTest (line 84) | @Test
method copyFolderToContainerFolderTest (line 102) | @Test
method copyFromContainerShouldFailBecauseNoFileTest (line 120) | @Test
method shouldCopyFileFromContainerTest (line 137) | @Test
method copyFileOperationsShouldFailWhenNotStartedTest (line 155) | @Test
method shouldCopyFileFromExitedContainerTest (line 173) | @Test
FILE: core/src/test/java/org/testcontainers/junit/FixedHostPortContainerTest.java
class FixedHostPortContainerTest (line 23) | class FixedHostPortContainerTest {
method testFixedHostPortMapping (line 46) | @Test
method readResponse (line 86) | private String readResponse(GenericContainer container, Integer port) ...
FILE: core/src/test/java/org/testcontainers/junit/GenericContainerRuleTest.java
class GenericContainerRuleTest (line 53) | class GenericContainerRuleTest {
method setupContent (line 70) | @BeforeAll
method testIsRunning (line 154) | @Test
method withTmpFsTest (line 163) | @Test
method simpleRabbitMqTest (line 184) | @Test
method simpleMongoDbTest (line 234) | @Test
method environmentAndCustomCommandTest (line 247) | @Test
method environmentFromMapTest (line 254) | @Test
method customLabelTest (line 261) | @Test
method exceptionThrownWhenTryingToOverrideTestcontainersLabels (line 289) | @Test
method customClasspathResourceMappingTest (line 300) | @Test
method customClasspathResourceMappingWithSelinuxTest (line 311) | @Test
method exceptionThrownWhenMappedPortNotFound (line 319) | @Test
method writeStringToFile (line 326) | protected static void writeStringToFile(File contentFolder, String fil...
method failFastWhenContainerHaltsImmediately (line 335) | @Test
method extraHostTest (line 362) | @Test
method createContainerCmdHookTest (line 379) | @Test
method getReaderForContainerPort80 (line 401) | private BufferedReader getReaderForContainerPort80(GenericContainer co...
method addExposedPortAfterWithExposedPortsTest (line 414) | @Test
method addingExposedPortTwiceShouldNotFail (line 422) | @Test
method sharedMemorySetTest (line 431) | @Test
FILE: core/src/test/java/org/testcontainers/junit/NonExistentImagePullTest.java
class NonExistentImagePullTest (line 15) | class NonExistentImagePullTest {
method pullingNonExistentImageFailsGracefully (line 17) | @Test
FILE: core/src/test/java/org/testcontainers/junit/OutputStreamTest.java
class OutputStreamTest (line 26) | class OutputStreamTest {
method setUp (line 33) | @BeforeEach
method tearDown (line 38) | @AfterEach
method testFetchStdout (line 43) | @Test
method testFetchStdoutWithTimeout (line 57) | @Test
method testFetchStdoutWithNoLimit (line 81) | @Test
method testLogConsumer (line 93) | @Test
method testToStringConsumer (line 107) | @Test
FILE: core/src/test/java/org/testcontainers/junit/OutputStreamWithTTYTest.java
class OutputStreamWithTTYTest (line 23) | @Slf4j
method setUp (line 33) | @BeforeEach
method testFetchStdout (line 38) | @Test
method testFetchStdoutWithTimeout (line 53) | @Test
method testFetchStdoutWithNoLimit (line 76) | @Test
method testLogConsumer (line 87) | @Test
method testToStringConsumer (line 100) | @Test
FILE: core/src/test/java/org/testcontainers/junit/ParameterizedDockerfileContainerTest.java
class ParameterizedDockerfileContainerTest (line 18) | @ParameterizedClass(name = "{0}")
method ParameterizedDockerfileContainerTest (line 26) | public ParameterizedDockerfileContainerTest(String baseImage, String e...
method data (line 43) | public static Stream<Arguments> data() {
method simpleTest (line 53) | @Test
FILE: core/src/test/java/org/testcontainers/junit/WorkingDirectoryTest.java
class WorkingDirectoryTest (line 13) | class WorkingDirectoryTest {
method checkOutput (line 24) | @Test
FILE: core/src/test/java/org/testcontainers/junit/wait/strategy/AbstractWaitStrategyTest.java
class AbstractWaitStrategyTest (line 20) | public abstract class AbstractWaitStrategyTest<W extends WaitStrategy> {
method buildWaitStrategy (line 36) | @NotNull
method setUp (line 39) | @BeforeEach
method startContainerWithCommand (line 51) | private GenericContainer<?> startContainerWithCommand(String shellComm...
method startContainerWithCommand (line 63) | protected GenericContainer<?> startContainerWithCommand(String shellCo...
method startContainerWithCommand (line 67) | protected GenericContainer<?> startContainerWithCommand(
method waitUntilReadyAndSucceed (line 84) | protected void waitUntilReadyAndSucceed(String shellCommand) {
method waitUntilReadyAndTimeout (line 96) | protected void waitUntilReadyAndTimeout(String shellCommand) {
method waitUntilReadyAndTimeout (line 108) | protected void waitUntilReadyAndTimeout(GenericContainer<?> container) {
method waitUntilReadyAndSucceed (line 120) | protected void waitUntilReadyAndSucceed(GenericContainer<?> container) {
FILE: core/src/test/java/org/testcontainers/junit/wait/strategy/HostPortWaitStrategyTest.java
class HostPortWaitStrategyTest (line 15) | class HostPortWaitStrategyTest {
class DefaultHostPortWaitStrategyTest (line 17) | @Nested
method testWaiting (line 26) | @Test
class ExplicitHostPortWaitStrategyTest (line 32) | @Nested
method testWaiting (line 41) | @Test
FILE: core/src/test/java/org/testcontainers/junit/wait/strategy/HttpWaitStrategyTest.java
class HttpWaitStrategyTest (line 21) | class HttpWaitStrategyTest extends AbstractWaitStrategyTest<HttpWaitStra...
method testWaitUntilReadyWithSuccess (line 33) | @Test
method testWaitUntilReadyWithSuccessWithCustomHeaders (line 43) | @Test
method testWaitUntilReadyWithTlsAndAllowUnsecure (line 66) | @Test
method testWaitUntilReadyWithUnauthorizedWithLambda (line 82) | @Test
method testWaitUntilReadyWithManyStatusCodes (line 98) | @Test
method testWaitUntilReadyWithManyStatusCodesAndLambda (line 115) | @Test
method testWaitUntilReadyWithTimeoutAndWithManyStatusCodesAndLambda (line 135) | @Test
method testWaitUntilReadyWithTimeoutAndWithLambdaShouldNotMatchOk (line 154) | @Test
method testWaitUntilReadyWithTimeout (line 170) | @Test
method testWaitUntilReadyWithTimeoutAndBadResponseBody (line 179) | @Test
method testWaitUntilReadyWithSpecificPort (line 187) | @Test
method testWaitUntilReadyWithTimeoutCausedByReadTimeout (line 202) | @Test
method testWaitUntilReadyWithTimeoutCausedBySslHandshakeError (line 219) | @Test
method buildWaitStrategy (line 244) | @NotNull
method createHttpWaitStrategy (line 255) | private HttpWaitStrategy createHttpWaitStrategy(final AtomicBoolean re...
method createShellCommand (line 266) | private String createShellCommand(String header, String responseBody) {
method createShellCommand (line 270) | private String createShellCommand(String header, String responseBody, ...
method createHttpsShellCommand (line 290) | private String createHttpsShellCommand(String header, String responseB...
FILE: core/src/test/java/org/testcontainers/junit/wait/strategy/LogMessageWaitStrategyTest.java
class LogMessageWaitStrategyTest (line 14) | @ParameterizedClass(name = "{0}")
method parameters (line 20) | public static Object[] parameters() {
method LogMessageWaitStrategyTest (line 28) | public LogMessageWaitStrategyTest(String pattern) {
method testWaitUntilReady_Success (line 34) | @Test
method testWaitUntilReady_Timeout (line 48) | @Test
method buildWaitStrategy (line 53) | @NotNull
FILE: core/src/test/java/org/testcontainers/junit/wait/strategy/ShellStrategyTest.java
class ShellStrategyTest (line 12) | class ShellStrategyTest extends AbstractWaitStrategyTest<ShellStrategy> {
method testWaitUntilReady_Success (line 16) | @Test
method testWaitUntilReady_Timeout (line 21) | @Test
method buildWaitStrategy (line 26) | @NotNull
method createShellStrategy (line 32) | @NotNull
FILE: core/src/test/java/org/testcontainers/utility/AuthenticatedImagePullTest.java
class AuthenticatedImagePullTest (line 34) | public class AuthenticatedImagePullTest {
method beforeClass (line 55) | @BeforeAll
method tearDown (line 80) | @AfterAll
method testThatAuthLocatorIsUsedForContainerCreation (line 85) | @Test
method testThatAuthLocatorIsUsedForDockerfileBuild (line 98) | @Test
method testThatAuthLocatorIsUsedForDockerComposePull (line 118) | @Test
method getLocalTempFile (line 149) | private Path getLocalTempFile(String s) throws IOException {
FILE: core/src/test/java/org/testcontainers/utility/ClasspathScannerTest.java
class ClasspathScannerTest (line 18) | class ClasspathScannerTest {
method setUp (line 30) | @BeforeAll
method realClassLoaderLookupOccurs (line 39) | @Test
method multipleResultsOnOneClassLoaderAreFound (line 47) | @Test
method orderIsAlphabeticalForDeterminism (line 59) | @Test
method multipleClassLoadersAreQueried (line 73) | @Test
FILE: core/src/test/java/org/testcontainers/utility/ComparableVersionTest.java
class ComparableVersionTest (line 10) | class ComparableVersionTest {
method shouldParseVersions (line 12) | @ParameterizedTest(name = "Parsed version: {0}={1}")
method data (line 18) | public static Iterable<Object[]> data() {
FILE: core/src/test/java/org/testcontainers/utility/DefaultImageNameSubstitutorTest.java
class DefaultImageNameSubstitutorTest (line 11) | @ExtendWith(MockTestcontainersConfigurationExtension.class)
method setUp (line 20) | @BeforeEach
method testConfigurationLookup (line 25) | @Test
FILE: core/src/test/java/org/testcontainers/utility/DirectoryTarResourceTest.java
class DirectoryTarResourceTest (line 14) | class DirectoryTarResourceTest {
method simpleRecursiveFileTest (line 16) | @Test
method simpleRecursiveFileWithPermissionTest (line 43) | @Test
method simpleRecursiveClasspathResourceTest (line 69) | @Test
FILE: core/src/test/java/org/testcontainers/utility/DockerImageNameCompatibilityTest.java
class DockerImageNameCompatibilityTest (line 8) | class DockerImageNameCompatibilityTest {
method testPlainImage (line 10) | @Test
method testNoTagTreatedAsWildcard (line 17) | @Test
method testImageWithAutomaticCompatibilityForFullPath (line 30) | @Test
method testImageWithClaimedCompatibility (line 39) | @Test
method testImageWithClaimedCompatibilityAndVersion (line 47) | @Test
method testImageWithClaimedCompatibilityForFullPath (line 54) | @Test
method testImageWithClaimedCompatibilityForVersion (line 69) | @Test
method testAssertMethodAcceptsCompatible (line 88) | @Test
method testAssertMethodAcceptsCompatibleLibraryPrefix (line 94) | @Test
method testAssertMethodRejectsIncompatible (line 100) | @Test
FILE: core/src/test/java/org/testcontainers/utility/DockerImageNameTest.java
class DockerImageNameTest (line 13) | class DockerImageNameTest {
class ValidNames (line 15) | @Nested
method getNames (line 18) | public static String[] getNames() {
method testValidNameAccepted (line 34) | @ParameterizedTest
class InvalidNames (line 41) | @Nested
method getNames (line 44) | public static String[] getNames() {
method testInvalidNameRejected (line 54) | @ParameterizedTest
class Parsing (line 62) | @Nested
method getNames (line 65) | public static Stream<Arguments> getNames() {
method testParsing (line 97) | @ParameterizedTest
FILE: core/src/test/java/org/testcontainers/utility/DockerLoggerFactoryTest.java
class DockerLoggerFactoryTest (line 11) | class DockerLoggerFactoryTest {
method debugIsNotSwallowedForContainerLogs (line 15) | @Test
FILE: core/src/test/java/org/testcontainers/utility/DockerStatusTest.java
class DockerStatusTest (line 18) | @ParameterizedClass
method DockerStatusTest (line 43) | public DockerStatusTest(DateTimeFormatter dateTimeFormatter) {
method parameters (line 54) | public static Stream<DateTimeFormatter> parameters() {
method testRunning (line 61) | @Test
method testStopped (line 72) | @Test
method buildTimestamp (line 83) | private String buildTimestamp(Instant instant) {
method buildState (line 89) | private static InspectContainerResponse.ContainerState buildState(
FILE: core/src/test/java/org/testcontainers/utility/FakeImagePullPolicy.java
class FakeImagePullPolicy (line 6) | public class FakeImagePullPolicy extends AbstractImagePullPolicy {
method shouldPullCached (line 8) | @Override
FILE: core/src/test/java/org/testcontainers/utility/FakeImageSubstitutor.java
class FakeImageSubstitutor (line 3) | public class FakeImageSubstitutor extends ImageNameSubstitutor {
method apply (line 5) | @Override
method getDescription (line 10) | @Override
FILE: core/src/test/java/org/testcontainers/utility/FilterRegistryTest.java
class FilterRegistryTest (line 18) | class FilterRegistryTest {
method registerReturnsTrueIfAcknowledgementIsReadFromInputStream (line 33) | @Test
method registerReturnsFalseIfNoAcknowledgementIsReadFromInputStream (line 42) | @Test
method registerWritesUrlEncodedFiltersAndNewlineToOutputStream (line 51) | @Test
method inputStream (line 61) | private static InputStream inputStream(byte[] bytes) {
method anyInputStream (line 65) | private static InputStream anyInputStream() {
method anyOutputStream (line 69) | private static OutputStream anyOutputStream() {
FILE: core/src/test/java/org/testcontainers/utility/ImageNameSubstitutorTest.java
class ImageNameSubstitutorTest (line 23) | @ExtendWith(MockTestcontainersConfigurationExtension.class)
method setUp (line 33) | @BeforeEach
method tearDown (line 47) | @AfterEach
method simpleConfigurationTest (line 53) | @Test
method testWorksWithoutConfiguredImplementation (line 68) | @Test
method testImageNameSubstitutorToString (line 80) | @Test
method testImageNameSubstitutorFromServiceLoader (line 95) | @Test
method createClassFile (line 122) | private void createClassFile(Path tempDir, String classFilePath, Class...
method createServiceProviderFile (line 128) | private void createServiceProviderFile(Path metaInfDir, String service...
FILE: core/src/test/java/org/testcontainers/utility/LazyFutureTest.java
class LazyFutureTest (line 22) | class LazyFutureTest {
method testLaziness (line 24) | @Test
method timeoutWorks (line 43) | @Test
method testThreadSafety (line 60) | @Test
FILE: core/src/test/java/org/testcontainers/utility/LicenseAcceptanceTest.java
class LicenseAcceptanceTest (line 7) | class LicenseAcceptanceTest {
method testForExistingNames (line 9) | @Test
method testForMissingNames (line 15) | @Test
FILE: core/src/test/java/org/testcontainers/utility/MockTestcontainersConfigurationExtension.java
class MockTestcontainersConfigurationExtension (line 14) | public class MockTestcontainersConfigurationExtension implements BeforeE...
method beforeEach (line 22) | @Override
method afterEach (line 32) | @Override
FILE: core/src/test/java/org/testcontainers/utility/MountableFileTest.java
class MountableFileTest (line 20) | class MountableFileTest {
method forClasspathResource (line 28) | @Test
method forClasspathResourceWithAbsolutePath (line 35) | @Test
method forClasspathResourceFromJar (line 42) | @Test
method forClasspathResourceFromJarWithAbsolutePath (line 49) | @Test
method forHostPath (line 56) | @Test
method forHostPathWithSpaces (line 64) | @Test
method forHostPathWithPlus (line 77) | @Test
method forClasspathResourceWithPermission (line 90) | @Test
method forHostFilePathWithPermission (line 101) | @Test
method forHostDirPathWithPermission (line 109) | @Test
method noTrailingSlashesInTarEntryNames (line 117) | @Test
method intoTarArchive (line 134) | private TarArchiveInputStream intoTarArchive(Consumer<TarArchiveOutput...
method createTempFile (line 145) | @SuppressWarnings("ResultOfMethodCallIgnored")
method createTempDir (line 157) | @NotNull
method performChecks (line 162) | private void performChecks(final MountableFile mountableFile) {
FILE: core/src/test/java/org/testcontainers/utility/PrefixingImageNameSubstitutorTest.java
class PrefixingImageNameSubstitutorTest (line 12) | class PrefixingImageNameSubstitutorTest {
method setUp (line 18) | @BeforeEach
method testHappyPath (line 24) | @Test
method hubIoRegistryIsNotChanged (line 36) | @Test
method hubComRegistryIsNotChanged (line 46) | @Test
method thirdPartyRegistriesNotAffected (line 58) | @Test
method testNoDoublePrefixing (line 70) | @Test
method testHandlesEmptyValue (line 82) | @Test
method testHandlesRegistryOnlyWithTrailingSlash (line 94) | @Test
method testCombinesLiterallyForRegistryOnlyWithoutTrailingSlash (line 106) | @Test
method testCombinesLiterallyForBothPartsWithoutTrailingSlash (line 118) | @Test
FILE: core/src/test/java/org/testcontainers/utility/RegistryAuthLocatorTest.java
class RegistryAuthLocatorTest (line 20) | class RegistryAuthLocatorTest {
method lookupAuthConfigWithoutCredentials (line 22) | @Test
method lookupAuthConfigWithBasicAuthCredentials (line 38) | @Test
method lookupAuthConfigWithJsonKeyCredentials (line 54) | @Test
method lookupAuthConfigWithJsonKeyCredentialsPartialMatchShouldGiveNoResult (line 70) | @Test
method lookupAuthConfigUsingStore (line 84) | @Test
method lookupAuthConfigUsingHelper (line 104) | @Test
method lookupAuthConfigUsingHelperWithToken (line 124) | @Test
method lookupUsingHelperEmptyAuth (line 141) | @Test
method lookupNonEmptyAuthWithHelper (line 161) | @Test
method lookupAuthConfigUsingHelperNoServerUrl (line 181) | @Test
method lookupAuthConfigUsingHelperNoServerUrlWithToken (line 201) | @Test
method lookupAuthConfigWithCredentialsNotFound (line 220) | @Test
method lookupAuthConfigWithCredStoreEmpty (line 246) | @Test
method lookupAuthConfigFromEnvVarWithCredStoreEmpty (line 256) | @Test
method lookupAuthConfigWithoutConfigFile (line 266) | @Test
method lookupAuthConfigRespectsCheckOrderPreference (line 282) | @Test
method lookupAuthConfigFromEnvironmentVariable (line 298) | @Test
method createTestAuthLocator (line 314) | @NotNull
method createTestAuthLocator (line 320) | @NotNull
method createTestAuthLocator (line 325) | @NotNull
method createTestAuthLocator (line 331) | @NotNull
FILE: core/src/test/java/org/testcontainers/utility/ResourceReaperTest.java
class ResourceReaperTest (line 24) | class ResourceReaperTest {
method shouldCleanupWithRyuk (line 26) | @Test
method shouldCleanupWithJVM (line 33) | @Test
method assertCleanup (line 42) | private void assertCleanup(Map<String, String> labels) {
method runProcess (line 68) | @SneakyThrows
class SimpleUsage (line 95) | public static class SimpleUsage {
method main (line 99) | @SneakyThrows
FILE: core/src/test/java/org/testcontainers/utility/TestEnvironmentTest.java
class TestEnvironmentTest (line 10) | class TestEnvironmentTest {
method testCompareVersionGreaterThanSameMajor (line 12) | @Test
method testCompareVersionEqual (line 19) | @Test
method testCompareVersionGreaterThan (line 26) | @Test
method testCompareVersionIgnoresExcessLength (line 33) | @Test
FILE: core/src/test/java/org/testcontainers/utility/TestcontainersConfigurationTest.java
class TestcontainersConfigurationTest (line 13) | class TestcontainersConfigurationTest {
method setUp (line 21) | @BeforeEach
method shouldSubstituteImageNamesFromClasspathProperties (line 28) | @Test
method shouldSubstituteImageNamesFromUserProperties (line 36) | @Test
method shouldSubstituteImageNamesFromEnvironmentVariables (line 44) | @Test
method shouldApplySettingsInOrder (line 52) | @Test
method shouldNotReadChecksFromClasspathProperties (line 77) | @Test
method shouldReadChecksFromUserProperties (line 85) | @Test
method shouldReadChecksFromEnvironment (line 93) | @Test
method shouldReadDockerSettingsFromEnvironmentWithoutTestcontainersPrefix (line 102) | @Test
method shouldNotReadDockerSettingsFromEnvironmentWithTestcontainersPrefix (line 111) | @Test
method shouldReadDockerSettingsFromUserProperties (line 120) | @Test
method shouldNotReadSettingIfCorrespondingEnvironmentVarIsEmptyString (line 129) | @Test
method shouldNotReadDockerClientStrategyFromClasspathProperties (line 137) | @Test
method shouldReadDockerClientStrategyFromUserProperties (line 147) | @Test
method shouldReadDockerClientStrategyFromEnvironment (line 155) | @Test
method shouldNotUseImplicitDockerClientStrategyWhenDockerHostAndStrategyAreBothSet (line 164) | @Test
method shouldNotReadReuseFromClasspathProperties (line 193) | @Test
method shouldReadReuseFromUserProperties (line 203) | @Test
method shouldReadReuseFromEnvironment (line 211) | @Test
method shouldTrimImageNames (line 220) | @Test
method newConfig (line 228) | private TestcontainersConfiguration newConfig() {
FILE: core/src/test/resources/compose-file-copy-inclusions/EnvVariableRestEndpoint.java
class EnvVariableRestEndpoint (line 11) | public class EnvVariableRestEndpoint {
method main (line 15) | public static void main(String[] args) throws IOException {
class EnvVariableHandler (line 23) | static class EnvVariableHandler implements HttpHandler {
method handle (line 24) | @Override
FILE: docs/examples/junit4/generic/src/test/java/generic/CmdModifierTest.java
class CmdModifierTest (line 17) | public class CmdModifierTest {
method testHostnameModified (line 43) | @Test
method testMemoryLimitModified (line 49) | @Test
method getMemoryLimitFilePath (line 55) | private String getMemoryLimitFilePath() {
FILE: docs/examples/junit4/generic/src/test/java/generic/CommandsTest.java
class CommandsTest (line 10) | public class CommandsTest {
method testStartupCommandOverrideApplied (line 19) | @Test
FILE: docs/examples/junit4/generic/src/test/java/generic/ContainerCreationTest.java
class ContainerCreationTest (line 10) | public class ContainerCreationTest {
method testStartup (line 40) | @Test
FILE: docs/examples/junit4/generic/src/test/java/generic/ContainerLabelTest.java
class ContainerLabelTest (line 9) | public class ContainerLabelTest {
FILE: docs/examples/junit4/generic/src/test/java/generic/DependsOnTest.java
class DependsOnTest (line 9) | public class DependsOnTest {
method testContainersAllStarted (line 22) | @Test
FILE: docs/examples/junit4/generic/src/test/java/generic/ExampleImageNameSubstitutor.java
class ExampleImageNameSubstitutor (line 6) | public class ExampleImageNameSubstitutor extends ImageNameSubstitutor {
method apply (line 8) | @Override
method getDescription (line 19) | @Override
FILE: docs/examples/junit4/generic/src/test/java/generic/ExecTest.java
class ExecTest (line 13) | public class ExecTest {
method testSimpleExec (line 19) | @Test
FILE: docs/examples/junit4/generic/src/test/java/generic/HostPortExposedTest.java
class HostPortExposedTest (line 18) | public class HostPortExposedTest {
method setUp (line 24) | @BeforeClass
method tearDown (line 47) | @AfterClass
method testContainerRunningAgainstExposedHostPort (line 56) | @Test
FILE: docs/examples/junit4/generic/src/test/java/generic/ImageNameSubstitutionTest.java
class ImageNameSubstitutionTest (line 8) | public class ImageNameSubstitutionTest {
method simpleExample (line 10) | @Test
method substitutedExample (line 32) | @Test
FILE: docs/examples/junit4/generic/src/test/java/generic/MultiplePortsExposedTest.java
class MultiplePortsExposedTest (line 11) | public class MultiplePortsExposedTest {
method fetchPortsByNumber (line 25) | @Test
method fetchFirstMappedPort (line 31) | @Test
method getHostOnly (line 36) | @Test
method getHostAndMappedPort (line 41) | @Test
FILE: docs/examples/junit4/generic/src/test/java/generic/WaitStrategiesTest.java
class WaitStrategiesTest (line 13) | public class WaitStrategiesTest {
method testContainersAllStarted (line 72) | @Test
FILE: docs/examples/junit4/generic/src/test/java/generic/support/TestSpecificImageNameSubstitutor.java
class TestSpecificImageNameSubstitutor (line 11) | public class TestSpecificImageNameSubstitutor extends ImageNameSubstitut...
method apply (line 13) | @Override
method getDescription (line 22) | @Override
FILE: docs/examples/junit4/generic/src/test/java/org/testcontainers/containers/startupcheck/StartupCheckStrategyTest.java
class StartupCheckStrategyTest (line 19) | @RunWith(Suite.class)
method waitForHello (line 31) | private static void waitForHello(GenericContainer container) throws Ti...
class OneShotStrategyTest (line 38) | public static class OneShotStrategyTest {
method testCommandIsExecuted (line 52) | @SneakyThrows
class IndefiniteOneShotStrategyTest (line 61) | public static class IndefiniteOneShotStrategyTest {
method testCommandIsExecuted (line 77) | @SneakyThrows
class MinimumDurationStrategyTest (line 86) | public static class MinimumDurationStrategyTest {
method testCommandIsExecuted (line 102) | @SneakyThrows
FILE: docs/examples/junit4/redis/src/main/java/quickstart/RedisBackedCache.java
class RedisBackedCache (line 6) | public class RedisBackedCache {
method RedisBackedCache (line 10) | public RedisBackedCache(String hostname, Integer port) {
method get (line 15) | public String get(String key) {
method put (line 19) | public void put(String key, String value) {
FILE: docs/examples/junit4/redis/src/test/java/quickstart/RedisBackedCacheIntTest.java
class RedisBackedCacheIntTest (line 11) | public class RedisBackedCacheIntTest {
method setUp (line 22) | @Before
method testSimplePutAndGet (line 31) | @Test
FILE: docs/examples/junit4/redis/src/test/java/quickstart/RedisBackedCacheIntTestStep0.java
class RedisBackedCacheIntTestStep0 (line 9) | @Ignore("This test class is deliberately invalid, as it relies on a non-...
method setUp (line 14) | @Before
method testSimplePutAndGet (line 20) | @Test
FILE: docs/examples/junit5/redis/src/main/java/quickstart/RedisBackedCache.java
class RedisBackedCache (line 6) | public class RedisBackedCache {
method RedisBackedCache (line 10) | public RedisBackedCache(String hostname, Integer port) {
method get (line 15) | public String get(String key) {
method put (line 19) | public void put(String key, String value) {
FILE: docs/examples/junit5/redis/src/test/java/quickstart/RedisBackedCacheIntTest.java
class RedisBackedCacheIntTest (line 13) | @Testcontainers
method setUp (line 25) | @BeforeEach
method testSimplePutAndGet (line 34) | @Test
FILE: docs/examples/junit5/redis/src/test/java/quickstart/RedisBackedCacheIntTestStep0.java
class RedisBackedCacheIntTestStep0 (line 9) | @Disabled("This test class is deliberately invalid, as it relies on a no...
method setUp (line 14) | @BeforeEach
method testSimplePutAndGet (line 20) | @Test
FILE: docs/examples/spock/redis/src/main/java/quickstart/RedisBackedCache.java
class RedisBackedCache (line 6) | public class RedisBackedCache {
method RedisBackedCache (line 10) | public RedisBackedCache(String hostname, Integer port) {
method get (line 15) | public String get(String key) {
method put (line 19) | public void put(String key, String value) {
FILE: docs/js/tc-header.js
function toggleMobileMenu (line 3) | function toggleMobileMenu() {
function toggleMobileSubmenu (line 7) | function toggleMobileSubmenu() {
function clearActiveMenuItem (line 16) | function clearActiveMenuItem() {
function setActiveMenuItem (line 22) | function setActiveMenuItem(e) {
FILE: examples/cucumber/src/test/java/org/testcontainers/examples/CucumberTest.java
class CucumberTest (line 8) | @Suite
FILE: examples/cucumber/src/test/java/org/testcontainers/examples/Stepdefs.java
class Stepdefs (line 23) | public class Stepdefs {
method beforeScenario (line 33) | @Before
method afterScenario (line 38) | @After
method locationIs (line 56) | @Given("^location is \"([^\"]*)\"$")
method iAskIsItPossibleToSearchHere (line 61) | @When("^I ask is it possible to search here$")
method iShouldBeTold (line 69) | @Then("^I should be told \"([^\"]*)\"$")
FILE: examples/hazelcast/src/test/java/org/testcontainers/examples/HazelcastTest.java
class HazelcastTest (line 21) | class HazelcastTest {
method cleanUp (line 49) | @AfterEach
method singleHazelcastContainer (line 54) | @Test
method hazelcastCluster (line 78) | @Test
FILE: examples/immudb/src/test/java/ImmuDbTest.java
class ImmuDbTest (line 18) | @Testcontainers
method setUp (line 42) | @BeforeEach
method tearDown (line 53) | @AfterEach
method testGetValue (line 58) | @Test
FILE: examples/kafka-cluster/src/test/java/com/example/kafkacluster/ApacheKafkaContainerCluster.java
class ApacheKafkaContainerCluster (line 19) | public class ApacheKafkaContainerCluster implements Startable {
method ApacheKafkaContainerCluster (line 27) | public ApacheKafkaContainerCluster(String version, int brokersNum, int...
method getBrokers (line 70) | public Collection<KafkaContainer> getBrokers() {
method getBootstrapServers (line 74) | public String getBootstrapServers() {
method start (line 78) | @Override
method stop (line 102) | @Override
FILE: examples/kafka-cluster/src/test/java/com/example/kafkacluster/ApacheKafkaContainerClusterTest.java
class ApacheKafkaContainerClusterTest (line 28) | class ApacheKafkaContainerClusterTest {
method testKafkaContainerCluster (line 30) | @Test
method testKafkaFunctionality (line 42) | protected void testKafkaFunctionality(String bootstrapServers, int par...
FILE: examples/kafka-cluster/src/test/java/com/example/kafkacluster/ConfluentKafkaContainerCluster.java
class ConfluentKafkaContainerCluster (line 19) | public class ConfluentKafkaContainerCluster implements Startable {
method ConfluentKafkaContainerCluster (line 27) | public ConfluentKafkaContainerCluster(String confluentPlatformVersion,...
method getBrokers (line 71) | public Collection<ConfluentKafkaContainer> getBrokers() {
method getBootstrapServers (line 75) | public String getBootstrapServers() {
method start (line 79) | @Override
method stop (line 103) | @Override
FILE: examples/kafka-cluster/src/test/java/com/example/kafkacluster/ConfluentKafkaContainerClusterTest.java
class ConfluentKafkaContainerClusterTest (line 28) | class ConfluentKafkaContainerClusterTest {
method testKafkaContainerCluster (line 30) | @Test
method testKafkaFunctionality (line 42) | protected void testKafkaFunctionality(String bootstrapServers, int par...
FILE: examples/kafka-cluster/src/test/java/com/example/kafkacluster/KafkaContainerCluster.java
class KafkaContainerCluster (line 23) | public class KafkaContainerCluster implements Startable {
method KafkaContainerCluster (line 33) | public KafkaContainerCluster(String confluentPlatformVersion, int brok...
method getBrokers (line 75) | public Collection<KafkaContainer> getBrokers() {
method getBootstrapServers (line 79) | public String getBootstrapServers() {
method allContainers (line 83) | private Stream<GenericContainer<?>> allContainers() {
method start (line 87) | @Override
method stop (line 111) | @Override
FILE: examples/kafka-cluster/src/test/java/com/example/kafkacluster/KafkaContainerClusterTest.java
class KafkaContainerClusterTest (line 28) | class KafkaContainerClusterTest {
method testKafkaContainerCluster (line 30) | @Test
method testKafkaContainerKraftCluster (line 42) | @Test
method testKafkaContainerKraftClusterAfterConfluentPlatform740 (line 54) | @Test
method testKafkaFunctionality (line 66) | protected void testKafkaFunctionality(String bootstrapServers, int par...
FILE: examples/kafka-cluster/src/test/java/com/example/kafkacluster/KafkaContainerKraftCluster.java
class KafkaContainerKraftCluster (line 19) | public class KafkaContainerKraftCluster implements Startable {
method KafkaContainerKraftCluster (line 27) | public KafkaContainerKraftCluster(String confluentPlatformVersion, int...
method getBrokers (line 72) | public Collection<KafkaContainer> getBrokers() {
method getBootstrapServers (line 76) | public String getBootstrapServers() {
method start (line 80) | @Override
method stop (line 104) | @Override
FILE: examples/nats/src/test/java/com/example/NatsContainerTest.java
class NatsContainerTest (line 18) | class NatsContainerTest {
method test (line 24) | @Test
method testServerStatus (line 40) | @Test
FILE: examples/neo4j-container/src/test/java/org/testcontainers/containers/Neo4jExampleTest.java
class Neo4jExampleTest (line 26) | @Testcontainers
method testSomethingUsingBolt (line 33) | @Test
method testSomethingUsingHttp (line 45) | @Test
FILE: examples/ollama-hugging-face/src/test/java/com/example/ollamahf/OllamaHuggingFaceContainer.java
class OllamaHuggingFaceContainer (line 10) | public class OllamaHuggingFaceContainer extends OllamaContainer {
method OllamaHuggingFaceContainer (line 14) | public OllamaHuggingFaceContainer(HuggingFaceModel model) {
method containerIsStarted (line 19) | @Override
method executeCommand (line 40) | private void executeCommand(String... command) throws ContainerLaunchE...
class HuggingFaceModel (line 49) | public static class HuggingFaceModel {
method HuggingFaceModel (line 57) | public HuggingFaceModel(String repository, String model) {
FILE: examples/ollama-hugging-face/src/test/java/com/example/ollamahf/OllamaHuggingFaceTest.java
class OllamaHuggingFaceTest (line 13) | public class OllamaHuggingFaceTest {
method embeddingModelWithHuggingFace (line 15) | @Test
method createImage (line 53) | private static void createImage(String imageName, String repository, S...
class EmbeddingRequest (line 63) | public static class EmbeddingRequest {
method EmbeddingRequest (line 69) | public EmbeddingRequest(String model, String prompt) {
FILE: examples/redis-backed-cache-testng/src/main/java/com/mycompany/cache/Cache.java
type Cache (line 8) | public interface Cache {
method put (line 16) | void put(String key, Object value);
method get (line 25) | <T> Optional<T> get(String key, Class<T> expectedClass);
FILE: examples/redis-backed-cache-testng/src/main/java/com/mycompany/cache/RedisBackedCache.java
class RedisBackedCache (line 11) | public class RedisBackedCache implements Cache {
method RedisBackedCache (line 19) | public RedisBackedCache(Jedis jedis, String cacheName) {
method put (line 25) | @Override
method get (line 31) | @Override
FILE: examples/redis-backed-cache-testng/src/test/java/RedisBackedCacheTest.java
class RedisBackedCacheTest (line 18) | public class RedisBackedCacheTest {
method startContainer (line 25) | @BeforeClass
method stopContainer (line 30) | @AfterClass
method setUp (line 35) | @BeforeMethod
method testFindingAnInsertedValue (line 42) | @Test
method testNotFindingAValueThatWasNotInserted (line 53) | @Test
FILE: examples/redis-backed-cache/src/main/java/com/mycompany/cache/Cache.java
type Cache (line 8) | public interface Cache {
method put (line 16) | void put(String key, Object value);
method get (line 25) | <T> Optional<T> get(String key, Class<T> expectedClass);
FILE: examples/redis-backed-cache/src/main/java/com/mycompany/cache/RedisBackedCache.java
class RedisBackedCache (line 11) | public class RedisBackedCache implements Cache {
method RedisBackedCache (line 19) | public RedisBackedCache(Jedis jedis, String cacheName) {
method put (line 25) | @Override
method get (line 31) | @Override
FILE: examples/redis-backed-cache/src/test/java/RedisBackedCacheTest.java
class RedisBackedCacheTest (line 18) | @Testcontainers
method setUp (line 27) | @BeforeEach
method testFindingAnInsertedValue (line 34) | @Test
method testNotFindingAValueThatWasNotInserted (line 45) | @Test
FILE: examples/selenium-container/src/main/java/com/example/DemoApplication.java
class DemoApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: examples/selenium-container/src/test/java/SeleniumContainerTest.java
class SeleniumContainerTest (line 30) | @org.testcontainers.junit.jupiter.Testcontainers
method simplePlainSeleniumTest (line 44) | @Test
class Initializer (line 55) | static class Initializer implements ApplicationContextInitializer<Conf...
method initialize (line 57) | @Override
FILE: examples/sftp/src/test/java/org/example/SftpContainerTest.java
class SftpContainerTest (line 19) | class SftpContainerTest {
method test (line 21) | @Test
method testHostKeyCheck (line 55) | @Test
FILE: examples/singleton-container/src/main/java/com/example/cache/Cache.java
type Cache (line 5) | public interface Cache {
method put (line 6) | void put(String key, Object value);
method get (line 8) | <T> Optional<T> get(String key, Class<T> expectedClass);
FILE: examples/singleton-container/src/main/java/com/example/cache/RedisBackedCache.java
class RedisBackedCache (line 8) | public class RedisBackedCache implements Cache {
method RedisBackedCache (line 16) | public RedisBackedCache(Jedis jedis, String cacheName) {
method put (line 22) | public void put(String key, Object value) {
method get (line 27) | public <T> Optional<T> get(String key, Class<T> expectedClass) {
FILE: examples/singleton-container/src/test/java/com/example/AbstractIntegrationTest.java
class AbstractIntegrationTest (line 6) | public abstract class AbstractIntegrationTest {
FILE: examples/singleton-container/src/test/java/com/example/BarConcreteTestClass.java
class BarConcreteTestClass (line 13) | class BarConcreteTestClass extends AbstractIntegrationTest {
method setUp (line 17) | @BeforeEach
method testInsertValue (line 24) | @Test
FILE: examples/singleton-container/src/test/java/com/example/FooConcreteTestClass.java
class FooConcreteTestClass (line 13) | class FooConcreteTestClass extends AbstractIntegrationTest {
method setUp (line 17) | @BeforeEach
method testInsertValue (line 24) | @Test
FILE: examples/solr-container/src/main/java/com/example/SearchEngine.java
type SearchEngine (line 3) | public interface SearchEngine {
method search (line 4) | public SearchResult search(String term);
FILE: examples/solr-container/src/main/java/com/example/SearchResult.java
class SearchResult (line 11) | @Data
FILE: examples/solr-container/src/main/java/com/example/SolrSearchEngine.java
class SolrSearchEngine (line 13) | @RequiredArgsConstructor
method search (line 20) | @SneakyThrows
method createResult (line 28) | private SearchResult createResult(QueryResponse response) {
FILE: examples/solr-container/src/test/java/com/example/SolrQueryTest.java
class SolrQueryTest (line 20) | class SolrQueryTest {
method setUp (line 29) | @BeforeAll
method testQueryForShoes (line 65) | @Test
method testQueryForTShirt (line 74) | @Test
method testQueryForAsterisk (line 83) | @Test
method createInputField (line 91) | private static SolrInputField createInputField(String key, String valu...
method createMap (line 97) | private static Map<String, SolrInputField> createMap(String k0, SolrIn...
FILE: examples/spring-boot/src/main/java/com/example/DemoApplication.java
class DemoApplication (line 7) | @SpringBootApplication
method main (line 11) | public static void main(String[] args) {
FILE: examples/spring-boot/src/main/java/com/example/DemoController.java
class DemoController (line 10) | @RestController
method DemoController (line 17) | public DemoController(StringRedisTemplate stringRedisTemplate, DemoSer...
method get (line 22) | @GetMapping("/foo")
method set (line 27) | @PutMapping("/foo")
method getDemoEntity (line 32) | @GetMapping("/{id}")
FILE: examples/spring-boot/src/main/java/com/example/DemoEntity.java
class DemoEntity (line 10) | @Data
FILE: examples/spring-boot/src/main/java/com/example/DemoRepository.java
type DemoRepository (line 5) | public interface DemoRepository extends JpaRepository<DemoEntity, Long> {}
FILE: examples/spring-boot/src/main/java/com/example/DemoService.java
class DemoService (line 5) | @Service
method DemoService (line 10) | public DemoService(DemoRepository demoRepository) {
method getDemoEntity (line 14) | public DemoEntity getDemoEntity(Long id) {
FILE: examples/spring-boot/src/test/java/com/example/AbstractIntegrationTest.java
class AbstractIntegrationTest (line 11) | @SpringBootTest(
method redisProperties (line 22) | @DynamicPropertySource
FILE: examples/spring-boot/src/test/java/com/example/DemoControllerTest.java
class DemoControllerTest (line 9) | class DemoControllerTest extends AbstractIntegrationTest {
method simpleTest (line 17) | @Test
method simpleJPATest (line 26) | @Test
FILE: examples/zookeeper/src/test/java/com/example/ZookeeperContainerTest.java
class ZookeeperContainerTest (line 13) | class ZookeeperContainerTest {
method test (line 17) | @Test
FILE: modules/activemq/src/main/java/org/testcontainers/activemq/ActiveMQContainer.java
class ActiveMQContainer (line 22) | public class ActiveMQContainer extends GenericContainer<ActiveMQContaine...
method ActiveMQContainer (line 46) | public ActiveMQContainer(String image) {
method ActiveMQContainer (line 50) | public ActiveMQContainer(DockerImageName dockerImageName) {
method configure (line 58) | @Override
method withUser (line 68) | public ActiveMQContainer withUser(String username) {
method withPassword (line 73) | public ActiveMQContainer withPassword(String password) {
method getBrokerUrl (line 78) | public String getBrokerUrl() {
method getUser (line 82) | public String getUser() {
method getPassword (line 86) | public String getPassword() {
FILE: modules/activemq/src/main/java/org/testcontainers/activemq/ArtemisContainer.java
class ArtemisContainer (line 23) | public class ArtemisContainer extends GenericContainer<ArtemisContainer> {
method ArtemisContainer (line 46) | public ArtemisContainer(String image) {
method ArtemisContainer (line 50) | public ArtemisContainer(DockerImageName dockerImageName) {
method configure (line 58) | @Override
method withUser (line 64) | public ArtemisContainer withUser(String username) {
method withPassword (line 69) | public ArtemisContainer withPassword(String password) {
method getBrokerUrl (line 74) | public String getBrokerUrl() {
method getUser (line 78) | public String getUser() {
method getPassword (line 82) | public String getPassword() {
FILE: modules/activemq/src/test/java/org/testcontainers/activemq/ActiveMQContainerTest.java
class ActiveMQContainerTest (line 18) | class ActiveMQContainerTest {
method test (line 20) | @Test
method compatibility (line 34) | @ParameterizedTest
method customCredentials (line 43) | @Test
method assertFunctionality (line 60) | @SneakyThrows
FILE: modules/activemq/src/test/java/org/testcontainers/activemq/ArtemisContainerTest.java
class ArtemisContainerTest (line 15) | class ArtemisContainerTest {
method defaultCredentials (line 17) | @Test
method customCredentials (line 32) | @Test
method allowAnonymousLogin (line 49) | @Test
method assertFunctionality (line 63) | @SneakyThrows
FILE: modules/azure/src/main/java/org/testcontainers/azure/AzuriteContainer.java
class AzuriteContainer (line 19) | public class AzuriteContainer extends GenericContainer<AzuriteContainer> {
method AzuriteContainer (line 58) | public AzuriteContainer(String dockerImageName) {
method AzuriteContainer (line 65) | public AzuriteContainer(DockerImageName dockerImageName) {
method withSsl (line 78) | public AzuriteContainer withSsl(final MountableFile pfxCert, final Str...
method withSsl (line 92) | public AzuriteContainer withSsl(final MountableFile pemCert, final Mou...
method configure (line 99) | @Override
method getConnectionString (line 117) | public String getConnectionString() {
method getConnectionString (line 128) | public String getConnectionString(final String accountName, final Stri...
method getCommandLine (line 150) | String getCommandLine() {
FILE: modules/azure/src/main/java/org/testcontainers/azure/EventHubsEmulatorContainer.java
class EventHubsEmulatorContainer (line 19) | public class EventHubsEmulatorContainer extends GenericContainer<EventHu...
method EventHubsEmulatorContainer (line 35) | public EventHubsEmulatorContainer(final String dockerImageName) {
method EventHubsEmulatorContainer (line 42) | public EventHubsEmulatorContainer(final DockerImageName dockerImageNam...
method withAzuriteContainer (line 55) | public EventHubsEmulatorContainer withAzuriteContainer(final AzuriteCo...
method withConfig (line 67) | public EventHubsEmulatorContainer withConfig(final Transferable config) {
method acceptLicense (line 77) | public EventHubsEmulatorContainer acceptLicense() {
method configure (line 82) | @Override
method getConnectionString (line 106) | public String getConnectionString() {
FILE: modules/azure/src/main/java/org/testcontainers/azure/ServiceBusEmulatorContainer.java
class ServiceBusEmulatorContainer (line 17) | public class ServiceBusEmulatorContainer extends GenericContainer<Servic...
method ServiceBusEmulatorContainer (line 33) | public ServiceBusEmulatorContainer(final String dockerImageName) {
method ServiceBusEmulatorContainer (line 40) | public ServiceBusEmulatorContainer(final DockerImageName dockerImageNa...
method withMsSqlServerContainer (line 54) | public ServiceBusEmulatorContainer withMsSqlServerContainer(final MSSQ...
method withConfig (line 66) | public ServiceBusEmulatorContainer withConfig(final Transferable confi...
method acceptLicense (line 76) | public ServiceBusEmulatorContainer acceptLicense() {
method configure (line 81) | @Override
method getConnectionString (line 104) | public String getConnectionString() {
FILE: modules/azure/src/main/java/org/testcontainers/containers/CosmosDBEmulatorContainer.java
class CosmosDBEmulatorContainer (line 15) | public class CosmosDBEmulatorContainer extends GenericContainer<CosmosDB...
method CosmosDBEmulatorContainer (line 26) | public CosmosDBEmulatorContainer(final DockerImageName dockerImageName) {
method buildNewKeyStore (line 36) | public KeyStore buildNewKeyStore() {
method getEmulatorKey (line 47) | public String getEmulatorKey() {
method getEmulatorEndpoint (line 54) | public String getEmulatorEndpoint() {
FILE: modules/azure/src/main/java/org/testcontainers/containers/KeyStoreBuilder.java
class KeyStoreBuilder (line 21) | final class KeyStoreBuilder {
method buildByDownloadingCertificate (line 23) | static KeyStore buildByDownloadingCertificate(String endpoint, String ...
method buildTrustAllManagers (line 40) | private static TrustManager[] buildTrustAllManagers() {
method buildTrustAllClient (line 57) | private static OkHttpClient buildTrustAllClient(TrustManager[] trustMa...
method buildRequest (line 67) | private static Request buildRequest(String endpoint) {
method buildKeyStore (line 71) | private static KeyStore buildKeyStore(InputStream certificateStream, S...
method closeResponseSilently (line 79) | private static void closeResponseSilently(Response response) {
method closeClientSilently (line 87) | private static void closeClientSilently(OkHttpClient client) {
FILE: modules/azure/src/test/java/org/testcontainers/azure/AzuriteContainerTest.java
class AzuriteContainerTest (line 23) | class AzuriteContainerTest {
method captureOriginalSystemProperties (line 29) | @BeforeAll
method restoreOriginalSystemProperties (line 40) | @AfterAll
method testWithBlobServiceClient (line 45) | @Test
method testWithQueueServiceClient (line 58) | @Test
method testWithTableServiceClient (line 67) | @Test
method testWithBlobServiceClientWithSslUsingPfx (line 76) | @Test
method testWithQueueServiceClientWithSslUsingPfx (line 88) | @Test
method testWithTableServiceClientWithSslUsingPfx (line 100) | @Test
method testWithBlobServiceClientWithSslUsingPem (line 112) | @Test
method testWithQueueServiceClientWithSslUsingPem (line 127) | @Test
method testWithTableServiceClientWithSslUsingPem (line 142) | @Test
method testTwoAccountKeysWithBlobServiceClient (line 157) | @Test
method
Condensed preview — 1372 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,584K chars).
[
{
"path": ".circleci/config.yml",
"chars": 571,
"preview": "version: 2\njobs:\n minimal_core:\n machine:\n enabled: true\n steps:\n - checkout\n - run:\n command: "
},
{
"path": ".devcontainer/devcontainer.json",
"chars": 1535,
"preview": "// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:\n// https://github.co"
},
{
"path": ".editorconfig",
"chars": 619,
"preview": "# EditorConfig is awesome: http://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n# Unix-style newlines with"
},
{
"path": ".gitattributes",
"chars": 16,
"preview": "*.sh text eol=lf"
},
{
"path": ".github/CODEOWNERS",
"chars": 28,
"preview": "* @testcontainers/java-team\n"
},
{
"path": ".github/FUNDING.yml",
"chars": 72,
"preview": "# These are supported funding model platforms\n\ngithub: [testcontainers]\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yaml",
"chars": 3671,
"preview": "name: Bug Report\ndescription: File a bug report\ntitle: \"[Bug]: \"\nlabels: [\"type/bug\"]\nbody:\n - type: markdown\n attri"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 346,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Need help or have a question?\n url: https://slack.testcontainers"
},
{
"path": ".github/ISSUE_TEMPLATE/enhancement.yaml",
"chars": 1983,
"preview": "name: Enhancement\ndescription: Suggest an enhancement\ntitle: \"[Enhancement]: \"\nlabels: [\"type/enhancement\"]\nbody:\n - ty"
},
{
"path": ".github/ISSUE_TEMPLATE/feature.yaml",
"chars": 2628,
"preview": "name: Feature\ndescription: Suggest a new feature\ntitle: \"[Feature]: \"\nlabels: [\"type/feature\"]\nbody:\n - type: markdown\n"
},
{
"path": ".github/actions/setup-build/action.yml",
"chars": 432,
"preview": "name: Set up Build\ndescription: Sets up Build\ninputs:\n java-version:\n description: 'The Java version to set up'\n "
},
{
"path": ".github/actions/setup-gradle/action.yml",
"chars": 285,
"preview": "name: Set up Gradle Action\ndescription: Sets up Gradle Action\nruns:\n using: \"composite\"\n steps:\n - name: Setup Grad"
},
{
"path": ".github/actions/setup-java/action.yml",
"chars": 320,
"preview": "name: Set up Java\ndescription: Sets up Java version\ninputs:\n java-version:\n description: 'The Java version to set up"
},
{
"path": ".github/actions/setup-junit-report/action.yml",
"chars": 338,
"preview": "name: Set up JUnit Report\ndescription: Sets up JUnit Report\nruns:\n using: \"composite\"\n steps:\n - name: Publish Test"
},
{
"path": ".github/bumper.yml",
"chars": 62,
"preview": "updates:\n- path: mkdocs.yml\n pattern: 'latest_version: (.*)'\n"
},
{
"path": ".github/dependabot.yml",
"chars": 14937,
"preview": "version: 2\nregistries:\n gradle-plugin-portal:\n type: maven-repository\n url: https://plugins.gradle.org/m2\n use"
},
{
"path": ".github/labeler.yml",
"chars": 6750,
"preview": "\"area/docker-compose\":\n - changed-files:\n - any-glob-to-any-file:\n - core/src/main/java/org/testcontainers/cont"
},
{
"path": ".github/pull_request_template.md",
"chars": 1523,
"preview": "<!--\nThanks for contributing to Testcontainers. Before submitting a pull request, please\nreview our contributing guideli"
},
{
"path": ".github/release-drafter.yml",
"chars": 612,
"preview": "name-template: $NEXT_PATCH_VERSION\ntag-template: $NEXT_PATCH_VERSION\ntemplate: |\n # What's Changed\n\n $CHANGES\ncate"
},
{
"path": ".github/settings.yml",
"chars": 10884,
"preview": "# These settings are synced to GitHub by https://probot.github.io/apps/settings/\n\nrepository:\n # See https://docs.githu"
},
{
"path": ".github/workflows/ci-docker-wormhole.yml",
"chars": 1449,
"preview": "name: CI-Docker-Wormhole\n\non:\n pull_request:\n paths-ignore:\n - '.github/ISSUE_TEMPLATE/*.yaml'\n - '.github"
},
{
"path": ".github/workflows/ci-rootless.yml",
"chars": 1444,
"preview": "name: CI-Docker-Rootless\n\non:\n pull_request:\n paths-ignore:\n - '.github/ISSUE_TEMPLATE/*.yaml'\n - '.github"
},
{
"path": ".github/workflows/ci-windows-trigger.yml",
"chars": 964,
"preview": "name: windows-test command dispatch\n\non:\n issue_comment:\n types: [created]\n\npermissions:\n contents: read\n\njobs:\n w"
},
{
"path": ".github/workflows/ci-windows.yml",
"chars": 3932,
"preview": "name: CI - Windows\n\non:\n pull_request:\n paths-ignore:\n - '.github/ISSUE_TEMPLATE/*.yaml'\n - '.github/CODEO"
},
{
"path": ".github/workflows/ci.yml",
"chars": 6077,
"preview": "name: CI\n\non:\n pull_request:\n paths-ignore:\n - '.github/ISSUE_TEMPLATE/*.yaml'\n - '.github/CODEOWNERS'\n "
},
{
"path": ".github/workflows/combine-prs.yml",
"chars": 345,
"preview": "name: Combine PRs\n\non:\n workflow_dispatch:\n\njobs:\n combine-prs:\n permissions:\n contents: write\n pull-requ"
},
{
"path": ".github/workflows/labeler.yml",
"chars": 268,
"preview": "name: \"Pull Request Labeler\"\non:\n- pull_request_target\n\njobs:\n triage:\n permissions:\n contents: read\n pull"
},
{
"path": ".github/workflows/moby-latest.yml",
"chars": 2329,
"preview": "name: Tests against recent Docker engine releases\n\non:\n workflow_dispatch:\n inputs:\n version:\n descripti"
},
{
"path": ".github/workflows/release-drafter.yml",
"chars": 639,
"preview": "name: Release Drafter\n\non:\n push:\n branches:\n - main\n pull_request:\n types: [opened, reopened, synchronize]"
},
{
"path": ".github/workflows/release.yml",
"chars": 1301,
"preview": "name: Release\n\non:\n release:\n types: [published]\n\nenv:\n AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}\n AWS_S"
},
{
"path": ".github/workflows/scripts/check_ci_status.sh",
"chars": 304,
"preview": "#!/bin/bash\nset -o errexit\nset -o nounset\nset -o pipefail\nset -o xtrace\n\nif [ -z $1 ] ; then\n echo \"First parameter (co"
},
{
"path": ".github/workflows/update-docs-version.yml",
"chars": 1024,
"preview": "name: Update docs version\n\non:\n release:\n types: [ published ]\n\npermissions:\n contents: read\n\njobs:\n build:\n pe"
},
{
"path": ".github/workflows/update-gradle-wrapper.yml",
"chars": 727,
"preview": "name: Update Gradle Wrapper\n\non:\n schedule:\n - cron: \"0 0 * * *\"\n\npermissions:\n contents: read\n\njobs:\n update-grad"
},
{
"path": ".github/workflows/update-testcontainers-version.yml",
"chars": 1061,
"preview": "name: Update testcontainers version\n\non:\n release:\n types: [ published ]\n\npermissions:\n contents: read\n\njobs:\n bui"
},
{
"path": ".gitignore",
"chars": 1158,
"preview": "/.mvn/timing.properties\n# Created by .ignore support plugin (hsz.mobi)\n### Maven template\ntarget/\ndependency-reduced-pom"
},
{
"path": ".sdkmanrc",
"chars": 113,
"preview": "# Enable auto-env through the sdkman_auto_env config\n# Add key=value pairs of SDKs to use below\njava=17.0.16-tem\n"
},
{
"path": "AUTHORS",
"chars": 300,
"preview": "This file is deprecated. Please see the [contributors](https://github.com/testcontainers/testcontainers-java/graphs/cont"
},
{
"path": "CHANGELOG.md",
"chars": 47200,
"preview": "# Change Log\n~All notable changes to this project will be documented in this file.~\n\n# MOVED\n\n**After version 1.8.3 all "
},
{
"path": "CONTRIBUTING.md",
"chars": 582,
"preview": "# Contributing\n\nPlease see the [main contributing guidelines](./docs/contributing.md).\n\nThere are additional docs descri"
},
{
"path": "LICENSE",
"chars": 1085,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2015-2019 Richard North\n\nPermission is hereby granted, free of charge, to any perso"
},
{
"path": "README.md",
"chars": 1492,
"preview": "# Testcontainers\n\n['>\n <ann"
},
{
"path": "annotations/org/rnorth/ducttape/annotations.xml",
"chars": 268,
"preview": "<root>\n <item name='org.rnorth.ducttape.Preconditions void check(java.lang.String, boolean)'>\n <annotation nam"
},
{
"path": "azure-pipelines.yml",
"chars": 1191,
"preview": "jobs:\n\n- job: core_tests\n timeoutInMinutes: 60\n steps:\n\n # Run all core tests when running the Windows CI tests\n - t"
},
{
"path": "bom/build.gradle",
"chars": 933,
"preview": "description = \"Testcontainers :: BOM\"\n\npublishing {\n publications {\n mavenJava(MavenPublication) { publication"
},
{
"path": "build.gradle",
"chars": 4134,
"preview": "buildscript {\n repositories {\n mavenCentral()\n }\n\n dependencies {\n // https://github.com/melix/ja"
},
{
"path": "buildSrc/build.gradle",
"chars": 77,
"preview": "plugins {\n id 'java-gradle-plugin'\n}\n\nrepositories {\n mavenCentral()\n}\n"
},
{
"path": "buildSrc/src/main/groovy/org/testcontainers/build/ComparePOMWithLatestReleasedTask.groovy",
"chars": 1522,
"preview": "package org.testcontainers.build\n\nimport groovy.xml.XmlSlurper\nimport org.gradle.api.DefaultTask\nimport org.gradle.api.t"
},
{
"path": "buildSrc/src/main/groovy/org/testcontainers/build/DelombokArgumentProvider.groovy",
"chars": 710,
"preview": "package org.testcontainers.build\n\nimport org.gradle.api.tasks.InputFiles\nimport org.gradle.api.tasks.OutputDirectory\nimp"
},
{
"path": "config/checkstyle/checkstyle.xml",
"chars": 2779,
"preview": "<!DOCTYPE module PUBLIC \"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN\"\n \"https://checkstyle.org/dtds/configura"
},
{
"path": "core/build.gradle",
"chars": 4526,
"preview": "apply plugin: 'com.gradleup.shadow'\n\ndescription = \"Testcontainers Core\"\n\nsourceSets {\n jarFileTest\n}\n\ntest.maxParall"
},
{
"path": "core/src/jarFileTest/java/org/testcontainers/AbstractJarFileTest.java",
"chars": 863,
"preview": "package org.testcontainers;\n\nimport java.net.URI;\nimport java.net.URLDecoder;\nimport java.nio.charset.StandardCharsets;\n"
},
{
"path": "core/src/jarFileTest/java/org/testcontainers/JarFileShadingTest.java",
"chars": 1434,
"preview": "package org.testcontainers;\n\nimport org.assertj.core.api.ListAssert;\nimport org.junit.jupiter.api.Test;\n\nimport java.io."
},
{
"path": "core/src/jarFileTest/java/org/testcontainers/PublicBinaryAPITest.java",
"chars": 4996,
"preview": "package org.testcontainers;\n\nimport lombok.RequiredArgsConstructor;\nimport org.assertj.core.api.Assertions;\nimport org.j"
},
{
"path": "core/src/main/java/org/testcontainers/DelegatingDockerClient.java",
"chars": 295,
"preview": "package org.testcontainers;\n\nimport com.github.dockerjava.api.DockerClient;\nimport lombok.RequiredArgsConstructor;\nimpor"
},
{
"path": "core/src/main/java/org/testcontainers/DockerClientFactory.java",
"chars": 14337,
"preview": "package org.testcontainers;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.dockerjava.api.DockerClien"
},
{
"path": "core/src/main/java/org/testcontainers/Testcontainers.java",
"chars": 635,
"preview": "package org.testcontainers;\n\nimport lombok.experimental.UtilityClass;\nimport org.testcontainers.containers.PortForwardin"
},
{
"path": "core/src/main/java/org/testcontainers/UnstableAPI.java",
"chars": 490,
"preview": "package org.testcontainers;\n\nimport java.lang.annotation.Documented;\nimport java.lang.annotation.ElementType;\nimport jav"
},
{
"path": "core/src/main/java/org/testcontainers/containers/BindMode.java",
"chars": 357,
"preview": "package org.testcontainers.containers;\n\nimport com.github.dockerjava.api.model.AccessMode;\n\n/**\n * Possible modes for bi"
},
{
"path": "core/src/main/java/org/testcontainers/containers/ComposeCommand.java",
"chars": 1476,
"preview": "package org.testcontainers.containers;\n\nimport java.util.Set;\n\nclass ComposeCommand {\n\n static String getDownCommand("
},
{
"path": "core/src/main/java/org/testcontainers/containers/ComposeContainer.java",
"chars": 14844,
"preview": "package org.testcontainers.containers;\n\nimport com.github.dockerjava.api.model.Container;\nimport com.google.common.annot"
},
{
"path": "core/src/main/java/org/testcontainers/containers/ComposeDelegate.java",
"chars": 16493,
"preview": "package org.testcontainers.containers;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.dockerjava.api."
},
{
"path": "core/src/main/java/org/testcontainers/containers/ComposeServiceWaitStrategyTarget.java",
"chars": 1994,
"preview": "package org.testcontainers.containers;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.dockerjava.api."
},
{
"path": "core/src/main/java/org/testcontainers/containers/Container.java",
"chars": 16572,
"preview": "package org.testcontainers.containers;\n\nimport com.github.dockerjava.api.model.Bind;\nimport lombok.AccessLevel;\nimport l"
},
{
"path": "core/src/main/java/org/testcontainers/containers/ContainerDef.java",
"chars": 9486,
"preview": "package org.testcontainers.containers;\n\nimport com.github.dockerjava.api.command.CreateContainerCmd;\nimport com.github.d"
},
{
"path": "core/src/main/java/org/testcontainers/containers/ContainerFetchException.java",
"chars": 310,
"preview": "package org.testcontainers.containers;\n\n/**\n * Created by rnorth on 15/10/2015.\n */\npublic class ContainerFetchException"
},
{
"path": "core/src/main/java/org/testcontainers/containers/ContainerLaunchException.java",
"chars": 374,
"preview": "package org.testcontainers.containers;\n\n/**\n * AN exception that may be raised during launch of a container.\n */\npublic "
},
{
"path": "core/src/main/java/org/testcontainers/containers/ContainerState.java",
"chars": 15722,
"preview": "package org.testcontainers.containers;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.dockerjava.api."
},
{
"path": "core/src/main/java/org/testcontainers/containers/ContainerisedDockerCompose.java",
"chars": 5171,
"preview": "package org.testcontainers.containers;\n\nimport com.google.common.base.Joiner;\nimport com.google.common.util.concurrent.U"
},
{
"path": "core/src/main/java/org/testcontainers/containers/DockerCompose.java",
"chars": 309,
"preview": "package org.testcontainers.containers;\n\nimport java.util.Map;\n\ninterface DockerCompose {\n String ENV_PROJECT_NAME = \""
},
{
"path": "core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java",
"chars": 15276,
"preview": "package org.testcontainers.containers;\n\nimport com.github.dockerjava.api.model.Container;\nimport com.google.common.annot"
},
{
"path": "core/src/main/java/org/testcontainers/containers/DockerComposeFiles.java",
"chars": 1655,
"preview": "package org.testcontainers.containers;\n\nimport org.testcontainers.utility.DockerImageName;\n\nimport java.io.File;\nimport "
},
{
"path": "core/src/main/java/org/testcontainers/containers/DockerMcpGatewayContainer.java",
"chars": 3599,
"preview": "package org.testcontainers.containers;\n\nimport org.testcontainers.DockerClientFactory;\nimport org.testcontainers.contain"
},
{
"path": "core/src/main/java/org/testcontainers/containers/DockerModelRunnerContainer.java",
"chars": 3322,
"preview": "package org.testcontainers.containers;\n\nimport com.github.dockerjava.api.command.InspectContainerResponse;\nimport lombok"
},
{
"path": "core/src/main/java/org/testcontainers/containers/ExecConfig.java",
"chars": 545,
"preview": "package org.testcontainers.containers;\n\nimport lombok.Builder;\nimport lombok.Getter;\n\nimport java.util.Map;\n\n/**\n * Exec"
},
{
"path": "core/src/main/java/org/testcontainers/containers/ExecInContainerPattern.java",
"chars": 11712,
"preview": "package org.testcontainers.containers;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.dockerjava.api."
},
{
"path": "core/src/main/java/org/testcontainers/containers/FixedHostPortGenericContainer.java",
"chars": 2012,
"preview": "package org.testcontainers.containers;\n\nimport org.jetbrains.annotations.NotNull;\n\n/**\n * Variant of {@link GenericConta"
},
{
"path": "core/src/main/java/org/testcontainers/containers/FutureContainer.java",
"chars": 293,
"preview": "package org.testcontainers.containers;\n\nimport lombok.Data;\nimport org.testcontainers.containers.traits.LinkableContaine"
},
{
"path": "core/src/main/java/org/testcontainers/containers/GenericContainer.java",
"chars": 52262,
"preview": "package org.testcontainers.containers;\n\nimport com.fasterxml.jackson.core.JsonProcessingException;\nimport com.fasterxml."
},
{
"path": "core/src/main/java/org/testcontainers/containers/InternetProtocol.java",
"chars": 351,
"preview": "package org.testcontainers.containers;\n\n/**\n * The IP protocols supported by Docker.\n */\npublic enum InternetProtocol {\n"
},
{
"path": "core/src/main/java/org/testcontainers/containers/LocalDockerCompose.java",
"chars": 4735,
"preview": "package org.testcontainers.containers;\n\nimport com.github.dockerjava.core.LocalDirectorySSLConfig;\nimport com.github.doc"
},
{
"path": "core/src/main/java/org/testcontainers/containers/Network.java",
"chars": 3141,
"preview": "package org.testcontainers.containers;\n\nimport com.github.dockerjava.api.command.CreateNetworkCmd;\nimport lombok.Builder"
},
{
"path": "core/src/main/java/org/testcontainers/containers/ParsedDockerComposeFile.java",
"chars": 7837,
"preview": "package org.testcontainers.containers;\n\nimport com.google.common.annotations.VisibleForTesting;\nimport com.google.common"
},
{
"path": "core/src/main/java/org/testcontainers/containers/PortForwardingContainer.java",
"chars": 2826,
"preview": "package org.testcontainers.containers;\n\nimport com.github.dockerjava.api.model.ContainerNetwork;\nimport com.trilead.ssh2"
},
{
"path": "core/src/main/java/org/testcontainers/containers/SelinuxContext.java",
"chars": 357,
"preview": "package org.testcontainers.containers;\n\nimport com.github.dockerjava.api.model.SELContext;\nimport lombok.AllArgsConstruc"
},
{
"path": "core/src/main/java/org/testcontainers/containers/SocatContainer.java",
"chars": 1644,
"preview": "package org.testcontainers.containers;\n\nimport org.testcontainers.utility.Base58;\nimport org.testcontainers.utility.Dock"
},
{
"path": "core/src/main/java/org/testcontainers/containers/VncRecordingContainer.java",
"chars": 5658,
"preview": "package org.testcontainers.containers;\n\nimport lombok.Getter;\nimport lombok.NonNull;\nimport lombok.RequiredArgsConstruct"
},
{
"path": "core/src/main/java/org/testcontainers/containers/output/BaseConsumer.java",
"chars": 451,
"preview": "package org.testcontainers.containers.output;\n\nimport lombok.Getter;\nimport lombok.Setter;\n\nimport java.util.function.Co"
},
{
"path": "core/src/main/java/org/testcontainers/containers/output/FrameConsumerResultCallback.java",
"chars": 5133,
"preview": "package org.testcontainers.containers.output;\n\nimport com.github.dockerjava.api.async.ResultCallbackTemplate;\nimport com"
},
{
"path": "core/src/main/java/org/testcontainers/containers/output/OutputFrame.java",
"chars": 2172,
"preview": "package org.testcontainers.containers.output;\n\nimport com.github.dockerjava.api.model.Frame;\nimport com.github.dockerjav"
},
{
"path": "core/src/main/java/org/testcontainers/containers/output/Slf4jLogConsumer.java",
"chars": 2641,
"preview": "package org.testcontainers.containers.output;\n\nimport org.slf4j.Logger;\nimport org.slf4j.MDC;\n\nimport java.util.HashMap;"
},
{
"path": "core/src/main/java/org/testcontainers/containers/output/ToStringConsumer.java",
"chars": 999,
"preview": "package org.testcontainers.containers.output;\n\nimport com.google.common.base.Charsets;\n\nimport java.io.ByteArrayOutputSt"
},
{
"path": "core/src/main/java/org/testcontainers/containers/output/WaitingConsumer.java",
"chars": 5554,
"preview": "package org.testcontainers.containers.output;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\nimport java.uti"
},
{
"path": "core/src/main/java/org/testcontainers/containers/startupcheck/IndefiniteWaitOneShotStartupCheckStrategy.java",
"chars": 988,
"preview": "package org.testcontainers.containers.startupcheck;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.google.co"
},
{
"path": "core/src/main/java/org/testcontainers/containers/startupcheck/IsRunningStartupCheckStrategy.java",
"chars": 1701,
"preview": "package org.testcontainers.containers.startupcheck;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.do"
},
{
"path": "core/src/main/java/org/testcontainers/containers/startupcheck/MinimumDurationRunningStartupCheckStrategy.java",
"chars": 1483,
"preview": "package org.testcontainers.containers.startupcheck;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.do"
},
{
"path": "core/src/main/java/org/testcontainers/containers/startupcheck/OneShotStartupCheckStrategy.java",
"chars": 1063,
"preview": "package org.testcontainers.containers.startupcheck;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.do"
},
{
"path": "core/src/main/java/org/testcontainers/containers/startupcheck/StartupCheckStrategy.java",
"chars": 2674,
"preview": "package org.testcontainers.containers.startupcheck;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.do"
},
{
"path": "core/src/main/java/org/testcontainers/containers/traits/LinkableContainer.java",
"chars": 401,
"preview": "package org.testcontainers.containers.traits;\n\n/**\n * A container which can be linked to by other containers.\n *\n * @dep"
},
{
"path": "core/src/main/java/org/testcontainers/containers/wait/internal/ExternalPortListeningCheck.java",
"chars": 1210,
"preview": "package org.testcontainers.containers.wait.internal;\n\nimport lombok.RequiredArgsConstructor;\nimport org.testcontainers.c"
},
{
"path": "core/src/main/java/org/testcontainers/containers/wait/internal/InternalCommandPortListeningCheck.java",
"chars": 2370,
"preview": "package org.testcontainers.containers.wait.internal;\n\nimport lombok.RequiredArgsConstructor;\nimport lombok.extern.slf4j."
},
{
"path": "core/src/main/java/org/testcontainers/containers/wait/strategy/AbstractWaitStrategy.java",
"chars": 2761,
"preview": "package org.testcontainers.containers.wait.strategy;\n\nimport lombok.NonNull;\nimport org.rnorth.ducttape.ratelimits.RateL"
},
{
"path": "core/src/main/java/org/testcontainers/containers/wait/strategy/DockerHealthcheckWaitStrategy.java",
"chars": 965,
"preview": "package org.testcontainers.containers.wait.strategy;\n\nimport org.rnorth.ducttape.TimeoutException;\nimport org.rnorth.duc"
},
{
"path": "core/src/main/java/org/testcontainers/containers/wait/strategy/HostPortWaitStrategy.java",
"chars": 5037,
"preview": "package org.testcontainers.containers.wait.strategy;\n\nimport lombok.SneakyThrows;\nimport lombok.extern.slf4j.Slf4j;\nimpo"
},
{
"path": "core/src/main/java/org/testcontainers/containers/wait/strategy/HttpWaitStrategy.java",
"chars": 15590,
"preview": "package org.testcontainers.containers.wait.strategy;\n\nimport com.google.common.base.Strings;\nimport com.google.common.io"
},
{
"path": "core/src/main/java/org/testcontainers/containers/wait/strategy/LogMessageWaitStrategy.java",
"chars": 2174,
"preview": "package org.testcontainers.containers.wait.strategy;\n\nimport com.github.dockerjava.api.command.LogContainerCmd;\nimport l"
},
{
"path": "core/src/main/java/org/testcontainers/containers/wait/strategy/ShellStrategy.java",
"chars": 988,
"preview": "package org.testcontainers.containers.wait.strategy;\n\nimport org.rnorth.ducttape.TimeoutException;\nimport org.rnorth.duc"
},
{
"path": "core/src/main/java/org/testcontainers/containers/wait/strategy/Wait.java",
"chars": 2589,
"preview": "package org.testcontainers.containers.wait.strategy;\n\n/**\n * Convenience class with logic for building common {@link Wai"
},
{
"path": "core/src/main/java/org/testcontainers/containers/wait/strategy/WaitAllStrategy.java",
"chars": 3248,
"preview": "package org.testcontainers.containers.wait.strategy;\n\nimport org.rnorth.ducttape.timeouts.Timeouts;\n\nimport java.time.Du"
},
{
"path": "core/src/main/java/org/testcontainers/containers/wait/strategy/WaitStrategy.java",
"chars": 243,
"preview": "package org.testcontainers.containers.wait.strategy;\n\nimport java.time.Duration;\n\npublic interface WaitStrategy {\n vo"
},
{
"path": "core/src/main/java/org/testcontainers/containers/wait/strategy/WaitStrategyTarget.java",
"chars": 627,
"preview": "package org.testcontainers.containers.wait.strategy;\n\nimport org.testcontainers.containers.ContainerState;\n\nimport java."
},
{
"path": "core/src/main/java/org/testcontainers/core/CreateContainerCmdModifier.java",
"chars": 385,
"preview": "package org.testcontainers.core;\n\nimport com.github.dockerjava.api.command.CreateContainerCmd;\n\n/**\n * Callback interfac"
},
{
"path": "core/src/main/java/org/testcontainers/dockerclient/AuditLoggingDockerClient.java",
"chars": 5587,
"preview": "package org.testcontainers.dockerclient;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.dockerjava.ap"
},
{
"path": "core/src/main/java/org/testcontainers/dockerclient/AuthDelegatingDockerClientConfig.java",
"chars": 2018,
"preview": "package org.testcontainers.dockerclient;\n\nimport com.github.dockerjava.api.model.AuthConfig;\nimport com.github.dockerjav"
},
{
"path": "core/src/main/java/org/testcontainers/dockerclient/DockerClientConfigUtils.java",
"chars": 2428,
"preview": "package org.testcontainers.dockerclient;\n\nimport lombok.Getter;\nimport lombok.extern.slf4j.Slf4j;\nimport org.apache.comm"
},
{
"path": "core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java",
"chars": 19517,
"preview": "package org.testcontainers.dockerclient;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.dockerjava.ap"
},
{
"path": "core/src/main/java/org/testcontainers/dockerclient/DockerDesktopClientProviderStrategy.java",
"chars": 2474,
"preview": "package org.testcontainers.dockerclient;\n\nimport lombok.Getter;\nimport lombok.extern.slf4j.Slf4j;\nimport org.apache.comm"
},
{
"path": "core/src/main/java/org/testcontainers/dockerclient/DockerMachineClientProviderStrategy.java",
"chars": 3124,
"preview": "package org.testcontainers.dockerclient;\n\nimport com.github.dockerjava.core.LocalDirectorySSLConfig;\nimport com.google.c"
},
{
"path": "core/src/main/java/org/testcontainers/dockerclient/EnvironmentAndSystemPropertyClientProviderStrategy.java",
"chars": 3097,
"preview": "package org.testcontainers.dockerclient;\n\nimport com.github.dockerjava.core.DefaultDockerClientConfig;\nimport com.github"
},
{
"path": "core/src/main/java/org/testcontainers/dockerclient/HeadersAddingDockerHttpClient.java",
"chars": 661,
"preview": "package org.testcontainers.dockerclient;\n\nimport com.github.dockerjava.transport.DockerHttpClient;\nimport lombok.Require"
},
{
"path": "core/src/main/java/org/testcontainers/dockerclient/InvalidConfigurationException.java",
"chars": 390,
"preview": "package org.testcontainers.dockerclient;\n\n/**\n * Exception to indicate that a {@link DockerClientProviderStrategy} fails"
},
{
"path": "core/src/main/java/org/testcontainers/dockerclient/LogToStringContainerCallback.java",
"chars": 694,
"preview": "package org.testcontainers.dockerclient;\n\nimport com.github.dockerjava.api.async.ResultCallback;\nimport com.github.docke"
},
{
"path": "core/src/main/java/org/testcontainers/dockerclient/NpipeSocketClientProviderStrategy.java",
"chars": 1036,
"preview": "package org.testcontainers.dockerclient;\n\nimport org.apache.commons.lang3.SystemUtils;\n\nimport java.net.URI;\n\n/**\n *\n * "
},
{
"path": "core/src/main/java/org/testcontainers/dockerclient/RootlessDockerClientProviderStrategy.java",
"chars": 3232,
"preview": "package org.testcontainers.dockerclient;\n\nimport com.sun.jna.Library;\nimport com.sun.jna.Native;\nimport lombok.Getter;\ni"
},
{
"path": "core/src/main/java/org/testcontainers/dockerclient/TestcontainersHostPropertyClientProviderStrategy.java",
"chars": 2109,
"preview": "package org.testcontainers.dockerclient;\n\nimport com.github.dockerjava.core.DefaultDockerClientConfig;\nimport com.github"
},
{
"path": "core/src/main/java/org/testcontainers/dockerclient/TransportConfig.java",
"chars": 312,
"preview": "package org.testcontainers.dockerclient;\n\nimport com.github.dockerjava.transport.SSLConfig;\nimport lombok.Builder;\nimpor"
},
{
"path": "core/src/main/java/org/testcontainers/dockerclient/UnixSocketClientProviderStrategy.java",
"chars": 1938,
"preview": "package org.testcontainers.dockerclient;\n\nimport org.apache.commons.lang3.SystemUtils;\n\nimport java.io.IOException;\nimpo"
},
{
"path": "core/src/main/java/org/testcontainers/images/AbstractImagePullPolicy.java",
"chars": 1901,
"preview": "package org.testcontainers.images;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.slf4j.Logger;\nimport org.testcontainers"
},
{
"path": "core/src/main/java/org/testcontainers/images/AgeBasedPullPolicy.java",
"chars": 795,
"preview": "package org.testcontainers.images;\n\nimport lombok.Value;\nimport lombok.extern.slf4j.Slf4j;\nimport org.testcontainers.uti"
},
{
"path": "core/src/main/java/org/testcontainers/images/AlwaysPullPolicy.java",
"chars": 556,
"preview": "package org.testcontainers.images;\n\nimport lombok.ToString;\nimport lombok.extern.slf4j.Slf4j;\nimport org.testcontainers."
},
{
"path": "core/src/main/java/org/testcontainers/images/DefaultPullPolicy.java",
"chars": 481,
"preview": "package org.testcontainers.images;\n\nimport lombok.ToString;\nimport lombok.extern.slf4j.Slf4j;\nimport org.testcontainers."
},
{
"path": "core/src/main/java/org/testcontainers/images/ImageData.java",
"chars": 1004,
"preview": "package org.testcontainers.images;\n\nimport com.github.dockerjava.api.command.InspectImageResponse;\nimport com.github.doc"
},
{
"path": "core/src/main/java/org/testcontainers/images/ImagePullPolicy.java",
"chars": 176,
"preview": "package org.testcontainers.images;\n\nimport org.testcontainers.utility.DockerImageName;\n\npublic interface ImagePullPolicy"
},
{
"path": "core/src/main/java/org/testcontainers/images/LocalImagesCache.java",
"chars": 3094,
"preview": "package org.testcontainers.images;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.dockerjava.api.comm"
},
{
"path": "core/src/main/java/org/testcontainers/images/LoggedPullImageResultCallback.java",
"chars": 4205,
"preview": "package org.testcontainers.images;\n\nimport com.github.dockerjava.api.command.PullImageResultCallback;\nimport com.github."
},
{
"path": "core/src/main/java/org/testcontainers/images/ParsedDockerfile.java",
"chars": 2141,
"preview": "package org.testcontainers.images;\n\nimport com.google.common.annotations.VisibleForTesting;\nimport lombok.Getter;\nimport"
},
{
"path": "core/src/main/java/org/testcontainers/images/PullPolicy.java",
"chars": 2591,
"preview": "package org.testcontainers.images;\n\nimport com.google.common.annotations.VisibleForTesting;\nimport lombok.experimental.U"
},
{
"path": "core/src/main/java/org/testcontainers/images/RemoteDockerImage.java",
"chars": 7555,
"preview": "package org.testcontainers.images;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.dockerjava.api.comm"
},
{
"path": "core/src/main/java/org/testcontainers/images/TimeLimitedLoggedPullImageResultCallback.java",
"chars": 4346,
"preview": "package org.testcontainers.images;\n\nimport com.github.dockerjava.api.command.PullImageResultCallback;\nimport com.github."
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/ImageFromDockerfile.java",
"chars": 11217,
"preview": "package org.testcontainers.images.builder;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.dockerjava."
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/Transferable.java",
"chars": 2726,
"preview": "package org.testcontainers.images.builder;\n\nimport org.apache.commons.compress.archivers.tar.TarArchiveEntry;\nimport org"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/DockerfileBuilder.java",
"chars": 2468,
"preview": "package org.testcontainers.images.builder.dockerfile;\n\nimport lombok.Data;\nimport lombok.extern.slf4j.Slf4j;\nimport org."
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/statement/KeyValuesStatement.java",
"chars": 1442,
"preview": "package org.testcontainers.images.builder.dockerfile.statement;\n\nimport com.fasterxml.jackson.core.JsonProcessingExcepti"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/statement/MultiArgsStatement.java",
"chars": 827,
"preview": "package org.testcontainers.images.builder.dockerfile.statement;\n\nimport com.fasterxml.jackson.core.JsonProcessingExcepti"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/statement/RawStatement.java",
"chars": 403,
"preview": "package org.testcontainers.images.builder.dockerfile.statement;\n\npublic class RawStatement extends Statement {\n\n fina"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/statement/SingleArgumentStatement.java",
"chars": 457,
"preview": "package org.testcontainers.images.builder.dockerfile.statement;\n\npublic class SingleArgumentStatement extends Statement "
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/statement/Statement.java",
"chars": 234,
"preview": "package org.testcontainers.images.builder.dockerfile.statement;\n\nimport lombok.Data;\n\n@Data\npublic abstract class Statem"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/AddStatementTrait.java",
"chars": 413,
"preview": "package org.testcontainers.images.builder.dockerfile.traits;\n\nimport org.testcontainers.images.builder.dockerfile.statem"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/CmdStatementTrait.java",
"chars": 617,
"preview": "package org.testcontainers.images.builder.dockerfile.traits;\n\nimport org.testcontainers.images.builder.dockerfile.statem"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/CopyStatementTrait.java",
"chars": 417,
"preview": "package org.testcontainers.images.builder.dockerfile.traits;\n\nimport org.testcontainers.images.builder.dockerfile.statem"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/DockerfileBuilderTrait.java",
"chars": 414,
"preview": "package org.testcontainers.images.builder.dockerfile.traits;\n\nimport org.testcontainers.images.builder.dockerfile.statem"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/EntryPointStatementTrait.java",
"chars": 659,
"preview": "package org.testcontainers.images.builder.dockerfile.traits;\n\nimport org.testcontainers.images.builder.dockerfile.statem"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/EnvStatementTrait.java",
"chars": 562,
"preview": "package org.testcontainers.images.builder.dockerfile.traits;\n\nimport org.testcontainers.images.builder.dockerfile.statem"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/ExposeStatementTrait.java",
"chars": 627,
"preview": "package org.testcontainers.images.builder.dockerfile.traits;\n\nimport org.testcontainers.images.builder.dockerfile.statem"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/FromStatementTrait.java",
"chars": 526,
"preview": "package org.testcontainers.images.builder.dockerfile.traits;\n\nimport org.testcontainers.images.builder.dockerfile.statem"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/LabelStatementTrait.java",
"chars": 574,
"preview": "package org.testcontainers.images.builder.dockerfile.traits;\n\nimport org.testcontainers.images.builder.dockerfile.statem"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/RunStatementTrait.java",
"chars": 617,
"preview": "package org.testcontainers.images.builder.dockerfile.traits;\n\nimport org.testcontainers.images.builder.dockerfile.statem"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/UserStatementTrait.java",
"chars": 390,
"preview": "package org.testcontainers.images.builder.dockerfile.traits;\n\nimport org.testcontainers.images.builder.dockerfile.statem"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/VolumeStatementTrait.java",
"chars": 397,
"preview": "package org.testcontainers.images.builder.dockerfile.traits;\n\nimport org.testcontainers.images.builder.dockerfile.statem"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/dockerfile/traits/WorkdirStatementTrait.java",
"chars": 408,
"preview": "package org.testcontainers.images.builder.dockerfile.traits;\n\nimport org.testcontainers.images.builder.dockerfile.statem"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/traits/BuildContextBuilderTrait.java",
"chars": 320,
"preview": "package org.testcontainers.images.builder.traits;\n\nimport org.testcontainers.images.builder.Transferable;\n\n/**\n * base B"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/traits/ClasspathTrait.java",
"chars": 599,
"preview": "package org.testcontainers.images.builder.traits;\n\nimport org.testcontainers.utility.MountableFile;\n\nimport java.nio.fil"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/traits/DockerfileTrait.java",
"chars": 1311,
"preview": "package org.testcontainers.images.builder.traits;\n\nimport lombok.Getter;\nimport org.testcontainers.images.builder.Transf"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/traits/FilesTrait.java",
"chars": 1758,
"preview": "package org.testcontainers.images.builder.traits;\n\nimport org.testcontainers.utility.MountableFile;\n\nimport java.io.File"
},
{
"path": "core/src/main/java/org/testcontainers/images/builder/traits/StringsTrait.java",
"chars": 981,
"preview": "package org.testcontainers.images.builder.traits;\n\nimport lombok.Getter;\nimport org.apache.commons.lang3.StringUtils;\nim"
},
{
"path": "core/src/main/java/org/testcontainers/jib/JibDockerClient.java",
"chars": 3132,
"preview": "package org.testcontainers.jib;\n\nimport com.github.dockerjava.api.command.InspectImageResponse;\nimport com.github.docker"
},
{
"path": "core/src/main/java/org/testcontainers/jib/JibImage.java",
"chars": 2389,
"preview": "package org.testcontainers.jib;\n\nimport com.google.cloud.tools.jib.api.Containerizer;\nimport com.google.cloud.tools.jib."
},
{
"path": "core/src/main/java/org/testcontainers/jib/JibImageDetails.java",
"chars": 1106,
"preview": "package org.testcontainers.jib;\n\nimport com.google.cloud.tools.jib.api.DescriptorDigest;\nimport com.google.cloud.tools.j"
},
{
"path": "core/src/main/java/org/testcontainers/lifecycle/Startable.java",
"chars": 338,
"preview": "package org.testcontainers.lifecycle;\n\nimport java.util.Collections;\nimport java.util.Set;\n\npublic interface Startable e"
},
{
"path": "core/src/main/java/org/testcontainers/lifecycle/Startables.java",
"chars": 4240,
"preview": "package org.testcontainers.lifecycle;\n\nimport lombok.experimental.UtilityClass;\n\nimport java.util.Arrays;\nimport java.ut"
},
{
"path": "core/src/main/java/org/testcontainers/lifecycle/TestDescription.java",
"chars": 141,
"preview": "package org.testcontainers.lifecycle;\n\npublic interface TestDescription {\n String getTestId();\n\n String getFilesys"
},
{
"path": "core/src/main/java/org/testcontainers/lifecycle/TestLifecycleAware.java",
"chars": 258,
"preview": "package org.testcontainers.lifecycle;\n\nimport java.util.Optional;\n\npublic interface TestLifecycleAware {\n default voi"
},
{
"path": "core/src/main/java/org/testcontainers/utility/AuditLogger.java",
"chars": 3190,
"preview": "package org.testcontainers.utility;\n\nimport com.fasterxml.jackson.core.JsonProcessingException;\nimport com.fasterxml.jac"
},
{
"path": "core/src/main/java/org/testcontainers/utility/AuthConfigUtil.java",
"chars": 1091,
"preview": "package org.testcontainers.utility;\n\nimport com.github.dockerjava.api.model.AuthConfig;\nimport com.google.common.base.Mo"
},
{
"path": "core/src/main/java/org/testcontainers/utility/Base58.java",
"chars": 667,
"preview": "package org.testcontainers.utility;\n\nimport java.security.SecureRandom;\n\n/**\n * Utility class for creation of random str"
},
{
"path": "core/src/main/java/org/testcontainers/utility/ClasspathScanner.java",
"chars": 1940,
"preview": "package org.testcontainers.utility;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.jetbrains.annotations.Nullable;\nimport"
},
{
"path": "core/src/main/java/org/testcontainers/utility/CommandLine.java",
"chars": 2637,
"preview": "package org.testcontainers.utility;\n\nimport org.jetbrains.annotations.NotNull;\nimport org.slf4j.Logger;\nimport org.slf4j"
},
{
"path": "core/src/main/java/org/testcontainers/utility/ComparableVersion.java",
"chars": 1940,
"preview": "package org.testcontainers.utility;\n\nimport com.google.common.annotations.VisibleForTesting;\nimport org.jetbrains.annota"
},
{
"path": "core/src/main/java/org/testcontainers/utility/ConfigurationFileImageNameSubstitutor.java",
"chars": 1417,
"preview": "package org.testcontainers.utility;\n\nimport com.google.common.annotations.VisibleForTesting;\nimport lombok.extern.slf4j."
},
{
"path": "core/src/main/java/org/testcontainers/utility/DefaultImageNameSubstitutor.java",
"chars": 1721,
"preview": "package org.testcontainers.utility;\n\nimport com.google.common.annotations.VisibleForTesting;\nimport lombok.extern.slf4j."
},
{
"path": "core/src/main/java/org/testcontainers/utility/DockerImageName.java",
"chars": 11325,
"preview": "package org.testcontainers.utility;\n\nimport com.google.common.net.HostAndPort;\nimport lombok.AccessLevel;\nimport lombok."
},
{
"path": "core/src/main/java/org/testcontainers/utility/DockerLoggerFactory.java",
"chars": 653,
"preview": "package org.testcontainers.utility;\n\nimport lombok.AccessLevel;\nimport lombok.NoArgsConstructor;\nimport org.slf4j.Logger"
},
{
"path": "core/src/main/java/org/testcontainers/utility/DockerMachineClient.java",
"chars": 3379,
"preview": "package org.testcontainers.utility;\n\nimport lombok.NonNull;\nimport org.apache.commons.lang3.SystemUtils;\nimport org.slf4"
},
{
"path": "core/src/main/java/org/testcontainers/utility/DockerStatus.java",
"chars": 3613,
"preview": "package org.testcontainers.utility;\n\nimport com.github.dockerjava.api.command.InspectContainerResponse;\n\nimport java.tim"
},
{
"path": "core/src/main/java/org/testcontainers/utility/DynamicPollInterval.java",
"chars": 1291,
"preview": "package org.testcontainers.utility;\n\nimport org.awaitility.pollinterval.PollInterval;\n\nimport java.time.Duration;\nimport"
},
{
"path": "core/src/main/java/org/testcontainers/utility/ImageNameSubstitutor.java",
"chars": 6763,
"preview": "package org.testcontainers.utility;\n\nimport com.google.common.annotations.VisibleForTesting;\nimport lombok.extern.slf4j."
},
{
"path": "core/src/main/java/org/testcontainers/utility/JVMHookResourceReaper.java",
"chars": 2101,
"preview": "package org.testcontainers.utility;\n\nimport com.github.dockerjava.api.model.Container;\nimport com.github.dockerjava.api."
},
{
"path": "core/src/main/java/org/testcontainers/utility/LazyFuture.java",
"chars": 1303,
"preview": "package org.testcontainers.utility;\n\nimport lombok.AccessLevel;\nimport lombok.Getter;\nimport org.rnorth.ducttape.timeout"
},
{
"path": "core/src/main/java/org/testcontainers/utility/LicenseAcceptance.java",
"chars": 1341,
"preview": "package org.testcontainers.utility;\n\nimport com.google.common.base.Charsets;\nimport com.google.common.io.Resources;\nimpo"
},
{
"path": "core/src/main/java/org/testcontainers/utility/LogUtils.java",
"chars": 3846,
"preview": "package org.testcontainers.utility;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.dockerjava.api.com"
},
{
"path": "core/src/main/java/org/testcontainers/utility/MountableFile.java",
"chars": 17032,
"preview": "package org.testcontainers.utility;\n\nimport com.google.common.base.Charsets;\nimport lombok.AccessLevel;\nimport lombok.Ge"
},
{
"path": "core/src/main/java/org/testcontainers/utility/PathUtils.java",
"chars": 2435,
"preview": "package org.testcontainers.utility;\n\nimport lombok.NonNull;\nimport lombok.experimental.UtilityClass;\n\nimport java.io.IOE"
},
{
"path": "core/src/main/java/org/testcontainers/utility/PrefixingImageNameSubstitutor.java",
"chars": 1953,
"preview": "package org.testcontainers.utility;\n\nimport com.google.common.annotations.VisibleForTesting;\nimport lombok.NoArgsConstru"
},
{
"path": "core/src/main/java/org/testcontainers/utility/RegistryAuthLocator.java",
"chars": 17058,
"preview": "package org.testcontainers.utility;\n\nimport com.fasterxml.jackson.databind.JsonNode;\nimport com.fasterxml.jackson.databi"
},
{
"path": "core/src/main/java/org/testcontainers/utility/ResourceReaper.java",
"chars": 14112,
"preview": "package org.testcontainers.utility;\n\nimport com.github.dockerjava.api.DockerClient;\nimport com.github.dockerjava.api.com"
},
{
"path": "core/src/main/java/org/testcontainers/utility/RyukContainer.java",
"chars": 1174,
"preview": "package org.testcontainers.utility;\n\nimport com.github.dockerjava.api.model.Bind;\nimport com.github.dockerjava.api.model"
},
{
"path": "core/src/main/java/org/testcontainers/utility/RyukResourceReaper.java",
"chars": 5576,
"preview": "package org.testcontainers.utility;\n\nimport com.github.dockerjava.api.command.CreateContainerCmd;\nimport lombok.SneakyTh"
},
{
"path": "core/src/main/java/org/testcontainers/utility/TestEnvironment.java",
"chars": 1068,
"preview": "package org.testcontainers.utility;\n\nimport org.testcontainers.DockerClientFactory;\nimport org.testcontainers.dockerclie"
},
{
"path": "core/src/main/java/org/testcontainers/utility/TestcontainersConfiguration.java",
"chars": 15822,
"preview": "package org.testcontainers.utility;\n\nimport com.google.common.annotations.VisibleForTesting;\nimport com.google.common.co"
}
]
// ... and 1172 more files (download for full content)
About this extraction
This page contains the full source code of the testcontainers/testcontainers-java GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1372 files (3.2 MB), approximately 927.2k tokens, and a symbol index with 5080 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.