mirror of
https://github.com/emqx/neuron.git
synced 2026-10-19 05:51:27 +08:00
11f7141af2
1. Variable array serialization and deserialization support 2. Variable basic data type setting 3. Variable export function unit test 4. Integrate MQTT and Variable 5. Delete the work queue in the MQTT driver
225 lines
6.3 KiB
C++
225 lines
6.3 KiB
C++
#include <gtest/gtest.h>
|
|
|
|
#include "neu_types.h"
|
|
|
|
TEST(VariableTest, neu_variable_create)
|
|
{
|
|
neu_variable_t *v = neu_variable_create();
|
|
EXPECT_NE(v, nullptr);
|
|
neu_variable_destroy(v);
|
|
}
|
|
|
|
TEST(VariableTest, neu_variable_count)
|
|
{
|
|
neu_variable_t *v = neu_variable_create();
|
|
size_t count = neu_variable_count(v);
|
|
EXPECT_EQ(1, count);
|
|
neu_variable_destroy(v);
|
|
}
|
|
|
|
TEST(VariableTest, neu_variable_set_byte)
|
|
{
|
|
neu_variable_t *v = neu_variable_create();
|
|
int rc = neu_variable_set_byte(v, 16);
|
|
EXPECT_EQ(0, rc);
|
|
int8_t ret;
|
|
rc = neu_variable_get_byte(v, &ret);
|
|
EXPECT_EQ(0, rc);
|
|
EXPECT_EQ(16, ret);
|
|
neu_variable_destroy(v);
|
|
}
|
|
|
|
TEST(VariableTest, neu_variable_set_qword)
|
|
{
|
|
neu_variable_t *v = neu_variable_create();
|
|
int rc = neu_variable_set_qword(v, 100010111010);
|
|
EXPECT_EQ(0, rc);
|
|
int64_t ret;
|
|
rc = neu_variable_get_qword(v, &ret);
|
|
EXPECT_EQ(0, rc);
|
|
EXPECT_EQ(100010111010, ret);
|
|
neu_variable_destroy(v);
|
|
}
|
|
|
|
TEST(VariableTest, neu_variable_set_double)
|
|
{
|
|
neu_variable_t *v = neu_variable_create();
|
|
int rc = neu_variable_set_double(v, 100010111010.010603);
|
|
EXPECT_EQ(0, rc);
|
|
double ret;
|
|
rc = neu_variable_get_double(v, &ret);
|
|
EXPECT_EQ(0, rc);
|
|
EXPECT_EQ(100010111010.010603, ret);
|
|
neu_variable_destroy(v);
|
|
}
|
|
|
|
TEST(VariableTest, neu_variable_set_string)
|
|
{
|
|
neu_variable_t *v = neu_variable_create();
|
|
int rc = neu_variable_set_string(v, "Hello, Neuron!");
|
|
EXPECT_EQ(0, rc);
|
|
char * ret = NULL;
|
|
size_t len;
|
|
rc = neu_variable_get_string(v, &ret, &len);
|
|
EXPECT_EQ(0, rc);
|
|
EXPECT_STREQ("Hello, Neuron!", ret);
|
|
neu_variable_destroy(v);
|
|
}
|
|
|
|
TEST(VariableTest, neu_variable_add_item)
|
|
{
|
|
neu_variable_t *v = neu_variable_create();
|
|
neu_variable_t *i0 = neu_variable_create();
|
|
neu_variable_t *i1 = neu_variable_create();
|
|
neu_variable_t *i2 = neu_variable_create();
|
|
neu_variable_t *i3 = neu_variable_create();
|
|
neu_variable_t *i4 = neu_variable_create();
|
|
|
|
EXPECT_EQ(0, neu_variable_add_item(v, i0));
|
|
EXPECT_EQ(0, neu_variable_add_item(v, i1));
|
|
EXPECT_EQ(0, neu_variable_add_item(v, i2));
|
|
EXPECT_EQ(0, neu_variable_add_item(v, i3));
|
|
EXPECT_EQ(0, neu_variable_add_item(v, i4));
|
|
|
|
size_t count = neu_variable_count(v);
|
|
EXPECT_EQ(6, count);
|
|
neu_variable_destroy(v);
|
|
}
|
|
|
|
TEST(VariableTest, neu_variable_get_item)
|
|
{
|
|
neu_variable_t *v = neu_variable_create();
|
|
|
|
neu_variable_t *i0 = neu_variable_create();
|
|
neu_variable_set_qword(i0, 100);
|
|
neu_variable_set_error(i0, 0);
|
|
|
|
neu_variable_t *i1 = neu_variable_create();
|
|
neu_variable_set_double(i1, 100010111010.010603);
|
|
neu_variable_set_error(i1, 0);
|
|
|
|
neu_variable_t *i2 = neu_variable_create();
|
|
neu_variable_set_string(i2, "Read Error");
|
|
neu_variable_set_error(i2, 10);
|
|
|
|
EXPECT_EQ(0, neu_variable_add_item(v, i0));
|
|
EXPECT_EQ(0, neu_variable_add_item(v, i1));
|
|
EXPECT_EQ(0, neu_variable_add_item(v, i2));
|
|
|
|
size_t count = neu_variable_count(v);
|
|
EXPECT_EQ(4, count);
|
|
|
|
neu_variable_t *ii0 = NULL;
|
|
neu_variable_t *ii1 = NULL;
|
|
neu_variable_t *ii2 = NULL;
|
|
int rc = neu_variable_get_item(v, 1, &ii0);
|
|
EXPECT_EQ(0, rc);
|
|
int64_t ret_qword;
|
|
rc = neu_variable_get_qword(ii0, &ret_qword);
|
|
EXPECT_EQ(0, rc);
|
|
EXPECT_EQ(100, ret_qword);
|
|
|
|
rc = neu_variable_get_item(v, 2, &ii1);
|
|
EXPECT_EQ(0, rc);
|
|
double ret_double;
|
|
rc = neu_variable_get_double(ii1, &ret_double);
|
|
EXPECT_EQ(0, rc);
|
|
EXPECT_EQ(100010111010.010603, ret_double);
|
|
|
|
rc = neu_variable_get_item(v, 3, &ii2);
|
|
EXPECT_EQ(0, rc);
|
|
char * ret_string = NULL;
|
|
size_t len;
|
|
rc = neu_variable_get_string(ii2, &ret_string, &len);
|
|
EXPECT_EQ(0, rc);
|
|
EXPECT_STREQ("Read Error", ret_string);
|
|
|
|
neu_variable_destroy(v);
|
|
}
|
|
|
|
TEST(VariableTest, neu_variable_serialize)
|
|
{
|
|
neu_variable_t *v = neu_variable_create();
|
|
neu_variable_set_qword(v, 100);
|
|
neu_variable_set_error(v, 0);
|
|
|
|
void * buf;
|
|
size_t len = neu_variable_serialize(v, &buf);
|
|
EXPECT_EQ(24, len);
|
|
neu_variable_serialize_free(buf);
|
|
|
|
buf = NULL;
|
|
neu_variable_t *i2 = neu_variable_create();
|
|
neu_variable_set_string(i2, "Read Error.");
|
|
neu_variable_set_error(i2, 10);
|
|
neu_variable_add_item(v, i2);
|
|
len = neu_variable_serialize(v, &buf);
|
|
EXPECT_EQ(52, len);
|
|
neu_variable_serialize_free(buf);
|
|
|
|
buf = NULL;
|
|
neu_variable_t *i1 = neu_variable_create();
|
|
neu_variable_set_double(i1, 100010111010.010603);
|
|
neu_variable_set_error(i1, 0);
|
|
neu_variable_add_item(v, i1);
|
|
len = neu_variable_serialize(v, &buf);
|
|
EXPECT_EQ(76, len);
|
|
neu_variable_serialize_free(buf);
|
|
|
|
neu_variable_destroy(v);
|
|
}
|
|
|
|
TEST(VariableTest, neu_variable_deserialize)
|
|
{
|
|
neu_variable_t *v = neu_variable_create();
|
|
neu_variable_set_qword(v, 100);
|
|
neu_variable_set_error(v, 0);
|
|
|
|
neu_variable_t *i1 = neu_variable_create();
|
|
neu_variable_set_string(i1, "Read Error.");
|
|
neu_variable_set_error(i1, 10);
|
|
neu_variable_add_item(v, i1);
|
|
|
|
neu_variable_t *i2 = neu_variable_create();
|
|
neu_variable_set_double(i2, 100010111010.010603);
|
|
neu_variable_set_error(i2, 0);
|
|
neu_variable_add_item(v, i2);
|
|
|
|
void * buf;
|
|
size_t len = neu_variable_serialize(v, &buf);
|
|
EXPECT_EQ(76, len);
|
|
|
|
neu_variable_t *vv = neu_variable_deserialize(buf, len);
|
|
EXPECT_NE(nullptr, vv);
|
|
size_t count = neu_variable_count(vv);
|
|
EXPECT_EQ(3, count);
|
|
|
|
neu_variable_t *ii0 = NULL;
|
|
neu_variable_t *ii1 = NULL;
|
|
neu_variable_t *ii2 = NULL;
|
|
int rc = neu_variable_get_item(v, 0, &ii0);
|
|
EXPECT_EQ(0, rc);
|
|
int64_t ret_qword;
|
|
rc = neu_variable_get_qword(ii0, &ret_qword);
|
|
EXPECT_EQ(0, rc);
|
|
EXPECT_EQ(100, ret_qword);
|
|
|
|
rc = neu_variable_get_item(v, 1, &ii1);
|
|
EXPECT_EQ(0, rc);
|
|
char * ret_string = NULL;
|
|
size_t len_string;
|
|
rc = neu_variable_get_string(ii1, &ret_string, &len_string);
|
|
EXPECT_EQ(0, rc);
|
|
EXPECT_STREQ("Read Error.", ret_string);
|
|
|
|
rc = neu_variable_get_item(v, 2, &ii2);
|
|
EXPECT_EQ(0, rc);
|
|
double ret_double;
|
|
rc = neu_variable_get_double(ii2, &ret_double);
|
|
EXPECT_EQ(0, rc);
|
|
EXPECT_EQ(100010111010.010603, ret_double);
|
|
|
|
neu_variable_destroy(vv);
|
|
neu_variable_serialize_free(buf);
|
|
neu_variable_destroy(v);
|
|
} |