src.dualinventive.com/jjacobs/dinetrpcll-sniffer/libdi/tests/rpc.cpp

130 lines
4.4 KiB
C++

#include <di/rpc.h>
#include <di/device/uid.h>
#include <gtest/gtest.h>
TEST(rpc, type_to_str)
{
static struct expect {
const char *str;
enum di_rpc_types type;
} expect[] = {
// notify
{ "notify:info", DI_RPC_TYPE_NOTIFY_INFO },
{ "notify:data", DI_RPC_TYPE_NOTIFY_DATA },
// action
{ "action:info", DI_RPC_TYPE_ACTION_INFO },
{ "action:get", DI_RPC_TYPE_ACTION_GET },
{ "action:set", DI_RPC_TYPE_ACTION_SET },
// sensor
{ "sensor:info", DI_RPC_TYPE_SENSOR_INFO },
{ "sensor:data", DI_RPC_TYPE_SENSOR_DATA },
// config
{ "config:info", DI_RPC_TYPE_CONFIG_INFO },
{ "config:get", DI_RPC_TYPE_CONFIG_GET },
{ "config:set", DI_RPC_TYPE_CONFIG_SET },
{ "config:reset", DI_RPC_TYPE_CONFIG_RESET },
// device
{ "device:ping", DI_RPC_TYPE_DEVICE_PING },
{ "device:info", DI_RPC_TYPE_DEVICE_INFO },
{ "device:data", DI_RPC_TYPE_DEVICE_DATA },
{ "device:reset", DI_RPC_TYPE_DEVICE_RESET },
{ "device:errors", DI_RPC_TYPE_DEVICE_ERRORS },
// connection
{ "connection:info", DI_RPC_TYPE_CONNECTION_INFO },
// unknown
{ "unknown", DI_RPC_TYPE_UNKNOWN }
};
const size_t size = sizeof(expect)/sizeof(expect[0]);
/* di_rpc_str */
for (size_t n = 0; n < size; n++)
ASSERT_STREQ(expect[n].str, di_rpc_to_str(expect[n].type));
/* di_rpc_types_to_str */
for (size_t n = 0; n < size; n++)
ASSERT_STREQ(expect[n].str, di_rpc_types_to_str(expect[n].type));
/* di_rpc_types_from_str */
for (size_t n = 0; n < size; n++)
ASSERT_EQ(expect[n].type, di_rpc_types_from_str(expect[n].str));
}
TEST(rpc, data_type_to_str)
{
ASSERT_STREQ("bool", di_rpc_data_type_to_str(DI_RPC_DATA_TYPE_BOOL));
ASSERT_STREQ("number", di_rpc_data_type_to_str(DI_RPC_DATA_TYPE_NUMBER));
ASSERT_STREQ("enum", di_rpc_data_type_to_str(DI_RPC_DATA_TYPE_ENUM));
ASSERT_STREQ("gps", di_rpc_data_type_to_str(DI_RPC_DATA_TYPE_GPS));
ASSERT_STREQ("string", di_rpc_data_type_to_str(DI_RPC_DATA_TYPE_STRING));
}
TEST(rpc, data_is_type)
{
static const struct expect {
enum di_rpc_data_field field;
enum di_rpc_data_type type;
} expect[] = {
{DI_RPC_DATA_FIELD_UNKNOWN, DI_RPC_DATA_TYPE_UNKNOWN},
{DI_RPC_DATA_FIELD_BOOL, DI_RPC_DATA_TYPE_BOOL},
{DI_RPC_DATA_FIELD_INT8, DI_RPC_DATA_TYPE_NUMBER},
{DI_RPC_DATA_FIELD_INT16, DI_RPC_DATA_TYPE_NUMBER},
{DI_RPC_DATA_FIELD_INT32, DI_RPC_DATA_TYPE_NUMBER},
{DI_RPC_DATA_FIELD_INT64, DI_RPC_DATA_TYPE_NUMBER},
{DI_RPC_DATA_FIELD_UINT8, DI_RPC_DATA_TYPE_NUMBER},
{DI_RPC_DATA_FIELD_UINT16, DI_RPC_DATA_TYPE_NUMBER},
{DI_RPC_DATA_FIELD_UINT32, DI_RPC_DATA_TYPE_NUMBER},
{DI_RPC_DATA_FIELD_UINT64, DI_RPC_DATA_TYPE_NUMBER},
{DI_RPC_DATA_FIELD_FLOAT, DI_RPC_DATA_TYPE_NUMBER},
{DI_RPC_DATA_FIELD_DOUBLE, DI_RPC_DATA_TYPE_NUMBER},
{DI_RPC_DATA_FIELD_STRING, DI_RPC_DATA_TYPE_STRING}
};
const size_t size = sizeof(expect)/sizeof(expect[0]);
struct di_rpc_data data;
for (size_t n = 0; n < size; n++) {
data.field = expect[n].field;
ASSERT_TRUE(di_rpc_data_is_type(&data, expect[n].type));
}
}
TEST(rpc, msg_type_to_str)
{
ASSERT_STREQ("unknown", di_rpc_msg_type_to_str(DI_RPC_MSG_TYPE_UNKNOWN));
ASSERT_STREQ("req", di_rpc_msg_type_to_str(DI_RPC_MSG_TYPE_REQUEST));
ASSERT_STREQ("rep", di_rpc_msg_type_to_str(DI_RPC_MSG_TYPE_REPLY));
ASSERT_STREQ("pub", di_rpc_msg_type_to_str(DI_RPC_MSG_TYPE_PUBLISH));
}
TEST(rpc, msg_reset)
{
struct di_rpc_msg msg;
/* Initial reset */
di_rpc_msg_reset(&msg, di_device_uid_get());
ASSERT_EQ(1U, DI_RPC_VERSION);
ASSERT_EQ(DI_RPC_VERSION, msg.dinetrpc);
ASSERT_EQ(DI_RPC_MSG_TYPE_UNKNOWN, msg.msg_type);
ASSERT_EQ(DI_RPC_TYPE_UNKNOWN, msg.type);
ASSERT_STREQ("00000000000000000000000000000000", msg.device_uid);
ASSERT_EQ(0U, msg.id);
ASSERT_EQ(DNOK, msg.err);
/* Modify */
msg.dinetrpc = 12;
msg.msg_type = DI_RPC_MSG_TYPE_PUBLISH;
msg.type = DI_RPC_TYPE_DEVICE_PING;
msg.id = 1234;
msg.err = DNE_PARAM;
/* Initialized device_uid */
di_rpc_msg_reset(&msg, di_device_uid_get());
ASSERT_EQ(1U, DI_RPC_VERSION);
ASSERT_EQ(DI_RPC_VERSION, msg.dinetrpc);
ASSERT_EQ(DI_RPC_MSG_TYPE_UNKNOWN, msg.msg_type);
ASSERT_EQ(DI_RPC_TYPE_UNKNOWN, msg.type);
ASSERT_STREQ("00000000000000000000000000000000", msg.device_uid);
ASSERT_EQ(0U, msg.id);
ASSERT_EQ(DNOK, msg.err);
}