Files
neuron/tests/variable_test.cc
T
gc87 11f7141af2 Improve MQTT driver and Variable
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
2021-08-25 12:10:30 +08:00

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);
}