-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add InfluxDB support #686
Merged
Merged
Add InfluxDB support #686
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# Testcontainers InfluxDB testing module | ||
|
||
Testcontainers module for the InfluxData [InfluxDB](https://github.com/influxdata/influxdb). | ||
|
||
## Usage example | ||
|
||
Running influxDbContainer as a stand-in for InfluxDB in a test: | ||
|
||
```java | ||
public class SomeTest { | ||
|
||
@Rule | ||
public InfluxDBContainer influxDbContainer = new InfluxDBContainer(); | ||
|
||
@Test | ||
public void someTestMethod() { | ||
InfluxDB influxDB = influxDbContainer.getNewInfluxDB(); | ||
... | ||
``` | ||
|
||
## Dependency information | ||
|
||
Replace `VERSION` with the [latest version available on Maven Central](https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.testcontainers%22). | ||
|
||
[![](https://api.bintray.com/packages/testcontainers/releases/testcontainers/images/download.svg)](https://bintray.com/testcontainers/releases/testcontainers/_latestVersion) | ||
|
||
|
||
### Maven | ||
``` | ||
<dependency> | ||
<groupId>org.testcontainers</groupId> | ||
<artifactId>influxdb</artifactId> | ||
<version>VERSION</version> | ||
</dependency> | ||
``` | ||
|
||
### Gradle | ||
|
||
``` | ||
compile group: 'org.testcontainers', name: 'influxdb', version: 'VERSION' | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
description = "Testcontainers :: InfluxDB" | ||
|
||
dependencies { | ||
compile project(':testcontainers') | ||
|
||
compileOnly 'org.influxdb:influxdb-java:2.10' | ||
testCompile 'org.influxdb:influxdb-java:2.10' | ||
} |
145 changes: 145 additions & 0 deletions
145
modules/influxdb/src/main/java/org/testcontainers/containers/InfluxDBContainer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,145 @@ | ||
package org.testcontainers.containers; | ||
|
||
import org.influxdb.InfluxDB; | ||
import org.influxdb.InfluxDBFactory; | ||
import org.testcontainers.containers.traits.LinkableContainer; | ||
import org.testcontainers.containers.wait.strategy.Wait; | ||
import org.testcontainers.containers.wait.strategy.WaitAllStrategy; | ||
|
||
/** | ||
* @link https://store.docker.com/images/influxdb | ||
*/ | ||
public class InfluxDBContainer<SELF extends InfluxDBContainer<SELF>> extends GenericContainer<SELF> | ||
implements LinkableContainer { | ||
|
||
public static final String VERSION = "1.4.3"; | ||
public static final Integer INFLUXDB_PORT = 8086; | ||
|
||
private static final String IMAGE_NAME = "influxdb"; | ||
|
||
private boolean authEnabled = true; | ||
private String admin = "admin"; | ||
private String adminPassword = "password"; | ||
|
||
private String database; | ||
private String username = "any"; | ||
private String password = "any"; | ||
|
||
|
||
public InfluxDBContainer() { | ||
this(VERSION); | ||
} | ||
|
||
public InfluxDBContainer(final String version) { | ||
super(IMAGE_NAME + ":" + version); | ||
waitStrategy = new WaitAllStrategy() | ||
.withStrategy(Wait.forHttp("/ping").withBasicCredentials(username, password).forStatusCode(204)) | ||
.withStrategy(Wait.forListeningPort()); | ||
} | ||
|
||
@Override | ||
protected void configure() { | ||
addExposedPort(INFLUXDB_PORT); | ||
|
||
addEnv("INFLUXDB_ADMIN_USER", admin); | ||
addEnv("INFLUXDB_ADMIN_PASSWORD", adminPassword); | ||
|
||
addEnv("INFLUXDB_HTTP_AUTH_ENABLED", String.valueOf(authEnabled)); | ||
|
||
addEnv("INFLUXDB_DB", database); | ||
addEnv("INFLUXDB_USER", username); | ||
addEnv("INFLUXDB_USER_PASSWORD", password); | ||
} | ||
|
||
@Override | ||
protected Integer getLivenessCheckPort() { | ||
return getMappedPort(INFLUXDB_PORT); | ||
} | ||
|
||
|
||
/** | ||
* Set env variable `INFLUXDB_HTTP_AUTH_ENABLED`. | ||
* | ||
* @param authEnabled Enables authentication. | ||
* @return a reference to this container instance | ||
*/ | ||
public SELF withAuthEnabled(final boolean authEnabled) { | ||
this.authEnabled = authEnabled; | ||
return self(); | ||
} | ||
|
||
/** | ||
* Set env variable `INFLUXDB_ADMIN_USER`. | ||
* | ||
* @param admin The name of the admin user to be created. If this is unset, no admin user is created. | ||
* @return a reference to this container instance | ||
*/ | ||
public SELF withAdmin(final String admin) { | ||
this.admin = admin; | ||
return self(); | ||
} | ||
|
||
/** | ||
* Set env variable `INFLUXDB_ADMIN_PASSWORD`. | ||
* | ||
* @param adminPassword TThe password for the admin user configured with `INFLUXDB_ADMIN_USER`. If this is unset, a | ||
* random password is generated and printed to standard out. | ||
* @return a reference to this container instance | ||
*/ | ||
public SELF withAdminPassword(final String adminPassword) { | ||
this.adminPassword = adminPassword; | ||
return self(); | ||
} | ||
|
||
/** | ||
* Set env variable `INFLUXDB_DB`. | ||
* | ||
* @param database Automatically initializes a database with the name of this environment variable. | ||
* @return a reference to this container instance | ||
*/ | ||
public SELF withDatabase(final String database) { | ||
this.database = database; | ||
return self(); | ||
} | ||
|
||
/** | ||
* Set env variable `INFLUXDB_USER`. | ||
* | ||
* @param username The name of a user to be created with no privileges. If `INFLUXDB_DB` is set, this user will | ||
* be granted read and write permissions for that database. | ||
* @return a reference to this container instance | ||
*/ | ||
public SELF withUsername(final String username) { | ||
this.username = username; | ||
return self(); | ||
} | ||
|
||
/** | ||
* Set env variable `INFLUXDB_USER_PASSWORD`. | ||
* | ||
* @param password The password for the user configured with `INFLUXDB_USER`. If this is unset, a random password | ||
* is generated and printed to standard out. | ||
* @return a reference to this container instance | ||
*/ | ||
public SELF withPassword(final String password) { | ||
this.password = password; | ||
return self(); | ||
} | ||
|
||
|
||
/** | ||
* @return a url to influxDb | ||
*/ | ||
public String getUrl() { | ||
return "http://" + getContainerIpAddress() + ":" + getLivenessCheckPort(); | ||
} | ||
|
||
/** | ||
* @return a influxDb client | ||
*/ | ||
public InfluxDB getNewInfluxDB() { | ||
InfluxDB influxDB = InfluxDBFactory.connect(getUrl(), username, password); | ||
influxDB.setDatabase(database); | ||
return influxDB; | ||
} | ||
} |
44 changes: 44 additions & 0 deletions
44
modules/influxdb/src/test/java/org/testcontainers/containers/InfluxDBContainerTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
package org.testcontainers.containers; | ||
|
||
import org.influxdb.InfluxDB; | ||
import org.junit.ClassRule; | ||
import org.junit.Test; | ||
|
||
import static org.hamcrest.CoreMatchers.is; | ||
import static org.hamcrest.CoreMatchers.notNullValue; | ||
import static org.junit.Assert.assertThat; | ||
|
||
public class InfluxDBContainerTest { | ||
|
||
@ClassRule | ||
public static InfluxDBContainer influxDBContainer = new InfluxDBContainer(); | ||
|
||
@Test | ||
public void getUrl() { | ||
String actual = influxDBContainer.getUrl(); | ||
|
||
assertThat(actual, notNullValue()); | ||
} | ||
|
||
@Test | ||
public void getNewInfluxDB() { | ||
InfluxDB actual = influxDBContainer.getNewInfluxDB(); | ||
|
||
assertThat(actual, notNullValue()); | ||
assertThat(actual.ping(), notNullValue()); | ||
} | ||
|
||
@Test | ||
public void getLivenessCheckPort() { | ||
Integer actual = influxDBContainer.getLivenessCheckPort(); | ||
|
||
assertThat(actual, notNullValue()); | ||
} | ||
|
||
@Test | ||
public void isRunning() { | ||
boolean actual = influxDBContainer.isRunning(); | ||
|
||
assertThat(actual, is(true)); | ||
} | ||
} |
72 changes: 72 additions & 0 deletions
72
...s/influxdb/src/test/java/org/testcontainers/containers/InfluxDBContainerWithUserTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
package org.testcontainers.containers; | ||
|
||
import org.influxdb.InfluxDB; | ||
import org.influxdb.dto.Point; | ||
import org.influxdb.dto.Query; | ||
import org.influxdb.dto.QueryResult; | ||
import org.junit.Rule; | ||
import org.junit.Test; | ||
|
||
import java.util.concurrent.TimeUnit; | ||
|
||
import static org.hamcrest.CoreMatchers.hasItem; | ||
import static org.hamcrest.CoreMatchers.is; | ||
import static org.hamcrest.CoreMatchers.notNullValue; | ||
import static org.hamcrest.CoreMatchers.nullValue; | ||
import static org.junit.Assert.assertThat; | ||
|
||
public class InfluxDBContainerWithUserTest { | ||
|
||
private static final String TEST_VERSION = "1.4.3"; | ||
private static final String DATABASE = "test"; | ||
private static final String USER = "test-user"; | ||
private static final String PASSWORD = "test-password"; | ||
|
||
@Rule | ||
public InfluxDBContainer influxDBContainer = new InfluxDBContainer(TEST_VERSION) | ||
.withDatabase(DATABASE) | ||
.withUsername(USER) | ||
.withPassword(PASSWORD); | ||
|
||
@Test | ||
public void describeDatabases() { | ||
InfluxDB actual = influxDBContainer.getNewInfluxDB(); | ||
|
||
assertThat(actual, notNullValue()); | ||
assertThat(actual.describeDatabases(), hasItem(DATABASE)); | ||
} | ||
|
||
@Test | ||
public void checkVersion() { | ||
InfluxDB actual = influxDBContainer.getNewInfluxDB(); | ||
|
||
assertThat(actual, notNullValue()); | ||
|
||
assertThat(actual.ping(), notNullValue()); | ||
assertThat(actual.ping().getVersion(), is(TEST_VERSION)); | ||
|
||
assertThat(actual.version(), is(TEST_VERSION)); | ||
} | ||
|
||
@Test | ||
public void queryForWriteAndRead() { | ||
InfluxDB influxDB = influxDBContainer.getNewInfluxDB(); | ||
|
||
Point point = Point.measurement("cpu") | ||
.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS) | ||
.addField("idle", 90L) | ||
.addField("user", 9L) | ||
.addField("system", 1L) | ||
.build(); | ||
influxDB.write(point); | ||
|
||
Query query = new Query("SELECT idle FROM cpu", DATABASE); | ||
QueryResult actual = influxDB.query(query); | ||
|
||
assertThat(actual, notNullValue()); | ||
assertThat(actual.getError(), nullValue()); | ||
assertThat(actual.getResults(), notNullValue()); | ||
assertThat(actual.getResults().size(), is(1)); | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
<configuration> | ||
|
||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> | ||
<!-- encoders are assigned the type | ||
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> | ||
<encoder> | ||
<pattern>%d{HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern> | ||
</encoder> | ||
</appender> | ||
|
||
<root level="debug"> | ||
<appender-ref ref="STDOUT"/> | ||
</root> | ||
|
||
<logger name="org.apache.http" level="WARN"/> | ||
<logger name="com.github.dockerjava" level="WARN"/> | ||
<logger name="org.zeroturnaround.exec" level="WARN"/> | ||
<logger name="com.zaxxer.hikari" level="INFO"/> | ||
<logger name="org.rnorth.tcpunixsocketproxy" level="INFO"/> | ||
<logger name="io.netty" level="WARN"/> | ||
<logger name="org.mongodb" level="INFO"/> | ||
<logger name="org.testcontainers.shaded" level="WARN"/> | ||
<logger name="com.zaxxer.hikari" level="INFO"/> | ||
</configuration> |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You could also use the latest version badge:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
added