Events issues fixes

This commit is contained in:
Omar Kallel 2022-10-08 08:51:53 +01:00
parent 93d3710422
commit 4072ae1966
11 changed files with 140 additions and 166 deletions

View file

@ -237,22 +237,20 @@ mxml_node_t *bkp_session_node_found(mxml_node_t *tree, char *name, struct search
return b;
}
mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id, char *status)
mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id)
{
struct search_keywords keys[1];
char parent_name[32];
char event_id[32];
char event_idx[32];
mxml_node_t *b;
snprintf(parent_name, sizeof(parent_name), "%s_event", status ? status : "");
snprintf(event_id, sizeof(event_id), "%d", id);
snprintf(event_idx, sizeof(event_idx), "%d", index);
keys[0].name = "id";
keys[0].value = event_id;
b = bkp_session_node_found(bkp_tree, parent_name, keys, 1);
b = bkp_session_node_found(bkp_tree, "cwmp_event", keys, 1);
if (!b) {
b = bkp_session_insert(bkp_tree, parent_name, NULL);
b = bkp_session_insert(bkp_tree, "cwmp_event", NULL);
bkp_session_insert(b, "index", event_idx);
bkp_session_insert(b, "id", event_id);
bkp_session_insert(b, "command_key", command_key ? command_key : "");
@ -260,18 +258,16 @@ mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id, char
return b;
}
void bkp_session_delete_event(int id, char *status)
void bkp_session_delete_event(int id)
{
struct search_keywords keys[1];
char parent_name[32];
char event_id[32];
mxml_node_t *b;
snprintf(parent_name, sizeof(parent_name), "%s_event", status ? status : "");
snprintf(event_id, sizeof(event_id), "%d", id);
keys[0].name = "id";
keys[0].value = event_id;
b = bkp_session_node_found(bkp_tree, parent_name, keys, 1);
b = bkp_session_node_found(bkp_tree, "cwmp_event", keys, 1);
if (b)
mxmlDelete(b);
}
@ -313,34 +309,6 @@ void bkp_session_simple_insert_in_parent(char *parent, char *child, char *value)
bkp_session_insert(n, child, value);
}
void bkp_session_move_inform_to_inform_send()
{
mxml_node_t *b = bkp_tree;
while (b) {
mxml_node_t *p = mxmlGetParent(b);
const char *parent_name = p ? mxmlGetElement(p) : NULL;
if (mxmlGetType(b) == MXML_ELEMENT && !strcmp(mxmlGetElement(b), "queue_event") && mxmlGetType(p) == MXML_ELEMENT && parent_name && !strcmp(parent_name, "cwmp"))
mxmlSetElement(b, "send_event");
b = mxmlWalkNext(b, bkp_tree, MXML_DESCEND);
}
}
void bkp_session_move_inform_to_inform_queue()
{
mxml_node_t *b = bkp_tree;
while (b) {
mxml_node_t *p = mxmlGetParent(b);
const char *parent_name = p ? mxmlGetElement(p) : NULL;
if (mxmlGetType(b) == MXML_ELEMENT && !strcmp(mxmlGetElement(b), "send_event") && mxmlGetType(p) == MXML_ELEMENT && parent_name && !strcmp(parent_name, "cwmp"))
mxmlSetElement(b, "queue_event");
b = mxmlWalkNext(b, bkp_tree, MXML_DESCEND);
}
}
void bkp_session_insert_schedule_inform(time_t time, char *command_key)
{
char schedule_time[128];
@ -1100,7 +1068,6 @@ int bkp_session_check_file()
bkp_session_create_file();
return -1;
}
bkp_session_move_inform_to_inform_queue();
bkp_session_save();
return 0;
}
@ -1148,7 +1115,7 @@ int cwmp_load_saved_session(char **ret, enum backup_loading load)
}
}
if (load == ALL) {
if (ntype == MXML_ELEMENT && strcmp(elem_name, "queue_event") == 0) {
if (ntype == MXML_ELEMENT && strcmp(elem_name, "cwmp_event") == 0) {
load_queue_event(b);
} else if (ntype == MXML_ELEMENT && strcmp(elem_name, "download") == 0) {
load_download(b);

View file

@ -40,13 +40,11 @@ struct search_keywords {
int cwmp_init_backup_session(char **ret, enum backup_loading load);
void bkp_session_save();
int cwmp_load_saved_session(char **acsurl, enum backup_loading load);
mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id, char *status);
void bkp_session_delete_event(int id, char *status);
mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id);
void bkp_session_delete_event(int id);
void bkp_session_simple_insert_in_parent(char *parent, char *child, char *value);
void bkp_session_insert_parameter(mxml_node_t *b, char *name);
void bkp_session_simple_insert(char *parent, char *child, char *value);
void bkp_session_move_inform_to_inform_send();
void bkp_session_move_inform_to_inform_queue();
void bkp_session_insert_schedule_inform(time_t schedule_time, char *command_key);
void bkp_session_delete_schedule_inform(time_t schedule_time, char *command_key);
void bkp_session_insert_download(struct download *pdownload);

View file

@ -11,6 +11,8 @@
#include "cwmp_event.h"
#include "common.h"
#include "session.h"
#include "backupSession.h"
#include "log.h"
pthread_mutex_t add_event_mutex = PTHREAD_MUTEX_INITIALIZER;
@ -33,6 +35,7 @@ static struct event_container *__cwmp_add_event_container(int event_code, char *
list_add_tail(&(event_container->list), &(cwmp_main->session->events));
event_container->code = event_code;
event_container->command_key = command_key ? strdup(command_key) : strdup("");
event_container->next_session = true;
if ((cwmp_main->event_id < 0) || (cwmp_main->event_id >= MAX_INT_ID)) {
cwmp_main->event_id = 0;
}
@ -48,3 +51,62 @@ struct event_container *cwmp_add_event_container(int event_code, char *command_k
pthread_mutex_unlock(&add_event_mutex);
return event;
}
void move_next_session_events_to_actual_session()
{
struct event_container *event_container;
struct list_head *event_container_list = &(cwmp_main->session->events);
list_for_each_entry (event_container, event_container_list, list) {
event_container->next_session = false;
}
}
int cwmp_remove_all_session_events()
{
struct list_head *events_ptr = cwmp_main->session->events.next;
while (events_ptr != &cwmp_main->session->events) {
struct event_container *event_container;
event_container = list_entry(events_ptr, struct event_container, list);
if (event_container->code == EVENT_IDX_14HEARTBEAT || event_container->next_session) {
events_ptr = events_ptr->next;
continue;
}
bkp_session_delete_event(event_container->id);
free(event_container->command_key);
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
list_del(&(event_container->list));
free(event_container);
events_ptr = cwmp_main->session->events.next;
}
bkp_session_save();
return CWMP_OK;
}
int remove_single_event(int event_code)
{
while (cwmp_main->session->events.next != &cwmp_main->session->events) {
struct event_container *event_container;
event_container = list_entry(cwmp_main->session->events.next, struct event_container, list);
if (event_container->next_session)
continue;
if (event_container->code == event_code) {
bkp_session_delete_event(event_container->id);
if (event_container->command_key)
free(event_container->command_key);
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
list_del(&(event_container->list));
free(event_container);
bkp_session_save();
break;
}
if (event_container) {
if (event_container->command_key)
free(event_container->command_key);
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
list_del(&(event_container->list));
free(event_container);
}
}
return CWMP_OK;
}

View file

@ -2,4 +2,7 @@
#define CWMP_EVENT_H
#include "event.h"
struct event_container *cwmp_add_event_container(int event_code, char *command_key);
void move_next_session_events_to_actual_session();
int cwmp_remove_all_session_events();
int remove_single_event(int event_code);
#endif

View file

@ -36,13 +36,14 @@ const struct EVENT_CONST_STRUCT EVENT_CONST[] = {[EVENT_IDX_0BOOTSTRAP] = { "0 B
[EVENT_IDX_10AUTONOMOUS_TRANSFER_COMPLETE] = { "10 AUTONOMOUS TRANSFER COMPLETE", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
[EVENT_IDX_11DU_STATE_CHANGE_COMPLETE] = { "11 DU STATE CHANGE COMPLETE", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
[EVENT_IDX_12AUTONOMOUS_DU_STATE_CHANGE_COMPLETE] = { "12 AUTONOMOUS DU STATE CHANGE COMPLETE", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
[EVENT_IDX_13WAKEUP] = { "13 WAKEUP", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
[EVENT_IDX_14HEARTBEAT] = { "14 HEARTBEAT", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
[EVENT_IDX_M_Reboot] = { "M Reboot", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
[EVENT_IDX_M_ScheduleInform] = { "M ScheduleInform", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
[EVENT_IDX_M_Download] = { "M Download", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
[EVENT_IDX_M_Schedule_Download] = { "M ScheduleDownload", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
[EVENT_IDX_M_Upload] = { "M Upload", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
[EVENT_IDX_M_ChangeDUState] = { "M ChangeDUState", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT },
[EVENT_IDX_14HEARTBEAT] = { "14 HEARTBEAT", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT } };
[EVENT_IDX_M_ChangeDUState] = { "M ChangeDUState", EVENT_RETRY_AFTER_TRANSMIT_FAIL | EVENT_RETRY_AFTER_REBOOT } };
void cwmp_save_event_container(struct event_container *event_container) //to be moved to backupsession
{
@ -54,7 +55,7 @@ void cwmp_save_event_container(struct event_container *event_container) //to be
struct list_head *ilist;
mxml_node_t *b;
b = bkp_session_insert_event(event_container->code, event_container->command_key, event_container->id, "queue");
b = bkp_session_insert_event(event_container->code, event_container->command_key, event_container->id);
list_for_each (ilist, &(event_container->head_dm_parameter)) {
struct cwmp_dm_parameter *dm_parameter;
@ -81,49 +82,6 @@ int cwmp_root_cause_event_boot()
return CWMP_OK;
}
int event_remove_all_event_container(int rem_from)
{
while (cwmp_main->session->events.next != &cwmp_main->session->events) {
struct event_container *event_container;
event_container = list_entry(cwmp_main->session->events.next, struct event_container, list);
if (event_container->code == EVENT_IDX_14HEARTBEAT)
continue;
bkp_session_delete_event(event_container->id, rem_from ? "send" : "queue");
free(event_container->command_key);
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
list_del(&(event_container->list));
free(event_container);
}
bkp_session_save();
return CWMP_OK;
}
int remove_single_event(int event_code)
{
while (cwmp_main->session->events.next != &cwmp_main->session->events) {
struct event_container *event_container;
event_container = list_entry(cwmp_main->session->events.next, struct event_container, list);
if (event_container->code == event_code) {
bkp_session_delete_event(event_container->id, "send");
if (event_container->command_key)
free(event_container->command_key);
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
list_del(&(event_container->list));
free(event_container);
bkp_session_save();
break;
}
if (event_container) {
if (event_container->command_key)
free(event_container->command_key);
cwmp_free_all_dm_parameter_list(&(event_container->head_dm_parameter));
list_del(&(event_container->list));
free(event_container);
}
}
return CWMP_OK;
}
int event_remove_noretry_event_container()
{
struct list_head *ilist, *q;
@ -434,26 +392,54 @@ int cwmp_root_cause_events()
return CWMP_OK;
}
bool event_code_is_valid(const char *code)
{
int i;
if (code == NULL || strlen(code) == 0)
return true;
for (i=0; i < __EVENT_IDX_MAX; i++) {
if (EVENT_CONST[i].CODE && strcmp(code, EVENT_CONST[i].CODE) == 0)
return true;
}
return false;
}
int cwmp_get_int_event_code(const char *code)
{
if (code && code[0] == '1')
if (!event_code_is_valid(code))
return -1;
if (code && strncmp(code, "1 ", 2) == 0)
return EVENT_IDX_1BOOT;
else if (code && code[0] == '2')
else if (code && strncmp(code, "2 ", 2) == 0)
return EVENT_IDX_2PERIODIC;
else if (code && code[0] == '3')
else if (code && strncmp(code, "3 ", 2) == 0)
return EVENT_IDX_3SCHEDULED;
else if (code && code[0] == '4')
else if (code && strncmp(code, "4 ", 2) == 0)
return EVENT_IDX_4VALUE_CHANGE;
else if (code && code[0] == '6')
else if (code && strncmp(code, "6 ", 2) == 0)
return EVENT_IDX_6CONNECTION_REQUEST;
else if (code && code[0] == '8')
else if (code && strncmp(code, "8 ", 2) == 0)
return EVENT_IDX_8DIAGNOSTICS_COMPLETE;
else if (code && strncmp(code, "9 ", 2) == 0)
return EVENT_IDX_9REQUEST_DOWNLOAD;
else if (code && strncmp(code, "13", 2) == 0)
return EVENT_IDX_13WAKEUP;
else if (code && strncmp(code, "14", 2) == 0)
return EVENT_IDX_14HEARTBEAT;
else
return EVENT_IDX_6CONNECTION_REQUEST;
}

View file

@ -18,6 +18,7 @@
typedef struct event_container {
struct list_head list;
int code; /* required element of type xsd:string */
bool next_session;
char *command_key;
struct list_head head_dm_parameter;
int id;
@ -51,13 +52,14 @@ enum event_idx_enum
EVENT_IDX_10AUTONOMOUS_TRANSFER_COMPLETE,
EVENT_IDX_11DU_STATE_CHANGE_COMPLETE,
EVENT_IDX_12AUTONOMOUS_DU_STATE_CHANGE_COMPLETE,
EVENT_IDX_13WAKEUP,
EVENT_IDX_14HEARTBEAT,
EVENT_IDX_M_Reboot,
EVENT_IDX_M_ScheduleInform,
EVENT_IDX_M_Download,
EVENT_IDX_M_Schedule_Download,
EVENT_IDX_M_Upload,
EVENT_IDX_M_ChangeDUState,
EVENT_IDX_14HEARTBEAT,
TransferClt_Evt,
Schedule_Inform_Evt,
CDU_Evt,
@ -66,8 +68,6 @@ enum event_idx_enum
extern const struct EVENT_CONST_STRUCT EVENT_CONST[__EVENT_IDX_MAX];
int event_remove_all_event_container(int rem_from);
int remove_single_event(int event_code);
int event_remove_noretry_event_container();
void cwmp_save_event_container(struct event_container *event_container);
void connection_request_ip_value_change( int version);

View file

@ -301,6 +301,7 @@ static void load_inform_xml_schema(mxml_node_t **tree)
MXML_DELETE(xml);
return;
}
move_next_session_events_to_actual_session();
cwmp_free_all_xml_data_list(&xml_events_list);
mxml_node_t *param_list = mxmlNewElement(inform, "ParameterList");
if (param_list == NULL) {

View file

@ -346,8 +346,7 @@ void start_cwmp_session()
CWMP_LOG(INFO, "End session");
if (cwmp_stop) {
event_remove_all_event_container(RPC_SEND);
event_remove_all_event_container(RPC_QUEUE);
cwmp_remove_all_session_events();
run_session_end_func();
cwmp_session_exit();
rpc_exit();
@ -368,10 +367,9 @@ void start_cwmp_session()
}
} else {
if (!cwmp_main->session->session_status.is_heartbeat)
event_remove_all_event_container(RPC_SEND);
cwmp_remove_all_session_events();
else
remove_single_event(EVENT_IDX_14HEARTBEAT);
//event_remove_all_event_container(RPC_QUEUE);
cwmp_main->retry_count_session = 0;
set_cwmp_session_status(SESSION_SUCCESS, 0);
rpc_exit();

View file

@ -268,7 +268,7 @@ static int icwmp_inform_get_rpc_method(struct blob_buf *bb)
static int icwmp_inform_event(struct blob_buf *bb, char *event)
{
int event_code = cwmp_get_int_event_code(event);
if (event_code != EVENT_IDX_14HEARTBEAT) {
if (event_code != -1) {
if (cwmp_main->session->session_status.last_status == SESSION_RUNNING) {
blobmsg_add_u32(bb, "status", -1);
blobmsg_add_string(bb, "info", "Session already running, event will be sent at the end of the session");

View file

@ -61,61 +61,61 @@ static void cwmp_backup_session_unit_test(void **state)
/*
* Insert Event
*/
mxml_node_t *bkp_event1 = NULL, *bkp_event2 = NULL, *queue_tree1 = NULL, *queue_tree2 = NULL;
mxml_node_t *bkp_event1 = NULL, *bkp_event2 = NULL, *event_tree1 = NULL, *event_tree2;
// Case of one event
bkp_event1 = bkp_session_insert_event(EVENT_IDX_4VALUE_CHANGE, "4 VALUE CHANGE", 0, "queue");
bkp_event1 = bkp_session_insert_event(EVENT_IDX_4VALUE_CHANGE, "4 VALUE CHANGE", 0);
bkp_session_save();
pFile = fopen(CWMP_BKP_FILE, "r");
backup_tree = mxmlLoadFile(NULL, pFile, MXML_OPAQUE_CALLBACK);
fclose(pFile);
assert_non_null(bkp_event1);
queue_tree1 = mxmlFindElement(backup_tree, backup_tree, "queue_event", NULL, NULL, MXML_DESCEND);
assert_non_null(queue_tree1);
n = mxmlFindElement(queue_tree1, queue_tree1, "index", NULL, NULL, MXML_DESCEND);
event_tree1 = mxmlFindElement(backup_tree, backup_tree, "cwmp_event", NULL, NULL, MXML_DESCEND);
assert_non_null(event_tree1);
n = mxmlFindElement(event_tree1, event_tree1, "index", NULL, NULL, MXML_DESCEND);
assert_non_null(n);
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), EVENT_IDX_4VALUE_CHANGE);
n = mxmlFindElement(queue_tree1, queue_tree1, "id", NULL, NULL, MXML_DESCEND);
n = mxmlFindElement(event_tree1, event_tree1, "id", NULL, NULL, MXML_DESCEND);
assert_non_null(n);
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), 0);
n = mxmlFindElement(queue_tree1, queue_tree1, "command_key", NULL, NULL, MXML_DESCEND);
n = mxmlFindElement(event_tree1, event_tree1, "command_key", NULL, NULL, MXML_DESCEND);
assert_non_null(n);
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "4 VALUE CHANGE");
MXML_DELETE(bkp_event1);
bkp_session_save();
MXML_DELETE(backup_tree);
//case of two events with different ids under the same queue
bkp_event1 = bkp_session_insert_event(EVENT_IDX_1BOOT, "1 BOOT", 0, "queue");
bkp_event2 = bkp_session_insert_event(EVENT_IDX_4VALUE_CHANGE, "4 VALUE CHANGE", 1, "queue");
//case of two events with different ids
bkp_event1 = bkp_session_insert_event(EVENT_IDX_1BOOT, "1 BOOT", 0);
bkp_event2 = bkp_session_insert_event(EVENT_IDX_4VALUE_CHANGE, "4 VALUE CHANGE", 1);
bkp_session_save();
pFile = fopen(CWMP_BKP_FILE, "r");
backup_tree = mxmlLoadFile(NULL, pFile, MXML_OPAQUE_CALLBACK);
fclose(pFile);
assert_non_null(bkp_event1);
assert_non_null(bkp_event2);
queue_tree1 = mxmlFindElement(backup_tree, backup_tree, "queue_event", NULL, NULL, MXML_DESCEND);
queue_tree2 = mxmlFindElement(queue_tree1, backup_tree, "queue_event", NULL, NULL, MXML_DESCEND);
event_tree1 = mxmlFindElement(backup_tree, backup_tree, "cwmp_event", NULL, NULL, MXML_DESCEND);
event_tree2 = mxmlFindElement(event_tree1, backup_tree, "cwmp_event", NULL, NULL, MXML_DESCEND);
assert_non_null(queue_tree1);
n = mxmlFindElement(queue_tree1, queue_tree1, "index", NULL, NULL, MXML_DESCEND);
assert_non_null(event_tree1);
n = mxmlFindElement(event_tree1, event_tree1, "index", NULL, NULL, MXML_DESCEND);
assert_non_null(n);
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), EVENT_IDX_1BOOT);
n = mxmlFindElement(queue_tree1, queue_tree1, "id", NULL, NULL, MXML_DESCEND);
n = mxmlFindElement(event_tree1, event_tree1, "id", NULL, NULL, MXML_DESCEND);
assert_non_null(n);
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), 0);
n = mxmlFindElement(queue_tree1, queue_tree1, "command_key", NULL, NULL, MXML_DESCEND);
n = mxmlFindElement(event_tree1, event_tree1, "command_key", NULL, NULL, MXML_DESCEND);
assert_non_null(n);
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "1 BOOT");
assert_non_null(queue_tree2);
n = mxmlFindElement(queue_tree2, queue_tree2, "index", NULL, NULL, MXML_DESCEND);
assert_non_null(event_tree2);
n = mxmlFindElement(event_tree2, event_tree2, "index", NULL, NULL, MXML_DESCEND);
assert_non_null(n);
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), EVENT_IDX_4VALUE_CHANGE);
n = mxmlFindElement(queue_tree2, queue_tree2, "id", NULL, NULL, MXML_DESCEND);
n = mxmlFindElement(event_tree2, event_tree2, "id", NULL, NULL, MXML_DESCEND);
assert_non_null(n);
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), 1);
n = mxmlFindElement(queue_tree2, queue_tree2, "command_key", NULL, NULL, MXML_DESCEND);
n = mxmlFindElement(event_tree2, event_tree2, "command_key", NULL, NULL, MXML_DESCEND);
assert_non_null(n);
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "4 VALUE CHANGE");
@ -126,46 +126,6 @@ static void cwmp_backup_session_unit_test(void **state)
bkp_event1 = NULL;
bkp_event2 = NULL;
//case of two events with same id under different queues
bkp_event1 = bkp_session_insert_event(EVENT_IDX_1BOOT, "1 BOOT", 0, "queue1");
bkp_event2 = bkp_session_insert_event(EVENT_IDX_4VALUE_CHANGE, "4 VALUE CHANGE", 0, "queue2");
bkp_session_save();
pFile = fopen(CWMP_BKP_FILE, "r");
backup_tree = mxmlLoadFile(NULL, pFile, MXML_OPAQUE_CALLBACK);
fclose(pFile);
assert_non_null(bkp_event1);
assert_non_null(bkp_event2);
queue_tree1 = mxmlFindElement(backup_tree, backup_tree, "queue1_event", NULL, NULL, MXML_DESCEND);
queue_tree2 = mxmlFindElement(queue_tree1, backup_tree, "queue2_event", NULL, NULL, MXML_DESCEND);
assert_non_null(queue_tree1);
n = mxmlFindElement(queue_tree1, queue_tree1, "index", NULL, NULL, MXML_DESCEND);
assert_non_null(n);
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), EVENT_IDX_1BOOT);
n = mxmlFindElement(queue_tree1, queue_tree1, "id", NULL, NULL, MXML_DESCEND);
assert_non_null(n);
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), 0);
n = mxmlFindElement(queue_tree1, queue_tree1, "command_key", NULL, NULL, MXML_DESCEND);
assert_non_null(n);
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "1 BOOT");
assert_non_null(queue_tree2);
n = mxmlFindElement(queue_tree2, queue_tree2, "index", NULL, NULL, MXML_DESCEND);
assert_non_null(n);
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), EVENT_IDX_4VALUE_CHANGE);
n = mxmlFindElement(queue_tree2, queue_tree2, "id", NULL, NULL, MXML_DESCEND);
assert_non_null(n);
assert_int_equal(atoi(mxmlGetOpaque(mxmlGetFirstChild(n))), 0);
n = mxmlFindElement(queue_tree2, queue_tree2, "command_key", NULL, NULL, MXML_DESCEND);
assert_non_null(n);
assert_string_equal(mxmlGetOpaque(mxmlGetFirstChild(n)), "4 VALUE CHANGE");
MXML_DELETE(bkp_event1);
MXML_DELETE(bkp_event2);
bkp_session_save();
MXML_DELETE(backup_tree);
/*
* Insert Download
*/

View file

@ -1,7 +1,6 @@
verify_download_method.sh
verify_add_method.sh
verify_delete_method.sh
verify_get_method.sh
verify_set_method.sh
verify_download_method.sh
verify_cmd_line.sh