org.testcontainers.DockerClientFactory Java Examples

The following examples show how to use org.testcontainers.DockerClientFactory. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: ContainerState.java    From testcontainers-java with MIT License 6 votes vote down vote up
/**
 * Streams a file which resides inside the container
 *
 * @param containerPath path to file which is copied from container
 * @param function function that takes InputStream of the copied file
 */
@SneakyThrows
default  <T> T copyFileFromContainer(String containerPath, ThrowingFunction<InputStream, T> function) {
    if (!isCreated()) {
        throw new IllegalStateException("copyFileFromContainer can only be used when the Container is created.");
    }

    DockerClient dockerClient = DockerClientFactory.instance().client();
    try (
        InputStream inputStream = dockerClient.copyArchiveFromContainerCmd(getContainerId(), containerPath).exec();
        TarArchiveInputStream tarInputStream = new TarArchiveInputStream(inputStream)
    ) {
        tarInputStream.getNextTarEntry();
        return function.apply(tarInputStream);
    }
}
 
Example #2
Source File: EtcdContainer.java    From etcd4j with Apache License 2.0 6 votes vote down vote up
private WaitStrategy waitStrategy() {
    return new AbstractWaitStrategy() {
        @Override
        protected void waitUntilReady() {
            final DockerClient client = DockerClientFactory.instance().client();
            final WaitingConsumer waitingConsumer = new WaitingConsumer();

            LogUtils.followOutput(client, waitStrategyTarget.getContainerId(), waitingConsumer);

            try {
                waitingConsumer.waitUntil(
                    f -> f.getUtf8String().contains("etcdserver: published"),
                    startupTimeout.getSeconds(),
                    TimeUnit.SECONDS,
                    1
                );
            } catch (TimeoutException e) {
                throw new ContainerLaunchException("Timed out");
            }
        }
    };
}
 
Example #3
Source File: ApplicationContainer.java    From microshed-testing with Apache License 2.0 6 votes vote down vote up
public DefaultServerAdapter() {
    if (isHollow) {
        defaultHttpPort = -1;
    } else {
        InspectImageResponse imageData = DockerClientFactory.instance().client().inspectImageCmd(getDockerImageName()).exec();
        LOG.info("Found exposed ports: " + Arrays.toString(imageData.getContainerConfig().getExposedPorts()));
        int bestChoice = -1;
        for (ExposedPort exposedPort : imageData.getContainerConfig().getExposedPorts()) {
            int port = exposedPort.getPort();
            // If any ports end with 80, assume they are HTTP ports
            if (Integer.toString(port).endsWith("80")) {
                bestChoice = port;
                break;
            } else if (bestChoice == -1) {
                // if no ports match *80, then pick the first port
                bestChoice = port;
            }
        }
        defaultHttpPort = bestChoice;
        LOG.info("Automatically selecting default HTTP port: " + defaultHttpPort);
    }
}
 
Example #4
Source File: AuthenticatedImagePullTest.java    From testcontainers-java with MIT License 6 votes vote down vote up
@BeforeClass
public static void setUp() throws InterruptedException {
    originalAuthLocatorSingleton = RegistryAuthLocator.instance();
    client = DockerClientFactory.instance().client();

    String testRegistryAddress = authenticatedRegistry.getHost() + ":" + authenticatedRegistry.getFirstMappedPort();
    testImageName = testRegistryAddress + "/alpine";
    testImageNameWithTag = testImageName + ":latest";

    final DockerImageName expectedName = new DockerImageName(testImageNameWithTag);
    final AuthConfig authConfig = new AuthConfig()
        .withUsername("testuser")
        .withPassword("notasecret")
        .withRegistryAddress("http://" + testRegistryAddress);

    // Replace the RegistryAuthLocator singleton with our mock, for the duration of this test
    final RegistryAuthLocator mockAuthLocator = Mockito.mock(RegistryAuthLocator.class);
    RegistryAuthLocator.setInstance(mockAuthLocator);
    when(mockAuthLocator.lookupAuthConfig(eq(expectedName), any()))
        .thenReturn(authConfig);

    // a push will use the auth locator for authentication, although that isn't the goal of this test
    putImageInRegistry();
}
 
Example #5
Source File: DockerCassandra.java    From james-project with Apache License 2.0 6 votes vote down vote up
public DockerCassandra(String imageName, AdditionalDockerFileStep additionalSteps) {
    client = DockerClientFactory.instance().client();
    boolean doNotDeleteImageAfterUsage = false;
    cassandraContainer = new GenericContainer<>(
        new ImageFromDockerfile(imageName,doNotDeleteImageAfterUsage)
            .withDockerfileFromBuilder(builder ->
                additionalSteps.applyStep(builder
                    .from("cassandra:3.11.3")
                    .env("ENV CASSANDRA_CONFIG", "/etc/cassandra")
                    .run("echo \"-Xms" + CASSANDRA_MEMORY + "M\" >> " + JVM_OPTIONS)
                    .run("echo \"-Xmx" + CASSANDRA_MEMORY + "M\" >> " + JVM_OPTIONS)
                    .run("sed", "-i", "s/auto_snapshot: true/auto_snapshot: false/g", "/etc/cassandra/cassandra.yaml")
                    .run("echo 'authenticator: PasswordAuthenticator' >> /etc/cassandra/cassandra.yaml")
                    .run("echo 'authorizer: org.apache.cassandra.auth.CassandraAuthorizer' >> /etc/cassandra/cassandra.yaml"))
                    .build()))
        .withTmpFs(ImmutableMap.of("/var/lib/cassandra", "rw,noexec,nosuid,size=200m"))
        .withExposedPorts(CASSANDRA_PORT)
        .withLogConsumer(DockerCassandra::displayDockerLog);
    cassandraContainer
        .waitingFor(new CassandraWaitStrategy(cassandraContainer));
}
 
Example #6
Source File: ContainerState.java    From testcontainers-java with MIT License 6 votes vote down vote up
/**
 *
 * Copies a file to the container.
 *
 * @param transferable file which is copied into the container
 * @param containerPath destination path inside the container
 */
@SneakyThrows(IOException.class)
default void copyFileToContainer(Transferable transferable, String containerPath) {
    if (!isCreated()) {
        throw new IllegalStateException("copyFileToContainer can only be used with created / running container");
    }

    try (
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        TarArchiveOutputStream tarArchive = new TarArchiveOutputStream(byteArrayOutputStream)
    ) {
        tarArchive.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX);

        transferable.transferTo(tarArchive, containerPath);
        tarArchive.finish();

        DockerClientFactory.instance().client()
            .copyArchiveToContainerCmd(getContainerId())
            .withTarInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()))
            .withRemotePath("/")
            .exec();
    }
}
 
Example #7
Source File: NetworkTest.java    From testcontainers-java with MIT License 6 votes vote down vote up
@Test
public void testReusability() throws Exception {
    try (Network network = Network.newNetwork()) {
        String firstId = network.getId();
        assertNotNull(
                "Network exists",
                DockerClientFactory.instance().client().inspectNetworkCmd().withNetworkId(firstId).exec()
        );

        network.close();

        assertNotEquals(
                "New network created",
                firstId,
                DockerClientFactory.instance().client().inspectNetworkCmd().withNetworkId(network.getId()).exec().getId()
        );
    }
}
 
Example #8
Source File: ReusabilityUnitTests.java    From testcontainers-java with MIT License 6 votes vote down vote up
@Test
public void shouldSetLabelsIfEnvironmentDoesNotSupportReuse() {
    Mockito.doReturn(false).when(TestcontainersConfiguration.getInstance()).environmentSupportsReuse();
    AtomicReference<CreateContainerCmd> commandRef = new AtomicReference<>();
    String containerId = randomContainerId();
    when(client.createContainerCmd(any())).then(createContainerAnswer(containerId, commandRef::set));
    when(client.startContainerCmd(containerId)).then(startContainerAnswer());
    when(client.inspectContainerCmd(containerId)).then(inspectContainerAnswer());

    container.start();

    assertThat(commandRef)
        .isNotNull()
        .satisfies(command -> {
            assertThat(command.get().getLabels())
                .containsKeys(DockerClientFactory.TESTCONTAINERS_SESSION_ID_LABEL);
        });
}
 
Example #9
Source File: ImagePullPolicyTest.java    From testcontainers-java with MIT License 6 votes vote down vote up
@BeforeClass
public static void beforeClass() throws Exception {
    String testRegistryAddress = registry.getHost() + ":" + registry.getFirstMappedPort();
    String testImageName = testRegistryAddress + "/image-pull-policy-test";
    String tag = UUID.randomUUID().toString();
    imageName = testImageName + ":" + tag;

    DockerClient client = DockerClientFactory.instance().client();
    String dummySourceImage = "hello-world:latest";
    client.pullImageCmd(dummySourceImage).exec(new PullImageResultCallback()).awaitCompletion();

    String dummyImageId = client.inspectImageCmd(dummySourceImage).exec().getId();

    // push the image to the registry
    client.tagImageCmd(dummyImageId, testImageName, tag).exec();

    client.pushImageCmd(imageName)
        .exec(new PushImageResultCallback())
        .awaitCompletion(1, TimeUnit.MINUTES);
}
 
Example #10
Source File: LocalstackContainerTest.java    From testcontainers-java with MIT License 6 votes vote down vote up
@Test
public void sqsTestOverBridgeNetwork() {
    AmazonSQS sqs = AmazonSQSClientBuilder.standard()
        .withEndpointConfiguration(localstack.getEndpointConfiguration(SQS))
        .withCredentials(localstack.getDefaultCredentialsProvider())
        .build();

    CreateQueueResult queueResult = sqs.createQueue("baz");
    String fooQueueUrl = queueResult.getQueueUrl();
    assertThat("Created queue has external hostname URL", fooQueueUrl,
        containsString("http://" + DockerClientFactory.instance().dockerHostIpAddress() + ":" + localstack.getMappedPort(SQS.getPort())));

    sqs.sendMessage(fooQueueUrl, "test");
    final long messageCount = sqs.receiveMessage(fooQueueUrl).getMessages().stream()
        .filter(message -> message.getBody().equals("test"))
        .count();
    assertEquals("the sent message can be received", 1L, messageCount);
}
 
Example #11
Source File: Network.java    From testcontainers-java with MIT License 6 votes vote down vote up
private String create() {
    CreateNetworkCmd createNetworkCmd = DockerClientFactory.instance().client().createNetworkCmd();

    createNetworkCmd.withName(name);
    createNetworkCmd.withCheckDuplicate(true);

    if (enableIpv6 != null) {
        createNetworkCmd.withEnableIpv6(enableIpv6);
    }

    if (driver != null) {
        createNetworkCmd.withDriver(driver);
    }

    for (Consumer<CreateNetworkCmd> consumer : createNetworkCmdModifiers) {
        consumer.accept(createNetworkCmd);
    }

    Map<String, String> labels = createNetworkCmd.getLabels();
    labels = new HashMap<>(labels != null ? labels : Collections.emptyMap());
    labels.putAll(DockerClientFactory.DEFAULT_LABELS);
    createNetworkCmd.withLabels(labels);

    return createNetworkCmd.exec().getId();
}
 
Example #12
Source File: SesResource.java    From quarkus-quickstarts with Apache License 2.0 5 votes vote down vote up
@Override
public Map<String, String> start() {
    DockerClientFactory.instance().client();
    try {
        services = new LocalStackContainer("0.11.1").withServices(Service.SES);
        services.start();
        StaticCredentialsProvider staticCredentials = StaticCredentialsProvider
            .create(AwsBasicCredentials.create("accesskey", "secretKey"));

        client = SesClient.builder()
            .endpointOverride(new URI(endpoint()))
            .credentialsProvider(staticCredentials)
            .httpClientBuilder(UrlConnectionHttpClient.builder())
            .region(Region.US_EAST_1).build();

        client.verifyEmailIdentity(req -> req.emailAddress(FROM_EMAIL));
        client.verifyEmailIdentity(req -> req.emailAddress(TO_EMAIL));

    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException("Could not start localstack server", e);
    }

    Map<String, String> properties = new HashMap<>();
    properties.put("quarkus.ses.endpoint-override", endpoint());
    properties.put("quarkus.ses.aws.region", "us-east-1");
    properties.put("quarkus.ses.aws.credentials.type", "static");
    properties.put("quarkus.ses.aws.credentials.static-provider.access-key-id", "accessKey");
    properties.put("quarkus.ses.aws.credentials.static-provider.secret-access-key", "secretKey");

    return properties;
}
 
Example #13
Source File: DockerComposeContainer.java    From testcontainers-java with MIT License 5 votes vote down vote up
private 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
    parsedComposeFiles.stream()
        .flatMap(it -> it.getDependencyImageNames().stream())
        .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);
                DockerClientFactory.instance().checkAndPullImage(dockerClient, imageName);
            } 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());
            }
        });
}
 
Example #14
Source File: NetworkTest.java    From testcontainers-java with MIT License 5 votes vote down vote up
@Test
public void testModifiers() throws Exception {
    try (
            Network network = Network.builder()
                    .createNetworkCmdModifier(cmd -> cmd.withDriver("macvlan"))
                    .build();
    ) {
        String id = network.getId();
        assertEquals(
                "Flag is set",
                "macvlan",
                DockerClientFactory.instance().client().inspectNetworkCmd().withNetworkId(id).exec().getDriver()
        );
    }
}
 
Example #15
Source File: KmsResource.java    From quarkus-quickstarts with Apache License 2.0 5 votes vote down vote up
@Override
public Map<String, String> start() {
    DockerClientFactory.instance().client();
    String masterKeyId;
    try {
        services = new KmsContainer();
        services.start();
        StaticCredentialsProvider staticCredentials = StaticCredentialsProvider
            .create(AwsBasicCredentials.create("accesskey", "secretKey"));

        client = KmsClient.builder()
            .endpointOverride(new URI(endpoint()))
            .credentialsProvider(staticCredentials)
            .httpClientBuilder(UrlConnectionHttpClient.builder())
            .region(Region.US_EAST_1).build();

        masterKeyId = client.createKey().keyMetadata().keyId();
        client.generateDataKey(r -> r.keyId(masterKeyId).keySpec(DataKeySpec.AES_256));

    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException("Could not start localstack server", e);
    }

    Map<String, String> properties = new HashMap<>();
    properties.put("quarkus.kms.endpoint-override", endpoint());
    properties.put("quarkus.kms.aws.region", "us-east-1");
    properties.put("quarkus.kms.aws.credentials.type", "static");
    properties.put("quarkus.kms.aws.credentials.static-provider.access-key-id", "accessKey");
    properties.put("quarkus.kms.aws.credentials.static-provider.secret-access-key", "secretKey");
    properties.put("key.arn", masterKeyId);

    return properties;
}
 
Example #16
Source File: SnsResource.java    From quarkus-quickstarts with Apache License 2.0 5 votes vote down vote up
@Override
public Map<String, String> start() {
    DockerClientFactory.instance().client();
    String topicArn;
    try {
        services = new LocalStackContainer("0.11.1").withServices(Service.SNS);
        services.start();
        StaticCredentialsProvider staticCredentials = StaticCredentialsProvider
            .create(AwsBasicCredentials.create("accesskey", "secretKey"));

        client = SnsClient.builder()
            .endpointOverride(new URI(endpoint()))
            .credentialsProvider(staticCredentials)
            .httpClientBuilder(UrlConnectionHttpClient.builder())
            .region(Region.US_EAST_1).build();

        topicArn = client.createTopic(t -> t.name(TOPIC_NAME)).topicArn();
    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException("Could not start ocalstack server", e);
    }

    Map<String, String> properties = new HashMap<>();
    properties.put("quarkus.sns.endpoint-override", endpoint());
    properties.put("quarkus.sns.aws.region", "us-east-1");
    properties.put("quarkus.sns.aws.credentials.type", "static");
    properties.put("quarkus.sns.aws.credentials.static-provider.access-key-id", "accessKey");
    properties.put("quarkus.sns.aws.credentials.static-provider.secret-access-key", "secretKey");
    properties.put("topic.arn", topicArn);

    return properties;
}
 
Example #17
Source File: S3Resource.java    From quarkus-quickstarts with Apache License 2.0 5 votes vote down vote up
@Override
public Map<String, String> start() {
    DockerClientFactory.instance().client();
    try {
        s3 = new LocalStackContainer().withServices(Service.S3);
        s3.start();

        client = S3Client.builder()
            .endpointOverride(new URI(endpoint()))
            .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("accesskey", "secretKey")))
            .httpClientBuilder(UrlConnectionHttpClient.builder())
            .region(Region.US_EAST_1).build();

        client.createBucket(b -> b.bucket(BUCKET_NAME));
    } catch (Exception e) {
        throw new RuntimeException("Could not start S3 localstack server", e);
    }

    Map<String, String> properties = new HashMap<>();
    properties.put("quarkus.s3.endpoint-override", endpoint());
    properties.put("quarkus.s3.aws.region", "us-east-1");
    properties.put("quarkus.s3.aws.credentials.type", "static");
    properties.put("quarkus.s3.aws.credentials.static-provider.access-key-id", "accessKey");
    properties.put("quarkus.s3.aws.credentials.static-provider.secret-access-key", "secretKey");
    properties.put("bucket.name", BUCKET_NAME);

    return properties;
}
 
Example #18
Source File: SqsResource.java    From quarkus-quickstarts with Apache License 2.0 5 votes vote down vote up
@Override
public Map<String, String> start() {
    DockerClientFactory.instance().client();
    String queueUrl;
    try {
        services = new LocalStackContainer("0.11.1").withServices(Service.SQS);
        services.start();
        StaticCredentialsProvider staticCredentials = StaticCredentialsProvider
            .create(AwsBasicCredentials.create("accesskey", "secretKey"));

        client = SqsClient.builder()
            .endpointOverride(new URI(endpoint()))
            .credentialsProvider(staticCredentials)
            .httpClientBuilder(UrlConnectionHttpClient.builder())
            .region(Region.US_EAST_1).build();

        queueUrl = client.createQueue(q -> q.queueName(QUEUE_NAME)).queueUrl();
    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException("Could not start localstack server", e);
    }

    Map<String, String> properties = new HashMap<>();
    properties.put("quarkus.sqs.endpoint-override", endpoint());
    properties.put("quarkus.sqs.aws.region", "us-east-1");
    properties.put("quarkus.sqs.aws.credentials.type", "static");
    properties.put("quarkus.sqs.aws.credentials.static-provider.access-key-id", "accessKey");
    properties.put("quarkus.sqs.aws.credentials.static-provider.secret-access-key", "secretKey");
    properties.put("queue.url", queueUrl);

    return properties;
}
 
Example #19
Source File: TestcontainersExtension.java    From testcontainers-java with MIT License 5 votes vote down vote up
boolean isDockerAvailable() {
    try {
        DockerClientFactory.instance().client();
        return true;
    } catch (Throwable ex) {
        return false;
    }
}
 
Example #20
Source File: ImageFromDockerfile.java    From testcontainers-java with MIT License 5 votes vote down vote up
private void prePullDependencyImages(Set<String> imagesToPull) {
    final DockerClient dockerClient = DockerClientFactory.instance().client();

    imagesToPull.forEach(imageName -> {
        try {
            log.info("Pre-emptively checking local images for '{}', referenced via a Dockerfile. If not available, it will be pulled.", imageName);
            DockerClientFactory.instance().checkAndPullImage(dockerClient, imageName);
        } catch (Exception e) {
            log.warn("Unable to pre-fetch an image ({}) depended upon by Dockerfile - image build will continue but may fail. Exception message was: {}", imageName, e.getMessage());
        }
    });
}
 
Example #21
Source File: DockerComposeContainerWithBuildTest.java    From testcontainers-java with MIT License 5 votes vote down vote up
private String imageNameForRunningContainer(final String containerNameSuffix) {
    return DockerClientFactory.instance().client().listContainersCmd().exec().stream()
        .filter(it -> Stream.of(it.getNames()).anyMatch(name -> name.endsWith(containerNameSuffix)))
        .findFirst()
        .map(Container::getImage)
        .orElseThrow(IllegalStateException::new);
}
 
Example #22
Source File: NetworkTest.java    From testcontainers-java with MIT License 5 votes vote down vote up
@Test
public void testBuilder() throws Exception {
    try (
            Network network = Network.builder()
                    .driver("macvlan")
                    .build();
    ) {
        String id = network.getId();
        assertEquals(
                "Flag is set",
                "macvlan",
                DockerClientFactory.instance().client().inspectNetworkCmd().withNetworkId(id).exec().getDriver()
        );
    }
}
 
Example #23
Source File: Environments.java    From presto with Apache License 2.0 5 votes vote down vote up
public static void pruneEnvironment()
{
    log.info("Shutting down previous containers");
    try (DockerClient dockerClient = DockerClientFactory.lazyClient()) {
        killContainers(
                dockerClient,
                listContainersCmd -> listContainersCmd.withLabelFilter(ImmutableMap.of(PRODUCT_TEST_LAUNCHER_STARTED_LABEL_NAME, PRODUCT_TEST_LAUNCHER_STARTED_LABEL_VALUE)));
        removeNetworks(
                dockerClient,
                listNetworksCmd -> listNetworksCmd.withNameFilter(PRODUCT_TEST_LAUNCHER_NETWORK));
    }
    catch (IOException e) {
        throw new UncheckedIOException(e);
    }
}
 
Example #24
Source File: ImageFromDockerfileTest.java    From testcontainers-java with MIT License 5 votes vote down vote up
@Test
public void shouldAddDefaultLabels() {
    ImageFromDockerfile image = new ImageFromDockerfile()
        .withDockerfileFromBuilder(it -> it.from("scratch"));

    String imageId = image.resolve();

    DockerClient dockerClient = DockerClientFactory.instance().client();

    InspectImageResponse inspectImageResponse = dockerClient.inspectImageCmd(imageId).exec();

    assertThat(inspectImageResponse.getConfig().getLabels())
        .containsAllEntriesOf(DockerClientFactory.DEFAULT_LABELS);
}
 
Example #25
Source File: ImagePullPolicyTest.java    From testcontainers-java with MIT License 5 votes vote down vote up
@AfterClass
public static void afterClass() {
    try {
        DockerClientFactory.instance().client().removeImageCmd(imageName).withForce(true).exec();
    } catch (NotFoundException ignored) {
    }
}
 
Example #26
Source File: ImagePullPolicyTest.java    From testcontainers-java with MIT License 5 votes vote down vote up
@Before
public void setUp() {
    // Clean up local cache
    try {
        DockerClientFactory.instance().client().removeImageCmd(imageName).withForce(true).exec();
    } catch (NotFoundException ignored) {
    }

    LocalImagesCache.INSTANCE.cache.remove(new DockerImageName(imageName));
}
 
Example #27
Source File: ImagePullPolicyTest.java    From testcontainers-java with MIT License 5 votes vote down vote up
@Test
public void shouldAlwaysPull() {
    try (
        GenericContainer<?> container = new GenericContainer<>(imageName)
            .withStartupCheckStrategy(new OneShotStartupCheckStrategy())
    ) {
        container.start();
    }

    DockerClientFactory.instance().client().removeImageCmd(imageName).withForce(true).exec();

    try (
        GenericContainer<?> container = new GenericContainer<>(imageName)
            .withStartupCheckStrategy(new OneShotStartupCheckStrategy())
    ) {
        expectToFailWithNotFoundException(container);
    }

    try (
        // built_in_image_pull_policy {
        GenericContainer<?> container = new GenericContainer<>(imageName)
            .withImagePullPolicy(PullPolicy.alwaysPull())
        // }
    ) {
        container.withStartupCheckStrategy(new OneShotStartupCheckStrategy());
        container.start();
    }
}
 
Example #28
Source File: EventStreamTest.java    From testcontainers-java with MIT License 5 votes vote down vote up
/**
 * Test that docker events can be streamed from the client.
 */
@Test
public void test() throws IOException, InterruptedException {
    CountDownLatch latch = new CountDownLatch(1);

    try (
        GenericContainer container = new GenericContainer<>()
            .withCommand("true")
            .withStartupCheckStrategy(new OneShotStartupCheckStrategy())
    ) {
        container.start();
        String createdAt = container.getContainerInfo().getCreated();

        // Request all events between startTime and endTime for the container
        try (
            EventsResultCallback response = DockerClientFactory.instance().client().eventsCmd()
                .withContainerFilter(container.getContainerId())
                .withEventFilter("create")
                .withSince(Instant.parse(createdAt).getEpochSecond() + "")
                .exec(new EventsResultCallback() {
                    @Override
                    public void onNext(@NotNull Event event) {
                        // Check that a create event for the container is received
                        if (event.getId().equals(container.getContainerId()) && event.getStatus().equals("create")) {
                            latch.countDown();
                        }
                    }
                })
        ) {
            response.awaitStarted(5, TimeUnit.SECONDS);
            latch.await(5, TimeUnit.SECONDS);
        }
    }
}
 
Example #29
Source File: DockerContainer.java    From james-project with Apache License 2.0 5 votes vote down vote up
private static void disableDockerTestsIfDockerUnavailable() {
    try {
        DockerClientFactory.instance().client();
    } catch (IllegalStateException e) {
        LOGGER.error("Cannot connect to docker service", e);
        throw new AssumptionViolatedException("Skipping all docker tests as no Docker environment was found");
    }
}
 
Example #30
Source File: SvnTestHelper.java    From git-as-svn with GNU General Public License v2.0 5 votes vote down vote up
public static void skipTestIfDockerUnavailable() {
  try {
    Assert.assertNotNull(DockerClientFactory.instance().client());
  } catch (IllegalStateException e) {
    throw new SkipException("Docker is not available", e);
  }
}