|
21 | 21 | */ |
22 | 22 | package com.influxdb.v3.client; |
23 | 23 |
|
| 24 | +import java.math.BigInteger; |
| 25 | +import java.time.Instant; |
| 26 | +import java.util.ArrayList; |
| 27 | +import java.util.List; |
24 | 28 | import java.util.Map; |
25 | 29 | import java.util.Properties; |
| 30 | +import java.util.UUID; |
| 31 | +import java.util.stream.Stream; |
26 | 32 |
|
| 33 | +import org.apache.arrow.flight.FlightRuntimeException; |
27 | 34 | import org.assertj.core.api.Assertions; |
28 | 35 | import org.junit.jupiter.api.Test; |
29 | 36 |
|
@@ -200,45 +207,99 @@ public void testQueryRows() throws Exception { |
200 | 207 | System.getenv("TESTING_INFLUXDB_DATABASE"), |
201 | 208 | null)) { |
202 | 209 | String uuid = UUID.randomUUID().toString(); |
203 | | - long timestamp = Instant.now().getEpochSecond(); |
204 | | - String record = String.format( |
205 | | - "host12,tag=tagValue " |
206 | | - + "name=\"intel\"," |
207 | | - + "mem_total=2048," |
208 | | - + "disk_free=100i," |
209 | | - + "temperature=100.86," |
210 | | - + "isActive=true," |
211 | | - + "testId=\"%s\" %d", |
212 | | - uuid, |
213 | | - timestamp |
214 | | - ); |
215 | | - client.writeRecord(record, new WriteOptions(null, WritePrecision.S, null)); |
| 210 | + String measurement = "host21"; |
| 211 | + List<Map<String, Object>> testDatas = new ArrayList<>(); |
| 212 | + for (int i = 0; i <= 9; i++) { |
| 213 | + long timestamp = System.currentTimeMillis(); |
| 214 | + Map<String, Object> map = Map.of( |
| 215 | + "measurement", measurement, |
| 216 | + "tag", "tagValue", |
| 217 | + "name", "intel", |
| 218 | + "mem_total", 2048.0, |
| 219 | + "disk_free", 100L, |
| 220 | + "temperature", 100.86, |
| 221 | + "isActive", true, |
| 222 | + "time", timestamp, |
| 223 | + "testId", uuid |
| 224 | + ); |
| 225 | + String record = String.format( |
| 226 | + "%s,tag=tagValue " |
| 227 | + + "name=\"%s\"," |
| 228 | + + "mem_total=%f," |
| 229 | + + "disk_free=%di," |
| 230 | + + "temperature=%f," |
| 231 | + + "isActive=%b," |
| 232 | + + "testId=\"%s\" %d", |
| 233 | + measurement, |
| 234 | + map.get("name"), |
| 235 | + (Double) map.get("mem_total"), |
| 236 | + (Long) map.get("disk_free"), |
| 237 | + (Double) map.get("temperature"), |
| 238 | + map.get("isActive"), |
| 239 | + uuid, |
| 240 | + timestamp |
| 241 | + ); |
| 242 | + client.writeRecord(record, new WriteOptions(null, WritePrecision.MS, null)); |
| 243 | + testDatas.add(map); |
| 244 | + } |
216 | 245 |
|
217 | 246 | Map<String, Object> parameters = Map.of("testId", uuid); |
218 | | - String sql = "Select * from host12 where \"testId\"=$testId"; |
| 247 | + String sql = String.format("Select * from %s where \"testId\"=$testId order by time", measurement); // Result set much be ordered by time |
219 | 248 | try (Stream<Map<String, Object>> stream = client.queryRows(sql, parameters)) { |
220 | | - stream.findFirst() |
221 | | - .ifPresent(map -> { |
222 | | - Assertions.assertThat(map.get("tag").getClass()).isEqualTo(String.class); |
223 | | - Assertions.assertThat(map.get("tag")).isEqualTo("tagValue"); |
| 249 | + List<Map<String, Object>> results = stream.collect(Collectors.toList()); |
| 250 | + for (int i = 0; i <= 9; i++) { |
| 251 | + Map<String, Object> row = results.get(i); |
| 252 | + Map<String, Object> testData = testDatas.get(i); |
| 253 | + Assertions.assertThat(row.get("tag").getClass()).isEqualTo(String.class); |
| 254 | + Assertions.assertThat(row.get("tag")).isEqualTo(testData.get("tag")); |
224 | 255 |
|
225 | | - Assertions.assertThat(map.get("name").getClass()).isEqualTo(String.class); |
226 | | - Assertions.assertThat(map.get("name")).isEqualTo("intel"); |
| 256 | + Assertions.assertThat(row.get("name").getClass()).isEqualTo(String.class); |
| 257 | + Assertions.assertThat(row.get("name")).isEqualTo(testData.get("name")); |
227 | 258 |
|
228 | | - Assertions.assertThat(map.get("mem_total").getClass()).isEqualTo(Double.class); |
229 | | - Assertions.assertThat(map.get("mem_total")).isEqualTo(2048.0); |
| 259 | + Assertions.assertThat(row.get("mem_total").getClass()).isEqualTo(Double.class); |
| 260 | + Assertions.assertThat(row.get("mem_total")).isEqualTo(testData.get("mem_total")); |
230 | 261 |
|
231 | | - Assertions.assertThat(map.get("disk_free").getClass()).isEqualTo(Long.class); |
232 | | - Assertions.assertThat(map.get("disk_free")).isEqualTo(100L); |
| 262 | + Assertions.assertThat(row.get("disk_free").getClass()).isEqualTo(Long.class); |
| 263 | + Assertions.assertThat(row.get("disk_free")).isEqualTo(testData.get("disk_free")); |
233 | 264 |
|
234 | | - Assertions.assertThat(map.get("isActive").getClass()).isEqualTo(Boolean.class); |
235 | | - Assertions.assertThat(map.get("isActive")).isEqualTo(true); |
| 265 | + Assertions.assertThat(row.get("isActive").getClass()).isEqualTo(Boolean.class); |
| 266 | + Assertions.assertThat(row.get("isActive")).isEqualTo(testData.get("isActive")); |
236 | 267 |
|
237 | | - Assertions.assertThat(map.get("time").getClass()).isEqualTo(BigInteger.class); |
238 | | - Assertions.assertThat(map.get("time")) |
239 | | - .isEqualTo(BigInteger.valueOf(timestamp * 1_000_000_000)); |
240 | | - }); |
| 268 | + Assertions.assertThat(row.get("time").getClass()).isEqualTo(BigInteger.class); |
| 269 | + Assertions.assertThat(row.get("time")) |
| 270 | + .isEqualTo(BigInteger.valueOf((Long) testData.get("time") * 1_000_000)); |
| 271 | + } |
241 | 272 | } |
242 | 273 | } |
243 | 274 | } |
| 275 | + |
| 276 | + |
| 277 | + @EnabledIfEnvironmentVariable(named = "TESTING_INFLUXDB_URL", matches = ".*") |
| 278 | + @EnabledIfEnvironmentVariable(named = "TESTING_INFLUXDB_TOKEN", matches = ".*") |
| 279 | + @EnabledIfEnvironmentVariable(named = "TESTING_INFLUXDB_DATABASE", matches = ".*") |
| 280 | + @Test |
| 281 | + public void testQueryRowsExceptionCases() throws Exception { |
| 282 | + try (InfluxDBClient client = InfluxDBClient.getInstance( |
| 283 | + System.getenv("TESTING_INFLUXDB_URL"), |
| 284 | + System.getenv("TESTING_INFLUXDB_TOKEN").toCharArray(), |
| 285 | + System.getenv("TESTING_INFLUXDB_DATABASE"), |
| 286 | + null)) { |
| 287 | + |
| 288 | + // Empty result case |
| 289 | + Map<String, Object> parameters = Map.of("testId", "NotExist"); |
| 290 | + String sql = "Select * from host21 where \"testId\"=$testId"; |
| 291 | + try (Stream<Map<String, Object>> stream = client.queryRows(sql, parameters)) { |
| 292 | + Assertions.assertThat((int) stream.count()).isEqualTo(0); |
| 293 | + } |
| 294 | + |
| 295 | + // Malformed query case |
| 296 | + Assertions.assertThatThrownBy(() -> { |
| 297 | + String query = "Select * from host21 whereabs testId=2"; |
| 298 | + try (Stream<Map<String, Object>> stream = client.queryRows(query)) { |
| 299 | + stream.findFirst(); |
| 300 | + } |
| 301 | + }) |
| 302 | + .isInstanceOf(FlightRuntimeException.class); |
| 303 | + } |
| 304 | + } |
244 | 305 | } |
0 commit comments