2323
2424import java .util .Arrays ;
2525import java .util .Collections ;
26+ import java .util .List ;
2627import java .util .Map ;
2728
2829import io .netty .handler .codec .http .HttpResponseStatus ;
30+ import okhttp3 .HttpUrl ;
2931import okhttp3 .mockwebserver .RecordedRequest ;
3032import org .assertj .core .api .Assertions ;
33+ import org .jetbrains .annotations .NotNull ;
3134import org .junit .jupiter .api .AfterEach ;
3235import org .junit .jupiter .api .BeforeEach ;
3336import org .junit .jupiter .api .Test ;
3437
38+ import com .influxdb .v3 .client .config .ClientConfig ;
3539import com .influxdb .v3 .client .write .WriteOptions ;
3640import com .influxdb .v3 .client .write .WritePrecision ;
3741
@@ -223,10 +227,8 @@ void writeNoSyncTrueOnV2ServerThrowsException() throws InterruptedException {
223227 mockServer .enqueue (createEmptyResponse (HttpResponseStatus .METHOD_NOT_ALLOWED .code ()));
224228
225229 InfluxDBApiHttpException ae = org .junit .jupiter .api .Assertions .assertThrows (InfluxDBApiHttpException .class ,
226- () -> {
227- client .writeRecord ("mem,tag=one value=1.0" ,
228- new WriteOptions .Builder ().precision (WritePrecision .MS ).noSync (true ).build ());
229- }
230+ () -> client .writeRecord ("mem,tag=one value=1.0" ,
231+ new WriteOptions .Builder ().precision (WritePrecision .MS ).noSync (true ).build ())
230232 );
231233
232234 assertThat (mockServer .getRequestCount ()).isEqualTo (1 );
@@ -242,6 +244,167 @@ void writeNoSyncTrueOnV2ServerThrowsException() throws InterruptedException {
242244 + " (supported by InfluxDB 3 Core/Enterprise servers only)." );
243245 }
244246
247+ @ Test
248+ void writeRecordWithDefaultWriteOptionsDefaultConfig () throws Exception {
249+ mockServer .enqueue (createResponse (200 ));
250+
251+ ClientConfig cfg = new ClientConfig .Builder ().host (baseURL ).token ("TOKEN" .toCharArray ()).database ("DB" )
252+ .build ();
253+ try (InfluxDBClient client = InfluxDBClient .getInstance (cfg )) {
254+ client .writeRecord ("mem,tag=one value=1.0" );
255+ }
256+
257+ checkWriteCalled ("/api/v2/write" , "DB" , "ns" , false , false );
258+ }
259+
260+ @ Test
261+ void writeRecordWithDefaultWriteOptionsCustomConfig () throws Exception {
262+ mockServer .enqueue (createResponse (200 ));
263+
264+ ClientConfig cfg = new ClientConfig .Builder ().host (baseURL ).token ("TOKEN" .toCharArray ()).database ("DB" )
265+ .writePrecision (WritePrecision .S )
266+ .writeNoSync (true )
267+ .gzipThreshold (1 )
268+ .build ();
269+ try (InfluxDBClient client = InfluxDBClient .getInstance (cfg )) {
270+ client .writeRecord ("mem,tag=one value=1.0" );
271+ }
272+
273+ checkWriteCalled ("/api/v3/write_lp" , "DB" , "second" , true , true );
274+ }
275+
276+ @ Test
277+ void writeRecordsWithDefaultWriteOptionsDefaultConfig () throws Exception {
278+ mockServer .enqueue (createResponse (200 ));
279+
280+ ClientConfig cfg = new ClientConfig .Builder ().host (baseURL ).token ("TOKEN" .toCharArray ()).database ("DB" )
281+ .build ();
282+ try (InfluxDBClient client = InfluxDBClient .getInstance (cfg )) {
283+ client .writeRecords (List .of ("mem,tag=one value=1.0" ));
284+ }
285+
286+ checkWriteCalled ("/api/v2/write" , "DB" , "ns" , false , false );
287+ }
288+
289+ @ Test
290+ void writeRecordsWithDefaultWriteOptionsCustomConfig () throws Exception {
291+ mockServer .enqueue (createResponse (200 ));
292+
293+ ClientConfig cfg = new ClientConfig .Builder ().host (baseURL ).token ("TOKEN" .toCharArray ()).database ("DB" )
294+ .writePrecision (WritePrecision .S )
295+ .writeNoSync (true )
296+ .gzipThreshold (1 )
297+ .build ();
298+ try (InfluxDBClient client = InfluxDBClient .getInstance (cfg )) {
299+ client .writeRecords (List .of ("mem,tag=one value=1.0" ));
300+ }
301+
302+ checkWriteCalled ("/api/v3/write_lp" , "DB" , "second" , true , true );
303+ }
304+
305+ @ Test
306+ void writePointWithDefaultWriteOptionsDefaultConfig () throws Exception {
307+ mockServer .enqueue (createResponse (200 ));
308+
309+ ClientConfig cfg = new ClientConfig .Builder ().host (baseURL ).token ("TOKEN" .toCharArray ()).database ("DB" )
310+ .build ();
311+ try (InfluxDBClient client = InfluxDBClient .getInstance (cfg )) {
312+ Point point = new Point ("mem" );
313+ point .setTag ("tag" , "one" );
314+ point .setField ("value" , 1.0 );
315+ client .writePoint (point );
316+ }
317+
318+ checkWriteCalled ("/api/v2/write" , "DB" , "ns" , false , false );
319+ }
320+
321+ @ Test
322+ void writePointWithDefaultWriteOptionsCustomConfig () throws Exception {
323+ mockServer .enqueue (createResponse (200 ));
324+
325+ ClientConfig cfg = new ClientConfig .Builder ().host (baseURL ).token ("TOKEN" .toCharArray ()).database ("DB" )
326+ .writePrecision (WritePrecision .S )
327+ .writeNoSync (true )
328+ .gzipThreshold (1 )
329+ .build ();
330+ try (InfluxDBClient client = InfluxDBClient .getInstance (cfg )) {
331+ Point point = new Point ("mem" );
332+ point .setTag ("tag" , "one" );
333+ point .setField ("value" , 1.0 );
334+ client .writePoint (point );
335+ }
336+
337+ checkWriteCalled ("/api/v3/write_lp" , "DB" , "second" , true , true );
338+ }
339+
340+ @ Test
341+ void writePointsWithDefaultWriteOptionsDefaultConfig () throws Exception {
342+ mockServer .enqueue (createResponse (200 ));
343+
344+ ClientConfig cfg = new ClientConfig .Builder ().host (baseURL ).token ("TOKEN" .toCharArray ()).database ("DB" )
345+ .build ();
346+ try (InfluxDBClient client = InfluxDBClient .getInstance (cfg )) {
347+ Point point = new Point ("mem" );
348+ point .setTag ("tag" , "one" );
349+ point .setField ("value" , 1.0 );
350+ client .writePoints (List .of (point ));
351+ }
352+
353+ checkWriteCalled ("/api/v2/write" , "DB" , "ns" , false , false );
354+ }
355+
356+ @ Test
357+ void writePointsWithDefaultWriteOptionsCustomConfig () throws Exception {
358+ mockServer .enqueue (createResponse (200 ));
359+
360+ ClientConfig cfg = new ClientConfig .Builder ().host (baseURL ).token ("TOKEN" .toCharArray ()).database ("DB" )
361+ .writePrecision (WritePrecision .S )
362+ .writeNoSync (true )
363+ .gzipThreshold (1 )
364+ .build ();
365+ try (InfluxDBClient client = InfluxDBClient .getInstance (cfg )) {
366+ Point point = new Point ("mem" );
367+ point .setTag ("tag" , "one" );
368+ point .setField ("value" , 1.0 );
369+ client .writePoints (List .of (point ));
370+ }
371+
372+ checkWriteCalled ("/api/v3/write_lp" , "DB" , "second" , true , true );
373+ }
374+
375+ private void checkWriteCalled (final String expectedPath , final String expectedDB ,
376+ final String expectedPrecision , final boolean expectedNoSync ,
377+ final boolean expectedGzip ) throws InterruptedException {
378+ RecordedRequest request = assertThatServerRequested ();
379+ HttpUrl requestUrl = request .getRequestUrl ();
380+ assertThat (requestUrl ).isNotNull ();
381+ assertThat (requestUrl .encodedPath ()).isEqualTo (expectedPath );
382+ if (expectedNoSync ) {
383+ assertThat (requestUrl .queryParameter ("db" )).isEqualTo (expectedDB );
384+ } else {
385+ assertThat (requestUrl .queryParameter ("bucket" )).isEqualTo (expectedDB );
386+ }
387+ assertThat (requestUrl .queryParameter ("precision" )).isEqualTo (expectedPrecision );
388+ if (expectedNoSync ) {
389+ assertThat (requestUrl .queryParameter ("no_sync" )).isEqualTo ("true" );
390+ } else {
391+ assertThat (requestUrl .queryParameter ("no_sync" )).isNull ();
392+ }
393+ if (expectedGzip ) {
394+ assertThat (request .getHeader ("Content-Encoding" )).isEqualTo ("gzip" );
395+ } else {
396+ assertThat (request .getHeader ("Content-Encoding" )).isNull ();
397+ }
398+ }
399+
400+ @ NotNull
401+ private RecordedRequest assertThatServerRequested () throws InterruptedException {
402+ assertThat (mockServer .getRequestCount ()).isEqualTo (1 );
403+ RecordedRequest request = mockServer .takeRequest ();
404+ assertThat (request ).isNotNull ();
405+ return request ;
406+ }
407+
245408 @ Test
246409 void allParameterSpecified () throws InterruptedException {
247410 mockServer .enqueue (createResponse (200 ));
@@ -344,7 +507,7 @@ void defaultTags() throws InterruptedException {
344507 }
345508
346509 @ Test
347- public void retryHandled429Test () throws InterruptedException {
510+ public void retryHandled429Test () {
348511 mockServer .enqueue (createResponse (429 )
349512 .setBody ("{ \" message\" : \" Too Many Requests\" }" )
350513 .setHeader ("retry-after" , "42" )
0 commit comments