Compare commits

...
31 Commits
Author SHA1 Message Date
fengzeroz e526c104c6 Merge pull request #1906 from hxy7yx/v2.8-1
plugin(modbus): fix invalid message check
2024-03-14 16:56:55 +08:00
fengzeroz 32c965a8e9 Merge pull request #1909 from fengzeroz/v2.8
version: 2.8.0
2024-03-14 16:56:01 +08:00
fengzero 55a2ff38f8 version: 2.8.0 2024-03-14 08:55:18 +00:00
hxy7yx 4b5744b7a0 plugin(modbus): fix invalid message check 2024-03-14 16:53:47 +08:00
fengzeroz 69ff345fec Merge pull request #1901 from hxy7yx/v2.8-1
plugin(modbus): fix modbus rtu slave check
2024-03-13 16:32:04 +08:00
hxy7yx bd184aede6 plugin(modbus): fix modbus rtu slave check 2024-03-13 16:19:25 +08:00
fengzeroz 784cc2d3ef Merge pull request #1894 from hxy7yx/v2.8-1
fix(add gtags): correct tag count when tag name conflict
2024-03-08 17:47:59 +08:00
hxy7yx 092a8cb848 fix(add gtags): correct tag count when tag name conflict 2024-03-08 17:40:27 +08:00
fengzeroz c5a6b1f6fd Merge pull request #1892 from fengzeroz/v2.8
version: 2.8.0-beta2
2024-03-08 17:35:36 +08:00
fengzero e49941f534 version: 2.8.0-beta2 2024-03-08 09:34:55 +00:00
fengzeroz f7efbb55de Merge pull request #1886 from fengzeroz/v2.8
version: 2.8.0
2024-03-08 14:12:17 +08:00
fengzero 0d2b8633cf version: 2.8.0 2024-03-08 06:11:42 +00:00
fengzeroz 38631ce11f Merge pull request #1884 from eeff/v2.8
Pick to v2.8 fix(core): persist group when adding gtags
2024-03-08 13:52:09 +08:00
eeff 7390d24fab fix(core): eliminate NEU_REQ_ADD_DRIVERS request data race 2024-03-08 11:34:56 +08:00
fengzeroz d417f0f691 Merge pull request #1883 from eeff/v2.8
Pick to v2.8 fix(core): persist group when adding gtags
2024-03-07 17:33:41 +08:00
eeff d69c9e1bca fix(core): persist group when adding gtags 2024-03-07 17:31:01 +08:00
fengzeroz d0f0126cd7 Merge pull request #1881 from fengzeroz/v2.8
Revert "fd timeout 3s"
2024-03-07 16:42:29 +08:00
fengzero 9255bdccae Revert "fd timeout 3s"
This reverts commit 59987563df.
2024-03-07 08:41:57 +00:00
fengzeroz fa532eeb1a Merge pull request #1880 from fengzeroz/v2.8
fd timeout 3s
2024-03-07 15:22:36 +08:00
fengzero 59987563df fd timeout 3s 2024-03-07 07:22:03 +00:00
fengzeroz 19029624ef Merge pull request #1879 from eeff/v2.8
Pick to v2.8 feat(core): set domain socket to block mode and 1s timeout
2024-03-07 11:08:23 +08:00
eeff 4cd25717b4 feat(core): set domain socket to block mode and 1s timeout 2024-03-07 10:51:47 +08:00
fengzeroz 0233b646f4 Merge pull request #1872 from ZhouBox/v2.8
[v2.8]check module name when update plugin
2024-03-06 10:22:55 +08:00
xiang.zhou d5591c2b14 check module name when update plugin 2024-03-06 10:13:50 +08:00
fengzeroz 97a9b59333 Merge pull request #1873 from eeff/v2.8
Pick to v2.8 fix: notify north app about driver group deletion
2024-03-06 10:11:03 +08:00
eeff 535fdb5b92 fix(ekuiper): handle NEU_REQ_DEL_GROUP 2024-03-06 10:01:03 +08:00
eeff d0bd9df277 test(mqtt): data upload when driver group deleted 2024-03-06 10:01:03 +08:00
eeff e6db324af6 fix(mqtt): handle NEU_REQ_DEL_GROUP 2024-03-06 10:01:03 +08:00
eeff 34cd23cc79 fix(core): notify app about driver group deletion 2024-03-06 10:01:03 +08:00
fengzeroz 53ff65ca4b Merge pull request #1867 from fengzeroz/v2.8
version: v2.8
2024-02-29 16:52:20 +08:00
fengzero 40569f843c version: v2.8 2024-02-29 08:48:01 +00:00
24 changed files with 234 additions and 83 deletions
+3 -47
View File
@@ -41,7 +41,7 @@ jobs:
ut:
runs-on: ubuntu-20.04
container: ghcr.io/neugates/build:x86_64-main
container: ghcr.io/neugates/build:x86_64-v2.8
steps:
- uses: actions/checkout@v4
@@ -60,24 +60,9 @@ jobs:
cd build
ctest --output-on-failure
- name: create cov report
run: |
sudo apt-get update
sudo apt-get -y install lcov
mkdir -p cov_report
./create_cov_report.sh ut
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
verbose: true
fail_ci_if_error: true
directory: ./cov_report/
files: cov-ut.info
ft:
runs-on: ubuntu-20.04
container: ghcr.io/neugates/build:x86_64-main
container: ghcr.io/neugates/build:x86_64-v2.8
steps:
- uses: actions/checkout@v4
@@ -105,24 +90,9 @@ jobs:
path: |
build/neuron.log
- name: create cov report
run: |
sudo apt-get update
sudo apt-get -y install lcov
mkdir -p cov_report
./create_cov_report.sh ft
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
verbose: true
fail_ci_if_error: true
directory: ./cov_report/
files: cov-ft.info
pft:
runs-on: ubuntu-20.04
container: ghcr.io/neugates/build:x86_64-main
container: ghcr.io/neugates/build:x86_64-v2.8
strategy:
matrix:
plugin: [core, ekuiper, modbus, mqtt, metrics]
@@ -164,17 +134,3 @@ jobs:
else
pytest -s -v tests/ft/metrics/"test_metrics.py"
fi
- name: create cov report
run: |
sudo apt-get update
sudo apt-get -y install lcov
mkdir -p cov_report
./create_cov_report.sh ${{ matrix.plugin }}
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
verbose: true
directory: ./cov_report/
files: cov-${{ matrix.plugin }}.info
+4 -4
View File
@@ -8,9 +8,9 @@ on:
- published
env:
VERSION: 2.7.0
VERSION: 2.8.0
UI_VERSION: 2.6.1
BRANCH: main
BRANCH: v2.8
jobs:
cross-build:
@@ -21,7 +21,7 @@ jobs:
- [aarch64-linux-gnu, aarch64, arm64]
- [arm-linux-gnueabihf, armv4, armhf]
- [x86_64-linux-gnu, x86_64, amd64]
container: ghcr.io/neugates/build:${{ matrix.arch[1] }}-main
container: ghcr.io/neugates/build:${{ matrix.arch[1] }}-v2.8
steps:
- uses: actions/checkout@v4
@@ -64,7 +64,7 @@ jobs:
matrix:
arch:
- [x86_64-linux-gnu, x86_64, amd64]
container: ghcr.io/neugates/build:${{ matrix.arch[1] }}-main
container: ghcr.io/neugates/build:${{ matrix.arch[1] }}-v2.8
steps:
- uses: actions/checkout@v4
+1 -1
View File
@@ -1,7 +1,7 @@
set(CMAKE_SYSTEM_NAME Linux)
set(COMPILER_PREFIX aarch64-linux-gnu)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(LIBRARY_DIR /home/neuron/main/libs)
set(LIBRARY_DIR /home/neuron/v2.8/libs)
set(CMAKE_C_COMPILER ${COMPILER_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${COMPILER_PREFIX}-g++)
+1 -1
View File
@@ -1,7 +1,7 @@
set(CMAKE_SYSTEM_NAME Linux)
set(COMPILER_PREFIX arm-linux-gnueabi)
set(CMAKE_SYSTEM_PROCESSOR armv5tejl)
set(LIBRARY_DIR /home/neuron/main/libs)
set(LIBRARY_DIR /home/neuron/v2.8/libs)
set(CMAKE_C_COMPILER ${COMPILER_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${COMPILER_PREFIX}-g++)
+1 -1
View File
@@ -1,7 +1,7 @@
set(CMAKE_SYSTEM_NAME Linux)
set(COMPILER_PREFIX arm-linux-gnueabihf)
set(CMAKE_SYSTEM_PROCESSOR armv7l)
set(LIBRARY_DIR /home/neuron/main/libs)
set(LIBRARY_DIR /home/neuron/v2.8/libs)
set(CMAKE_C_COMPILER ${COMPILER_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${COMPILER_PREFIX}-g++)
+1 -1
View File
@@ -1,7 +1,7 @@
set(CMAKE_SYSTEM_NAME Linux)
set(COMPILER_PREFIX x86_64-linux-gnu)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
set(LIBRARY_DIR /home/neuron/main/libs)
set(LIBRARY_DIR /home/neuron/v2.8/libs)
set(CMAKE_C_COMPILER ${COMPILER_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${COMPILER_PREFIX}-g++)
+1 -1
View File
@@ -23,7 +23,7 @@
#include <stdbool.h>
#define NEU_VERSION_MAJOR 2
#define NEU_VERSION_MINOR 7
#define NEU_VERSION_MINOR 8
#define NEU_VERSION_FIX 0
#define NEU_GET_VERSION_MAJOR(V) ((0xffff0000 & V) >> 16)
+2
View File
@@ -333,6 +333,8 @@ static int ekuiper_plugin_request(neu_plugin_t * plugin,
case NEU_REQ_UPDATE_GROUP: {
break;
}
case NEU_REQ_DEL_GROUP:
break;
case NEU_REQ_SUBSCRIBE_GROUP:
case NEU_REQ_UPDATE_SUBSCRIBE_GROUP: {
neu_req_subscribe_t *sub_info = data;
+1 -1
View File
@@ -699,7 +699,7 @@ static int process_protocol_buf(neu_plugin_t *plugin, uint8_t slave_id,
plog_recv_protocol(plugin, recv_buf, ret);
}
neu_protocol_unpack_buf_init(&pbuf, recv_buf, ret);
int ret_s = modbus_stack_recv(plugin->stack, 0, &pbuf);
int ret_s = modbus_stack_recv(plugin->stack, slave_id, &pbuf);
if (ret_s == MODBUS_DEVICE_ERR) {
ret = ret_s;
} else {
+30 -14
View File
@@ -84,10 +84,8 @@ int modbus_stack_recv(modbus_stack_t *stack, uint8_t slave_id,
return -1;
}
if (stack->protocol == MODBUS_PROTOCOL_TCP) {
if (code.slave_id != slave_id) {
return -1;
}
if (code.slave_id != slave_id) {
return -1;
}
switch (code.function) {
@@ -102,18 +100,36 @@ int modbus_stack_recv(modbus_stack_t *stack, uint8_t slave_id,
return -1;
}
if (stack->protocol == MODBUS_PROTOCOL_TCP && data.n_byte == 0xff) {
bytes = neu_protocol_unpack_buf(buf,
header.len -
sizeof(struct modbus_code) -
sizeof(struct modbus_data));
stack->value_fn(stack->ctx, code.slave_id,
header.len - sizeof(struct modbus_code) -
sizeof(struct modbus_data),
bytes, 0);
} else {
switch (stack->protocol) {
case MODBUS_PROTOCOL_TCP:
if (data.n_byte == 0xff) {
bytes = neu_protocol_unpack_buf(buf,
header.len -
sizeof(struct modbus_code) -
sizeof(struct modbus_data));
if (bytes == NULL) {
return -1;
}
stack->value_fn(stack->ctx, code.slave_id,
header.len - sizeof(struct modbus_code) -
sizeof(struct modbus_data),
bytes, 0);
} else {
bytes = neu_protocol_unpack_buf(buf, data.n_byte);
if (bytes == NULL) {
return -1;
}
stack->value_fn(stack->ctx, code.slave_id, data.n_byte, bytes,
0);
}
break;
case MODBUS_PROTOCOL_RTU:
bytes = neu_protocol_unpack_buf(buf, data.n_byte);
if (bytes == NULL) {
return -1;
}
stack->value_fn(stack->ctx, code.slave_id, data.n_byte, bytes, 0);
break;
}
break;
+8
View File
@@ -606,6 +606,14 @@ int handle_unsubscribe_group(neu_plugin_t * plugin,
return 0;
}
int handle_del_group(neu_plugin_t *plugin, neu_req_del_group_t *req)
{
route_tbl_del(&plugin->route_tbl, req->driver, req->group);
plog_notice(plugin, "del route driver:%s group:%s", req->driver,
req->group);
return 0;
}
int handle_update_group(neu_plugin_t *plugin, neu_req_update_group_t *req)
{
route_tbl_update_group(&plugin->route_tbl, req->driver, req->group,
+1
View File
@@ -49,6 +49,7 @@ int handle_unsubscribe_group(neu_plugin_t * plugin,
neu_req_unsubscribe_t *unsub_info);
int handle_update_group(neu_plugin_t *plugin, neu_req_update_group_t *req);
int handle_del_group(neu_plugin_t *plugin, neu_req_del_group_t *cmd);
int handle_update_driver(neu_plugin_t *plugin, neu_req_update_node_t *req);
int handle_del_driver(neu_plugin_t *plugin, neu_reqresp_node_deleted_t *req);
+3
View File
@@ -384,6 +384,9 @@ static int mqtt_plugin_request(neu_plugin_t *plugin, neu_reqresp_head_t *head,
case NEU_REQ_UPDATE_GROUP:
error = handle_update_group(plugin, data);
break;
case NEU_REQ_DEL_GROUP:
error = handle_del_group(plugin, data);
break;
case NEU_REQ_UPDATE_NODE:
error = handle_update_driver(plugin, data);
break;
+36 -6
View File
@@ -152,18 +152,38 @@ neu_adapter_t *neu_adapter_create(neu_adapter_info_t *info, bool load)
break;
}
adapter->control_fd = socket(AF_UNIX, SOCK_DGRAM | SOCK_NONBLOCK, 0);
adapter->control_fd = socket(AF_UNIX, SOCK_DGRAM, 0);
if (adapter->control_fd <= 0) {
free(adapter);
return NULL;
}
adapter->trans_data_fd = socket(AF_UNIX, SOCK_DGRAM | SOCK_NONBLOCK, 0);
adapter->trans_data_fd = socket(AF_UNIX, SOCK_DGRAM, 0);
if (adapter->trans_data_fd <= 0) {
close(adapter->control_fd);
free(adapter);
return NULL;
}
struct timeval sock_timeout = {
.tv_sec = 1,
.tv_usec = 0,
};
if (setsockopt(adapter->control_fd, SOL_SOCKET, SO_SNDTIMEO, &sock_timeout,
sizeof(sock_timeout)) < 0 ||
setsockopt(adapter->control_fd, SOL_SOCKET, SO_RCVTIMEO, &sock_timeout,
sizeof(sock_timeout)) < 0 ||
setsockopt(adapter->trans_data_fd, SOL_SOCKET, SO_SNDTIMEO,
&sock_timeout, sizeof(sock_timeout)) < 0 ||
setsockopt(adapter->trans_data_fd, SOL_SOCKET, SO_RCVTIMEO,
&sock_timeout, sizeof(sock_timeout)) < 0) {
nlog_error("fail to set sock timeout for adapter:%s", info->name);
close(adapter->trans_data_fd);
close(adapter->control_fd);
free(adapter);
return NULL;
}
adapter->name = strdup(info->name);
adapter->events = neu_event_new();
adapter->state = NEU_NODE_RUNNING_STATE_INIT;
@@ -911,7 +931,10 @@ static int adapter_loop(enum neu_event_io_type type, int fd, void *usr_data)
error.error = neu_adapter_driver_del_group(
(neu_adapter_driver_t *) adapter, cmd->group);
} else {
error.error = NEU_ERR_GROUP_NOT_ALLOW;
adapter->module->intf_funs->request(
adapter->plugin, (neu_reqresp_head_t *) header, &header[1]);
neu_msg_free(msg);
break;
}
if (error.error == NEU_ERR_SUCCESS) {
@@ -1233,6 +1256,8 @@ int neu_adapter_add_gtags(neu_adapter_t *adapter, neu_req_add_gtag_t *cmd,
neu_adapter_driver_add_group((neu_adapter_driver_t *) adapter,
cmd->groups[group_index].group,
cmd->groups[group_index].interval);
adapter_storage_add_group(adapter->name, cmd->groups[group_index].group,
cmd->groups[group_index].interval);
for (int tag_index = 0; tag_index < cmd->groups[group_index].n_tag;
tag_index++) {
int add_tag_result = neu_adapter_driver_add_tag(
@@ -1262,12 +1287,17 @@ int neu_adapter_add_gtags(neu_adapter_t *adapter, neu_req_add_gtag_t *cmd,
cmd->groups[group_index].group,
cmd->groups[group_index].tags[added_tag_index].name);
}
for (int groups_count = 0; groups_count < cmd->n_group;
groups_count++) {
neu_adapter_driver_try_del_tag((neu_adapter_driver_t *) adapter,
cmd->groups[group_index].n_tag -
tag_index);
for (++group_index; group_index < cmd->n_group; group_index++) {
neu_adapter_driver_try_del_tag(
(neu_adapter_driver_t *) adapter,
cmd->groups[groups_count].n_tag);
cmd->groups[group_index].n_tag);
}
resp->index = 0;
resp->error = add_tag_result;
return add_tag_result;
+56 -1
View File
@@ -99,9 +99,20 @@ neu_manager_t *neu_manager_create()
manager->subscribe_manager = neu_subscribe_manager_create();
manager->log_level = ZLOG_LEVEL_NOTICE;
manager->server_fd = socket(AF_UNIX, SOCK_DGRAM | SOCK_NONBLOCK, 0);
manager->server_fd = socket(AF_UNIX, SOCK_DGRAM, 0);
assert(manager->server_fd > 0);
struct timeval sock_timeout = {
.tv_sec = 1,
.tv_usec = 0,
};
if (setsockopt(manager->server_fd, SOL_SOCKET, SO_SNDTIMEO, &sock_timeout,
sizeof(sock_timeout)) < 0 ||
setsockopt(manager->server_fd, SOL_SOCKET, SO_RCVTIMEO, &sock_timeout,
sizeof(sock_timeout)) < 0) {
assert(!"fail to set manager sock timeout");
}
// abstract domain socket is a Linux extension, thus not portable.
// use abstract domain socket here to avoid polluting the file system
struct sockaddr_un local = {
@@ -511,6 +522,35 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data)
break;
}
if (!neu_plugin_manager_create_instance_by_lib_name(
manager->plugin_manager, cmd->library, &ins)) {
nlog_warn("library %s not instance", cmd->library);
free(cmd->so_file);
free(cmd->schema_file);
free(so_tmp_path);
header->type = NEU_RESP_ERROR;
e.error = NEU_ERR_LIBRARY_UPDATE_FAIL;
strcpy(header->receiver, header->sender);
reply(manager, header, &e);
break;
}
if (strcmp(module_name, ins.module->module_name) != 0) {
nlog_warn("library %s module name mismatch!", cmd->library);
neu_plugin_manager_destroy_instance(manager->plugin_manager,
&ins);
free(cmd->so_file);
free(cmd->schema_file);
free(so_tmp_path);
header->type = NEU_RESP_ERROR;
e.error = NEU_ERR_LIBRARY_UPDATE_FAIL;
strcpy(header->receiver, header->sender);
reply(manager, header, &e);
break;
}
neu_plugin_manager_destroy_instance(manager->plugin_manager, &ins);
if (!neu_plugin_manager_exists(manager->plugin_manager,
module_name)) {
@@ -1098,9 +1138,24 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data)
neu_msg_exchange(header);
reply(manager, header, &e);
} else {
UT_array *apps = neu_subscribe_manager_find(
manager->subscribe_manager, cmd->driver, cmd->group);
forward_msg(manager, header, header->receiver);
neu_subscribe_manager_remove(manager->subscribe_manager,
cmd->driver, cmd->group);
if (NULL == apps) {
break;
}
// notify app node about group deletion
utarray_foreach(apps, neu_app_subscribe_t *, app)
{
forward_msg_copy(manager, header, app->app_name);
}
utarray_free(apps);
}
break;
}
+11
View File
@@ -460,6 +460,7 @@ static inline int add_driver(neu_manager_t *manager, neu_req_driver_t *driver)
if (0 != neu_adapter_validate_gtags(adapter, &cmd, &resp) ||
0 != neu_adapter_try_add_gtags(adapter, &cmd, &resp) ||
0 != neu_adapter_add_gtags(adapter, &cmd, &resp)) {
neu_adapter_uninit(adapter);
neu_manager_del_node(manager, driver->node);
}
@@ -498,11 +499,21 @@ int neu_manager_add_drivers(neu_manager_t *manager, neu_req_driver_array_t *req)
for (uint16_t i = 0; i < req->n_driver; ++i) {
ret = add_driver(manager, &req->drivers[i]);
if (0 != ret) {
nlog_notice("add i:%" PRIu16 " driver:%s fail", i,
req->drivers[i].node);
while (i-- > 0) {
nlog_notice("rollback i:%" PRIu16 " driver:%s", i,
req->drivers[i].node);
neu_adapter_t *adapter = neu_node_manager_find(
manager->node_manager, req->drivers[i].node);
neu_adapter_uninit(adapter);
neu_manager_del_node(manager, req->drivers[i].node);
}
nlog_error("fail to add %" PRIu16 " drivers", req->n_driver);
break;
}
nlog_notice("add i:%" PRIu16 " driver:%s success", i,
req->drivers[i].node);
}
return ret;
+32
View File
@@ -489,6 +489,38 @@ bool neu_plugin_manager_create_instance_by_path(neu_plugin_manager_t *mgr,
return true;
}
bool neu_plugin_manager_create_instance_by_lib_name(
neu_plugin_manager_t *mgr, const char *lib_name,
neu_plugin_instance_t *instance)
{
(void) mgr;
char lib_paths[3][64] = { 0 };
snprintf(lib_paths[0], sizeof(lib_paths[0]), "%s", g_plugin_dir);
snprintf(lib_paths[1], sizeof(lib_paths[1]), "%s/system", g_plugin_dir);
snprintf(lib_paths[2], sizeof(lib_paths[2]), "%s/custom", g_plugin_dir);
for (size_t i = 0; i < sizeof(lib_paths) / sizeof(lib_paths[0]); i++) {
char lib_path[256] = { 0 };
snprintf(lib_path, sizeof(lib_path) - 1, "%s/%s", lib_paths[i],
lib_name);
instance->handle = dlopen(lib_path, RTLD_NOW);
if (instance->handle == NULL) {
continue;
}
instance->module = (neu_plugin_module_t *) dlsym(instance->handle,
"neu_plugin_module");
assert(instance->module != NULL);
return true;
}
assert(instance->handle != NULL);
return false;
}
bool neu_plugin_manager_remove_library(neu_plugin_manager_t *mgr,
const char * library)
{
+4
View File
@@ -68,6 +68,10 @@ bool neu_plugin_manager_create_instance_by_path(neu_plugin_manager_t *mgr,
neu_plugin_instance_t *instance,
int * error);
bool neu_plugin_manager_create_instance_by_lib_name(
neu_plugin_manager_t *mgr, const char *lib_name,
neu_plugin_instance_t *instance);
bool neu_plugin_manager_remove_library(neu_plugin_manager_t *mgr,
const char * library);
+29
View File
@@ -484,6 +484,35 @@ class TestMQTT:
finally:
api.update_group_check(DRIVER, new_name, GROUP)
@description(
given="MQTT node",
when="delete subscribed driver group and add back group",
then="broker should receive data on upload topic",
)
def test_mqtt_upload_when_group_deleted(self, mocker, conf_fmt_tags):
api.node_setting_check(NODE, conf_fmt_tags)
api.node_ctl(NODE, config.NEU_CTL_START)
# delete driver group
api.del_group_check(DRIVER, GROUP)
# add back driver group
api.add_group_check(DRIVER, GROUP, INTERVAL)
api.add_tags_check(DRIVER, GROUP, tags=[TAG0])
# add back subscription on new topic
topic = UPLOAD_TOPIC + "-new"
params = {"topic": topic}
api.subscribe_group_check(NODE, DRIVER, GROUP, params)
msg = mocker.get(topic, timeout=3)
try:
assert msg is not None
assert DRIVER == msg["node"]
assert GROUP == msg["group"]
assert TAG0["name"] in [tag["name"] for tag in msg["tags"]]
finally:
params["topic"] = UPLOAD_TOPIC
api.subscribe_group_update(NODE, DRIVER, GROUP, params)
@description(
given="MQTT node and conf_cache",
when="broken network connection restored",
+1
View File
@@ -71,6 +71,7 @@ NEU_ERR_LIBRARY_MODULE_KIND_NOT_SUPPORT = 2313
NEU_ERR_LIBRARY_MODULE_VERSION_NOT_MATCH = 2314
NEU_ERR_LIBRARY_NAME_NOT_CONFORM = 2315
NEU_ERR_LIBRARY_CLIB_NOT_MATCH = 2316
NEU_ERR_LIBRARY_UPDATE_FAIL = 2317
NEU_ERR_LICENSE_NOT_FOUND = 2400
NEU_ERR_LICENSE_INVALID = 2401
+2 -2
View File
@@ -200,7 +200,7 @@ class TestPlugin:
response = api.updata_plugin(
library_name=plugin_data['library'], so_file=plugin_data['so_file'], schema_file=plugin_data['schema_file'])
assert 400 == response.status_code
assert NEU_ERR_LIBRARY_MODULE_NOT_EXISTS == response.json().get("error")
assert NEU_ERR_LIBRARY_UPDATE_FAIL == response.json().get("error")
@description(given="incorrect configuration", when="update plugin", then="fail")
def test_08_update_plugin_fail1(self):
@@ -244,7 +244,7 @@ class TestPlugin:
assert 200 == response.status_code
for plugin in response.json().get("plugins"):
if plugin['name'] == 'c1':
assert plugin['version'] == '2.7.99'
assert plugin['version'] == '2.8.99'
@description(given="incorrect configuration", when="update plugin", then="fail")
def test_10_update_plugin_fail3(self):
+4 -1
View File
@@ -9,7 +9,7 @@ class TestLog:
@description(given="multiple non-existing groups and multiple correct tags",
when="adding",
then="successfully added")
def test_adding_correct_gtags_nonexisting_groups(self):
def test_adding_correct_gtags_nonexisting_groups(self, class_setup_and_teardown):
response = api.add_node(node='modbus-tcp-tag-test', plugin=PLUGIN_MODBUS_TCP)
assert 200 == response.status_code
assert 0 == response.json()['error']
@@ -63,6 +63,9 @@ class TestLog:
assert 200 == response.status_code
assert NEU_ERR_SUCCESS == response.json()['error']
# check data persisted
class_setup_and_teardown.restart()
response = api.get_group()
assert 200 == response.status_code
assert 'group_1' == response.json()['groups'][0]['group']
+1 -1
View File
@@ -63,7 +63,7 @@ static const neu_plugin_intf_funs_t plugin_intf_funs = {
};
const neu_plugin_module_t neu_plugin_module = {
.version = NEU_VERSION(2, 7, 99),
.version = NEU_VERSION(2, 8, 99),
.schema = "c1",
.module_name = "c1",
.module_descr = "c1 v2",
+1 -1
View File
@@ -1 +1 @@
2.7.0-dev
2.8.0