2023-08-31 17:35:12 +02:00
|
|
|
/* Unit tests for buffer.
|
2018-08-24 23:23:01 +02:00
|
|
|
*
|
2023-08-31 11:17:07 +02:00
|
|
|
* Author: Steffen Vogel <post@steffenvogel.de>
|
|
|
|
* SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
2023-08-28 12:31:18 +02:00
|
|
|
*/
|
2018-08-24 23:23:01 +02:00
|
|
|
|
|
|
|
#include <cstdlib>
|
|
|
|
#include <ctime>
|
|
|
|
|
|
|
|
#include <criterion/criterion.h>
|
|
|
|
#include <jansson.h>
|
|
|
|
|
2020-10-20 22:13:35 +02:00
|
|
|
#include <villas/buffer.hpp>
|
2018-08-24 23:23:01 +02:00
|
|
|
|
|
|
|
using namespace villas;
|
|
|
|
|
2020-09-11 15:16:53 +02:00
|
|
|
// cppcheck-suppress unknownMacro
|
2018-10-19 14:33:10 +02:00
|
|
|
TestSuite(buffer, .description = "Buffer datastructure");
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
Test(buffer, decode) {
|
|
|
|
Buffer buf;
|
|
|
|
json_t *j;
|
|
|
|
json_t *k;
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
const char *e = "{\"id\": \"5a786626-fbc6-4c04-98c2-48027e68c2fa\"}";
|
|
|
|
size_t len = strlen(e);
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2024-02-29 18:13:37 +01:00
|
|
|
#pragma GCC diagnostic push
|
|
|
|
// Workaround for compiler bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106199
|
|
|
|
#pragma GCC diagnostic ignored "-Wstringop-overflow"
|
2023-09-07 13:19:19 +02:00
|
|
|
buf.insert(buf.begin(), e, e + len);
|
2024-02-29 18:13:37 +01:00
|
|
|
#pragma GCC diagnostic pop
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
k = json_loads(e, 0, nullptr);
|
|
|
|
cr_assert_not_null(k);
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
j = buf.decode();
|
|
|
|
cr_assert_not_null(j);
|
|
|
|
cr_assert(json_equal(j, k));
|
2018-08-24 23:23:01 +02:00
|
|
|
}
|
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
Test(buffer, encode) {
|
|
|
|
int ret;
|
|
|
|
Buffer buf;
|
|
|
|
json_t *k;
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
const char *e = "{\"id\": \"5a786626-fbc6-4c04-98c2-48027e68c2fa\"}";
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
k = json_loads(e, 0, nullptr);
|
|
|
|
cr_assert_not_null(k);
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
ret = buf.encode(k);
|
|
|
|
cr_assert_eq(ret, 0);
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
char *f = buf.data();
|
|
|
|
cr_assert_not_null(f);
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
cr_assert_str_eq(e, f);
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
json_decref(k);
|
2018-08-24 23:23:01 +02:00
|
|
|
}
|
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
Test(buffer, encode_decode) {
|
|
|
|
int ret;
|
|
|
|
Buffer buf;
|
|
|
|
json_t *k;
|
|
|
|
json_t *j;
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
const char *e = "{\"id\": \"5a786626-fbc6-4c04-98c2-48027e68c2fa\"}";
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
k = json_loads(e, 0, nullptr);
|
|
|
|
cr_assert_not_null(k);
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
ret = buf.encode(k);
|
|
|
|
cr_assert_eq(ret, 0);
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
j = buf.decode();
|
|
|
|
cr_assert_not_null(j);
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
cr_assert(json_equal(j, k));
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
json_decref(j);
|
|
|
|
json_decref(k);
|
2018-08-24 23:23:01 +02:00
|
|
|
}
|
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
Test(buffer, multiple) {
|
|
|
|
int ret;
|
|
|
|
const int N = 100;
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
Buffer buf;
|
|
|
|
json_t *k[N];
|
|
|
|
json_t *j[N];
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
std::srand(std::time(nullptr));
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
for (int i = 0; i < N; i++) {
|
|
|
|
k[i] = json_pack("{ s: i }", "id", std::rand());
|
|
|
|
cr_assert_not_null(k[i]);
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
ret = buf.encode(k[i]);
|
|
|
|
cr_assert_eq(ret, 0);
|
|
|
|
}
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
for (int i = 0; i < N; i++) {
|
|
|
|
j[i] = buf.decode();
|
|
|
|
cr_assert_not_null(j[i]);
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
cr_assert(json_equal(k[i], j[i]));
|
2018-08-24 23:23:01 +02:00
|
|
|
|
2023-09-07 13:19:19 +02:00
|
|
|
json_decref(k[i]);
|
|
|
|
json_decref(j[i]);
|
|
|
|
}
|
2018-08-24 23:23:01 +02:00
|
|
|
}
|