Skip to content

Commit e2adb62

Browse files
authored
fix: connection URL with custom base path, update Kotlin to 1.5.10 (#227)
1 parent 419f942 commit e2adb62

12 files changed

Lines changed: 149 additions & 18 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ Now you are able to use `micrometer-registry-influx`, for more info [see our doc
1212
1. [#231](https://github.com/influxdata/influxdb-client-java/pull/231): Add support for Spring Boot 2.4 [spring]
1313
2. [#229](https://github.com/influxdata/influxdb-client-java/pull/229): Support translating column name from some_col to someCol [query]
1414

15+
### Bug Fixes
16+
1. [#227](https://github.com/influxdata/influxdb-client-java/pull/227): Connection URL with custom base path
17+
18+
### Dependencies
19+
1. [#227](https://github.com/influxdata/influxdb-client-csharp/pull/227): Update dependencies:
20+
- Kotlin to 1.5.10
21+
1522
## 2.3.0 [2021-06-04]
1623

1724
### Features

client-kotlin/src/test/kotlin/com/influxdb/client/kotlin/InfluxDBClientKotlinFactoryTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class InfluxDBClientKotlinFactoryTest : AbstractTest() {
5454

5555
val options = getDeclaredField<InfluxDBClientOptions>(influxDBClient, "options", AbstractInfluxDBClient::class.java)
5656

57-
Assertions.assertThat(options.url).isEqualTo("http://localhost:9999")
57+
Assertions.assertThat(options.url).isEqualTo("http://localhost:9999/")
5858
Assertions.assertThat(options.org).isEqualTo("my-org")
5959
Assertions.assertThat(options.bucket).isEqualTo("my-bucket")
6060
Assertions.assertThat(options.token).isEqualTo("my-token".toCharArray())

client-legacy/src/main/java/com/influxdb/client/flux/FluxConnectionOptions.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,12 @@ public static FluxConnectionOptions.Builder builder() {
6969

7070
public static Builder builder(final String connectionString) {
7171
Builder builder = new Builder();
72-
HttpUrl parse = HttpUrl.parse(connectionString);
7372

73+
HttpUrl parse = HttpUrl.parse(connectionString);
7474
if (parse == null) {
7575
throw new InfluxException("Unable to parse connection string " + connectionString);
7676
}
77+
7778
HttpUrl url = parse.newBuilder().build();
7879

7980
String urlWithoutParams = url.scheme() + "://" + url.host() + ":" + url.port() + url.encodedPath();

client-legacy/src/main/java/com/influxdb/client/flux/internal/FluxService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@
3838
public interface FluxService {
3939

4040
@Streaming
41-
@POST("/api/v2/query")
41+
@POST("api/v2/query")
4242
@Nonnull
4343
@Headers("Content-Type: application/json")
4444
Call<ResponseBody> query(@Nonnull @Body final RequestBody query);
4545

46-
@GET("/ping")
46+
@GET("ping")
4747
Call<ResponseBody> ping();
4848
}

client-legacy/src/test/java/com/influxdb/client/flux/FluxClientTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import com.influxdb.LogLevel;
2525

26+
import okhttp3.mockwebserver.RecordedRequest;
2627
import org.assertj.core.api.Assertions;
2728
import org.junit.jupiter.api.Test;
2829

@@ -43,4 +44,41 @@ void logLevel() {
4344

4445
Assertions.assertThat(this.fluxClient.getLogLevel()).isEqualTo(LogLevel.HEADERS);
4546
}
47+
48+
@Test
49+
void customPath() throws InterruptedException {
50+
51+
// http://localhost:8086
52+
String serverURL = String.format("http://%s:%d", mockServer.url("").host(), mockServer.url("").port());
53+
54+
String[][] connectionStrings = {
55+
// http://localhost:8086/influxDB/ -> http://localhost:8086/influxDB/api/v2/query
56+
{serverURL + "/influxDB/", serverURL + "/influxDB/api/v2/query"},
57+
// http://localhost:8086/influxDB -> http://localhost:8086/influxDB/api/v2/query
58+
{serverURL + "/influxDB", serverURL + "/influxDB/api/v2/query"},
59+
// http://localhost:8086/ -> http://localhost:8086/api/v2/query
60+
{serverURL + "/", serverURL + "/api/v2/query"},
61+
// http://localhost:8086 -> http://localhost:8086/api/v2/query
62+
{serverURL, serverURL + "/api/v2/query"},
63+
// http://localhost:8086?readTimeout=1000&writeTimeout=3000&connectTimeout=2000&logLevel=HEADERS" -> http://localhost:8086/api/v2/query
64+
{serverURL + "?readTimeout=1000&writeTimeout=3000&connectTimeout=2000&logLevel=HEADERS", serverURL + "/api/v2/query"},
65+
// http://localhost:8086/influx?readTimeout=1000&writeTimeout=3000&connectTimeout=2000&logLevel=HEADERS" -> http://localhost:8086/influx/api/v2/query
66+
{serverURL + "/influx?readTimeout=1000&writeTimeout=3000&connectTimeout=2000&logLevel=HEADERS", serverURL + "/influx/api/v2/query"}
67+
};
68+
69+
for (String[] connectionString : connectionStrings) {
70+
71+
mockServer.enqueue(createResponse());
72+
73+
FluxClient fluxClient = FluxClientFactory.create(connectionString[0]);
74+
fluxClient.query("from(bucket:\"test\") |> range(start:-5m)");
75+
76+
RecordedRequest request = takeRequest();
77+
Assertions.assertThat(request).isNotNull();
78+
Assertions.assertThat(request.getRequestUrl()).isNotNull();
79+
Assertions.assertThat(request.getRequestUrl().toString()).isEqualTo(connectionString[1]);
80+
81+
fluxClient.close();
82+
}
83+
}
4684
}

client-reactive/src/test/java/com/influxdb/client/reactive/InfluxDBClientReactiveFactoryTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ void loadFromProperties() throws NoSuchFieldException, IllegalAccessException {
7070

7171
InfluxDBClientOptions options = getDeclaredField(influxDBClient, "options", AbstractInfluxDBClient.class);
7272

73-
Assertions.assertThat(options.getUrl()).isEqualTo("http://localhost:9999");
73+
Assertions.assertThat(options.getUrl()).isEqualTo("http://localhost:9999/");
7474
Assertions.assertThat(options.getOrg()).isEqualTo("my-org");
7575
Assertions.assertThat(options.getBucket()).isEqualTo("my-bucket");
7676
Assertions.assertThat(options.getToken()).isEqualTo("my-token".toCharArray());

client-scala/src/test/scala/com/influxdb/client/scala/InfluxDBClientScalaFactoryTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class InfluxDBClientScalaFactoryTest extends AnyFunSuite with Matchers {
4848
val client = InfluxDBClientScalaFactory.create()
4949
val options = utils.getDeclaredField(client, "options", classOf[AbstractInfluxDBClient]).asInstanceOf[InfluxDBClientOptions]
5050

51-
options.getUrl should be("http://localhost:9999")
51+
options.getUrl should be("http://localhost:9999/")
5252
options.getOrg should be("my-org")
5353
options.getBucket should be("my-bucket")
5454
options.getToken should be("my-token".toCharArray)

client/src/main/java/com/influxdb/client/InfluxDBClientOptions.java

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ public static class Builder {
229229
public InfluxDBClientOptions.Builder url(@Nonnull final String url) {
230230
Arguments.checkNonEmpty(url, "url");
231231

232-
this.url = url;
232+
this.url = new ParsedUrl(url).urlWithoutParams;
233233

234234
return this;
235235
}
@@ -374,12 +374,8 @@ public InfluxDBClientOptions.Builder connectionString(@Nonnull final String conn
374374

375375
Arguments.checkNonEmpty(connectionString, "url");
376376

377-
HttpUrl parse = HttpUrl.parse(connectionString);
378-
if (parse == null) {
379-
throw new InfluxException("Unable to parse connection string " + connectionString);
380-
}
381-
382-
String url = parse.scheme() + "://" + parse.host() + ":" + parse.port() + parse.encodedPath();
377+
ParsedUrl parsedUrl = new ParsedUrl(connectionString);
378+
HttpUrl parse = parsedUrl.httpUrl;
383379

384380
String org = parse.queryParameter("org");
385381
String bucket = parse.queryParameter("bucket");
@@ -389,6 +385,7 @@ public InfluxDBClientOptions.Builder connectionString(@Nonnull final String conn
389385
String writeTimeout = parse.queryParameter("writeTimeout");
390386
String connectTimeout = parse.queryParameter("connectTimeout");
391387

388+
String url = parsedUrl.urlWithoutParams;
392389
return configure(url, org, bucket, token, logLevel, readTimeout, writeTimeout, connectTimeout);
393390
}
394391

@@ -523,5 +520,30 @@ private Duration toDuration(@Nonnull final String value) {
523520

524521
return Duration.of(Long.valueOf(amount), chronoUnit);
525522
}
523+
524+
private static final class ParsedUrl {
525+
@Nonnull
526+
private final String urlWithoutParams;
527+
@Nonnull
528+
private final HttpUrl httpUrl;
529+
530+
private ParsedUrl(@Nonnull final String connectionString) {
531+
532+
HttpUrl parse = HttpUrl.parse(connectionString);
533+
if (parse == null) {
534+
throw new InfluxException("Unable to parse connection string " + connectionString);
535+
}
536+
this.httpUrl = parse;
537+
538+
HttpUrl url = this.httpUrl.newBuilder().build();
539+
540+
String urlWithoutParams = url.scheme() + "://" + url.host() + ":" + url.port() + url.encodedPath();
541+
if (!urlWithoutParams.endsWith("/")) {
542+
urlWithoutParams += "/";
543+
}
544+
545+
this.urlWithoutParams = urlWithoutParams;
546+
}
547+
}
526548
}
527549
}

client/src/test/java/com/influxdb/client/InfluxDBClientFactoryTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ void loadFromProperties() throws NoSuchFieldException, IllegalAccessException {
137137

138138
InfluxDBClientOptions options = getDeclaredField(influxDBClient, "options", AbstractInfluxDBClient.class);
139139

140-
Assertions.assertThat(options.getUrl()).isEqualTo("http://localhost:9999");
140+
Assertions.assertThat(options.getUrl()).isEqualTo("http://localhost:9999/");
141141
Assertions.assertThat(options.getOrg()).isEqualTo("my-org");
142142
Assertions.assertThat(options.getBucket()).isEqualTo("my-bucket");
143143
Assertions.assertThat(options.getToken()).isEqualTo("my-token".toCharArray());
@@ -166,15 +166,15 @@ void v1Configuration() throws NoSuchFieldException, IllegalAccessException {
166166

167167
InfluxDBClientOptions options = getDeclaredField(client, "options", AbstractInfluxDBClient.class);
168168

169-
Assertions.assertThat(options.getUrl()).isEqualTo("http://localhost:8086");
169+
Assertions.assertThat(options.getUrl()).isEqualTo("http://localhost:8086/");
170170
Assertions.assertThat(options.getOrg()).isEqualTo("-");
171171
Assertions.assertThat(options.getBucket()).isEqualTo("database/week");
172172
Assertions.assertThat(options.getToken()).isEqualTo("my-username:my-password".toCharArray());
173173

174174
client = InfluxDBClientFactory.createV1("http://localhost:8086", null, null, "database", null);
175175

176176
options = getDeclaredField(client, "options", AbstractInfluxDBClient.class);
177-
Assertions.assertThat(options.getUrl()).isEqualTo("http://localhost:8086");
177+
Assertions.assertThat(options.getUrl()).isEqualTo("http://localhost:8086/");
178178
Assertions.assertThat(options.getOrg()).isEqualTo("-");
179179
Assertions.assertThat(options.getBucket()).isEqualTo("database/");
180180
Assertions.assertThat(options.getToken()).isEqualTo(":".toCharArray());

client/src/test/java/com/influxdb/client/InfluxDBClientOptionsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ void defaultValue() {
4040
.authenticateToken("xyz".toCharArray())
4141
.build();
4242

43-
Assertions.assertThat(options.getUrl()).isEqualTo("http://localhost:9999");
43+
Assertions.assertThat(options.getUrl()).isEqualTo("http://localhost:9999/");
4444
Assertions.assertThat(options.getAuthScheme()).isEqualTo(InfluxDBClientOptions.AuthScheme.TOKEN);
4545
Assertions.assertThat(options.getOkHttpClient()).isNotNull();
4646
}

0 commit comments

Comments
 (0)