Skip to content
This repository has been archived by the owner on Jul 9, 2024. It is now read-only.

Commit

Permalink
fix: update from upstream
Browse files Browse the repository at this point in the history
  • Loading branch information
github-actions[bot] committed Mar 11, 2023
1 parent 19184aa commit 8b4d497
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 90 deletions.
53 changes: 20 additions & 33 deletions src/cloud/lwm2m_integration/lwm2m_integration.c
Original file line number Diff line number Diff line change
Expand Up @@ -257,43 +257,32 @@ static int modem_mode_request_cb(enum lte_lc_func_mode new_mode, void *user_data
return CONFIG_LWM2M_INTEGRATION_MODEM_MODE_REQUEST_RETRY_SECONDS;
}

static int firmware_update_state_cb(uint8_t update_state)
static int lwm2m_firmware_event_cb(struct lwm2m_fota_event *event)
{
int err;
uint8_t update_result;
struct cloud_wrap_event cloud_wrap_evt = { 0 };

/* Get the firmware object update result code */
err = lwm2m_get_u8(&LWM2M_OBJ(5, 0, 5), &update_result);
if (err) {
LOG_ERR("Failed getting firmware result resource value");
cloud_wrap_evt.type = CLOUD_WRAP_EVT_ERROR;
cloud_wrap_evt.err = err;
cloud_wrapper_notify_event(&cloud_wrap_evt);
return 0;
}

switch (update_state) {
case STATE_IDLE:
LOG_DBG("STATE_IDLE, result: %d", update_result);

/* If the FOTA state returns to its base state STATE_IDLE, the FOTA failed. */
cloud_wrap_evt.type = CLOUD_WRAP_EVT_FOTA_ERROR;
break;
case STATE_DOWNLOADING:
LOG_DBG("STATE_DOWNLOADING, result: %d", update_result);
switch (event->id) {
case LWM2M_FOTA_DOWNLOAD_START:
/* FOTA download process Started */
LOG_DBG("STATE_DOWNLOADING, instance: %d", event->download_start.obj_inst_id);
cloud_wrap_evt.type = CLOUD_WRAP_EVT_FOTA_START;
break;
case STATE_DOWNLOADED:
LOG_DBG("STATE_DOWNLOADED, result: %d", update_result);

case LWM2M_FOTA_DOWNLOAD_FINISHED:
/* FOTA download process finished */
LOG_DBG("STATE_DOWNLOADED, instance %d", event->download_ready.obj_inst_id);
return 0;
case STATE_UPDATING:
LOG_DBG("STATE_UPDATING, result: %d", update_result);
/* Disable further callbacks from FOTA */
lwm2m_firmware_set_update_state_cb(NULL);

case LWM2M_FOTA_UPDATE_IMAGE_REQ:
/* FOTA update new image */
LOG_DBG("STATE_UPDATING, instance %d, dfu_type:%d", event->update_req.obj_inst_id,
event->update_req.dfu_type);
return 0;
default:
LOG_ERR("Unknown state: %d", update_state);

case LWM2M_FOTA_UPDATE_ERROR:
/* Fota process failed or was cancelled */
LOG_ERR("FOTA failure %d by status %d", event->failure.obj_inst_id,
event->failure.update_failure);
cloud_wrap_evt.type = CLOUD_WRAP_EVT_FOTA_ERROR;
break;
}
Expand Down Expand Up @@ -372,7 +361,7 @@ int cloud_wrap_init(cloud_wrap_evt_handler_t event_handler)
return err;
}

err = lwm2m_init_firmware();
err = lwm2m_init_firmware_cb(lwm2m_firmware_event_cb);
if (err) {
LOG_ERR("lwm2m_init_firmware, error: %d", err);
return err;
Expand Down Expand Up @@ -416,8 +405,6 @@ int cloud_wrap_init(cloud_wrap_evt_handler_t event_handler)
return err;
}

lwm2m_firmware_set_update_state_cb(firmware_update_state_cb);

wrapper_evt_handler = event_handler;
state = DISCONNECTED;
return 0;
Expand Down
88 changes: 31 additions & 57 deletions tests/lwm2m_integration/src/lwm2m_integration_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ static void cloud_wrap_event_handler(const struct cloud_wrap_event *const evt)
static lwm2m_ctx_event_cb_t rd_client_callback;
static lwm2m_engine_execute_cb_t engine_execute_cb;
static modem_mode_cb_t modem_mode_change_cb;
static lwm2m_firmware_get_update_state_cb_t firmware_update_state_cb;
static lwm2m_firmware_event_cb_t firmware_update_event_cb;

/* Forward declarations. */
static int register_exec_callback_stub(const struct lwm2m_obj_path *path,
Expand All @@ -45,7 +45,7 @@ static int init_security_callback_stub(struct lwm2m_ctx *ctx,
char *endpoint,
struct modem_mode_change *mmode,
int no_of_calls);
static void set_update_state_callback_stub(lwm2m_firmware_get_update_state_cb_t cb,
static int init_firmware_cb_stub(lwm2m_firmware_event_cb_t cb,
int no_of_calls);

extern int unity_main(void);
Expand All @@ -54,7 +54,8 @@ extern int unity_main(void);
void setUp(void)
{
__cmock_lwm2m_init_image_ExpectAndReturn(0);
__cmock_lwm2m_init_firmware_ExpectAndReturn(0);
__cmock_lwm2m_init_firmware_cb_ExpectAnyArgsAndReturn(0);
__cmock_lwm2m_init_firmware_cb_AddCallback(&init_firmware_cb_stub);
__cmock_lwm2m_init_security_ExpectAndReturn(&client,
endpoint_name,
NULL,
Expand All @@ -63,13 +64,10 @@ void setUp(void)

__cmock_lwm2m_init_security_AddCallback(&init_security_callback_stub);

__cmock_lwm2m_firmware_set_update_state_cb_ExpectAnyArgs();

__cmock_lwm2m_register_exec_callback_ExpectAndReturn(&LWM2M_OBJ(3, 0, 4), NULL, 0);
__cmock_lwm2m_register_exec_callback_IgnoreArg_cb();

__cmock_lwm2m_register_exec_callback_AddCallback(&register_exec_callback_stub);
__cmock_lwm2m_firmware_set_update_state_cb_AddCallback(&set_update_state_callback_stub);

TEST_ASSERT_EQUAL(0, cloud_wrap_init(cloud_wrap_event_handler));
}
Expand Down Expand Up @@ -118,9 +116,12 @@ static int init_security_callback_stub(struct lwm2m_ctx *ctx,
return 0;
}

void set_update_state_callback_stub(lwm2m_firmware_get_update_state_cb_t cb, int no_of_calls)
int init_firmware_cb_stub(lwm2m_firmware_event_cb_t cb, int no_of_calls)
{
firmware_update_state_cb = cb;
ARG_UNUSED(no_of_calls);

firmware_update_event_cb = cb;
return 0;
}

/* Tests */
Expand Down Expand Up @@ -327,86 +328,59 @@ void test_lwm2m_integration_network_error(void)
TEST_ASSERT_EQUAL(CLOUD_WRAP_EVT_ERROR, last_cb_type);
}

void test_lwm2m_integration_fota_result_get(void)
{
/* Expect the FOTA update result to be retrieved for any update in FOTA state. */
__cmock_lwm2m_get_u8_ExpectAndReturn(&LWM2M_OBJ(5, 0, 5), NULL, 0);
__cmock_lwm2m_get_u8_IgnoreArg_value();

__cmock_lwm2m_get_u8_ExpectAndReturn(&LWM2M_OBJ(5, 0, 5), NULL, 0);
__cmock_lwm2m_get_u8_IgnoreArg_value();

__cmock_lwm2m_get_u8_ExpectAndReturn(&LWM2M_OBJ(5, 0, 5), NULL, 0);
__cmock_lwm2m_get_u8_IgnoreArg_value();

__cmock_lwm2m_get_u8_ExpectAndReturn(&LWM2M_OBJ(5, 0, 5), NULL, 0);
__cmock_lwm2m_get_u8_IgnoreArg_value();
__cmock_lwm2m_firmware_set_update_state_cb_Expect(NULL);

firmware_update_state_cb(STATE_IDLE);
firmware_update_state_cb(STATE_DOWNLOADING);
firmware_update_state_cb(STATE_DOWNLOADED);
firmware_update_state_cb(STATE_UPDATING);
}

void test_lwm2m_integration_fota_result_get_error(void)
{
__cmock_lwm2m_get_u8_ExpectAnyArgsAndReturn(-1);

firmware_update_state_cb(STATE_DOWNLOADING);
TEST_ASSERT_EQUAL(CLOUD_WRAP_EVT_ERROR, last_cb_type);
}

void test_lwm2m_integration_fota_error(void)
{
__cmock_lwm2m_get_u8_IgnoreAndReturn(0);
struct lwm2m_fota_event event = {
.id = LWM2M_FOTA_UPDATE_ERROR,
.failure.obj_inst_id = 0,
.failure.update_failure = 10
};

/* Expect an error event to be returned if FOTA state reverts to STATE_IDLE. */
firmware_update_state_cb(STATE_IDLE);
firmware_update_event_cb(&event);
TEST_ASSERT_EQUAL(CLOUD_WRAP_EVT_FOTA_ERROR, last_cb_type);
}

void test_lwm2m_integration_fota_downloading(void)
{
__cmock_lwm2m_get_u8_IgnoreAndReturn(0);
struct lwm2m_fota_event event = {
.id = LWM2M_FOTA_DOWNLOAD_START,
.download_start.obj_inst_id = 0
};

firmware_update_state_cb(STATE_DOWNLOADING);
firmware_update_event_cb(&event);
TEST_ASSERT_EQUAL(CLOUD_WRAP_EVT_FOTA_START, last_cb_type);
}

void test_lwm2m_integration_fota_downloaded(void)
{
__cmock_lwm2m_get_u8_IgnoreAndReturn(0);
struct lwm2m_fota_event event = {
.id = LWM2M_FOTA_DOWNLOAD_FINISHED,
.download_ready.obj_inst_id = 0
};

/* Expect no event to be called by setting last_cb_type to UINT8_MAX and verifying that
* the value has not changed after the state change.
*/
last_cb_type = UINT8_MAX;

firmware_update_state_cb(STATE_DOWNLOADED);
firmware_update_event_cb(&event);
TEST_ASSERT_EQUAL(UINT8_MAX, last_cb_type);
}

void test_lwm2m_integration_fota_updating(void)
void test_lwm2m_integration_fota_update_image_req(void)
{
__cmock_lwm2m_get_u8_IgnoreAndReturn(0);
__cmock_lwm2m_firmware_set_update_state_cb_Expect(NULL);
struct lwm2m_fota_event event = {
.id = LWM2M_FOTA_UPDATE_IMAGE_REQ,
.update_req.obj_inst_id = 0
};

last_cb_type = UINT8_MAX;

firmware_update_state_cb(STATE_UPDATING);
firmware_update_event_cb(&event);
TEST_ASSERT_EQUAL(UINT8_MAX, last_cb_type);
}

void test_lwm2m_integration_fota_unexpected_event(void)
{
__cmock_lwm2m_get_u8_IgnoreAndReturn(0);

/* Trigger an event update with an unknown event type. */
firmware_update_state_cb(UINT8_MAX);
TEST_ASSERT_EQUAL(CLOUD_WRAP_EVT_FOTA_ERROR, last_cb_type);
}

void main(void)
{
(void)unity_main();
Expand Down

0 comments on commit 8b4d497

Please sign in to comment.