Ram Gandikota
/
IOTMetronome
FRDM K64F Metronome
Diff: mbed-client/test/mbedclient/utest/m2mnsdlinterface/test_m2mnsdlinterface.cpp
- Revision:
- 0:dbad57390bd1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-client/test/mbedclient/utest/m2mnsdlinterface/test_m2mnsdlinterface.cpp Sun May 14 18:37:05 2017 +0000 @@ -0,0 +1,1799 @@ +/* + * Copyright (c) 2015 ARM Limited. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "CppUTest/TestHarness.h" +#include "test_m2mnsdlinterface.h" +#include "common_stub.h" +#include "m2msecurity_stub.h" +#include "m2mnsdlobserver.h" +#include "m2mobject_stub.h" +#include "m2mobjectinstance_stub.h" +#include "m2mresource_stub.h" +#include "m2mresourceinstance_stub.h" +#include "m2mresource.h" +#include "m2mbase_stub.h" +#include "m2mserver.h" +#include "m2msecurity.h" +#include "m2mtlvdeserializer_stub.h" +class TestObserver : public M2MNsdlObserver { + +public: + TestObserver(){} + virtual ~TestObserver(){} + void coap_message_ready(uint8_t *, + uint16_t, + sn_nsdl_addr_s *){ + message_ready = true; + } + + void client_registered(M2MServer *){ + registered = true; + } + + void registration_updated(const M2MServer &){ + register_updated = true; + } + + void registration_error(uint8_t, bool retry = false){ + register_error = true; + } + + void client_unregistered(){ + unregistered = true; + } + + void bootstrap_done(M2MSecurity *sec){ + if(sec) { + boot_done = true; + delete sec; + sec = NULL; + } + } + + void bootstrap_wait(M2MSecurity *sec){ + if(sec) { + boot_wait = true; + delete sec; + sec = NULL; + } + } + + void bootstrap_error(){ + boot_error = true; + } + + void coap_data_processed(){ + data_processed = true; + } + + void value_updated(M2MBase *){ + value_update = true; + } + + bool register_error; + bool boot_error; + bool boot_wait; + bool boot_done; + bool registered; + bool register_updated; + bool data_processed; + bool unregistered; + bool message_ready; + bool value_update; +}; + +struct nsdl_s { + uint16_t update_register_msg_id; + uint16_t register_msg_len; + uint16_t update_register_msg_len; + + uint16_t register_msg_id; + uint16_t unregister_msg_id; + + uint16_t bootstrap_msg_id; + uint16_t oma_bs_port; /* Bootstrap port */ + uint8_t oma_bs_address_len; /* Bootstrap address length */ + unsigned int sn_nsdl_endpoint_registered:1; + bool handle_bootstrap_msg:1; + + struct grs_s *grs; + uint8_t *oma_bs_address_ptr; /* Bootstrap address pointer. If null, no bootstrap in use */ + sn_nsdl_ep_parameters_s *ep_information_ptr; // Endpoint parameters, Name, Domain etc.. + sn_nsdl_oma_server_info_t *nsp_address_ptr; // NSP server address information + + void (*sn_nsdl_oma_bs_done_cb)(sn_nsdl_oma_server_info_t *server_info_ptr); /* Callback to inform application when bootstrap is done */ + void *(*sn_nsdl_alloc)(uint16_t); + void (*sn_nsdl_free)(void *); + uint8_t (*sn_nsdl_tx_callback)(struct nsdl_s *, sn_nsdl_capab_e , uint8_t *, uint16_t, sn_nsdl_addr_s *); + uint8_t (*sn_nsdl_rx_callback)(struct nsdl_s *, sn_coap_hdr_s *, sn_nsdl_addr_s *); + void (*sn_nsdl_oma_bs_done_cb_handle)(sn_nsdl_oma_server_info_t *server_info_ptr, + struct nsdl_s *handle); /* Callback to inform application when bootstrap is done with nsdl handle */ +}; + +Test_M2MNsdlInterface::Test_M2MNsdlInterface() +{ + observer = new TestObserver(); + nsdl = new M2MNsdlInterface(*observer); + //nsdl->_server = new M2MServer(); +} + +Test_M2MNsdlInterface:: ~Test_M2MNsdlInterface() +{ + delete nsdl; + nsdl = NULL; + delete observer; + observer = NULL; +} + +void Test_M2MNsdlInterface::test_create_endpoint() +{ + u_int8_t value[] = {"120"}; + if( nsdl->_endpoint == NULL){ + nsdl->_endpoint = (sn_nsdl_ep_parameters_s*)nsdl->memory_alloc(sizeof(sn_nsdl_ep_parameters_s)); + } + + nsdl->create_endpoint("name", "type",120,"domain",100,"context"); + CHECK(nsdl->_endpoint->lifetime_len == 3); + CHECK(*nsdl->_endpoint->lifetime_ptr == *value); +} + +void Test_M2MNsdlInterface::test_delete_endpoint() +{ + if( nsdl->_endpoint == NULL){ + nsdl->_endpoint = (sn_nsdl_ep_parameters_s*)nsdl->memory_alloc(sizeof(sn_nsdl_ep_parameters_s)); + } + nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(uint8_t)); + + nsdl->delete_endpoint(); + CHECK(nsdl->_endpoint == NULL); +} + +void Test_M2MNsdlInterface::test_create_nsdl_list_structure() +{ + String *name = new String("name"); + common_stub::int_value = 0; + m2mbase_stub::int_value = 0; + M2MObject *object = new M2MObject(*name, (char*)name->c_str()); + M2MObjectInstance* instance = new M2MObjectInstance(*object,*name, "", "name/0"); + + M2MResource* create_resource = new M2MResource(*instance, + *name, + *name, + M2MResourceInstance::INTEGER, + false, + "name"); + + M2MResourceInstance* res_instance = new M2MResourceInstance(*create_resource, *name, *name, + M2MResourceInstance::INTEGER, 0, (char*)name->c_str(), false); + + m2mobject_stub::instance_list.clear(); + m2mobject_stub::instance_list.push_back(instance); + + m2mobjectinstance_stub::resource_list.clear(); + m2mobjectinstance_stub::resource_list.push_back(create_resource); + + M2MObjectList list; + list.push_back(object); + + m2mbase_stub::string_value = name->c_str(); + m2mbase_stub::mode_value = M2MBase::Static; + + + CHECK(nsdl->create_nsdl_list_structure(list)== true); + + m2mresource_stub::bool_value = true; + m2mbase_stub::mode_value = M2MBase::Dynamic; + + m2mresource_stub::list.push_back(res_instance); + m2mresourceinstance_stub::base_type = M2MBase::Resource; + + CHECK(nsdl->create_nsdl_list_structure(list)== true); + + m2mbase_stub::mode_value = M2MBase::Directory; + CHECK(nsdl->create_nsdl_list_structure(list)== true); + + list.clear(); + delete object; + delete name; + name = NULL; + m2mobject_stub::instance_list.clear(); + delete instance; + instance = NULL; + m2mobjectinstance_stub::resource_list.clear(); + delete create_resource; + create_resource = NULL; + + m2mresource_stub::list.clear(); + delete res_instance; + res_instance = NULL; +} + +void Test_M2MNsdlInterface::test_delete_nsdl_resource() +{ + common_stub::int_value = 0; + M2MObject *object = new M2MObject("name", "name"); + + CHECK(nsdl->remove_nsdl_resource(object) == false); + + common_stub::int_value = 1; + + CHECK(nsdl->remove_nsdl_resource(object) == true); + delete object; +} + +void Test_M2MNsdlInterface::test_create_bootstrap_resource() +{ + common_stub::uint_value = 11; + CHECK(nsdl->create_bootstrap_resource(NULL, "") == true); + + common_stub::uint_value = 0; + CHECK(nsdl->create_bootstrap_resource(NULL, "") == false); +} + +void Test_M2MNsdlInterface::test_send_register_message() +{ + common_stub::uint_value = 12; + common_stub::int_value = 0; + CHECK(nsdl->send_register_message(NULL,4,100,SN_NSDL_ADDRESS_TYPE_IPV6) == true); + + common_stub::uint_value = 0; + CHECK(nsdl->send_register_message(NULL,4,100,SN_NSDL_ADDRESS_TYPE_IPV6) == false); +} + +void Test_M2MNsdlInterface::test_send_update_registration() +{ + common_stub::uint_value = 23; + nsdl->_nsdl_handle = (nsdl_s*)malloc(sizeof(1)); + CHECK(nsdl->send_update_registration(120) == true); + + // Update lifetime value + common_stub::uint_value = 1; + CHECK(nsdl->send_update_registration(100) == true); + + // Lifetime value is 0, don't change the existing lifetime value + common_stub::uint_value = 1; + CHECK(nsdl->send_update_registration(0) == true); + + free(nsdl->_nsdl_handle); +} + +void Test_M2MNsdlInterface::test_send_unregister_message() +{ + common_stub::uint_value = 22; + CHECK(nsdl->send_unregister_message() == true); + + // Unreg already in progress + common_stub::uint_value = 0; + CHECK(nsdl->send_unregister_message() == true); +} + +void Test_M2MNsdlInterface::test_memory_alloc() +{ + CHECK(nsdl->memory_alloc(0) == 0); + uint8_t *ptr = 0; + ptr = (uint8_t*)nsdl->memory_alloc(sizeof(uint8_t)); + CHECK(ptr != NULL); + nsdl->memory_free(ptr); +} + +void Test_M2MNsdlInterface::test_memory_free() +{ + uint8_t *ptr = (uint8_t*)nsdl->memory_alloc(sizeof(uint8_t)); + nsdl->memory_free((void*)ptr); + //memory leak test will fail, if there is a leak, so no need for CHECK +} + +void Test_M2MNsdlInterface::test_send_to_server_callback() +{ + uint8_t *data_ptr = (uint8_t*)malloc(sizeof(uint8_t)); + uint16_t data_len = sizeof(uint8_t); + sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s)); + + nsdl->send_to_server_callback(NULL, SN_NSDL_PROTOCOL_COAP, data_ptr,data_len,address); + CHECK(observer->message_ready == true); + + free(data_ptr); + free(address); +} + +void Test_M2MNsdlInterface::test_received_from_server_callback() +{ + nsdl_s* handle = (nsdl_s*)malloc(sizeof(nsdl_s)); + memset(handle,0,sizeof(nsdl_s)); + + sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(coap_header, 0, sizeof(sn_coap_hdr_s)); + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CREATED; + + + coap_header->options_list_ptr = (sn_coap_options_list_s *)malloc(sizeof(sn_coap_options_list_s)); + memset(coap_header->options_list_ptr, 0, sizeof(sn_coap_options_list_s)); + + coap_header->options_list_ptr->max_age = 2; + + coap_header->options_list_ptr->location_path_len = 2; + coap_header->options_list_ptr->location_path_ptr = (uint8_t *)malloc(sizeof(coap_header->options_list_ptr->location_path_len)); + memset(coap_header->options_list_ptr->location_path_ptr, 0, sizeof(coap_header->options_list_ptr->location_path_len)); + + observer->data_processed = false; + observer->registered = false; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->registered == true); + + free(nsdl->_endpoint->lifetime_ptr); + nsdl->_endpoint->lifetime_ptr = NULL; + + free(nsdl->_endpoint->location_ptr); + nsdl->_endpoint->location_ptr = NULL; + + uint8_t life1[] = {"120"}; + nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(life1)); + memcpy(nsdl->_endpoint->lifetime_ptr,life1,sizeof(life1)); + nsdl->_endpoint->lifetime_len = (uint8_t)sizeof(life1); + + observer->data_processed = false; + observer->registered = false; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->registered == true); + + free(coap_header->options_list_ptr->location_path_ptr); + coap_header->options_list_ptr->location_path_ptr = NULL; + + free(coap_header->options_list_ptr); + coap_header->options_list_ptr = NULL; + + free(nsdl->_endpoint->lifetime_ptr); + nsdl->_endpoint->lifetime_ptr = NULL; + + uint8_t life[] = {"120"}; + nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(life)); + memcpy(nsdl->_endpoint->lifetime_ptr,life,sizeof(life)); + nsdl->_endpoint->lifetime_len = (uint8_t)sizeof(life); + + observer->data_processed = false; + observer->registered = false; + + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->registered == true); + free(nsdl->_endpoint->lifetime_ptr); + nsdl->_endpoint->lifetime_ptr = NULL; + + uint8_t big_life[] = {"4000"}; + nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(big_life)); + memcpy(nsdl->_endpoint->lifetime_ptr,big_life,sizeof(big_life)); + nsdl->_endpoint->lifetime_len = (uint8_t)sizeof(big_life); + observer->data_processed = false; + observer->registered = false; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->registered == true); + + free(nsdl->_endpoint->lifetime_ptr); + nsdl->_endpoint->lifetime_ptr = NULL; + + observer->data_processed = false; + observer->registered = false; + + uint8_t less_life[] = {"30"}; + nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(less_life)); + memcpy(nsdl->_endpoint->lifetime_ptr,less_life,sizeof(less_life)); + nsdl->_endpoint->lifetime_len = (uint8_t)sizeof(less_life); + + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->registered == true); + + observer->data_processed = false; + observer->registered = false; + observer->unregistered = false; + observer->register_error = false; + + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->register_error == true); + + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_OPTION; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->register_error == true); + + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_INCOMPLETE; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->register_error == true); + + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_PRECONDITION_FAILED; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->register_error == true); + + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->register_error == true); + + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->register_error == true); + + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_UNAUTHORIZED; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->register_error == true); + + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_FORBIDDEN; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->register_error == true); + + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_NOT_FOUND; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->register_error == true); + + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->register_error == true); + + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_GATEWAY; + coap_header->coap_status = COAP_STATUS_BUILDER_MESSAGE_SENDING_FAILED; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->data_processed == true); + CHECK(observer->register_error == true); + + + coap_header->msg_id = 8; + handle->unregister_msg_id = 8; + + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_DELETED; + observer->register_error = false; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->unregistered == true); + + observer->register_error = false; + handle->unregister_msg_id = 8; + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CREATED; + + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->register_error == true); + + observer->register_error = false; + handle->unregister_msg_id = 8; + coap_header->coap_status = COAP_STATUS_BUILDER_MESSAGE_SENDING_FAILED; + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->register_error == true); + + observer->register_error = false; + handle->unregister_msg_id = 8; + coap_header->coap_status = COAP_STATUS_PARSER_ERROR_IN_HEADER; + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->register_error == true); + + observer->register_error = false; + handle->unregister_msg_id = 8; + coap_header->coap_status = COAP_STATUS_PARSER_ERROR_IN_HEADER; + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_GATEWAY_TIMEOUT; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->register_error == true); + + // Receive initial bs message with error + handle->unregister_msg_id = 0; + observer->boot_error = false; + nsdl->_bootstrap_id = 8; + handle->bootstrap_msg_id = 8; + coap_header->coap_status = COAP_STATUS_BUILDER_MESSAGE_SENDING_FAILED; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->boot_error == true); + + //_update_id == msg_id + handle->update_register_msg_id = 10; + coap_header->msg_id = 10; + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CHANGED; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->register_updated == true); + + coap_header->msg_id = 10; + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_FORBIDDEN; + coap_header->coap_status = COAP_STATUS_OK; + nsdl->received_from_server_callback(handle,coap_header,NULL); + CHECK(observer->register_error == true); + + coap_header->msg_id = 11; + CHECK( 0== nsdl->received_from_server_callback(handle,coap_header,NULL) ); + + handle->update_register_msg_id = 0; + handle->register_msg_id = 0; + handle->unregister_msg_id = 0; + coap_header->msg_id = 10; + coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST; + + uint8_t object[] = {"name"}; + + coap_header->uri_path_ptr = object; + coap_header->uri_path_len = sizeof(object); + + CHECK(0== nsdl->received_from_server_callback(handle,coap_header,NULL)); + + //Test methods that are not allowed + coap_header->msg_code = COAP_MSG_CODE_REQUEST_GET; + nsdl->received_from_server_callback(handle,coap_header,NULL); + + coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT; + nsdl->received_from_server_callback(handle,coap_header,NULL); + + coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE; + nsdl->received_from_server_callback(handle,coap_header,NULL); + + //Continue testing with post method + coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST; + + uint8_t object_instance[] = {"name/0"}; + + coap_header->uri_path_ptr = object_instance; + coap_header->uri_path_len = sizeof(object_instance); + + coap_header->payload_ptr = (uint8_t*)malloc(1); + m2mobjectinstance_stub::bool_value = true; + CHECK(0== nsdl->received_from_server_callback(handle,coap_header,NULL)); + + M2MObject *obj = new M2MObject("name", "name"); + + m2mbase_stub::string_value = "name"; + m2mbase_stub::nsdl_resource = + (sn_nsdl_dynamic_resource_parameters_s*) malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s)); + m2mbase_stub::nsdl_resource->static_resource_parameters = + (sn_nsdl_static_resource_parameters_s*) malloc(sizeof(sn_nsdl_static_resource_parameters_s)); + m2mbase_stub::nsdl_resource->static_resource_parameters->path = (uint8_t*)malloc(5); + m2mbase_stub::nsdl_resource->static_resource_parameters->path[0] = 'n'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[1] = 'a'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[2] = 'm'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[3] = 'e'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[4] = '\0'; + m2mbase_stub::nsdl_resource->static_resource_parameters->pathlen = 5; + + nsdl->_object_list.push_back(obj); + + m2mobject_stub::inst = new M2MObjectInstance(*obj, "name", "", ""); + + m2mobject_stub::header = (sn_coap_hdr_s*) malloc(sizeof(sn_coap_hdr_s)); + memset(m2mobject_stub::header,0,sizeof(sn_coap_hdr_s)); + + m2mobjectinstance_stub::header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(m2mobjectinstance_stub::header, 0, sizeof(sn_coap_hdr_s)); + m2mobjectinstance_stub::header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST; + common_stub::coap_header = NULL; + m2mobjectinstance_stub::base_type = M2MBase::ObjectInstance; + + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL)); + m2mobjectinstance_stub::header = NULL; + + m2mobjectinstance_stub::header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(m2mobjectinstance_stub::header, 0, sizeof(sn_coap_hdr_s)); + + m2mobjectinstance_stub::header->msg_code = COAP_MSG_CODE_RESPONSE_CREATED; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL)); + m2mobjectinstance_stub::header = NULL; + + free(coap_header->payload_ptr); + coap_header->payload_ptr = NULL; + + CHECK(0== nsdl->received_from_server_callback(handle,coap_header,NULL)); + + delete m2mobject_stub::inst; + nsdl->_object_list.clear(); + delete obj; + + free(coap_header->payload_ptr); + free(m2mobject_stub::header); + m2mobject_stub::header = NULL; + + uint8_t object_instance1[] = {"name/65536"}; + + coap_header->uri_path_ptr = object_instance1; + coap_header->uri_path_len = sizeof(object_instance1); + + obj = new M2MObject("name", "name"); + + nsdl->_object_list.push_back(obj); + + m2mobject_stub::inst = new M2MObjectInstance(*obj, "name", "", ""); + + m2mobject_stub::header = (sn_coap_hdr_s*) malloc(sizeof(sn_coap_hdr_s)); + memset(m2mobject_stub::header,0,sizeof(sn_coap_hdr_s)); + + CHECK(0== nsdl->received_from_server_callback(handle,coap_header,NULL)); + + delete m2mobject_stub::inst; + nsdl->_object_list.clear(); + delete obj; + + free(m2mobject_stub::header); + + uint8_t resource[] = {"name/0/resource"}; + + coap_header->uri_path_ptr = resource; + coap_header->uri_path_len = sizeof(resource); + + CHECK(0== nsdl->received_from_server_callback(handle,coap_header,NULL)); + + // Test EMPTY ACK + coap_header->msg_code = COAP_MSG_CODE_EMPTY; + obj = new M2MObject("0", "0"); + m2mbase_stub::string_value = "0"; + nsdl->_object_list.push_back(obj); + m2mobject_stub::inst = new M2MObjectInstance(*obj, "name", "", ""); + + uint8_t *token = (uint8_t*) malloc(4); + token[0] = 't'; + token[1] = 'o'; + token[2] = 'k'; + token[3] = 'e'; + coap_header->token_ptr = token; + coap_header->token_len = 4; + + M2MResource res2(*m2mobject_stub::inst, "test","test",M2MResourceInstance::STRING,false, "test"); + m2mbase_stub::object_token = token; + m2mbase_stub::object_token_len = 4; + m2mobject_stub::base_type = M2MBase::Resource; + res2.set_observation_token(token, 4); + + m2mobjectinstance_stub::resource_list.push_back(&res2); + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL)); + + // Test RESET message + coap_header->msg_type = COAP_MSG_TYPE_RESET; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL)); + m2mobject_stub::base_type = M2MBase::Object; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL)); + m2mobject_stub::base_type = M2MBase::ObjectInstance; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL)); + m2mobject_stub::base_type = M2MBase::ResourceInstance; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL)); + free(token); + delete m2mobject_stub::inst; + delete obj; + nsdl->_object_list.clear(); + + + // Bootstrap cases start from here + // handle_bootstrap_put_message() invalid object name + common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s)); + sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s)); + memset(address, 0, sizeof(sn_nsdl_addr_s)); + address->addr_len = 1; + address->addr_ptr = (uint8_t *)malloc(1); + address->addr_ptr[0] = 1; + address->port = 5683; + handle->oma_bs_address_len = 1; + handle->oma_bs_port = 5683; + handle->oma_bs_address_ptr = (uint8_t *)malloc(1); + handle->oma_bs_address_ptr[0] = 1; + coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT; + observer->boot_error = false; + CHECK(0== nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == true); + + // handle_bootstrap_put_message() invalid content type + obj = new M2MObject("0", "0"); + m2mbase_stub::string_value = "0"; + nsdl->_object_list.push_back(obj); + m2mobject_stub::inst = new M2MObjectInstance(*obj, "name", "", ""); + uint8_t security[] = {"0"}; + coap_header->uri_path_ptr = security; + coap_header->uri_path_len = sizeof(security); + M2MResource res(*m2mobject_stub::inst,"test","test",M2MResourceInstance::STRING,false,"test"); + m2mobjectinstance_stub::resource_list.push_back(&res); + observer->boot_error = false; + m2msecurity_stub::resource = new M2MResource(*m2mobject_stub::inst,"1","type",M2MResourceInstance::STRING,false,"1"); + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == true); + + // handle_bootstrap_put_message() success + coap_header->token_ptr = String::convert_integer_to_array(1,coap_header->token_len); + observer->boot_error = false; + m2mtlvdeserializer_stub::is_object_bool_value = true; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == true); + coap_header->content_format = sn_coap_content_format_e(99); + observer->boot_error = false; + observer->boot_done = false; + m2mtlvdeserializer_stub::is_object_bool_value = true; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == false); + + // handle_bootstrap_put_message() TLV parsing fails + observer->boot_error = false; + observer->boot_done = false; + m2mtlvdeserializer_stub::is_object_bool_value = false; + m2mtlvdeserializer_stub::bool_value = true; + m2mtlvdeserializer_stub::error = M2MTLVDeserializer::NotAllowed; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == true); + delete m2mobject_stub::inst; + nsdl->_object_list.clear(); + delete obj; + + // handle_bootstrap_put_message() TLV object instance + obj = new M2MObject("1", "1"); + m2mbase_stub::string_value = "1"; + nsdl->_object_list.push_back(obj); + m2mobject_stub::inst = new M2MObjectInstance(*obj, "name","", ""); + uint8_t server[] = {"1"}; + coap_header->uri_path_ptr = server; + coap_header->uri_path_len = 1; + + observer->boot_error = false; + observer->boot_done = false; + m2mtlvdeserializer_stub::is_object_bool_value = false; + m2mtlvdeserializer_stub::bool_value = true; + m2mtlvdeserializer_stub::error = M2MTLVDeserializer::None; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == false); + + // handle_bootstrap_put_message() TLV server object + observer->boot_error = false; + observer->boot_done = false; + m2mtlvdeserializer_stub::is_object_bool_value = true; + m2mtlvdeserializer_stub::bool_value = false; + m2mtlvdeserializer_stub::error = M2MTLVDeserializer::None; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == false); + + // handle_bootstrap_put_message() TLV not resource + observer->boot_error = false; + observer->boot_done = false; + m2mtlvdeserializer_stub::is_object_bool_value = false; + m2mtlvdeserializer_stub::bool_value = false; + m2mtlvdeserializer_stub::error = M2MTLVDeserializer::None; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == true); + CHECK(nsdl->_security == NULL); + + // handle_bootstrap_delete() object name not match + observer->boot_error = false; + nsdl->_bootstrap_id = 8; + handle->bootstrap_msg_id = 8; + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CHANGED; + coap_header->msg_id = 8; + nsdl->received_from_server_callback(handle,coap_header,NULL); + coap_header->msg_id = 18; + nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer); + observer->boot_done = false; + coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == true); + + free(common_stub::coap_header); + common_stub::coap_header = NULL; + + // handle_bootstrap_delete() _identity_accepted false + observer->boot_error = false; + observer->boot_done = false; + coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == true); + CHECK(nsdl->_security == NULL); + + free(common_stub::coap_header); + common_stub::coap_header = NULL; + + // handle_bootstrap_delete() object name not match + observer->boot_error = false; + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CHANGED; + coap_header->msg_id = 8; + nsdl->received_from_server_callback(handle,coap_header,NULL); + coap_header->msg_id = 18; + uint8_t object_name[] = {"0/0"}; + coap_header->uri_path_ptr = object_name; + coap_header->uri_path_len = 3; + observer->boot_done = false; + coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == true); + CHECK(nsdl->_security == NULL); + + free(common_stub::coap_header); + common_stub::coap_header = NULL; + + // handle_bootstrap_delete() object name not match + observer->boot_error = false; + coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CHANGED; + coap_header->msg_id = 8; + nsdl->received_from_server_callback(handle,coap_header,NULL); + coap_header->msg_id = 18; + uint8_t invalid[] = {"0/0/1"}; + coap_header->uri_path_ptr = invalid; + coap_header->uri_path_len = 5; + observer->boot_done = false; + coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == true); + CHECK(nsdl->_security == NULL); + + //handle_bootstrap_finished() path does not match + coap_header->uri_path_ptr = server; + coap_header->uri_path_len = 1; + nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer); + observer->boot_error = false; + observer->boot_done = false; + coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == true); + CHECK(nsdl->_security == NULL); + + //handle_bootstrap_finished() send coap response + nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer); + common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s)); + m2msecurity_stub::string_value = new String("coaps://"); + observer->boot_error = false; + observer->boot_done = false; + coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == true); + CHECK(nsdl->_security == NULL); + + //handle_bootstrap_finished() success no security + nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer); + m2msecurity_stub::sec_mode = M2MSecurity::NoSecurity; + m2msecurity_stub::int_value = true; + m2msecurity_stub::bool_value = false; + observer->boot_error = false; + observer->boot_wait = false; + observer->boot_done = false; + coap_header->uri_path_ptr = (uint8_t*)malloc(2); + coap_header->uri_path_len = 2; + coap_header->uri_path_ptr[0] = 'b'; + coap_header->uri_path_ptr[1] = 's'; + coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == false); + CHECK(observer->boot_wait == true); + CHECK(observer->boot_done == false); + + //handle_bootstrap_finished() success certificate + nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer); + m2msecurity_stub::sec_mode = M2MSecurity::Certificate; + m2mresourceinstance_stub::int_value = 10; + m2msecurity_stub::int_value = true; + m2msecurity_stub::bool_value = false; + observer->boot_error = false; + observer->boot_wait = false; + observer->boot_done = false; + coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST; + + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == false); + CHECK(observer->boot_wait == true); + CHECK(observer->boot_done == false); + + //handle_bootstrap_finished() fail, Psk not supported + nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer); + m2msecurity_stub::sec_mode = M2MSecurity::Psk; + m2msecurity_stub::int_value = true; + m2msecurity_stub::bool_value = false; + observer->boot_error = false; + observer->boot_done = false; + coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == true); + CHECK(observer->boot_done == false); + + //handle_bootstrap_finished() fail, Bootstrap server + nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer); + m2msecurity_stub::sec_mode = M2MSecurity::Certificate; + m2msecurity_stub::int_value = true; + m2msecurity_stub::bool_value = true; + observer->boot_error = false; + observer->boot_done = false; + coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == true); + CHECK(observer->boot_done == false); + + //handle_bootstrap_finished() fail, key size 0 + nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer); + m2msecurity_stub::sec_mode = M2MSecurity::Certificate; + m2msecurity_stub::int_value = false; + m2msecurity_stub::bool_value = false; + m2mresourceinstance_stub::int_value = 0; + observer->boot_error = false; + observer->boot_done = false; + coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == true); + CHECK(observer->boot_done == false); + + //handle_bootstrap_finished() fail, _security null + m2msecurity_stub::sec_mode = M2MSecurity::Certificate; + m2msecurity_stub::int_value = false; + m2msecurity_stub::bool_value = false; + m2mresourceinstance_stub::int_value = 0; + observer->boot_error = false; + observer->boot_done = false; + coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST; + CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address)); + CHECK(observer->boot_error == true); + CHECK(observer->boot_done == false); + + delete m2mobject_stub::inst; + //delete m2mbase_stub::string_value; + //m2mbase_stub::string_value = NULL; + nsdl->_object_list.clear(); + m2mobjectinstance_stub::resource_list.clear(); + delete obj; + delete m2msecurity_stub::string_value; + delete m2msecurity_stub::resource; + + free(m2mbase_stub::nsdl_resource->static_resource_parameters->path); + free(m2mbase_stub::nsdl_resource->static_resource_parameters); + free(m2mbase_stub::nsdl_resource); + + free(common_stub::coap_header); + free(address->addr_ptr); + free(address); + free(coap_header->token_ptr); + free(coap_header->uri_path_ptr); + free(coap_header); + free(handle->oma_bs_address_ptr); + free(handle); +} + +void Test_M2MNsdlInterface::test_resource_callback() +{ + uint8_t value[] = {"name"}; + sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(coap_header,0,sizeof(sn_coap_hdr_s)); + sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s)); + memset(address,0,sizeof(sn_nsdl_addr_s)); + + common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_)); + memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_)); + + common_stub::coap_header->payload_ptr =(uint8_t*)malloc(1); + common_stub::coap_header->payload_len = 1; + + coap_header->uri_path_ptr = value; + coap_header->uri_path_len = sizeof(value); + + common_stub::int_value = 0; + + common_stub::coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST; + + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0); + + common_stub::int_value = 0; + m2mbase_stub::string_value = "name"; + M2MObject *object = new M2MObject("name", "name"); + m2mbase_stub::int_value = 0; + m2mobject_stub::int_value = 1; + m2mbase_stub::nsdl_resource = + (sn_nsdl_dynamic_resource_parameters_s*) malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s)); + m2mbase_stub::nsdl_resource->static_resource_parameters = + (sn_nsdl_static_resource_parameters_s*) malloc(sizeof(sn_nsdl_static_resource_parameters_s)); + m2mbase_stub::nsdl_resource->static_resource_parameters->path = (uint8_t*)malloc(5); + m2mbase_stub::nsdl_resource->static_resource_parameters->path[0] = 'n'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[1] = 'a'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[2] = 'm'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[3] = 'e'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[4] = '\0'; + m2mbase_stub::nsdl_resource->static_resource_parameters->pathlen = 5; + + nsdl->_object_list.push_back(object); + + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_COAP) ==0); + + coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT; + m2mobject_stub::bool_value = true; + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_COAP) ==0); + + coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST; + + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_COAP) ==0); + m2mobject_stub::base_type = M2MBase::ResourceInstance; + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_COAP) ==0); + + delete object; + free(m2mbase_stub::nsdl_resource->static_resource_parameters->path); + free(m2mbase_stub::nsdl_resource->static_resource_parameters); + free(m2mbase_stub::nsdl_resource); + + free(common_stub::coap_header); + free(address); + free(coap_header); +} + + +void Test_M2MNsdlInterface::test_resource_callback_get() +{ +} + +void Test_M2MNsdlInterface::test_resource_callback_put() +{ + uint8_t value[] = {"name/0/resource"}; + sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(coap_header,0,sizeof(sn_coap_hdr_s)); + sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s)); + memset(address,0,sizeof(sn_nsdl_addr_s)); + + coap_header->uri_path_ptr = value; + coap_header->uri_path_len = sizeof(value); + + coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT; + + common_stub::int_value = 0; + m2mbase_stub::string_value = "name"; + + M2MObject *object = new M2MObject("name", "name"); + M2MObjectInstance* instance = new M2MObjectInstance(*object,"name","", ""); + + M2MResource* create_resource = new M2MResource(*instance, + "res", + "res", + M2MResourceInstance::INTEGER, + false, + "res"); + m2mobject_stub::int_value = 2; + m2mobject_stub::instance_list.push_back(instance); + + m2mobjectinstance_stub::resource_list.push_back(create_resource); + m2mobjectinstance_stub::int_value = 1; + + nsdl->_object_list.push_back(object); + + m2mbase_stub::operation = M2MBase::PUT_ALLOWED; + + coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s)); + + uint8_t query[] = {"pmax=200&pmin=120"}; + coap_header->options_list_ptr->uri_query_ptr = (uint8_t*)malloc(sizeof(query)); + coap_header->options_list_ptr->uri_query_len = sizeof(query); + + m2mbase_stub::bool_value = true; + + common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_)); + memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_)); + common_stub::coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST; + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0); + + m2mobject_stub::base_type = M2MBase::Resource; + m2mbase_stub::base_type = M2MBase::Resource; + m2mobject_stub::bool_value = true; + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0); + + m2mobject_stub::base_type = M2MBase::ObjectInstance; + m2mbase_stub::base_type = M2MBase::ObjectInstance; + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0); + + m2mbase_stub::base_type = M2MBase::Object; + m2mbase_stub::bool_value = false; + + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0); + + delete object; + m2mobject_stub::instance_list.clear(); + delete instance; +// m2mobjectinstance_stub::resource_list.clear(); + delete create_resource; + + free(coap_header->options_list_ptr->uri_query_ptr); + free(coap_header->options_list_ptr); + if(common_stub::coap_header){ + if( common_stub::coap_header->options_list_ptr){ + free(common_stub::coap_header->options_list_ptr); + common_stub::coap_header->options_list_ptr = NULL; + } + free(common_stub::coap_header); + common_stub::coap_header = NULL; + } + free(coap_header); + free(address); + + m2mbase_stub::clear(); + common_stub::clear(); + m2mobject_stub::clear(); + m2mobjectinstance_stub::clear(); +} + +void Test_M2MNsdlInterface::test_resource_callback_post() +{ + uint8_t value[] = {"name/0/name"}; + sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(coap_header,0,sizeof(sn_coap_hdr_s)); + sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s)); + memset(address,0,sizeof(sn_nsdl_addr_s)); + + coap_header->uri_path_ptr = value; + coap_header->uri_path_len = sizeof(value); + + coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST; + + common_stub::int_value = 0; + m2mbase_stub::string_value = "name"; + m2mbase_stub::bool_value = false; + M2MObject *object = new M2MObject("name", "name"); + M2MObjectInstance* instance = new M2MObjectInstance(*object,"name","",""); + M2MResource* create_resource = new M2MResource(*instance, + "name", + "name", + M2MResourceInstance::INTEGER, + false, + "name"); + m2mobject_stub::int_value = 2; + m2mobject_stub::instance_list.push_back(instance); + + m2mobjectinstance_stub::resource_list.push_back(create_resource); + m2mobjectinstance_stub::int_value = 1; + + nsdl->_object_list.push_back(object); + + m2mbase_stub::operation = M2MBase::POST_ALLOWED; + + coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s)); + + uint8_t query[] = {"pmax=200&pmin=120"}; + coap_header->options_list_ptr->uri_query_ptr = (uint8_t*)malloc(sizeof(query)); + coap_header->options_list_ptr->uri_query_len = sizeof(query); + + m2mbase_stub::bool_value = true; + + m2mbase_stub::nsdl_resource = + (sn_nsdl_dynamic_resource_parameters_s*) malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s)); + m2mbase_stub::nsdl_resource->static_resource_parameters = + (sn_nsdl_static_resource_parameters_s*) malloc(sizeof(sn_nsdl_static_resource_parameters_s)); + m2mbase_stub::nsdl_resource->static_resource_parameters->path = (uint8_t*)malloc(5); + m2mbase_stub::nsdl_resource->static_resource_parameters->path[0] = 'n'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[1] = 'a'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[2] = 'm'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[3] = 'e'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[4] = '\0'; + m2mbase_stub::nsdl_resource->static_resource_parameters->pathlen = 5; + + common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_)); + memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_)); + common_stub::coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST; + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0); + + m2mobject_stub::base_type = M2MBase::Resource; + m2mbase_stub::base_type = M2MBase::Resource; + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0); + + m2mobject_stub::base_type = M2MBase::ResourceInstance; + m2mbase_stub::base_type = M2MBase::ResourceInstance; + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0); + + m2mobject_stub::base_type = M2MBase::ObjectInstance; + m2mbase_stub::base_type = M2MBase::ObjectInstance; + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0); + + m2mbase_stub::base_type = M2MBase::Object; + m2mbase_stub::bool_value = false; + + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0); + + delete object; + m2mobject_stub::instance_list.clear(); + delete instance; + m2mobjectinstance_stub::resource_list.clear(); + delete create_resource; + + free(coap_header->options_list_ptr->uri_query_ptr); + free(coap_header->options_list_ptr); + if(common_stub::coap_header){ + if( common_stub::coap_header->options_list_ptr){ + free(common_stub::coap_header->options_list_ptr); + common_stub::coap_header->options_list_ptr = NULL; + } + free(common_stub::coap_header); + common_stub::coap_header = NULL; + } + free(coap_header); + free(address); + free(m2mbase_stub::nsdl_resource->static_resource_parameters->path); + free(m2mbase_stub::nsdl_resource->static_resource_parameters); + free(m2mbase_stub::nsdl_resource); + + m2mbase_stub::clear(); + common_stub::clear(); + m2mobject_stub::clear(); + m2mobjectinstance_stub::clear(); +} + +void Test_M2MNsdlInterface::test_resource_callback_delete() +{ + uint8_t value[] = {"name/0"}; + sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(coap_header,0,sizeof(sn_coap_hdr_s)); + sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s)); + memset(address,0,sizeof(sn_nsdl_addr_s)); + + common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_)); + memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_)); + + coap_header->uri_path_ptr = value; + coap_header->uri_path_len = sizeof(value); + + coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE; + common_stub::coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST; + common_stub::int_value = 0; + + m2mbase_stub::nsdl_resource = + (sn_nsdl_dynamic_resource_parameters_s*) malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s)); + m2mbase_stub::nsdl_resource->static_resource_parameters = + (sn_nsdl_static_resource_parameters_s*) malloc(sizeof(sn_nsdl_static_resource_parameters_s)); + + m2mbase_stub::nsdl_resource->static_resource_parameters->path = (uint8_t*)malloc(7); + m2mbase_stub::nsdl_resource->static_resource_parameters->path[0] = 'n'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[1] = 'a'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[2] = 'm'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[3] = 'e'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[4] = '/'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[5] = '0'; + m2mbase_stub::nsdl_resource->static_resource_parameters->path[6] = '\0'; + m2mbase_stub::nsdl_resource->static_resource_parameters->pathlen = 7; + + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0); + + common_stub::int_value = 0; + m2mbase_stub::string_value = "name/0"; + M2MObject *object = new M2MObject("name", "name"); + M2MObjectInstance* instance = new M2MObjectInstance(*object,"name", "", "name/0"); + m2mbase_stub::int_value = 0; + m2mobject_stub::int_value = 1; + m2mobject_stub::bool_value = true; + m2mobject_stub::instance_list.push_back(instance); + m2mobject_stub::base_type = M2MBase::ObjectInstance; + nsdl->_object_list.push_back(object); + + m2mbase_stub::operation = M2MBase::DELETE_ALLOWED; + + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0); + + m2mobject_stub::base_type = M2MBase::Object; + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0); + + delete instance; + delete object; + free(m2mbase_stub::nsdl_resource->static_resource_parameters->path); + free(m2mbase_stub::nsdl_resource->static_resource_parameters); + free(m2mbase_stub::nsdl_resource); + free(common_stub::coap_header); + free(address); + free(coap_header); + m2mobject_stub::instance_list.clear(); +} + +/* +void Test_M2MNsdlInterface::test_resource_callback_reset() +{ + uint8_t value[] = {"name"}; + sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s)); + memset(coap_header,0,sizeof(sn_coap_hdr_s)); + sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s)); + memset(address,0,sizeof(sn_nsdl_addr_s)); + + coap_header->uri_path_ptr = value; + coap_header->uri_path_len = sizeof(value); + + coap_header->msg_type = COAP_MSG_TYPE_RESET; + m2mobjectinstance_stub::base_type = M2MBase::Object; + String *name = new String("name"); + common_stub::int_value = 0; + m2mbase_stub::string_value = name; + M2MObject *object = new M2MObject(*name); + M2MObjectInstance* instance = new M2MObjectInstance(*name,*object); + M2MResource* create_resource = new M2MResource(*instance, + *name, + *name, + M2MResourceInstance::INTEGER, + M2MResource::Dynamic,false); + m2mobject_stub::int_value = 2; + m2mobject_stub::instance_list.push_back(instance); + + m2mobjectinstance_stub::resource_list.push_back(create_resource); + m2mobjectinstance_stub::int_value = 1; + + nsdl->_object_list.push_back(object); + // No response for RESET message + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) == 1); + + + m2mobject_stub::base_type = M2MBase::ObjectInstance; + // No response for RESET message + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) == 1); + + m2mobject_stub::base_type = M2MBase::Resource; + // No response for RESET message + CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) == 1); + + delete instance; + delete object; + delete name; + delete create_resource; + free(address); + free(coap_header); + m2mobject_stub::instance_list.clear(); + m2mobjectinstance_stub::resource_list.clear(); + //nsdl->_object_list.clear(); +} +*/ +void Test_M2MNsdlInterface::test_process_received_data() +{ + uint8_t *data = (uint8_t*)malloc(sizeof(uint8_t)); + uint16_t data_size = sizeof(uint16_t); + sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s)); + + common_stub::int_value = 0; + + CHECK(nsdl->process_received_data(data,data_size,address) == true); + + common_stub::int_value = -1; + + CHECK(nsdl->process_received_data(data,data_size,address) == false); + + free(address); + free(data); + common_stub::clear(); +} + +void Test_M2MNsdlInterface::test_stop_timers() +{ + // Check if there is no memory leak or crash + nsdl->stop_timers(); +} + +void Test_M2MNsdlInterface::test_timer_expired() +{ + nsdl->timer_expired(M2MTimerObserver::NsdlExecution); + CHECK(nsdl->_counter_for_nsdl == 1); + + if( nsdl->_endpoint == NULL){ + nsdl->_endpoint = (sn_nsdl_ep_parameters_s*)nsdl->memory_alloc(sizeof(sn_nsdl_ep_parameters_s)); + } + nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(uint8_t)); + + // For checking the registration update + nsdl->timer_expired(M2MTimerObserver::Registration); + + nsdl->delete_endpoint(); + CHECK(nsdl->_endpoint == NULL); +} + +void Test_M2MNsdlInterface::test_observation_to_be_sent() +{ + Vector<uint16_t> instance_list_ids; + m2mbase_stub::clear(); + M2MObject *object = new M2MObject("name", "name"); + M2MObjectInstance* instance = new M2MObjectInstance(*object, "name", "", ""); + M2MResource *res = new M2MResource(*instance,"res", "res", M2MResourceInstance::INTEGER,false, "res"); + M2MResource *res2 = new M2MResource(*instance,"res2", "res2", M2MResourceInstance::INTEGER,false, "res2"); + + + M2MResourceInstance* res_instance = new M2MResourceInstance(*res, + "res", "res", + M2MResourceInstance::INTEGER,0,"",false); + M2MResourceInstance* res_instance_1 = new M2MResourceInstance(*res2, + "res2", "res2", + M2MResourceInstance::INTEGER,0,"",false); + m2mresource_stub::list.clear(); + m2mresource_stub::list.push_back(res_instance); + m2mresource_stub::list.push_back(res_instance_1); + m2mresource_stub::int_value = 2; + instance_list_ids.push_back(0); + + uint8_t value[] = {"value"}; + m2mresourceinstance_stub::value = (uint8_t *)malloc(sizeof(value)); + memset( m2mresourceinstance_stub::value, 0, sizeof(value)); + memcpy(m2mresourceinstance_stub::value,value,sizeof(value)); + m2mresourceinstance_stub::int_value = sizeof(value); + + m2mbase_stub::uint16_value = 321; + m2mbase_stub::string_value = "token"; + + m2mresourceinstance_stub::base_type = M2MBase::Resource; + + nsdl->_nsdl_handle = (nsdl_s*)malloc(sizeof(nsdl_s)); + memset(nsdl->_nsdl_handle,0,sizeof(nsdl_s)); + sn_nsdl_oma_server_info_t * nsp_address = (sn_nsdl_oma_server_info_t *)malloc(sizeof(sn_nsdl_oma_server_info_t)); + memset(nsp_address,0,sizeof(sn_nsdl_oma_server_info_t)); + sn_nsdl_addr_s* address = (sn_nsdl_addr_s*)malloc(sizeof(sn_nsdl_addr_s)); + memset(address,0,sizeof(sn_nsdl_addr_s)); + + nsdl->_nsdl_handle->nsp_address_ptr = nsp_address; + memset(nsdl->_nsdl_handle->nsp_address_ptr,0,sizeof(sn_nsdl_oma_server_info_t)); + nsdl->_nsdl_handle->nsp_address_ptr->omalw_address_ptr = address; + + //CHECK if nothing crashes + common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s)); + common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s)); + nsdl->observation_to_be_sent(res2, 1, instance_list_ids); + free(common_stub::coap_header); + + m2mresourceinstance_stub::resource_type = M2MResource::OPAQUE; + + //CHECK if nothing crashes + common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s)); + common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s)); + nsdl->observation_to_be_sent(res2, 1, instance_list_ids); + free(common_stub::coap_header); + + m2mresource_stub::list.clear(); + m2mresource_stub::int_value = 0; + + //CHECK if nothing crashes + common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s)); + common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s)); + nsdl->observation_to_be_sent(res, 500, instance_list_ids); + free(common_stub::coap_header); + + M2MObjectInstance *object_instance = new M2MObjectInstance(*object, "name", "",""); + m2mobject_stub::int_value = 1; + m2mobject_stub::base_type = M2MBase::Object; + m2mobject_stub::inst = object_instance; + m2mobjectinstance_stub::resource_list.push_back(res); + nsdl->_object_list.push_back(object); + instance_list_ids.push_back(1); + //CHECK if nothing crashes + common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s)); + common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s)); + nsdl->observation_to_be_sent(object, 1, instance_list_ids); + free(common_stub::coap_header); + + common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s)); + common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s)); + nsdl->observation_to_be_sent(object, 500, instance_list_ids, true); + free(common_stub::coap_header); + + //CHECK if nothing crashes + m2mobjectinstance_stub::base_type = M2MBase::ObjectInstance; + common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s)); + common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s)); + nsdl->observation_to_be_sent(object_instance, 1, instance_list_ids); + free(common_stub::coap_header); + + common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s)); + common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s)); + nsdl->observation_to_be_sent(object_instance, 500, instance_list_ids); + free(common_stub::coap_header); + + free(m2mresourceinstance_stub::value); + m2mresourceinstance_stub::value = NULL; + + m2mbase_stub::clear(); + m2mresourceinstance_stub::clear(); + m2mobjectinstance_stub::clear(); + m2mobject_stub::clear(); + m2mresource_stub::list.clear(); + delete res; + res = NULL; + + delete res2; + res2 = NULL; + + delete res_instance; + res_instance = NULL; + + delete res_instance_1; + res_instance_1 = NULL; + + delete object_instance; + object_instance = NULL; + + delete object; + object = NULL; + + delete instance; + instance = NULL; + + free(nsp_address); + free(address); + free(nsdl->_nsdl_handle); +} + +void Test_M2MNsdlInterface::test_resource_to_be_deleted() +{ + //Checking coverage for the code + M2MObject *object = new M2MObject("name", "name"); + nsdl->resource_to_be_deleted(object); + delete object; +} + +void Test_M2MNsdlInterface::test_value_updated() +{ + M2MObject *object = new M2MObject("name", "name"); + M2MObjectInstance *object_instance = new M2MObjectInstance(*object, "name", "", ""); + M2MResource *resource = new M2MResource(*object_instance, + "resource_name", + "resource_type", + M2MResourceInstance::INTEGER, + false, + "resource_name"); + + M2MResourceInstance *resource_instance = new M2MResourceInstance(*resource, + "resource_name", + "resource_type", + M2MResourceInstance::INTEGER, + 0,"",false); + + m2mobject_stub::base_type = M2MBase::Object; + m2mbase_stub::string_value = "name"; + m2mbase_stub::operation = M2MBase::GET_ALLOWED; + nsdl->value_updated(object,"name"); + CHECK(observer->value_update == true); + observer->value_update = false; + + m2mobjectinstance_stub::base_type = M2MBase::ObjectInstance; + + nsdl->value_updated(object_instance,"name/0"); + CHECK(observer->value_update == true); + observer->value_update = false; + + common_stub::resource = (sn_nsdl_dynamic_resource_parameters_s*)malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s)); + memset(common_stub::resource,0, sizeof(sn_nsdl_dynamic_resource_parameters_s)); + + common_stub::resource->static_resource_parameters = + (sn_nsdl_static_resource_parameters_s*)malloc(sizeof(sn_nsdl_static_resource_parameters_s)); + memset(common_stub::resource->static_resource_parameters,0, sizeof(sn_nsdl_static_resource_parameters_s)); + + common_stub::resource->static_resource_parameters->resource = (uint8_t*)malloc(2); + memset(common_stub::resource->static_resource_parameters->resource,0, 2); + + common_stub::resource->static_resource_parameters->mode = SN_GRS_STATIC; + m2mbase_stub::mode_value = M2MBase::Static; + + common_stub::resource->observable = false; + m2mbase_stub::bool_value = true; + + m2mresourceinstance_stub::int_value = 2; + uint8_t value[] = "1"; + m2mresourceinstance_stub::value = value; + + m2mresourceinstance_stub::base_type = M2MBase::Resource; + + nsdl->value_updated(resource,"name/0/name"); + CHECK(observer->value_update == true); + observer->value_update = false; + + m2mresourceinstance_stub::clear(); + free(common_stub::resource->static_resource_parameters->resource); + free(common_stub::resource->static_resource_parameters); + free(common_stub::resource); + common_stub::resource = NULL; + common_stub::clear(); + + m2mresourceinstance_stub::base_type = M2MBase::ResourceInstance; + + common_stub::resource = (sn_nsdl_dynamic_resource_parameters_s*)malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s)); + memset(common_stub::resource,0, sizeof(sn_nsdl_dynamic_resource_parameters_s)); + + common_stub::resource->static_resource_parameters = + (sn_nsdl_static_resource_parameters_s*)malloc(sizeof(sn_nsdl_static_resource_parameters_s)); + memset(common_stub::resource->static_resource_parameters,0, sizeof(sn_nsdl_static_resource_parameters_s)); + + common_stub::resource->static_resource_parameters->resource = (uint8_t*)malloc(2); + memset(common_stub::resource->static_resource_parameters->resource,0, 2); + + common_stub::resource->static_resource_parameters->mode = SN_GRS_STATIC; + m2mbase_stub::mode_value = M2MBase::Static; + + m2mresourceinstance_stub::int_value = 2; + m2mresourceinstance_stub::value = value; + + nsdl->value_updated(resource_instance,"name/0/name/0"); + CHECK(observer->value_update == true); + observer->value_update = false; + + m2mbase_stub::is_value_updated_function_set = true; + nsdl->value_updated(resource_instance,"name/0/name/0"); + CHECK(observer->value_update == false); + observer->value_update = false; + + m2mobject_stub::clear(); + m2mobjectinstance_stub::clear(); + + m2mresourceinstance_stub::clear(); + + free(common_stub::resource->static_resource_parameters->resource); + free(common_stub::resource->static_resource_parameters); + free(common_stub::resource); + + common_stub::resource = NULL; + common_stub::clear(); + + delete resource_instance; + delete resource; + delete object_instance; + delete object; +} + + +void Test_M2MNsdlInterface::test_find_resource() +{ + m2mbase_stub::string_value = "name"; + m2mbase_stub::object_instance_name = "name/0"; + m2mbase_stub::resource_name_inst = "name/0/resource_name/0"; + m2mbase_stub::resource_name = "name/0/resource_name"; + m2mbase_stub::find_resource = true; + uint8_t *token = (uint8_t*) malloc(4); + token[0] = 't'; + token[1] = 'o'; + token[2] = 'k'; + token[3] = 'e'; + m2mbase_stub::object_token = token; + m2mbase_stub::object_token_len = 4; + + uint8_t *inst_token = (uint8_t*) malloc(4); + inst_token[0] = 't'; + inst_token[1] = 'o'; + inst_token[2] = 'k'; + inst_token[3] = 'k'; + m2mbase_stub::object_inst_token = inst_token; + m2mbase_stub::object_inst_token_len = 4; + + uint8_t *resource_token = (uint8_t*) malloc(4); + resource_token[0] = 't'; + resource_token[1] = 'k'; + resource_token[2] = 'k'; + resource_token[3] = 'k'; + m2mbase_stub::resource_token = resource_token; + m2mbase_stub::resource_token_len = 4; + + M2MObject *object = new M2MObject("name", "name"); + M2MObjectInstance *object_instance = new M2MObjectInstance(*object,"name/0", "","name/0"); + M2MResource *resource = new M2MResource(*object_instance, + "resource_name", + "resource_type", + M2MResourceInstance::INTEGER, + false, + "resource_name"); + + M2MResourceInstance *resource_instance = new M2MResourceInstance(*resource, + "0", + "resource_type", + M2MResourceInstance::INTEGER,0,"0",false); + + m2mobjectinstance_stub::base_type = M2MBase::ObjectInstance; + m2mobject_stub::instance_list.push_back(object_instance); + m2mobjectinstance_stub::resource_list.push_back(resource); + m2mresource_stub::list.push_back(resource_instance); + m2mobject_stub::base_type = M2MBase::Object; + nsdl->_object_list.push_back(object); + m2mresource_stub::bool_value = true; + CHECK(nsdl->find_resource("name") == object); + CHECK(nsdl->find_resource("name1") == NULL); + CHECK(nsdl->find_resource("name", token, 4) == object); + CHECK(nsdl->find_resource("name", token, 5) == NULL); + + m2mbase_stub::ret_counter = 0; + CHECK(nsdl->find_resource("name/0") == object_instance); + m2mbase_stub::ret_counter = 0; + CHECK(nsdl->find_resource("name/0", inst_token, 4) == object_instance); + m2mbase_stub::ret_counter = 0; + + CHECK(nsdl->find_resource("name/0/resource_name") == resource); + m2mbase_stub::ret_counter = 0; + CHECK(nsdl->find_resource("name/0/resource_name", resource_token, 4) == resource); + + m2mbase_stub::ret_counter = 0; + CHECK(nsdl->find_resource("name/0/resource_name/0") == resource_instance); + + free(token); + free(inst_token); + free(resource_token); + + m2mobject_stub::clear(); + m2mobjectinstance_stub::clear(); + + m2mresourceinstance_stub::clear(); + m2mresource_stub::clear(); + m2mobjectinstance_stub::clear(); + m2mobject_stub::clear(); + + delete resource_instance; + delete resource; + delete object_instance; + delete object; +} + +void Test_M2MNsdlInterface::test_remove_object() +{ + M2MObject *obj = new M2MObject("name", "name"); + nsdl->_object_list.push_back(obj); + + nsdl->remove_object((M2MBase*)obj); + + CHECK(nsdl->_object_list.empty() == true); + + nsdl->_object_list.clear(); + delete obj; +} + +void Test_M2MNsdlInterface::test_add_object_to_list() +{ + M2MObject *obj = new M2MObject("name", "name"); + nsdl->_object_list.push_back(obj); + + nsdl->add_object_to_list(obj); + CHECK(nsdl->_object_list.size() == 1); + + nsdl->_object_list.clear(); + delete obj; +} + +void Test_M2MNsdlInterface::test_send_delayed_response() +{ + common_stub::int_value = 0; + m2mbase_stub::int_value = 0; + + M2MObject *object = new M2MObject("name", "name"); + M2MObjectInstance* instance = new M2MObjectInstance(*object, "name", "", ""); + nsdl->_nsdl_handle = (nsdl_s*)malloc(sizeof(nsdl_s)); + memset(nsdl->_nsdl_handle,0,sizeof(nsdl_s)); + + sn_nsdl_oma_server_info_t * nsp_address = (sn_nsdl_oma_server_info_t *)malloc(sizeof(sn_nsdl_oma_server_info_t)); + memset(nsp_address,0,sizeof(sn_nsdl_oma_server_info_t)); + sn_nsdl_addr_s* address = (sn_nsdl_addr_s*)malloc(sizeof(sn_nsdl_addr_s)); + memset(address,0,sizeof(sn_nsdl_addr_s)); + + M2MResource* resource = new M2MResource(*instance, + "name", + "name", + M2MResourceInstance::INTEGER, + false, + "name"); + + uint8_t val[] = {"name"}; + m2mresource_stub::delayed_token = (uint8_t*)malloc(sizeof(val)); + memcpy(m2mresource_stub::delayed_token,val,sizeof(val)); + m2mresource_stub::delayed_token_len = sizeof(val); + + m2mresourceinstance_stub::base_type = M2MBase::Resource; + + nsdl->_nsdl_handle->nsp_address_ptr = nsp_address; + memset(nsdl->_nsdl_handle->nsp_address_ptr,0,sizeof(sn_nsdl_oma_server_info_t)); + nsdl->_nsdl_handle->nsp_address_ptr->omalw_address_ptr = address; + + nsdl->send_delayed_response(resource); + + free(nsp_address); + free(address); + free(nsdl->_nsdl_handle); + + delete object; + delete instance; + delete resource; + free(m2mresource_stub::delayed_token); + m2mresource_stub::delayed_token = NULL; + m2mresource_stub::delayed_token_len = 0; +} + +void Test_M2MNsdlInterface::test_get_nsdl_handle() +{ + CHECK(nsdl->get_nsdl_handle() == nsdl->_nsdl_handle); +} + +void Test_M2MNsdlInterface::test_endpoint_name() +{ + String endpoint = "test"; + nsdl->_endpoint_name = endpoint; + CHECK(nsdl->endpoint_name() == endpoint); +}