mirror of
https://github.com/emqx/neuron.git
synced 2026-10-17 04:40:42 +08:00
295 lines
11 KiB
C++
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);
|
|
}
|