api: node supports updating name

This commit is contained in:
fengzero
2021-11-22 09:31:16 +00:00
committed by Parker Liu
parent fbb004e0b3
commit f839095692
16 changed files with 105 additions and 71 deletions
+2 -3
View File
@@ -8,9 +8,8 @@
"id": 7
},
"update_node_req": {
"type": 1,
"name": "modbus-tcp-node",
"plugin_name": "modbus-plugin-tcp"
"id": 1,
"name": "modbus-tcp-node"
},
"get_nodes_req": {
"node_type": 1
+32 -11
View File
@@ -124,22 +124,21 @@ Add setting to non-existent node, it should return failure
Integer response status 404
Integer response body error ${ERR_NODE_NOT_EXIST}
Get setting from non-existent node, it should return failure
GET /api/v2/node/setting?node_id=999
#Get setting from non-existent node, it should return failure
#GET /api/v2/node/setting?node_id=999
Integer response status 404
Integer response body error ${ERR_NODE_NOT_EXIST}
#Integer response status 404
#Integer response body error ${ERR_NODE_NOT_EXIST}
Get setting from a node that has never been set, it should return failure
${driver_node_id} Add Node ${NODE_DRIVER} driver-nodee ${PLUGIN_MODBUS}
#Get setting from a node that has never been set, it should return failure
#${driver_node_id} Add Node ${NODE_DRIVER} driver-node1 ${PLUGIN_MODBUS}
GET /api/v2/node/setting?node_id=${driver_node_id}
#GET /api/v2/node/setting?node_id=${driver_node_id}
Integer response status 404
Integer response body error ${ERR_NODE_SETTING_NOT_EXIST}
#Integer response status 404
#Integer response body error ${ERR_NODE_SETTING_NOT_EXIST}
#Del Node ${driver_node_id}
Del Node ${driver_node_id}
Add the correct settings to the node, it should return success
${driver_node_id} Add Node ${NODE_DRIVER} driver-node ${PLUGIN_MODBUS}
@@ -170,6 +169,28 @@ Add wrong settings to node, it should return failure
Integer response status 400
Integer response body error ${ERR_NODE_SETTING_INVALID}
Update a node that does not exist, it should return failure
PUT /api/v2/node {"id": 99, "name": "test-name"}
Integer response status 404
Integer response body error ${ERR_NODE_NOT_EXIST}
Update the name of the node, it should return success
${app_node_id} Add Node ${NODE_APP} app-node ${PLUGIN_MQTT}
PUT /api/v2/node {"id": ${app_node_id}, "name": "test-name"}
Integer response status 200
GET /api/v2/node?type=${NODE_APP}
Integer response status 200
Array $.nodes
String $.nodes[*].name sample-app-adapter test-name
Del Node ${app_node_id}
#Start an unconfigured node, it should return failure
+5 -4
View File
@@ -80,10 +80,11 @@ Delete non-existent tags, it should return success
Integer response status 200
Integer response body error ${ERR_SUCCESS}
#Query tag from non-existent node, it should return failure
#GET /api/v2/tags?node_id=999
#Integer response status 404
#Integer response body error ${ERR_NODE_NOT_EXIST}
Query tag from non-existent node, it should return failure
GET /api/v2/tags?node_id=999
Integer response status 404
Integer response body error ${ERR_NODE_NOT_EXIST}
After adding the tag, query the tag, it should return the added tag
${test_node_id} Get Node ID ${NODE_DRIVER} ${test_node}
+2
View File
@@ -70,6 +70,8 @@ typedef enum neu_mqtt_function {
NEU_MQTT_OP_DELETE_PLUGIN,
NEU_MQTT_OP_GET_PLUGIN,
NEU_MQTT_OP_PING,
} neu_mqtt_function_e;
typedef struct {
+1 -2
View File
@@ -73,9 +73,8 @@ typedef struct {
int neu_json_encode_get_nodes_resp(void *json_object, void *param);
typedef struct {
int64_t id;
char * name;
int64_t type;
char * plugin_name;
} neu_json_update_node_req_t;
int neu_json_decode_update_node_req(char * buf,
+2 -5
View File
@@ -162,11 +162,8 @@ typedef struct neu_cmd_del_node {
/* NEU_REQRESP_UPDATE_NODE */
typedef struct neu_cmd_update_node {
neu_node_type_e node_type;
const char * adapter_name;
const char * plugin_name;
// optional value, it is nothing when set to 0
plugin_id_t plugin_id;
neu_node_id_t node_id;
const char * node_name;
} neu_cmd_update_node_t;
/* NEU_REQRESP_GET_NODES */
+2 -3
View File
@@ -73,9 +73,8 @@ neu_datatag_table_t *neu_system_get_datatags_table(neu_plugin_t *plugin,
intptr_t neu_system_add_node(neu_plugin_t *plugin, neu_node_type_e node_type,
const char *adapter_name, const char *plugin_name);
intptr_t neu_system_del_node(neu_plugin_t *plugin, neu_node_id_t node_id);
intptr_t neu_system_update_node(neu_plugin_t *plugin, neu_node_type_e node_type,
const char *adapter_name,
const char *plugin_name);
intptr_t neu_system_update_node(neu_plugin_t *plugin, neu_node_id_t node_id,
const char *node_name);
// uninit vector
vector_t neu_system_get_nodes(neu_plugin_t *plugin, neu_node_type_e node_type);
intptr_t neu_system_add_group_config(neu_plugin_t * plugin,
+14 -10
View File
@@ -74,17 +74,21 @@ char *command_add_node(neu_plugin_t *plugin, neu_json_mqtt_t *mqtt,
char *command_update_node(neu_plugin_t *plugin, neu_json_mqtt_t *mqtt,
neu_json_update_node_req_t *req)
{
log_info("Update node uuid:%s, node type:%d", mqtt->uuid, req->type);
intptr_t rc =
neu_system_update_node(plugin, req->type, req->name, req->plugin_name);
char *json_str = NULL;
if (rc != 0) {
json_str = strdup("{\"error\": 1}");
} else {
json_str = strdup("{\"error\": 0}");
}
(void) plugin;
(void) mqtt;
(void) req;
// log_info("Update node uuid:%s, node type:%d", mqtt->uuid, req->type);
// intptr_t rc =
// neu_system_update_node(plugin, req->type, req->name, req->plugin_name);
// char *json_str = NULL;
// if (rc != 0) {
// json_str = strdup("{\"error\": 1}");
//} else {
// json_str = strdup("{\"error\": 0}");
//}
return json_str;
// return json_str;
return NULL;
}
char *command_delete_node(neu_plugin_t *plugin, neu_json_mqtt_t *mqtt,
+4 -9
View File
@@ -69,15 +69,10 @@ void handle_update_adapter(nng_aio *aio)
neu_plugin_t *plugin = neu_rest_get_plugin();
REST_PROCESS_HTTP_REQUEST(
aio, neu_json_update_node_req_t, neu_json_decode_update_node_req, {
intptr_t err = neu_system_update_node(plugin, req->type, req->name,
req->plugin_name);
if (err != 0) {
http_bad_request(aio, "{\"error\": 1}");
} else {
http_ok(aio, "{\"error\": 0}");
}
})
aio, neu_json_update_node_req_t, neu_json_decode_update_node_req,
{ NEU_JSON_RESPONSE_ERROR(
neu_system_update_node(plugin, req->id, req->name),
{ http_response(aio, error_code.error, result_error); }) })
}
void handle_get_adapter(nng_aio *aio)
+1
View File
@@ -78,6 +78,7 @@ static char *get_param(const char *url, const char *name)
for (uint8_t i = 0; i < 64 && i < strlen(find); i++) {
if (*(find + len + i) == '&' || *(find + len + i) == '\0') {
s_value[i] = '\0';
break;
}
s_value[i] = *(find + len + i);
+6
View File
@@ -1053,6 +1053,12 @@ const char *neu_adapter_get_name(neu_adapter_t *adapter)
return (const char *) adapter->name;
}
void neu_adapter_rename(neu_adapter_t *adapter, const char *name)
{
free(adapter->name);
adapter->name = strdup(name);
}
neu_manager_t *neu_adapter_get_manager(neu_adapter_t *adapter)
{
if (adapter == NULL) {
+1
View File
@@ -33,6 +33,7 @@ void neu_adapter_destroy(neu_adapter_t *adapter);
int neu_adapter_start(neu_adapter_t *adapter);
int neu_adapter_stop(neu_adapter_t *adapter);
const char * neu_adapter_get_name(neu_adapter_t *adapter);
void neu_adapter_rename(neu_adapter_t *adapter, const char *name);
neu_manager_t *neu_adapter_get_manager(neu_adapter_t *adapter);
nng_socket neu_adapter_get_sock(neu_adapter_t *adapter);
adapter_id_t neu_adapter_get_id(neu_adapter_t *adapter);
+5 -7
View File
@@ -147,16 +147,14 @@ intptr_t neu_system_del_node(neu_plugin_t *plugin, neu_node_id_t node_id)
return errorcode;
}
intptr_t neu_system_update_node(neu_plugin_t *plugin, neu_node_type_e node_type,
const char *adapter_name,
const char *plugin_name)
intptr_t neu_system_update_node(neu_plugin_t *plugin, neu_node_id_t node_id,
const char *node_name)
{
intptr_t errorcode = -1;
intptr_t errorcode = NEU_ERR_SUCCESS;
neu_cmd_update_node_t node_update_cmd = { 0 };
node_update_cmd.adapter_name = adapter_name;
node_update_cmd.plugin_name = plugin_name;
node_update_cmd.node_type = node_type;
node_update_cmd.node_name = node_name;
node_update_cmd.node_id = node_id;
PLUGIN_CALL_CMD(plugin, NEU_REQRESP_UPDATE_NODE, node_update_cmd, intptr_t,
{ errorcode = (intptr_t) resp; })
+22 -3
View File
@@ -1546,10 +1546,29 @@ int neu_manager_del_node(neu_manager_t *manager, neu_node_id_t node_id)
int neu_manager_update_node(neu_manager_t *manager, neu_cmd_update_node_t *cmd)
{
int rv = 0;
int rv = NEU_ERR_NODE_NOT_EXIST;
size_t index = 0;
neu_adapter_t *adapter = NULL;
vector_t * reg_adapters = &manager->reg_adapters;
adapter_id_t adapter_id =
neu_manager_adapter_id_from_node_id(manager, cmd->node_id);
nng_mtx_lock(manager->adapters_mtx);
index = find_reg_adapter_index_by_id(reg_adapters, adapter_id);
if (index != SIZE_MAX) {
adapter_reg_entity_t *reg_entity;
reg_entity = (adapter_reg_entity_t *) vector_get(reg_adapters, index);
adapter = reg_entity->adapter;
if (adapter != NULL) {
neu_adapter_rename(adapter, cmd->node_name);
rv = NEU_ERR_SUCCESS;
}
}
nng_mtx_unlock(manager->adapters_mtx);
(void) manager;
(void) cmd;
return rv;
}
+3 -9
View File
@@ -207,13 +207,9 @@ int neu_json_decode_update_node_req(char * buf,
neu_json_update_node_req_t *req =
calloc(1, sizeof(neu_json_update_node_req_t));
neu_json_elem_t req_elems[] = { {
.name = "type",
.name = "id",
.t = NEU_JSON_INT,
},
{
.name = "plugin_name",
.t = NEU_JSON_STR,
},
{
.name = "name",
.t = NEU_JSON_STR,
@@ -223,9 +219,8 @@ int neu_json_decode_update_node_req(char * buf,
goto decode_fail;
}
req->type = req_elems[0].v.val_int;
req->plugin_name = req_elems[1].v.val_str;
req->name = req_elems[2].v.val_str;
req->id = req_elems[0].v.val_int;
req->name = req_elems[1].v.val_str;
*result = req;
return ret;
@@ -240,7 +235,6 @@ decode_fail:
void neu_json_decode_update_node_req_free(neu_json_update_node_req_t *req)
{
free(req->plugin_name);
free(req->name);
free(req);
+3 -5
View File
@@ -84,16 +84,14 @@ TEST(JsonNodesTest, DeleteNodesDecode)
TEST(JsonNodesTest, UpdateNodesDecode)
{
char *buf = (char *) "{\"type\": 1, "
"\"name\": \"adapter1\", "
"\"plugin_name\": \"plugin1\" }";
char *buf = (char *) "{\"id\": 1, "
"\"name\": \"adapter1\" }";
neu_json_update_node_req_t *req = NULL;
EXPECT_EQ(0, neu_json_decode_update_node_req(buf, &req));
EXPECT_EQ(1, req->type);
EXPECT_EQ(1, req->id);
EXPECT_STREQ("adapter1", req->name);
EXPECT_STREQ("plugin1", req->plugin_name);
neu_json_decode_update_node_req_free(req);
}