2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.dbquery.internal.dbimpl.influx2;
15 import static org.mockito.Mockito.mock;
17 import java.time.Instant;
18 import java.util.function.BiConsumer;
19 import java.util.function.Consumer;
21 import org.eclipse.jdt.annotation.NonNullByDefault;
22 import org.openhab.binding.dbquery.internal.error.DatabaseException;
24 import com.influxdb.Cancellable;
25 import com.influxdb.query.FluxRecord;
29 * @author Joan Pujol - Initial contribution
32 public class InfluxDBClientFacadeMock implements InfluxDBClientFacade {
33 public static final String INVALID_QUERY = "invalid";
34 public static final String EMPTY_QUERY = "empty";
35 public static final String SCALAR_QUERY = "scalar";
36 public static final String MULTIPLE_ROWS_QUERY = "multiple";
38 public static final String SCALAR_RESULT = "scalarResult";
39 public static final int MULTIPLE_ROWS_SIZE = 3;
40 public static final String VALUE_COLUMN = "_value";
41 public static final String TIME_COLUMN = "_time";
42 public static final String MULTIPLE_ROWS_VALUE_PREFIX = "value";
47 public boolean connect() {
53 public boolean isConnected() {
58 public boolean disconnect() {
64 public void query(String queryString, BiConsumer<Cancellable, FluxRecord> onNext,
65 Consumer<? super Throwable> onError, Runnable onComplete) {
67 throw new DatabaseException("Client not connected");
70 if (INVALID_QUERY.equals(queryString)) {
71 onError.accept(new RuntimeException("Invalid query"));
72 } else if (EMPTY_QUERY.equals(queryString)) {
74 } else if (SCALAR_QUERY.equals(queryString)) {
75 FluxRecord scalar = new FluxRecord(0);
76 scalar.getValues().put("result", "_result");
77 scalar.getValues().put("table", 0);
78 scalar.getValues().put(VALUE_COLUMN, SCALAR_RESULT);
79 onNext.accept(mock(Cancellable.class), scalar);
81 } else if (MULTIPLE_ROWS_QUERY.equals(queryString)) {
82 onNext.accept(mock(Cancellable.class), createRowRecord(0, MULTIPLE_ROWS_VALUE_PREFIX + 1));
83 onNext.accept(mock(Cancellable.class), createRowRecord(0, MULTIPLE_ROWS_VALUE_PREFIX + 2));
84 onNext.accept(mock(Cancellable.class), createRowRecord(1, MULTIPLE_ROWS_VALUE_PREFIX + 3));
89 private static FluxRecord createRowRecord(int table, String value) {
90 FluxRecord record = new FluxRecord(0);
91 record.getValues().put("result", "_result");
92 record.getValues().put("table", table);
93 record.getValues().put(VALUE_COLUMN, value);
94 record.getValues().put(TIME_COLUMN, Instant.now());
95 record.getValues().put("_start", Instant.now());
96 record.getValues().put("_stop", Instant.now());
97 record.getValues().put("_measurement", "measurementName");