Skip to content

Commit

Permalink
Drop link in favor of networks
Browse files Browse the repository at this point in the history
  • Loading branch information
eddumelendez committed May 2, 2023
1 parent 196d180 commit 337e0c7
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.api.model.Network;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
Expand Down Expand Up @@ -273,7 +274,29 @@ List<Container> listChildContainers() {

void startAmbassadorContainer() {
if (!this.ambassadorPortMappings.isEmpty()) {
// if (this.composeVersion.equals(ComposeVersion.V2)) {
// this.ambassadorContainer.withCreateContainerCmdModifier(createContainerCmd ->
// createContainerCmd.withNetworkMode(this.project + "_default")
// );
// }
this.ambassadorContainer.start();
List<Container> containers = this.dockerClient.listContainersCmd().exec();
Set<String> networks = containers
.stream()
.filter(container ->
Arrays.stream(container.getNames()).allMatch(name -> name.startsWith("/" + this.project))
)
.flatMap(container -> container.getNetworkSettings().getNetworks().keySet().stream())
.collect(Collectors.toSet());
for (String network : networks) {
Network networkContent = this.dockerClient.inspectNetworkCmd().withNetworkId(network).exec();
if (!networkContent.getContainers().containsKey(this.ambassadorContainer.getContainerId())) {
this.dockerClient.connectToNetworkCmd()
.withContainerId(this.ambassadorContainer.getContainerId())
.withNetworkId(network)
.exec();
}
}
}
}

Expand Down Expand Up @@ -311,11 +334,19 @@ public void withExposedService(String serviceName, int servicePort, @NonNull Wai
ambassadorPortMappings
.computeIfAbsent(serviceInstanceName, __ -> new ConcurrentHashMap<>())
.put(servicePort, ambassadorPort);
ambassadorContainer.withTarget(ambassadorPort, serviceInstanceName, servicePort);
ambassadorContainer.addLink(
new FutureContainer(this.project + this.composeSeparator + serviceInstanceName),
serviceInstanceName
);
// if (this.composeVersion.equals(ComposeVersion.V1)) {
// this.ambassadorContainer.withTarget(ambassadorPort, serviceInstanceName, servicePort);
// this.ambassadorContainer.addLink(
// new FutureContainer(this.project + this.composeSeparator + serviceInstanceName),
// serviceInstanceName
// );
// } else {
this.ambassadorContainer.withTarget(
ambassadorPort,
this.project + this.composeSeparator + serviceInstanceName,
servicePort
);
// }
addWaitStrategy(serviceInstanceName, waitStrategy);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package org.testcontainers.junit;

import org.junit.Rule;
import org.junit.Test;
import org.testcontainers.containers.ComposeContainer;

import java.io.File;

import static org.assertj.core.api.Assertions.assertThat;

public class ComposeServiceTest extends BaseComposeTest {

@Rule
public ComposeContainer environment = new ComposeContainer(new File("src/test/resources/compose-v2-test.yml"))
.withServices("redis")
.withExposedService("redis-1", REDIS_PORT);

@Override
protected ComposeContainer getEnvironment() {
return this.environment;
}

@Test(expected = IllegalArgumentException.class)
public void testDbIsNotStarting() {
this.environment.getServicePort("db-1", 10001);
}

@Test
public void testRedisIsStarting() {
assertThat(this.environment.getServicePort("redis-1", REDIS_PORT)).as("Redis server started").isNotNull();
}
}
7 changes: 7 additions & 0 deletions core/src/test/resources/compose-v2-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
services:
redis:
image: redis
db:
image: mysql:5.7.34
environment:
MYSQL_RANDOM_ROOT_PASSWORD: "true"

0 comments on commit 337e0c7

Please sign in to comment.