Files
neuron/tests/persistence_test.cc
T

295 lines
11 KiB
C++

#include <gtest/gtest.h>
#include "persist/persist.h"
TEST(PersistenceAdapterTest, Adapter)
{
const char * dir_name = strdup("./persistence");
neu_persister_t *persister = neu_persister_create(dir_name);
const char * persist_dir = neu_persister_get_persist_dir(persister);
const char *adapters_fname = neu_persister_get_adapters_fname(persister);
const char *plugins_fname = neu_persister_get_plugins_fname(persister);
neu_json_node_req_node_t node1 = { 1, (char *) "sample-driver-adapter", 1,
(char *) "sample-drv-plugin", 1 };
neu_json_node_req_node_t node2 = { 2, (char *) "sample-app-adapter", 5,
(char *) "sample-app-plugin", 2 };
neu_json_node_req_node_t node3 = { 3, (char *) "mqtt-adapter", 3,
(char *) "mqtt-plugin", 3 };
neu_json_node_req_t *req =
(neu_json_node_req_t *) malloc(sizeof(neu_json_node_req_t));
req->nodes = (neu_json_node_req_node_t *) calloc(
3, sizeof(neu_json_node_req_node_t));
req->n_node = 3;
req->nodes[0] = node1;
req->nodes[1] = node2;
req->nodes[2] = node3;
vector_t *vec = vector_new_move_from_buf(
req->nodes, req->n_node, req->n_node, sizeof(neu_json_node_req_node_t));
EXPECT_EQ(0, neu_persister_store_adapters(persister, vec));
vector_t *nodes = NULL;
EXPECT_EQ(0, neu_persister_load_adapters(persister, &nodes));
VECTOR_FOR_EACH(nodes, iter)
{
neu_json_node_req_node_t *info =
(neu_json_node_req_node_t *) iterator_get(&iter);
if (strcmp(info->name, "sample-driver-adapter") == 0) {
EXPECT_EQ(1, info->type);
EXPECT_STREQ("sample-drv-plugin", info->plugin_name);
EXPECT_EQ(1, info->state);
} else if (strcmp(info->name, "sample-app-adapter") == 0) {
EXPECT_EQ(5, info->type);
EXPECT_STREQ("sample-app-plugin", info->plugin_name);
EXPECT_EQ(2, info->state);
} else if (strcmp(info->name, "mqtt-adapter") == 0) {
EXPECT_EQ(3, info->type);
EXPECT_STREQ("mqtt-plugin", info->plugin_name);
EXPECT_EQ(3, info->state);
} else {
EXPECT_EQ(1, 2);
}
free(info->name);
free(info->plugin_name);
}
vector_free(nodes);
vector_free(vec);
free((char *) dir_name);
free((char *) persist_dir);
free((char *) adapters_fname);
free((char *) plugins_fname);
free(persister);
free(req);
}
TEST(PersistencePluginTest, Plugin)
{
const char * dir_name = strdup("./persistence");
neu_persister_t *persister = neu_persister_create(dir_name);
const char * persist_dir = neu_persister_get_persist_dir(persister);
const char *adapters_fname = neu_persister_get_adapters_fname(persister);
const char *plugins_fname = neu_persister_get_plugins_fname(persister);
neu_json_plugin_req_plugin_t plugin1 = { (
char *) "libplugin-sample-drv.so" };
neu_json_plugin_req_plugin_t plugin2 = { (
char *) "libplugin-sample-app.so" };
neu_json_plugin_req_plugin_t plugin3 = { (char *) "libplugin-mqtt.so" };
neu_json_plugin_req_t *req =
(neu_json_plugin_req_t *) malloc(sizeof(neu_json_plugin_req_t));
req->plugins = (neu_json_plugin_req_plugin_t *) calloc(
3, sizeof(neu_json_plugin_req_plugin_t));
req->n_plugin = 3;
req->plugins[0] = plugin1;
req->plugins[1] = plugin2;
req->plugins[2] = plugin3;
vector_t *vec =
vector_new_move_from_buf(req->plugins, req->n_plugin, req->n_plugin,
sizeof(neu_json_plugin_req_plugin_t));
EXPECT_EQ(0, neu_persister_store_plugins(persister, vec));
vector_t *plugins = NULL;
EXPECT_EQ(0, neu_persister_load_plugins(persister, &plugins));
VECTOR_FOR_EACH(plugins, iter)
{
neu_json_plugin_req_plugin_t *info =
(neu_json_plugin_req_plugin_t *) iterator_get(&iter);
if (strcmp(*info, "libplugin-sample-drv.so") == 0) {
EXPECT_STREQ("libplugin-sample-drv.so", *info);
} else if (strcmp(*info, "libplugin-sample-app.so") == 0) {
EXPECT_STREQ("libplugin-sample-app.so", *info);
} else if (strcmp(*info, "libplugin-mqtt.so") == 0) {
EXPECT_STREQ("libplugin-mqtt.so", *info);
} else {
EXPECT_EQ(1, 2);
}
free(*info);
}
vector_free(plugins);
vector_free(vec);
free(req);
free((char *) persist_dir);
free((char *) adapters_fname);
free((char *) plugins_fname);
free(persister);
free((char *) dir_name);
}
TEST(PersistenceDatatagTest, Datatag)
{
const char * dir_name = strdup("./persistence");
neu_persister_t *persister = neu_persister_create(dir_name);
const char * persist_dir = neu_persister_get_persist_dir(persister);
const char *adapters_fname = neu_persister_get_adapters_fname(persister);
const char *grp_config_name = "test-group";
const char *plugins_fname = neu_persister_get_plugins_fname(persister);
neu_json_datatag_req_tag_t tag1 = { 1, (char *) "1!400001",
(char *) "modbus1", 3, 1 };
neu_json_datatag_req_tag_t tag2 = { 2, (char *) "1!400002",
(char *) "modbus2", 4, 1 };
neu_json_datatag_req_tag_t tag3 = { 3, (char *) "1!400003",
(char *) "modbus3", 5, 1 };
neu_json_datatag_req_t *req =
(neu_json_datatag_req_t *) malloc(sizeof(neu_json_datatag_req_t));
req->tags = (neu_json_datatag_req_tag_t *) calloc(
3, sizeof(neu_json_datatag_req_tag_t));
req->n_tag = 3;
req->tags[0] = tag1;
req->tags[1] = tag2;
req->tags[2] = tag3;
vector_t *vec = vector_new_move_from_buf(
req->tags, req->n_tag, req->n_tag, sizeof(neu_json_datatag_req_tag_t));
char *adapter_name = strdup("adapter_modbus");
EXPECT_EQ(0,
neu_persister_store_datatags(persister, adapter_name,
grp_config_name, vec));
vector_t *tags = NULL;
EXPECT_EQ(0,
neu_persister_load_datatags(persister, adapter_name,
grp_config_name, &tags));
VECTOR_FOR_EACH(tags, iter)
{
neu_json_datatag_req_tag_t *info =
(neu_json_datatag_req_tag_t *) iterator_get(&iter);
if (strcmp(info->name, "modbus1") == 0) {
EXPECT_STREQ("1!400001", info->address);
EXPECT_EQ(3, info->type);
EXPECT_EQ(1, info->attribute);
EXPECT_EQ(1, info->id);
} else if (strcmp(info->name, "modbus2") == 0) {
EXPECT_STREQ("1!400002", info->address);
EXPECT_EQ(4, info->type);
EXPECT_EQ(1, info->attribute);
EXPECT_EQ(2, info->id);
} else if (strcmp(info->name, "modbus3") == 0) {
EXPECT_STREQ("1!400003", info->address);
EXPECT_EQ(5, info->type);
EXPECT_EQ(1, info->attribute);
EXPECT_EQ(3, info->id);
} else {
EXPECT_EQ(1, 2);
}
free(info->name);
free(info->address);
}
vector_free(tags);
free(adapter_name);
vector_free(vec);
free(req);
free((char *) persist_dir);
free((char *) adapters_fname);
free((char *) plugins_fname);
free(persister);
free((char *) dir_name);
}
TEST(PersistenceSubscriptionTest, Subscription)
{
const char * dir_name = strdup("./persistence");
neu_persister_t *persister = neu_persister_create(dir_name);
const char * persist_dir = neu_persister_get_persist_dir(persister);
const char *adapters_fname = neu_persister_get_adapters_fname(persister);
const char *grp_config_name = "test-group";
const char *plugins_fname = neu_persister_get_plugins_fname(persister);
neu_json_subscriptions_req_subscription_t sub1 = {
(char *) "config_drv_sample", (char *) "sample-app-adapter", 2000,
(char *) "sample-driver-adapter"
};
neu_json_subscriptions_req_subscription_t sub2 = {
(char *) "config_app_sample", (char *) "mqtt-adapter", 2000,
(char *) "config_app_sample"
};
neu_json_subscriptions_req_subscription_t sub3 = {
(char *) "config_modbus_tcp_sample_2", (char *) "mqtt-adapter", 2000,
(char *) "modbus_tcp_adapter"
};
neu_json_subscriptions_req_t *req = (neu_json_subscriptions_req_t *) malloc(
sizeof(neu_json_subscriptions_req_t));
req->subscriptions = (neu_json_subscriptions_req_subscription_t *) calloc(
3, sizeof(neu_json_subscriptions_req_subscription_t));
req->n_subscription = 3;
req->subscriptions[0] = sub1;
req->subscriptions[1] = sub2;
req->subscriptions[2] = sub3;
char * adapter_name = strdup("adapter_mqtt");
vector_t *vec = vector_new_move_from_buf(
req->subscriptions, req->n_subscription, req->n_subscription,
sizeof(neu_json_subscriptions_req_subscription_t));
EXPECT_EQ(0,
neu_persister_store_subscriptions(persister, adapter_name, vec));
vector_t *subs = NULL;
EXPECT_EQ(0,
neu_persister_load_subscriptions(persister, adapter_name, &subs));
VECTOR_FOR_EACH(subs, iter)
{
neu_json_subscriptions_req_subscription_t *info =
(neu_json_subscriptions_req_subscription_t *) iterator_get(&iter);
if (strcmp(info->group_config_name, "config_drv_sample") == 0) {
EXPECT_STREQ("sample-app-adapter", info->sub_adapter_name);
EXPECT_EQ(2000, info->read_interval);
EXPECT_STREQ("sample-driver-adapter", info->src_adapter_name);
} else if (strcmp(info->group_config_name, "config_app_sample") == 0) {
EXPECT_STREQ("mqtt-adapter", info->sub_adapter_name);
EXPECT_EQ(2000, info->read_interval);
EXPECT_STREQ("config_app_sample", info->src_adapter_name);
} else if (strcmp(info->group_config_name,
"config_modbus_tcp_sample_2") == 0) {
EXPECT_STREQ("mqtt-adapter", info->sub_adapter_name);
EXPECT_EQ(2000, info->read_interval);
EXPECT_STREQ("modbus_tcp_adapter", info->src_adapter_name);
} else {
EXPECT_EQ(1, 2);
}
free(info->group_config_name);
free(info->sub_adapter_name);
free(info->src_adapter_name);
}
vector_free(subs);
free((char *) dir_name);
free((char *) persist_dir);
free((char *) adapters_fname);
free((char *) plugins_fname);
free(persister);
free(req);
free(adapter_name);
vector_free(vec);
}