Skip to content

Commit 32e9878

Browse files
author
Anastasiia Smirnova
authored
Make capabilities configurable (#721)
fixes #495
1 parent b39449c commit 32e9878

File tree

27 files changed

+119
-18
lines changed

27 files changed

+119
-18
lines changed

README.adoc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ NOTE: embedded.kafka.enabled=false will cause DockerNotPresentException if you d
147147
|===
148148

149149
=== Other specific container related properties
150+
[cols="a,a,a"]
150151
|===
151152
|Setting name | Default value |Description
152153

@@ -203,6 +204,12 @@ embedded.postgresql.mountVolumes:
203204
containerPath: "/var/lib/postgresql/data"
204205
mode: READ_WRITE
205206
----
207+
208+
|embedded.{module-name}.capabilities
209+
| empty list. `NET_ADMIN` is set for Aerospike, Couchbase, Elasticsearch, Kafka, Mariadb, Memsql, Minio, Mongodb, Mysql, Neo4j, Redis containers. NOTE: `NET_ADMIN` is needed for the `NetworkTestOperations` to work.
210+
|The Linux capabilities that should be enabled. You can disable all capabilities by providing empty value for this property.
211+
See: https://man7.org/linux/man-pages/man7/capabilities.7.html.
212+
Available values can be taken from `com.github.dockerjava.api.model.Capability` class.
206213
|===
207214

208215

embedded-aerospike/src/main/java/com/playtika/test/aerospike/AerospikeProperties.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,14 @@
2323
*/
2424
package com.playtika.test.aerospike;
2525

26+
import com.github.dockerjava.api.model.Capability;
2627
import com.playtika.test.common.properties.CommonContainerProperties;
2728
import lombok.Data;
2829
import lombok.EqualsAndHashCode;
2930
import org.springframework.boot.context.properties.ConfigurationProperties;
3031

32+
import java.util.Arrays;
33+
3134
@Data
3235
@EqualsAndHashCode(callSuper = true)
3336
@ConfigurationProperties("embedded.aerospike")
@@ -41,4 +44,8 @@ public class AerospikeProperties extends CommonContainerProperties {
4144
String host = "localhost";
4245
int port = 3000;
4346
String featureKey;
47+
48+
public AerospikeProperties() {
49+
this.setCapabilities(Arrays.asList(Capability.NET_ADMIN));
50+
}
4451
}

embedded-aerospike/src/main/java/com/playtika/test/aerospike/EmbeddedAerospikeBootstrapConfiguration.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ public GenericContainer aerospike(AerospikeWaitStrategy aerospikeWaitStrategy,
8181
.withEnv("SERVICE_PORT", String.valueOf(properties.port))
8282
.withEnv("MEM_GB", String.valueOf(1))
8383
.withEnv("STORAGE_GB", String.valueOf(1))
84-
.withCreateContainerCmdModifier(cmd -> cmd.getHostConfig().withCapAdd(Capability.NET_ADMIN))
8584
.waitingFor(waitStrategy);
8685
String featureKey = properties.featureKey;
8786
if (featureKey != null) {

embedded-couchbase/src/main/java/com/playtika/test/couchbase/CouchbaseProperties.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,15 @@
2323
*/
2424
package com.playtika.test.couchbase;
2525

26+
import com.github.dockerjava.api.model.Capability;
2627
import com.playtika.test.common.properties.CommonContainerProperties;
2728
import lombok.Data;
2829
import lombok.EqualsAndHashCode;
2930
import org.springframework.boot.context.properties.ConfigurationProperties;
3031
import org.testcontainers.couchbase.CouchbaseService;
3132

33+
import java.util.Arrays;
34+
3235
import static java.lang.String.format;
3336

3437
/**
@@ -55,6 +58,10 @@ public class CouchbaseProperties extends CommonContainerProperties {
5558
String password = "password";
5659
String bucket = "test";
5760

61+
public CouchbaseProperties() {
62+
this.setCapabilities(Arrays.asList(Capability.NET_ADMIN));
63+
}
64+
5865
public void setPassword(String password) {
5966
if (password.length() < 6) {
6067
throw new IllegalArgumentException("Couchbase requires password length >= 6 chars, password=" + password);

embedded-couchbase/src/main/java/com/playtika/test/couchbase/EmbeddedCouchbaseBootstrapConfiguration.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,7 @@ public CouchbaseContainer couchbase(ConfigurableEnvironment environment,
6262
CouchbaseContainer couchbase = new CouchbaseContainer(properties.dockerImage)
6363
.withBucket(bucketDefinition)
6464
.withEnabledServices(properties.getServices())
65-
.withCredentials(properties.getUser(), properties.getPassword())
66-
.withCreateContainerCmdModifier(cmd -> cmd.getHostConfig().withCapAdd(Capability.NET_ADMIN));
65+
.withCredentials(properties.getUser(), properties.getPassword());
6766

6867
couchbase = (CouchbaseContainer) configureCommonsAndStart(couchbase, properties, log);
6968

embedded-elasticsearch/src/main/java/com/playtika/test/elasticsearch/ElasticSearchContainerFactory.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ static ElasticsearchContainer create(ElasticSearchProperties properties) {
4242
.withEnv("cluster.name", properties.getClusterName())
4343
.withEnv("discovery.type", "single-node")
4444
.withEnv("ES_JAVA_OPTS", getJavaOpts(properties))
45-
.withCreateContainerCmdModifier(cmd -> cmd.getHostConfig().withCapAdd(Capability.NET_ADMIN))
4645
.waitingFor(getCompositeWaitStrategy(properties));
4746
}
4847

embedded-elasticsearch/src/main/java/com/playtika/test/elasticsearch/ElasticSearchProperties.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@
2323
*/
2424
package com.playtika.test.elasticsearch;
2525

26+
import com.github.dockerjava.api.model.Capability;
2627
import com.playtika.test.common.properties.CommonContainerProperties;
2728
import lombok.Data;
2829
import lombok.EqualsAndHashCode;
2930
import org.springframework.boot.context.properties.ConfigurationProperties;
3031

3132
import java.util.ArrayList;
33+
import java.util.Arrays;
3234
import java.util.List;
3335

3436
@Data
@@ -45,4 +47,8 @@ public class ElasticSearchProperties extends CommonContainerProperties {
4547
int httpPort = 9200;
4648
int transportPort = 9300;
4749
int clusterRamMb = 256;
50+
51+
public ElasticSearchProperties() {
52+
this.setCapabilities(Arrays.asList(Capability.NET_ADMIN));
53+
}
4854
}

embedded-kafka/src/main/java/com/playtika/test/kafka/configuration/KafkaContainerConfiguration.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ public String getBootstrapServers() {
113113
}
114114
.withCreateContainerCmdModifier(cmd -> cmd.withUser(kafkaProperties.getDockerUser()))
115115
.withCreateContainerCmdModifier(cmd -> cmd.withHostName(KAFKA_HOST_NAME))
116-
.withCreateContainerCmdModifier(cmd -> cmd.getHostConfig().withCapAdd(Capability.NET_ADMIN))
117116
.withEmbeddedZookeeper()
118117
.withEnv("KAFKA_BROKER_ID", "-1")
119118
//see: https://stackoverflow.com/questions/41868161/kafka-in-kubernetes-cluster-how-to-publish-consume-messages-from-outside-of-kub

embedded-kafka/src/main/java/com/playtika/test/kafka/configuration/SchemaRegistryContainerConfiguration.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ public GenericContainer schemaRegistry(
6262

6363
GenericContainer schemaRegistry = new FixedHostPortGenericContainer<>(properties.getDockerImage())
6464
.withCreateContainerCmdModifier(cmd -> cmd.withHostName(SCHEMA_REGISTRY_HOST_NAME))
65-
.withCreateContainerCmdModifier(cmd -> cmd.getHostConfig().withCapAdd(Capability.NET_ADMIN))
6665
.withEnv("SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS", "PLAINTEXT://" + kafkaContainerBrokerList)
6766
.withEnv("SCHEMA_REGISTRY_HOST_NAME", SCHEMA_REGISTRY_HOST_NAME)
6867
.withEnv("SCHEMA_REGISTRY_LISTENERS", "http://0.0.0.0:" + properties.getPort())

embedded-kafka/src/main/java/com/playtika/test/kafka/properties/KafkaConfigurationProperties.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
*/
2424
package com.playtika.test.kafka.properties;
2525

26+
import com.github.dockerjava.api.model.Capability;
2627
import com.playtika.test.common.properties.CommonContainerProperties;
2728
import com.playtika.test.common.utils.ContainerUtils;
2829
import lombok.AllArgsConstructor;
@@ -34,6 +35,7 @@
3435

3536
import javax.annotation.PostConstruct;
3637
import javax.validation.constraints.AssertTrue;
38+
import java.util.Arrays;
3739
import java.util.Collection;
3840
import java.util.Collections;
3941

@@ -81,6 +83,10 @@ public class KafkaConfigurationProperties extends CommonContainerProperties {
8183

8284
protected FileSystemBind fileSystemBind = new FileSystemBind();
8385

86+
public KafkaConfigurationProperties() {
87+
this.setCapabilities(Arrays.asList(Capability.NET_ADMIN));
88+
}
89+
8490
/**
8591
* Kafka container port will be assigned automatically if free port is available.
8692
* Override this only if you are sure that specified port is free.

0 commit comments

Comments
 (0)