weatherstation/firmware/libraries/ESP8266_Influxdb/test/E2ETest.cpp
2022-09-16 09:20:19 +02:00

102 lines
4 KiB
C++

#include "E2ETest.h"
void E2ETest::run() {
failures = 0;
Serial.println("E2E Tests");
testBuckets();
testWriteAndQuery();
Serial.printf("E2E Tests %s\n", failures ? "FAILED" : "SUCCEEDED");
}
void E2ETest::testBuckets() {
TEST_INIT("testBuckets");
InfluxDBClient client(E2ETest::e2eApiUrl, E2ETest::orgName, E2ETest::bucketName, E2ETest::token);
BucketsClient buckets = client.getBucketsClient();
TEST_ASSERT(!buckets.isNull());
TEST_ASSERTM(client.validateConnection(),client.getLastErrorMessage());
String id = buckets.getOrgID("my-org");
TEST_ASSERTM( isValidID(id.c_str()), id.length()?id:buckets.getLastErrorMessage());
id = buckets.getOrgID("org");
TEST_ASSERT( id == "");
TEST_ASSERT(buckets.checkBucketExists("my-bucket"));
TEST_ASSERT(!buckets.checkBucketExists("bucket-1"));
Bucket b = buckets.createBucket("bucket-1");
TEST_ASSERTM(!b.isNull(), buckets.getLastErrorMessage());
TEST_ASSERTM(isValidID(b.getID()), b.getID());
TEST_ASSERTM(!strcmp(b.getName(), "bucket-1"), b.getName());
TEST_ASSERTM(b.getExpire() == 0, String(b.getExpire()));
TEST_ASSERT(buckets.checkBucketExists("bucket-1"));
TEST_ASSERT(buckets.deleteBucket(b.getID()));;
TEST_ASSERT(!buckets.checkBucketExists("bucket-1"));
TEST_ASSERT(!buckets.deleteBucket("bucket-1"));
uint32_t monthSec = 3600*24*30;
b = buckets.createBucket("bucket-2", monthSec);
TEST_ASSERTM(!b.isNull(), buckets.getLastErrorMessage());
TEST_ASSERT(buckets.checkBucketExists("bucket-2"));
TEST_ASSERTM(b.getExpire() == monthSec, String(b.getExpire()));
uint32_t yearSec = 12*monthSec;
Bucket b2 = buckets.createBucket("bucket-3", yearSec);
TEST_ASSERTM(!b2.isNull(), buckets.getLastErrorMessage());
TEST_ASSERT(buckets.checkBucketExists("bucket-3"));
TEST_ASSERTM(b2.getExpire() == yearSec, String(b2.getExpire()));
TEST_ASSERT(buckets.checkBucketExists("bucket-2"));
TEST_ASSERT(buckets.deleteBucket(b.getID()));
TEST_ASSERT(buckets.checkBucketExists("bucket-3"));
TEST_ASSERT(buckets.deleteBucket(b2.getID()));;
TEST_ASSERT(!buckets.checkBucketExists("bucket-3"));
TEST_ASSERT(!buckets.checkBucketExists("bucket-2"));
TEST_END();
}
const char *QueryTemplate PROGMEM = "from(bucket: \"%s\") |> range(start: %ld) |> pivot(rowKey:[\"_time\"],columnKey: [\"_field\"],valueColumn: \"_value\") |> count(column: \"index\")";
void E2ETest::testWriteAndQuery() {
TEST_INIT("testWriteAndQuery");
const char *TestBucket = "test-bucket";
InfluxDBClient client(E2ETest::e2eApiUrl, E2ETest::orgName, TestBucket, E2ETest::token);
TEST_ASSERTM(client.validateConnection(),client.getLastErrorMessage());
time_t start = time(nullptr);
BucketsClient buckets = client.getBucketsClient();
TEST_ASSERT(!buckets.isNull());
Bucket t = buckets.findBucket(TestBucket);
if(!t.isNull()) {
Serial.println(F("Bucket already exists, deleting."));
TEST_ASSERTM(buckets.deleteBucket(t.getID()), buckets.getLastErrorMessage());
}
TEST_ASSERT(!buckets.checkBucketExists(TestBucket));
Bucket b = buckets.createBucket(TestBucket);
TEST_ASSERTM(!b.isNull(), buckets.getLastErrorMessage());
delay(1000);
for (int i = 0; i < 5; i++) {
Point *p = createPoint("test1");
p->addField("index", i);
TEST_ASSERTM(client.writePoint(*p),client.getLastErrorMessage());
delete p;
}
char *query = new char[strlen_P(QueryTemplate)+strlen(TestBucket)+10+1]; //10 - maximum=length of timestamo
sprintf_P(query, QueryTemplate, TestBucket, start);
FluxQueryResult result = client.query(query);
delete [] query;
TEST_ASSERTM(result.next(), result.getError());
FluxValue val = result.getValueByName("index");
TEST_ASSERT(!val.isNull());
TEST_ASSERTM(val.getLong() == 5, String(val.getLong()));
TEST_ASSERTM(!result.next(), result.getError());
result.close();
TEST_ASSERT(buckets.deleteBucket(b.getID()));
TEST_END();
}