Skip to content
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 v2 support #3669

Merged
Merged
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
1d7a20f
update InfluxDBContainer class for v2+
raminqaf Jan 7, 2021
60d8970
update influxdb.md
raminqaf Jan 7, 2021
3aa16a5
add retention time and update influxdb.md
raminqaf Jan 7, 2021
898b4a9
made retentiion units lable package private
raminqaf Jan 7, 2021
3ea5560
add influxDB v1.x code
raminqaf Jan 10, 2021
5ce658b
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf Jan 12, 2021
dc56931
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf Jan 13, 2021
d70ed4d
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf Mar 11, 2021
31ecbe3
bump inflxudb client version up to 2.0.0
raminqaf Mar 28, 2021
41e366a
Merge branch 'feature/influxdb-v2-test-container' of github.com:ramin…
raminqaf Mar 28, 2021
9c3b224
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf Apr 9, 2021
0be00c9
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf May 13, 2021
11ed5d4
update influxdb2 client and container class and add review suggestions
raminqaf Aug 5, 2021
b5e5224
Merge remote-tracking branch 'origin/feature/influxdb-v2-test-contain…
raminqaf Aug 5, 2021
1dd2101
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf Aug 5, 2021
56887b0
fix influxDB 1 dependency
raminqaf Aug 5, 2021
29c5605
Merge branch 'feature/influxdb-v2-test-container' of github.com:ramin…
raminqaf Aug 5, 2021
79d6dce
replace testCompile with testImplementation in build.gradle file
raminqaf Aug 5, 2021
b4ba6bf
implementation to build.gradle
raminqaf Aug 5, 2021
9bc928e
Update modules/influxdb/src/main/java/org/testcontainers/containers/I…
raminqaf Aug 5, 2021
c4a23f3
Update modules/influxdb/src/main/java/org/testcontainers/containers/I…
raminqaf Aug 5, 2021
66e507a
update README and add review suggestions
raminqaf Aug 5, 2021
f6db3fe
Merge branch 'feature/influxdb-v2-test-container' of github.com:ramin…
raminqaf Aug 5, 2021
5021425
Update docs/modules/databases/influxdb.md
raminqaf Aug 5, 2021
0f52423
fix build.gradle
raminqaf Aug 5, 2021
d606cb1
Update modules/influxdb/src/main/java/org/testcontainers/containers/I…
raminqaf Aug 5, 2021
56b53c1
Merge branch 'feature/influxdb-v2-test-container' of github.com:ramin…
raminqaf Aug 5, 2021
2f8fdbc
Update modules/influxdb/src/main/java/org/testcontainers/containers/I…
raminqaf Aug 5, 2021
dfe23b6
Update modules/influxdb/src/main/java/org/testcontainers/containers/I…
raminqaf Aug 5, 2021
fd0dec4
Merge branch 'feature/influxdb-v2-test-container' of github.com:ramin…
raminqaf Aug 5, 2021
1b4ad56
Update modules/influxdb/src/main/java/org/testcontainers/containers/I…
raminqaf Aug 5, 2021
e67fc5a
add suggestions
raminqaf Aug 5, 2021
77f2bac
resolve conflics
raminqaf Aug 5, 2021
104f88f
remove client code
raminqaf Aug 5, 2021
9526fb3
add getter to properties
raminqaf Aug 5, 2021
b1a84a1
Update modules/influxdb/build.gradle
raminqaf Aug 5, 2021
08af825
Update modules/influxdb/src/main/java/org/testcontainers/containers/I…
raminqaf Aug 5, 2021
7d5d03d
Update modules/influxdb/src/main/java/org/testcontainers/containers/I…
raminqaf Aug 5, 2021
548713b
add suggestions
raminqaf Aug 5, 2021
53414ca
Update modules/influxdb/src/main/java/org/testcontainers/containers/I…
raminqaf Aug 5, 2021
22090c7
Update modules/influxdb/src/main/java/org/testcontainers/containers/I…
raminqaf Aug 5, 2021
afa957f
Update modules/influxdb/src/main/java/org/testcontainers/containers/I…
raminqaf Aug 5, 2021
2c03dda
Update modules/influxdb/src/main/java/org/testcontainers/containers/I…
raminqaf Aug 5, 2021
89118fc
Merge branch 'master' into feature/influxdb-v2-test-container
bsideup Aug 6, 2021
207de33
fix gradle check
raminqaf Aug 6, 2021
5250407
override methods
raminqaf Aug 6, 2021
9d57417
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf Aug 13, 2021
da508d0
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf Dec 15, 2021
fb86e07
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf Jan 12, 2022
31e3ab0
Merge branch 'master' of github.com:testcontainers/testcontainers-jav…
raminqaf Jul 30, 2022
bba98d8
Move InfluxDB code into one class
raminqaf Jul 30, 2022
0d99d8d
Update docs
raminqaf Jul 30, 2022
8f56b21
Update docs/modules/databases/influxdb.md
eddumelendez Aug 4, 2022
cc1fc1a
Add reviews
raminqaf Aug 5, 2022
6df5da2
Merge branch 'feature/influxdb-v2-test-container' of github.com:ramin…
raminqaf Aug 5, 2022
37bfd1f
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf Aug 5, 2022
3ff5ec2
Update modules/influxdb/src/main/java/org/testcontainers/containers/I…
eddumelendez Aug 5, 2022
0dee636
Fix spotless and move to assertj
eddumelendez Aug 6, 2022
2fdd745
Fix checkstyle and japicmp
eddumelendez Aug 6, 2022
30d5a80
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf Aug 8, 2022
e526c77
Fix javadoc
raminqaf Aug 9, 2022
c3f354c
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf Aug 9, 2022
576cc04
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf Aug 16, 2022
ae27fc3
Update modules/influxdb/src/main/java/org/testcontainers/containers/I…
raminqaf Aug 16, 2022
8c8ec4d
Update modules/influxdb/src/main/java/org/testcontainers/containers/I…
raminqaf Aug 16, 2022
335fbbd
Merge branch 'master' of github.com:testcontainers/testcontainers-jav…
raminqaf Aug 16, 2022
88f9847
Merge branch 'feature/influxdb-v2-test-container' of github.com:ramin…
raminqaf Aug 16, 2022
8e1442d
update readme
raminqaf Aug 16, 2022
d99342c
add snippet
raminqaf Aug 17, 2022
b92b63d
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf Aug 17, 2022
edfc72c
add reviews
raminqaf Aug 23, 2022
95dada5
Merge branch 'feature/influxdb-v2-test-container' of github.com:ramin…
raminqaf Aug 23, 2022
f03ac43
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf Aug 23, 2022
ccb1dac
Merge branch 'master' into feature/influxdb-v2-test-container
raminqaf Sep 9, 2022
4b365b0
Merge branch 'main' into feature/influxdb-v2-test-container
raminqaf Oct 10, 2022
a1d1245
Add reviews
raminqaf Oct 15, 2022
cb0c2c0
Merge branch 'feature/influxdb-v2-test-container' of github.com:ramin…
raminqaf Oct 15, 2022
8ba2714
Merge branch 'main' into feature/influxdb-v2-test-container
raminqaf Oct 15, 2022
8f6f2a5
Fix docs
raminqaf Oct 18, 2022
773328c
Merge branch 'feature/influxdb-v2-test-container' of github.com:ramin…
raminqaf Oct 18, 2022
aa1e2ca
Fix docs
raminqaf Oct 18, 2022
1d817fe
add reviews
raminqaf Oct 20, 2022
adab811
add checkstyle
raminqaf Oct 20, 2022
8a190d0
Merge branch 'main' into feature/influxdb-v2-test-container
raminqaf Oct 20, 2022
627a01c
Polish
eddumelendez Nov 15, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
55 changes: 43 additions & 12 deletions docs/modules/databases/influxdb.md
@@ -1,22 +1,53 @@
# InfluxDB Module

Testcontainers module for InfluxData [InfluxDB](https://github.com/influxdata/influxdb).
Testcontainers module for InfluxData [InfluxDB](https://www.influxdata.com/products/influxdb/).

## Usage example
## Important Note

They are breaking changes in InfluxDB v2.x. For more information refer to the
main [documentation](https://docs.influxdata.com/influxdb/v2.0/upgrade/v1-to-v2/). InfluxDB
official [container registry](https://hub.docker.com/_/influxdb) on docker hub.

## InfluxDB V2.x Usage example

Running influxDbContainer as a stand-in for InfluxDB in a test:

```java
public class SomeTest {
<!--codeinclude-->
[InfluxDBContainerV2Test](../../../modules/influxdb/src/test/java/org/testcontainers/containers/InfluxDBContainerV2Test.java)
<!--/codeinclude-->

@Rule
public InfluxDBContainer influxDbContainer = new InfluxDBContainer();

@Test
public void someTestMethod() {
InfluxDB influxDB = influxDbContainer.getNewInfluxDB();
...
```

The influxDB will be setup with the following data:<br/>
raminqaf marked this conversation as resolved.
Show resolved Hide resolved

| Property | Default Value |
| ------------- |:-------------:|
| username | test-user |
| password | test-password |
| organization | test-org |
| bucket | test-bucket |
| retention | 0 (infinite) |
| adminToken | - |
raminqaf marked this conversation as resolved.
Show resolved Hide resolved

For more details about the InfluxDB setup go to the
official [docs](https://docs.influxdata.com/influxdb/v2.0/upgrade/v1-to-v2/docker/#influxdb-2x-initialization-credentials)
.

It is possible to override the default values, take a look at these tests:

<!--codeinclude-->
[InfluxDBContainerV2WithUserTest](../../../modules/influxdb/src/test/java/org/testcontainers/containers/InfluxDBContainerV2WithUserTest.java)
<!--/codeinclude-->

**NOTE**: You can find the latest documentation about the influxdb v2.x java
client [here](https://github.com/influxdata/influxdb-client-java).

## InfluxDB V1.x Usage example (Deprecated)

Running influxDbContainer as a stand-in for InfluxDB in a test:

<!--codeinclude-->
[InfluxDBContainerV1Test](../../../modules/influxdb/src/test/java/org/testcontainers/containers/InfluxDBContainerV1Test.java)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here about use the code that is required

<!--/codeinclude-->

## Adding this module to your project dependencies

Expand Down
7 changes: 5 additions & 2 deletions modules/influxdb/build.gradle
Expand Up @@ -3,6 +3,9 @@ description = "Testcontainers :: InfluxDB"
dependencies {
api project(':testcontainers')

compileOnly 'org.influxdb:influxdb-java:2.21'
testImplementation 'org.influxdb:influxdb-java:2.21'
implementation "org.influxdb:influxdb-java:2.21"
implementation "org.influxdb:influxdb-java:2.21"
raminqaf marked this conversation as resolved.
Show resolved Hide resolved

implementation "com.influxdb:influxdb-client-java:3.1.0"
testImplementation "com.influxdb:influxdb-client-java:3.1.0"
}
@@ -1,163 +1,22 @@
package org.testcontainers.containers;

import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;
import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.containers.wait.strategy.WaitAllStrategy;
import org.testcontainers.utility.DockerImageName;

import java.util.Collections;
import java.util.Set;

/**
* See <a href="https://store.docker.com/images/influxdb">https://store.docker.com/images/influxdb</a>
* @deprecated instead use {@link InfluxDBContainerV1#InfluxDBContainerV1(DockerImageName) } for InfluxDB 1.x or {@link
* InfluxDBContainerV2#InfluxDBContainerV2(DockerImageName)} for InfluxDB 2.x instead
raminqaf marked this conversation as resolved.
Show resolved Hide resolved
*/
public class InfluxDBContainer<SELF extends InfluxDBContainer<SELF>> extends GenericContainer<SELF> {

public static final Integer INFLUXDB_PORT = 8086;

private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("influxdb");
private static final String DEFAULT_TAG = "1.4.3";

@Deprecated
public static final String VERSION = DEFAULT_TAG;

private boolean authEnabled = true;
private String admin = "admin";
private String adminPassword = "password";

private String database;
private String username = "any";
private String password = "any";

/**
* @deprecated use {@link InfluxDBContainer(DockerImageName)} instead
*/
@Deprecated
@Deprecated
public class InfluxDBContainer<SELF extends InfluxDBContainer<SELF>> extends InfluxDBContainerV1<SELF> {
raminqaf marked this conversation as resolved.
Show resolved Hide resolved
public InfluxDBContainer() {
this(DEFAULT_IMAGE_NAME.withTag(DEFAULT_TAG));
super();
}

/**
* @deprecated use {@link InfluxDBContainer(DockerImageName)} instead
*/
@Deprecated
public InfluxDBContainer(final String version) {
this(DEFAULT_IMAGE_NAME.withTag(version));
}

public InfluxDBContainer(final DockerImageName dockerImageName) {
super(dockerImageName);

dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME);

waitStrategy = new WaitAllStrategy()
.withStrategy(Wait.forHttp("/ping").withBasicCredentials(username, password).forStatusCode(204))
.withStrategy(Wait.forListeningPort());

addExposedPort(INFLUXDB_PORT);
}

@Override
protected void configure() {
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
public Set<Integer> getLivenessCheckPortNumbers() {
return Collections.singleton(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://" + getHost() + ":" + getLivenessCheckPort();
super(version);
}

/**
* @return a influxDb client
*/
public InfluxDB getNewInfluxDB() {
InfluxDB influxDB = InfluxDBFactory.connect(getUrl(), username, password);
influxDB.setDatabase(database);
return influxDB;
public InfluxDBContainer(final DockerImageName influxdbTestImage) {
raminqaf marked this conversation as resolved.
Show resolved Hide resolved
super(influxdbTestImage);
}
}