Ram Gandikota / Mbed OS ABCD
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers test_m2mnsdlinterface.cpp Source File

test_m2mnsdlinterface.cpp

00001 /*
00002  * Copyright (c) 2015 ARM Limited. All rights reserved.
00003  * SPDX-License-Identifier: Apache-2.0
00004  * Licensed under the Apache License, Version 2.0 (the License); you may
00005  * not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  * http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an AS IS BASIS, WITHOUT
00012  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 #include "CppUTest/TestHarness.h"
00017 #include "test_m2mnsdlinterface.h"
00018 #include "common_stub.h"
00019 #include "m2msecurity_stub.h"
00020 #include "m2mnsdlobserver.h"
00021 #include "m2mobject_stub.h"
00022 #include "m2mobjectinstance_stub.h"
00023 #include "m2mresource_stub.h"
00024 #include "m2mresourceinstance_stub.h"
00025 #include "m2mresource.h"
00026 #include "m2mbase_stub.h"
00027 #include "m2mserver.h"
00028 #include "m2msecurity.h"
00029 #include "m2mtlvdeserializer_stub.h"
00030 class TestObserver : public M2MNsdlObserver {
00031 
00032 public:
00033     TestObserver(){}
00034     virtual ~TestObserver(){}
00035     void coap_message_ready(uint8_t *,
00036                             uint16_t,
00037                             sn_nsdl_addr_s *){
00038         message_ready = true;
00039     }
00040 
00041     void client_registered(M2MServer *){
00042         registered = true;
00043     }
00044 
00045     void registration_updated(const M2MServer &){
00046         register_updated = true;
00047     }
00048 
00049     void registration_error(uint8_t, bool retry = false){
00050         register_error = true;
00051     }
00052 
00053     void client_unregistered(){
00054         unregistered = true;
00055     }
00056 
00057     void bootstrap_done(M2MSecurity *sec){
00058         if(sec) {
00059             boot_done = true;
00060             delete sec;
00061             sec = NULL;
00062         }
00063     }
00064 
00065     void bootstrap_wait(M2MSecurity *sec){
00066         if(sec) {
00067             boot_wait = true;
00068             delete sec;
00069             sec = NULL;
00070         }
00071     }
00072 
00073     void bootstrap_error(){
00074         boot_error = true;
00075     }
00076 
00077     void coap_data_processed(){
00078         data_processed = true;
00079     }
00080 
00081     void value_updated(M2MBase *){
00082         value_update = true;
00083     }
00084 
00085     bool register_error;
00086     bool boot_error;
00087     bool boot_wait;
00088     bool boot_done;
00089     bool registered;
00090     bool register_updated;
00091     bool data_processed;
00092     bool unregistered;
00093     bool message_ready;
00094     bool value_update;
00095 };
00096 
00097 struct nsdl_s {
00098     uint16_t update_register_msg_id;
00099     uint16_t register_msg_len;
00100     uint16_t update_register_msg_len;
00101 
00102     uint16_t register_msg_id;
00103     uint16_t unregister_msg_id;
00104 
00105     uint16_t bootstrap_msg_id;
00106     uint16_t oma_bs_port;                                                       /* Bootstrap port */
00107     uint8_t oma_bs_address_len;                                                 /* Bootstrap address length */
00108     unsigned int sn_nsdl_endpoint_registered:1;
00109     bool handle_bootstrap_msg:1;
00110 
00111     struct grs_s *grs;
00112     uint8_t *oma_bs_address_ptr;                                                /* Bootstrap address pointer. If null, no bootstrap in use */
00113     sn_nsdl_ep_parameters_s *ep_information_ptr;                                // Endpoint parameters, Name, Domain etc..
00114     sn_nsdl_oma_server_info_t *nsp_address_ptr;                                 // NSP server address information
00115 
00116     void (*sn_nsdl_oma_bs_done_cb)(sn_nsdl_oma_server_info_t *server_info_ptr); /* Callback to inform application when bootstrap is done */
00117     void *(*sn_nsdl_alloc)(uint16_t);
00118     void (*sn_nsdl_free)(void *);
00119     uint8_t (*sn_nsdl_tx_callback)(struct nsdl_s *, sn_nsdl_capab_e , uint8_t *, uint16_t, sn_nsdl_addr_s *);
00120     uint8_t (*sn_nsdl_rx_callback)(struct nsdl_s *, sn_coap_hdr_s *, sn_nsdl_addr_s *);
00121     void (*sn_nsdl_oma_bs_done_cb_handle)(sn_nsdl_oma_server_info_t *server_info_ptr,
00122                                           struct nsdl_s *handle); /* Callback to inform application when bootstrap is done with nsdl handle */
00123 };
00124 
00125 Test_M2MNsdlInterface::Test_M2MNsdlInterface()
00126 {
00127     observer = new TestObserver();
00128     nsdl = new M2MNsdlInterface(*observer);
00129     //nsdl->_server = new M2MServer();
00130 }
00131 
00132 Test_M2MNsdlInterface:: ~Test_M2MNsdlInterface()
00133 {
00134     delete nsdl;
00135     nsdl = NULL;
00136     delete observer;
00137     observer = NULL;
00138 }
00139 
00140 void Test_M2MNsdlInterface::test_create_endpoint()
00141 {
00142     u_int8_t value[]  = {"120"};
00143     if( nsdl->_endpoint == NULL){
00144         nsdl->_endpoint = (sn_nsdl_ep_parameters_s*)nsdl->memory_alloc(sizeof(sn_nsdl_ep_parameters_s));
00145     }
00146 
00147     nsdl->create_endpoint("name", "type",120,"domain",100,"context");
00148     CHECK(nsdl->_endpoint->lifetime_len == 3);
00149     CHECK(*nsdl->_endpoint->lifetime_ptr == *value);
00150 }
00151 
00152 void Test_M2MNsdlInterface::test_delete_endpoint()
00153 {
00154     if( nsdl->_endpoint == NULL){
00155         nsdl->_endpoint = (sn_nsdl_ep_parameters_s*)nsdl->memory_alloc(sizeof(sn_nsdl_ep_parameters_s));
00156     }
00157     nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(uint8_t));
00158 
00159     nsdl->delete_endpoint();
00160     CHECK(nsdl->_endpoint == NULL);
00161 }
00162 
00163 void Test_M2MNsdlInterface::test_create_nsdl_list_structure()
00164 {
00165     String *name = new String("name");
00166     common_stub::int_value = 0;
00167     m2mbase_stub::int_value = 0;
00168     M2MObject *object = new M2MObject(*name, (char*)name->c_str());
00169     M2MObjectInstance* instance = new M2MObjectInstance(*object,*name, "", "name/0");
00170 
00171     M2MResource* create_resource = new M2MResource(*instance,
00172                                                    *name,
00173                                                    *name,
00174                                                    M2MResourceInstance::INTEGER,
00175                                                    false,
00176                                                    "name");
00177 
00178     M2MResourceInstance* res_instance = new M2MResourceInstance(*create_resource, *name, *name,
00179                                        M2MResourceInstance::INTEGER, 0, (char*)name->c_str(), false);
00180 
00181     m2mobject_stub::instance_list.clear();
00182     m2mobject_stub::instance_list.push_back(instance);
00183 
00184     m2mobjectinstance_stub::resource_list.clear();
00185     m2mobjectinstance_stub::resource_list.push_back(create_resource);
00186 
00187     M2MObjectList list;
00188     list.push_back(object);
00189 
00190     m2mbase_stub::string_value = name->c_str();
00191     m2mbase_stub::mode_value = M2MBase::Static;
00192 
00193 
00194     CHECK(nsdl->create_nsdl_list_structure(list)== true);
00195 
00196     m2mresource_stub::bool_value = true;
00197     m2mbase_stub::mode_value = M2MBase::Dynamic;
00198 
00199     m2mresource_stub::list.push_back(res_instance);
00200     m2mresourceinstance_stub::base_type = M2MBase::Resource;
00201 
00202     CHECK(nsdl->create_nsdl_list_structure(list)== true);
00203 
00204     m2mbase_stub::mode_value = M2MBase::Directory;
00205     CHECK(nsdl->create_nsdl_list_structure(list)== true);
00206 
00207     list.clear();
00208     delete object;
00209     delete name;
00210     name = NULL;
00211     m2mobject_stub::instance_list.clear();
00212     delete instance;
00213     instance = NULL;
00214     m2mobjectinstance_stub::resource_list.clear();
00215     delete create_resource;
00216     create_resource = NULL;
00217 
00218     m2mresource_stub::list.clear();
00219     delete res_instance;
00220     res_instance = NULL;
00221 }
00222 
00223 void Test_M2MNsdlInterface::test_delete_nsdl_resource()
00224 {
00225     common_stub::int_value = 0;
00226     M2MObject *object = new M2MObject("name", "name");
00227 
00228     CHECK(nsdl->remove_nsdl_resource(object) == false);
00229 
00230     common_stub::int_value = 1;
00231 
00232     CHECK(nsdl->remove_nsdl_resource(object) == true);
00233     delete object;
00234 }
00235 
00236 void Test_M2MNsdlInterface::test_create_bootstrap_resource()
00237 {
00238     common_stub::uint_value = 11;
00239     CHECK(nsdl->create_bootstrap_resource(NULL, "") == true);
00240 
00241     common_stub::uint_value = 0;
00242     CHECK(nsdl->create_bootstrap_resource(NULL, "") == false);
00243 }
00244 
00245 void Test_M2MNsdlInterface::test_send_register_message()
00246 {
00247     common_stub::uint_value = 12;
00248     common_stub::int_value = 0;
00249     CHECK(nsdl->send_register_message(NULL,4,100,SN_NSDL_ADDRESS_TYPE_IPV6) == true);
00250 
00251     common_stub::uint_value = 0;
00252     CHECK(nsdl->send_register_message(NULL,4,100,SN_NSDL_ADDRESS_TYPE_IPV6) == false);
00253 }
00254 
00255 void Test_M2MNsdlInterface::test_send_update_registration()
00256 {
00257     common_stub::uint_value = 23;
00258     nsdl->_nsdl_handle = (nsdl_s*)malloc(sizeof(1));
00259     CHECK(nsdl->send_update_registration(120) == true);
00260 
00261     // Update lifetime value
00262     common_stub::uint_value = 1;
00263     CHECK(nsdl->send_update_registration(100) == true);
00264 
00265     // Lifetime value is 0, don't change the existing lifetime value
00266     common_stub::uint_value = 1;
00267     CHECK(nsdl->send_update_registration(0) == true);
00268 
00269     free(nsdl->_nsdl_handle);
00270 }
00271 
00272 void Test_M2MNsdlInterface::test_send_unregister_message()
00273 {
00274     common_stub::uint_value = 22;
00275     CHECK(nsdl->send_unregister_message() == true);
00276 
00277     // Unreg already in progress
00278     common_stub::uint_value = 0;
00279     CHECK(nsdl->send_unregister_message() == true);
00280 }
00281 
00282 void Test_M2MNsdlInterface::test_memory_alloc()
00283 {
00284     CHECK(nsdl->memory_alloc(0) == 0);
00285     uint8_t *ptr = 0;
00286     ptr = (uint8_t*)nsdl->memory_alloc(sizeof(uint8_t));
00287     CHECK(ptr != NULL);
00288     nsdl->memory_free(ptr);
00289 }
00290 
00291 void Test_M2MNsdlInterface::test_memory_free()
00292 {
00293     uint8_t *ptr = (uint8_t*)nsdl->memory_alloc(sizeof(uint8_t));
00294     nsdl->memory_free((void*)ptr);
00295     //memory leak test will fail, if there is a leak, so no need for CHECK
00296 }
00297 
00298 void Test_M2MNsdlInterface::test_send_to_server_callback()
00299 {
00300   uint8_t *data_ptr = (uint8_t*)malloc(sizeof(uint8_t));
00301   uint16_t data_len = sizeof(uint8_t);
00302   sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
00303 
00304   nsdl->send_to_server_callback(NULL, SN_NSDL_PROTOCOL_COAP, data_ptr,data_len,address);
00305   CHECK(observer->message_ready == true);
00306 
00307   free(data_ptr);
00308   free(address);
00309 }
00310 
00311 void Test_M2MNsdlInterface::test_received_from_server_callback()
00312 {
00313     nsdl_s* handle = (nsdl_s*)malloc(sizeof(nsdl_s));
00314     memset(handle,0,sizeof(nsdl_s));
00315 
00316     sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
00317     memset(coap_header, 0, sizeof(sn_coap_hdr_s));
00318     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CREATED;
00319 
00320 
00321     coap_header->options_list_ptr = (sn_coap_options_list_s *)malloc(sizeof(sn_coap_options_list_s));
00322     memset(coap_header->options_list_ptr, 0, sizeof(sn_coap_options_list_s));
00323 
00324     coap_header->options_list_ptr->max_age = 2;
00325 
00326     coap_header->options_list_ptr->location_path_len = 2;
00327     coap_header->options_list_ptr->location_path_ptr = (uint8_t *)malloc(sizeof(coap_header->options_list_ptr->location_path_len));
00328     memset(coap_header->options_list_ptr->location_path_ptr, 0, sizeof(coap_header->options_list_ptr->location_path_len));
00329 
00330     observer->data_processed = false;
00331     observer->registered = false;
00332     nsdl->received_from_server_callback(handle,coap_header,NULL);
00333     CHECK(observer->data_processed == true);
00334     CHECK(observer->registered == true);
00335 
00336     free(nsdl->_endpoint->lifetime_ptr);
00337     nsdl->_endpoint->lifetime_ptr = NULL;
00338 
00339     free(nsdl->_endpoint->location_ptr);
00340     nsdl->_endpoint->location_ptr = NULL;
00341 
00342     uint8_t life1[] = {"120"};
00343     nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(life1));
00344     memcpy(nsdl->_endpoint->lifetime_ptr,life1,sizeof(life1));
00345     nsdl->_endpoint->lifetime_len = (uint8_t)sizeof(life1);
00346 
00347     observer->data_processed = false;
00348     observer->registered = false;
00349     nsdl->received_from_server_callback(handle,coap_header,NULL);
00350     CHECK(observer->data_processed == true);
00351     CHECK(observer->registered == true);
00352 
00353     free(coap_header->options_list_ptr->location_path_ptr);
00354     coap_header->options_list_ptr->location_path_ptr = NULL;
00355 
00356     free(coap_header->options_list_ptr);
00357     coap_header->options_list_ptr = NULL;
00358 
00359     free(nsdl->_endpoint->lifetime_ptr);
00360     nsdl->_endpoint->lifetime_ptr = NULL;
00361 
00362     uint8_t life[] = {"120"};
00363     nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(life));
00364     memcpy(nsdl->_endpoint->lifetime_ptr,life,sizeof(life));
00365     nsdl->_endpoint->lifetime_len = (uint8_t)sizeof(life);
00366 
00367     observer->data_processed = false;
00368     observer->registered = false;
00369 
00370     nsdl->received_from_server_callback(handle,coap_header,NULL);
00371     CHECK(observer->data_processed == true);
00372     CHECK(observer->registered == true);
00373     free(nsdl->_endpoint->lifetime_ptr);
00374     nsdl->_endpoint->lifetime_ptr = NULL;
00375 
00376     uint8_t big_life[] = {"4000"};
00377     nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(big_life));
00378     memcpy(nsdl->_endpoint->lifetime_ptr,big_life,sizeof(big_life));
00379     nsdl->_endpoint->lifetime_len = (uint8_t)sizeof(big_life);
00380     observer->data_processed = false;
00381     observer->registered = false;
00382     nsdl->received_from_server_callback(handle,coap_header,NULL);
00383     CHECK(observer->data_processed == true);
00384     CHECK(observer->registered == true);
00385 
00386     free(nsdl->_endpoint->lifetime_ptr);
00387     nsdl->_endpoint->lifetime_ptr = NULL;
00388 
00389     observer->data_processed = false;
00390     observer->registered = false;
00391 
00392     uint8_t less_life[] = {"30"};
00393     nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(less_life));
00394     memcpy(nsdl->_endpoint->lifetime_ptr,less_life,sizeof(less_life));
00395     nsdl->_endpoint->lifetime_len = (uint8_t)sizeof(less_life);
00396 
00397     nsdl->received_from_server_callback(handle,coap_header,NULL);
00398     CHECK(observer->data_processed == true);
00399     CHECK(observer->registered == true);
00400 
00401     observer->data_processed = false;
00402     observer->registered = false;
00403     observer->unregistered = false;
00404     observer->register_error = false;
00405 
00406     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
00407     nsdl->received_from_server_callback(handle,coap_header,NULL);
00408     CHECK(observer->data_processed == true);
00409     CHECK(observer->register_error == true);
00410 
00411     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_OPTION;
00412     nsdl->received_from_server_callback(handle,coap_header,NULL);
00413     CHECK(observer->data_processed == true);
00414     CHECK(observer->register_error == true);
00415 
00416     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_INCOMPLETE;
00417     nsdl->received_from_server_callback(handle,coap_header,NULL);
00418     CHECK(observer->data_processed == true);
00419     CHECK(observer->register_error == true);
00420 
00421     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_PRECONDITION_FAILED;
00422     nsdl->received_from_server_callback(handle,coap_header,NULL);
00423     CHECK(observer->data_processed == true);
00424     CHECK(observer->register_error == true);
00425 
00426     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_REQUEST_ENTITY_TOO_LARGE;
00427     nsdl->received_from_server_callback(handle,coap_header,NULL);
00428     CHECK(observer->data_processed == true);
00429     CHECK(observer->register_error == true);
00430 
00431     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_UNSUPPORTED_CONTENT_FORMAT;
00432     nsdl->received_from_server_callback(handle,coap_header,NULL);
00433     CHECK(observer->data_processed == true);
00434     CHECK(observer->register_error == true);
00435 
00436     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_UNAUTHORIZED;
00437     nsdl->received_from_server_callback(handle,coap_header,NULL);
00438     CHECK(observer->data_processed == true);
00439     CHECK(observer->register_error == true);
00440 
00441     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_FORBIDDEN;
00442     nsdl->received_from_server_callback(handle,coap_header,NULL);
00443     CHECK(observer->data_processed == true);
00444     CHECK(observer->register_error == true);
00445 
00446     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_NOT_FOUND;
00447     nsdl->received_from_server_callback(handle,coap_header,NULL);
00448     CHECK(observer->data_processed == true);
00449     CHECK(observer->register_error == true);
00450 
00451     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
00452     nsdl->received_from_server_callback(handle,coap_header,NULL);
00453     CHECK(observer->data_processed == true);
00454     CHECK(observer->register_error == true);
00455 
00456     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_GATEWAY;
00457     coap_header->coap_status = COAP_STATUS_BUILDER_MESSAGE_SENDING_FAILED;
00458     nsdl->received_from_server_callback(handle,coap_header,NULL);
00459     CHECK(observer->data_processed == true);
00460     CHECK(observer->register_error == true);
00461 
00462 
00463     coap_header->msg_id = 8;
00464     handle->unregister_msg_id = 8;
00465 
00466     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_DELETED;
00467     observer->register_error = false;
00468     nsdl->received_from_server_callback(handle,coap_header,NULL);
00469     CHECK(observer->unregistered == true);
00470 
00471     observer->register_error = false;
00472     handle->unregister_msg_id = 8;
00473     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CREATED;
00474 
00475     nsdl->received_from_server_callback(handle,coap_header,NULL);
00476     CHECK(observer->register_error == true);
00477 
00478     observer->register_error = false;
00479     handle->unregister_msg_id = 8;
00480     coap_header->coap_status = COAP_STATUS_BUILDER_MESSAGE_SENDING_FAILED;
00481     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
00482     nsdl->received_from_server_callback(handle,coap_header,NULL);
00483     CHECK(observer->register_error == true);
00484 
00485     observer->register_error = false;
00486     handle->unregister_msg_id = 8;
00487     coap_header->coap_status = COAP_STATUS_PARSER_ERROR_IN_HEADER;
00488     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_METHOD_NOT_ALLOWED;
00489     nsdl->received_from_server_callback(handle,coap_header,NULL);
00490     CHECK(observer->register_error == true);
00491 
00492     observer->register_error = false;
00493     handle->unregister_msg_id = 8;
00494     coap_header->coap_status = COAP_STATUS_PARSER_ERROR_IN_HEADER;
00495     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_GATEWAY_TIMEOUT;
00496     nsdl->received_from_server_callback(handle,coap_header,NULL);
00497     CHECK(observer->register_error == true);
00498 
00499     // Receive initial bs message with error
00500     handle->unregister_msg_id = 0;
00501     observer->boot_error = false;
00502     nsdl->_bootstrap_id = 8;
00503     handle->bootstrap_msg_id = 8;
00504     coap_header->coap_status = COAP_STATUS_BUILDER_MESSAGE_SENDING_FAILED;
00505     nsdl->received_from_server_callback(handle,coap_header,NULL);
00506     CHECK(observer->boot_error == true);
00507 
00508     //_update_id == msg_id
00509     handle->update_register_msg_id = 10;
00510     coap_header->msg_id = 10;
00511     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CHANGED;
00512     nsdl->received_from_server_callback(handle,coap_header,NULL);
00513     CHECK(observer->register_updated == true);
00514 
00515     coap_header->msg_id = 10;
00516     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_FORBIDDEN;
00517     coap_header->coap_status = COAP_STATUS_OK;
00518     nsdl->received_from_server_callback(handle,coap_header,NULL);
00519     CHECK(observer->register_error == true);
00520 
00521     coap_header->msg_id = 11;
00522     CHECK( 0== nsdl->received_from_server_callback(handle,coap_header,NULL) );
00523 
00524     handle->update_register_msg_id = 0;
00525     handle->register_msg_id = 0;
00526     handle->unregister_msg_id = 0;
00527     coap_header->msg_id = 10;
00528     coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
00529 
00530     uint8_t object[] = {"name"};
00531 
00532     coap_header->uri_path_ptr = object;
00533     coap_header->uri_path_len = sizeof(object);
00534 
00535     CHECK(0== nsdl->received_from_server_callback(handle,coap_header,NULL));
00536 
00537     //Test methods that are not allowed
00538     coap_header->msg_code = COAP_MSG_CODE_REQUEST_GET;
00539     nsdl->received_from_server_callback(handle,coap_header,NULL);
00540 
00541     coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT;
00542     nsdl->received_from_server_callback(handle,coap_header,NULL);
00543 
00544     coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE;
00545     nsdl->received_from_server_callback(handle,coap_header,NULL);
00546 
00547     //Continue testing with post method
00548     coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
00549 
00550     uint8_t object_instance[] = {"name/0"};
00551 
00552     coap_header->uri_path_ptr = object_instance;
00553     coap_header->uri_path_len = sizeof(object_instance);
00554 
00555     coap_header->payload_ptr = (uint8_t*)malloc(1);
00556     m2mobjectinstance_stub::bool_value = true;
00557     CHECK(0== nsdl->received_from_server_callback(handle,coap_header,NULL));
00558 
00559     M2MObject *obj = new M2MObject("name", "name");
00560 
00561     m2mbase_stub::string_value = "name";
00562     m2mbase_stub::nsdl_resource =
00563             (sn_nsdl_dynamic_resource_parameters_s*) malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s));
00564     m2mbase_stub::nsdl_resource->static_resource_parameters =
00565             (sn_nsdl_static_resource_parameters_s*) malloc(sizeof(sn_nsdl_static_resource_parameters_s));
00566     m2mbase_stub::nsdl_resource->static_resource_parameters->path = (uint8_t*)malloc(5);
00567     m2mbase_stub::nsdl_resource->static_resource_parameters->path[0] = 'n';
00568     m2mbase_stub::nsdl_resource->static_resource_parameters->path[1] = 'a';
00569     m2mbase_stub::nsdl_resource->static_resource_parameters->path[2] = 'm';
00570     m2mbase_stub::nsdl_resource->static_resource_parameters->path[3] = 'e';
00571     m2mbase_stub::nsdl_resource->static_resource_parameters->path[4] = '\0';
00572     m2mbase_stub::nsdl_resource->static_resource_parameters->pathlen = 5;
00573 
00574     nsdl->_object_list.push_back(obj);
00575 
00576     m2mobject_stub::inst = new M2MObjectInstance(*obj, "name", "", "");
00577 
00578     m2mobject_stub::header = (sn_coap_hdr_s*) malloc(sizeof(sn_coap_hdr_s));
00579     memset(m2mobject_stub::header,0,sizeof(sn_coap_hdr_s));
00580 
00581     m2mobjectinstance_stub::header =  (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
00582     memset(m2mobjectinstance_stub::header, 0, sizeof(sn_coap_hdr_s));
00583     m2mobjectinstance_stub::header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
00584     common_stub::coap_header = NULL;
00585     m2mobjectinstance_stub::base_type = M2MBase::ObjectInstance;
00586 
00587     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL));
00588     m2mobjectinstance_stub::header = NULL;
00589 
00590     m2mobjectinstance_stub::header =  (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
00591     memset(m2mobjectinstance_stub::header, 0, sizeof(sn_coap_hdr_s));
00592 
00593     m2mobjectinstance_stub::header->msg_code = COAP_MSG_CODE_RESPONSE_CREATED;
00594     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL));
00595     m2mobjectinstance_stub::header = NULL;
00596 
00597     free(coap_header->payload_ptr);
00598     coap_header->payload_ptr = NULL;
00599 
00600     CHECK(0== nsdl->received_from_server_callback(handle,coap_header,NULL));
00601 
00602     delete m2mobject_stub::inst;
00603     nsdl->_object_list.clear();
00604     delete obj;
00605 
00606     free(coap_header->payload_ptr);
00607     free(m2mobject_stub::header);
00608     m2mobject_stub::header = NULL;
00609 
00610     uint8_t object_instance1[] = {"name/65536"};
00611 
00612     coap_header->uri_path_ptr = object_instance1;
00613     coap_header->uri_path_len = sizeof(object_instance1);
00614 
00615     obj = new M2MObject("name", "name");
00616 
00617     nsdl->_object_list.push_back(obj);
00618 
00619     m2mobject_stub::inst = new M2MObjectInstance(*obj, "name", "", "");
00620 
00621     m2mobject_stub::header = (sn_coap_hdr_s*) malloc(sizeof(sn_coap_hdr_s));
00622     memset(m2mobject_stub::header,0,sizeof(sn_coap_hdr_s));
00623 
00624     CHECK(0== nsdl->received_from_server_callback(handle,coap_header,NULL));
00625 
00626     delete m2mobject_stub::inst;
00627     nsdl->_object_list.clear();
00628     delete obj;
00629 
00630     free(m2mobject_stub::header);
00631 
00632     uint8_t resource[] = {"name/0/resource"};
00633 
00634     coap_header->uri_path_ptr = resource;
00635     coap_header->uri_path_len = sizeof(resource);
00636 
00637     CHECK(0== nsdl->received_from_server_callback(handle,coap_header,NULL));
00638 
00639     // Test EMPTY ACK
00640     coap_header->msg_code = COAP_MSG_CODE_EMPTY;
00641     obj = new M2MObject("0", "0");
00642     m2mbase_stub::string_value = "0";
00643     nsdl->_object_list.push_back(obj);
00644     m2mobject_stub::inst = new M2MObjectInstance(*obj, "name", "", "");
00645 
00646     uint8_t *token = (uint8_t*) malloc(4);
00647     token[0] = 't';
00648     token[1] = 'o';
00649     token[2] = 'k';
00650     token[3] = 'e';
00651     coap_header->token_ptr = token;
00652     coap_header->token_len = 4;
00653 
00654     M2MResource res2(*m2mobject_stub::inst, "test","test",M2MResourceInstance::STRING,false, "test");
00655     m2mbase_stub::object_token = token;
00656     m2mbase_stub::object_token_len = 4;
00657     m2mobject_stub::base_type = M2MBase::Resource;
00658     res2.set_observation_token(token, 4);
00659 
00660     m2mobjectinstance_stub::resource_list.push_back(&res2);
00661     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL));
00662 
00663     // Test RESET message
00664     coap_header->msg_type = COAP_MSG_TYPE_RESET;
00665     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL));
00666     m2mobject_stub::base_type = M2MBase::Object;
00667     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL));
00668     m2mobject_stub::base_type = M2MBase::ObjectInstance;
00669     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL));
00670     m2mobject_stub::base_type = M2MBase::ResourceInstance;
00671     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,NULL));
00672     free(token);
00673     delete m2mobject_stub::inst;
00674     delete obj;
00675     nsdl->_object_list.clear();
00676 
00677 
00678     // Bootstrap cases start from here
00679     // handle_bootstrap_put_message() invalid object name
00680     common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
00681     sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
00682     memset(address, 0, sizeof(sn_nsdl_addr_s));
00683     address->addr_len = 1;
00684     address->addr_ptr = (uint8_t *)malloc(1);
00685     address->addr_ptr[0] = 1;
00686     address->port = 5683;
00687     handle->oma_bs_address_len = 1;
00688     handle->oma_bs_port = 5683;
00689     handle->oma_bs_address_ptr = (uint8_t *)malloc(1);
00690     handle->oma_bs_address_ptr[0] = 1;
00691     coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT;
00692     observer->boot_error = false;
00693     CHECK(0== nsdl->received_from_server_callback(handle,coap_header,address));
00694     CHECK(observer->boot_error == true);
00695 
00696     // handle_bootstrap_put_message() invalid content type
00697     obj = new M2MObject("0", "0");
00698     m2mbase_stub::string_value = "0";
00699     nsdl->_object_list.push_back(obj);
00700     m2mobject_stub::inst = new M2MObjectInstance(*obj, "name", "", "");
00701     uint8_t security[] = {"0"};
00702     coap_header->uri_path_ptr = security;
00703     coap_header->uri_path_len = sizeof(security);
00704     M2MResource res(*m2mobject_stub::inst,"test","test",M2MResourceInstance::STRING,false,"test");
00705     m2mobjectinstance_stub::resource_list.push_back(&res);
00706     observer->boot_error = false;
00707     m2msecurity_stub::resource = new M2MResource(*m2mobject_stub::inst,"1","type",M2MResourceInstance::STRING,false,"1");
00708     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00709     CHECK(observer->boot_error == true);
00710 
00711     // handle_bootstrap_put_message() success
00712     coap_header->token_ptr = String::convert_integer_to_array(1,coap_header->token_len);
00713     observer->boot_error = false;
00714     m2mtlvdeserializer_stub::is_object_bool_value = true;
00715     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00716     CHECK(observer->boot_error == true);
00717     coap_header->content_format = sn_coap_content_format_e(99);
00718     observer->boot_error = false;
00719     observer->boot_done = false;
00720     m2mtlvdeserializer_stub::is_object_bool_value = true;
00721     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00722     CHECK(observer->boot_error == false);
00723 
00724     // handle_bootstrap_put_message() TLV parsing fails
00725     observer->boot_error = false;
00726     observer->boot_done = false;
00727     m2mtlvdeserializer_stub::is_object_bool_value = false;
00728     m2mtlvdeserializer_stub::bool_value = true;
00729     m2mtlvdeserializer_stub::error = M2MTLVDeserializer::NotAllowed;
00730     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00731     CHECK(observer->boot_error == true);
00732     delete m2mobject_stub::inst;
00733     nsdl->_object_list.clear();
00734     delete obj;
00735 
00736     // handle_bootstrap_put_message() TLV object instance
00737     obj = new M2MObject("1", "1");
00738     m2mbase_stub::string_value = "1";
00739     nsdl->_object_list.push_back(obj);
00740     m2mobject_stub::inst = new M2MObjectInstance(*obj, "name","", "");
00741     uint8_t server[] = {"1"};
00742     coap_header->uri_path_ptr = server;
00743     coap_header->uri_path_len = 1;
00744 
00745     observer->boot_error = false;
00746     observer->boot_done = false;
00747     m2mtlvdeserializer_stub::is_object_bool_value = false;
00748     m2mtlvdeserializer_stub::bool_value = true;
00749     m2mtlvdeserializer_stub::error = M2MTLVDeserializer::None;
00750     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00751     CHECK(observer->boot_error == false);
00752 
00753     // handle_bootstrap_put_message() TLV server object
00754     observer->boot_error = false;
00755     observer->boot_done = false;
00756     m2mtlvdeserializer_stub::is_object_bool_value = true;
00757     m2mtlvdeserializer_stub::bool_value = false;
00758     m2mtlvdeserializer_stub::error = M2MTLVDeserializer::None;
00759     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00760     CHECK(observer->boot_error == false);
00761 
00762     // handle_bootstrap_put_message() TLV not resource
00763     observer->boot_error = false;
00764     observer->boot_done = false;
00765     m2mtlvdeserializer_stub::is_object_bool_value = false;
00766     m2mtlvdeserializer_stub::bool_value = false;
00767     m2mtlvdeserializer_stub::error = M2MTLVDeserializer::None;
00768     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00769     CHECK(observer->boot_error == true);
00770     CHECK(nsdl->_security == NULL);
00771 
00772     // handle_bootstrap_delete() object name not match
00773     observer->boot_error = false;
00774     nsdl->_bootstrap_id = 8;
00775     handle->bootstrap_msg_id = 8;
00776     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CHANGED;
00777     coap_header->msg_id = 8;
00778     nsdl->received_from_server_callback(handle,coap_header,NULL);
00779     coap_header->msg_id = 18;
00780     nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
00781     observer->boot_done = false;
00782     coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE;
00783     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00784     CHECK(observer->boot_error == true);
00785 
00786     free(common_stub::coap_header);
00787     common_stub::coap_header = NULL;
00788 
00789     // handle_bootstrap_delete() _identity_accepted false
00790     observer->boot_error = false;
00791     observer->boot_done = false;
00792     coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE;
00793     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00794     CHECK(observer->boot_error == true);
00795     CHECK(nsdl->_security == NULL);
00796 
00797     free(common_stub::coap_header);
00798     common_stub::coap_header = NULL;
00799 
00800     // handle_bootstrap_delete() object name not match
00801     observer->boot_error = false;
00802     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CHANGED;
00803     coap_header->msg_id = 8;
00804     nsdl->received_from_server_callback(handle,coap_header,NULL);
00805     coap_header->msg_id = 18;
00806     uint8_t object_name[] = {"0/0"};
00807     coap_header->uri_path_ptr = object_name;
00808     coap_header->uri_path_len = 3;
00809     observer->boot_done = false;
00810     coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE;
00811     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00812     CHECK(observer->boot_error == true);
00813     CHECK(nsdl->_security == NULL);
00814 
00815     free(common_stub::coap_header);
00816     common_stub::coap_header = NULL;
00817 
00818     // handle_bootstrap_delete() object name not match
00819     observer->boot_error = false;
00820     coap_header->msg_code = COAP_MSG_CODE_RESPONSE_CHANGED;
00821     coap_header->msg_id = 8;
00822     nsdl->received_from_server_callback(handle,coap_header,NULL);
00823     coap_header->msg_id = 18;
00824     uint8_t invalid[] = {"0/0/1"};
00825     coap_header->uri_path_ptr = invalid;
00826     coap_header->uri_path_len = 5;
00827     observer->boot_done = false;
00828     coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE;
00829     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00830     CHECK(observer->boot_error == true);
00831     CHECK(nsdl->_security == NULL);
00832 
00833     //handle_bootstrap_finished() path does not match
00834     coap_header->uri_path_ptr = server;
00835     coap_header->uri_path_len = 1;
00836     nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
00837     observer->boot_error = false;
00838     observer->boot_done = false;
00839     coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
00840     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00841     CHECK(observer->boot_error == true);
00842     CHECK(nsdl->_security == NULL);
00843 
00844     //handle_bootstrap_finished() send coap response
00845     nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
00846     common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
00847     m2msecurity_stub::string_value = new String("coaps://");
00848     observer->boot_error = false;
00849     observer->boot_done = false;
00850     coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
00851     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00852     CHECK(observer->boot_error == true);
00853     CHECK(nsdl->_security == NULL);
00854 
00855     //handle_bootstrap_finished() success no security
00856     nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
00857     m2msecurity_stub::sec_mode = M2MSecurity::NoSecurity;
00858     m2msecurity_stub::int_value = true;
00859     m2msecurity_stub::bool_value = false;
00860     observer->boot_error = false;
00861     observer->boot_wait = false;
00862     observer->boot_done = false;
00863     coap_header->uri_path_ptr = (uint8_t*)malloc(2);
00864     coap_header->uri_path_len = 2;
00865     coap_header->uri_path_ptr[0] = 'b';
00866     coap_header->uri_path_ptr[1] = 's';
00867     coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
00868     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00869     CHECK(observer->boot_error == false);
00870     CHECK(observer->boot_wait == true);
00871     CHECK(observer->boot_done == false);
00872 
00873     //handle_bootstrap_finished() success certificate
00874     nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
00875     m2msecurity_stub::sec_mode = M2MSecurity::Certificate;
00876     m2mresourceinstance_stub::int_value = 10;
00877     m2msecurity_stub::int_value = true;
00878     m2msecurity_stub::bool_value = false;
00879     observer->boot_error = false;
00880     observer->boot_wait = false;
00881     observer->boot_done = false;
00882     coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
00883 
00884     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00885     CHECK(observer->boot_error == false);
00886     CHECK(observer->boot_wait == true);
00887     CHECK(observer->boot_done == false);
00888 
00889     //handle_bootstrap_finished() fail, Psk not supported
00890     nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
00891     m2msecurity_stub::sec_mode = M2MSecurity::Psk;
00892     m2msecurity_stub::int_value = true;
00893     m2msecurity_stub::bool_value = false;
00894     observer->boot_error = false;
00895     observer->boot_done = false;
00896     coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
00897     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00898     CHECK(observer->boot_error == true);
00899     CHECK(observer->boot_done == false);
00900 
00901     //handle_bootstrap_finished() fail, Bootstrap server
00902     nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
00903     m2msecurity_stub::sec_mode = M2MSecurity::Certificate;
00904     m2msecurity_stub::int_value = true;
00905     m2msecurity_stub::bool_value = true;
00906     observer->boot_error = false;
00907     observer->boot_done = false;
00908     coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
00909     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00910     CHECK(observer->boot_error == true);
00911     CHECK(observer->boot_done == false);
00912 
00913     //handle_bootstrap_finished() fail, key size 0
00914     nsdl->_security = new M2MSecurity(M2MSecurity::M2MServer);
00915     m2msecurity_stub::sec_mode = M2MSecurity::Certificate;
00916     m2msecurity_stub::int_value = false;
00917     m2msecurity_stub::bool_value = false;
00918     m2mresourceinstance_stub::int_value = 0;
00919     observer->boot_error = false;
00920     observer->boot_done = false;
00921     coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
00922     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00923     CHECK(observer->boot_error == true);
00924     CHECK(observer->boot_done == false);
00925 
00926     //handle_bootstrap_finished() fail, _security null
00927     m2msecurity_stub::sec_mode = M2MSecurity::Certificate;
00928     m2msecurity_stub::int_value = false;
00929     m2msecurity_stub::bool_value = false;
00930     m2mresourceinstance_stub::int_value = 0;
00931     observer->boot_error = false;
00932     observer->boot_done = false;
00933     coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
00934     CHECK(0 == nsdl->received_from_server_callback(handle,coap_header,address));
00935     CHECK(observer->boot_error == true);
00936     CHECK(observer->boot_done == false);
00937 
00938     delete m2mobject_stub::inst;
00939     //delete m2mbase_stub::string_value;
00940     //m2mbase_stub::string_value = NULL;
00941     nsdl->_object_list.clear();
00942     m2mobjectinstance_stub::resource_list.clear();
00943     delete obj;
00944     delete m2msecurity_stub::string_value;
00945     delete m2msecurity_stub::resource;
00946 
00947     free(m2mbase_stub::nsdl_resource->static_resource_parameters->path);
00948     free(m2mbase_stub::nsdl_resource->static_resource_parameters);
00949     free(m2mbase_stub::nsdl_resource);
00950 
00951     free(common_stub::coap_header);
00952     free(address->addr_ptr);
00953     free(address);
00954     free(coap_header->token_ptr);
00955     free(coap_header->uri_path_ptr);
00956     free(coap_header);
00957     free(handle->oma_bs_address_ptr);
00958     free(handle);
00959 }
00960 
00961 void Test_M2MNsdlInterface::test_resource_callback()
00962 {
00963     uint8_t value[] = {"name"};
00964     sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
00965     memset(coap_header,0,sizeof(sn_coap_hdr_s));
00966     sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
00967     memset(address,0,sizeof(sn_nsdl_addr_s));
00968 
00969     common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
00970     memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
00971 
00972     common_stub::coap_header->payload_ptr =(uint8_t*)malloc(1);
00973     common_stub::coap_header->payload_len = 1;
00974 
00975     coap_header->uri_path_ptr = value;
00976     coap_header->uri_path_len = sizeof(value);
00977 
00978     common_stub::int_value = 0;
00979 
00980     common_stub::coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
00981 
00982     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
00983 
00984     common_stub::int_value = 0;
00985     m2mbase_stub::string_value = "name";
00986     M2MObject *object = new M2MObject("name", "name");
00987     m2mbase_stub::int_value = 0;
00988     m2mobject_stub::int_value = 1;
00989     m2mbase_stub::nsdl_resource =
00990             (sn_nsdl_dynamic_resource_parameters_s*) malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s));
00991     m2mbase_stub::nsdl_resource->static_resource_parameters =
00992             (sn_nsdl_static_resource_parameters_s*) malloc(sizeof(sn_nsdl_static_resource_parameters_s));
00993     m2mbase_stub::nsdl_resource->static_resource_parameters->path = (uint8_t*)malloc(5);
00994     m2mbase_stub::nsdl_resource->static_resource_parameters->path[0] = 'n';
00995     m2mbase_stub::nsdl_resource->static_resource_parameters->path[1] = 'a';
00996     m2mbase_stub::nsdl_resource->static_resource_parameters->path[2] = 'm';
00997     m2mbase_stub::nsdl_resource->static_resource_parameters->path[3] = 'e';
00998     m2mbase_stub::nsdl_resource->static_resource_parameters->path[4] = '\0';
00999     m2mbase_stub::nsdl_resource->static_resource_parameters->pathlen = 5;
01000 
01001     nsdl->_object_list.push_back(object);
01002 
01003     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_COAP) ==0);
01004 
01005     coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT;
01006     m2mobject_stub::bool_value = true;
01007     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_COAP) ==0);
01008 
01009     coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
01010 
01011     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_COAP) ==0);
01012     m2mobject_stub::base_type = M2MBase::ResourceInstance;
01013     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_COAP) ==0);
01014 
01015     delete object;
01016     free(m2mbase_stub::nsdl_resource->static_resource_parameters->path);
01017     free(m2mbase_stub::nsdl_resource->static_resource_parameters);
01018     free(m2mbase_stub::nsdl_resource);
01019 
01020     free(common_stub::coap_header);
01021     free(address);
01022     free(coap_header);
01023 }
01024 
01025 
01026 void Test_M2MNsdlInterface::test_resource_callback_get()
01027 {
01028 }
01029 
01030 void Test_M2MNsdlInterface::test_resource_callback_put()
01031 {
01032     uint8_t value[] = {"name/0/resource"};
01033     sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
01034     memset(coap_header,0,sizeof(sn_coap_hdr_s));
01035     sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
01036     memset(address,0,sizeof(sn_nsdl_addr_s));
01037 
01038     coap_header->uri_path_ptr = value;
01039     coap_header->uri_path_len = sizeof(value);
01040 
01041     coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT;
01042 
01043     common_stub::int_value = 0;
01044     m2mbase_stub::string_value = "name";
01045 
01046     M2MObject *object = new M2MObject("name", "name");
01047     M2MObjectInstance* instance = new M2MObjectInstance(*object,"name","", "");
01048 
01049     M2MResource* create_resource = new M2MResource(*instance,
01050                                                    "res",
01051                                                    "res",
01052                                                    M2MResourceInstance::INTEGER,
01053                                                    false,
01054                                                    "res");
01055     m2mobject_stub::int_value = 2;
01056     m2mobject_stub::instance_list.push_back(instance);
01057 
01058     m2mobjectinstance_stub::resource_list.push_back(create_resource);
01059     m2mobjectinstance_stub::int_value = 1;
01060 
01061     nsdl->_object_list.push_back(object);
01062 
01063     m2mbase_stub::operation = M2MBase::PUT_ALLOWED;
01064 
01065     coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
01066 
01067     uint8_t query[] = {"pmax=200&pmin=120"};
01068     coap_header->options_list_ptr->uri_query_ptr = (uint8_t*)malloc(sizeof(query));
01069     coap_header->options_list_ptr->uri_query_len = sizeof(query);
01070 
01071     m2mbase_stub::bool_value = true;
01072 
01073     common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
01074     memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
01075     common_stub::coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
01076     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
01077 
01078     m2mobject_stub::base_type = M2MBase::Resource;
01079     m2mbase_stub::base_type = M2MBase::Resource;
01080     m2mobject_stub::bool_value = true;
01081     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
01082 
01083     m2mobject_stub::base_type = M2MBase::ObjectInstance;
01084     m2mbase_stub::base_type = M2MBase::ObjectInstance;
01085     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
01086 
01087     m2mbase_stub::base_type = M2MBase::Object;
01088     m2mbase_stub::bool_value = false;
01089 
01090     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
01091 
01092     delete object;
01093     m2mobject_stub::instance_list.clear();
01094     delete instance;
01095 //    m2mobjectinstance_stub::resource_list.clear();
01096     delete create_resource;
01097 
01098     free(coap_header->options_list_ptr->uri_query_ptr);
01099     free(coap_header->options_list_ptr);
01100     if(common_stub::coap_header){
01101         if( common_stub::coap_header->options_list_ptr){
01102             free(common_stub::coap_header->options_list_ptr);
01103             common_stub::coap_header->options_list_ptr = NULL;
01104         }
01105         free(common_stub::coap_header);
01106         common_stub::coap_header = NULL;
01107     }
01108     free(coap_header);
01109     free(address);
01110 
01111     m2mbase_stub::clear();
01112     common_stub::clear();
01113     m2mobject_stub::clear();
01114     m2mobjectinstance_stub::clear();
01115 }
01116 
01117 void Test_M2MNsdlInterface::test_resource_callback_post()
01118 {
01119     uint8_t value[] = {"name/0/name"};
01120     sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
01121     memset(coap_header,0,sizeof(sn_coap_hdr_s));
01122     sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
01123     memset(address,0,sizeof(sn_nsdl_addr_s));
01124 
01125     coap_header->uri_path_ptr = value;
01126     coap_header->uri_path_len = sizeof(value);
01127 
01128     coap_header->msg_code = COAP_MSG_CODE_REQUEST_POST;
01129 
01130     common_stub::int_value = 0;
01131     m2mbase_stub::string_value = "name";
01132     m2mbase_stub::bool_value = false;
01133     M2MObject *object = new M2MObject("name", "name");
01134     M2MObjectInstance* instance = new M2MObjectInstance(*object,"name","","");
01135     M2MResource* create_resource = new M2MResource(*instance,
01136                                                    "name",
01137                                                    "name",
01138                                                    M2MResourceInstance::INTEGER,
01139                                                    false,
01140                                                    "name");
01141     m2mobject_stub::int_value = 2;
01142     m2mobject_stub::instance_list.push_back(instance);
01143 
01144     m2mobjectinstance_stub::resource_list.push_back(create_resource);
01145     m2mobjectinstance_stub::int_value = 1;
01146 
01147     nsdl->_object_list.push_back(object);
01148 
01149     m2mbase_stub::operation = M2MBase::POST_ALLOWED;
01150 
01151     coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
01152 
01153     uint8_t query[] = {"pmax=200&pmin=120"};
01154     coap_header->options_list_ptr->uri_query_ptr = (uint8_t*)malloc(sizeof(query));
01155     coap_header->options_list_ptr->uri_query_len = sizeof(query);
01156 
01157     m2mbase_stub::bool_value = true;
01158 
01159     m2mbase_stub::nsdl_resource =
01160             (sn_nsdl_dynamic_resource_parameters_s*) malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s));
01161     m2mbase_stub::nsdl_resource->static_resource_parameters =
01162             (sn_nsdl_static_resource_parameters_s*) malloc(sizeof(sn_nsdl_static_resource_parameters_s));
01163     m2mbase_stub::nsdl_resource->static_resource_parameters->path = (uint8_t*)malloc(5);
01164     m2mbase_stub::nsdl_resource->static_resource_parameters->path[0] = 'n';
01165     m2mbase_stub::nsdl_resource->static_resource_parameters->path[1] = 'a';
01166     m2mbase_stub::nsdl_resource->static_resource_parameters->path[2] = 'm';
01167     m2mbase_stub::nsdl_resource->static_resource_parameters->path[3] = 'e';
01168     m2mbase_stub::nsdl_resource->static_resource_parameters->path[4] = '\0';
01169     m2mbase_stub::nsdl_resource->static_resource_parameters->pathlen = 5;
01170 
01171     common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
01172     memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
01173     common_stub::coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
01174     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
01175 
01176     m2mobject_stub::base_type = M2MBase::Resource;
01177     m2mbase_stub::base_type = M2MBase::Resource;
01178     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
01179 
01180     m2mobject_stub::base_type = M2MBase::ResourceInstance;
01181     m2mbase_stub::base_type = M2MBase::ResourceInstance;
01182     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
01183 
01184     m2mobject_stub::base_type = M2MBase::ObjectInstance;
01185     m2mbase_stub::base_type = M2MBase::ObjectInstance;
01186     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
01187 
01188     m2mbase_stub::base_type = M2MBase::Object;
01189     m2mbase_stub::bool_value = false;
01190 
01191     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
01192 
01193     delete object;
01194     m2mobject_stub::instance_list.clear();
01195     delete instance;
01196     m2mobjectinstance_stub::resource_list.clear();
01197     delete create_resource;
01198 
01199     free(coap_header->options_list_ptr->uri_query_ptr);
01200     free(coap_header->options_list_ptr);
01201     if(common_stub::coap_header){
01202         if( common_stub::coap_header->options_list_ptr){
01203             free(common_stub::coap_header->options_list_ptr);
01204             common_stub::coap_header->options_list_ptr = NULL;
01205         }
01206         free(common_stub::coap_header);
01207         common_stub::coap_header = NULL;
01208     }
01209     free(coap_header);
01210     free(address);
01211     free(m2mbase_stub::nsdl_resource->static_resource_parameters->path);
01212     free(m2mbase_stub::nsdl_resource->static_resource_parameters);
01213     free(m2mbase_stub::nsdl_resource);
01214 
01215     m2mbase_stub::clear();
01216     common_stub::clear();
01217     m2mobject_stub::clear();
01218     m2mobjectinstance_stub::clear();
01219 }
01220 
01221 void Test_M2MNsdlInterface::test_resource_callback_delete()
01222 {
01223     uint8_t value[] = {"name/0"};
01224     sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
01225     memset(coap_header,0,sizeof(sn_coap_hdr_s));
01226     sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
01227     memset(address,0,sizeof(sn_nsdl_addr_s));
01228 
01229     common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
01230     memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
01231 
01232     coap_header->uri_path_ptr = value;
01233     coap_header->uri_path_len = sizeof(value);
01234 
01235     coap_header->msg_code = COAP_MSG_CODE_REQUEST_DELETE;
01236     common_stub::coap_header->msg_code = COAP_MSG_CODE_RESPONSE_BAD_REQUEST;
01237     common_stub::int_value = 0;
01238 
01239     m2mbase_stub::nsdl_resource =
01240             (sn_nsdl_dynamic_resource_parameters_s*) malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s));
01241     m2mbase_stub::nsdl_resource->static_resource_parameters =
01242             (sn_nsdl_static_resource_parameters_s*) malloc(sizeof(sn_nsdl_static_resource_parameters_s));
01243 
01244     m2mbase_stub::nsdl_resource->static_resource_parameters->path = (uint8_t*)malloc(7);
01245     m2mbase_stub::nsdl_resource->static_resource_parameters->path[0] = 'n';
01246     m2mbase_stub::nsdl_resource->static_resource_parameters->path[1] = 'a';
01247     m2mbase_stub::nsdl_resource->static_resource_parameters->path[2] = 'm';
01248     m2mbase_stub::nsdl_resource->static_resource_parameters->path[3] = 'e';
01249     m2mbase_stub::nsdl_resource->static_resource_parameters->path[4] = '/';
01250     m2mbase_stub::nsdl_resource->static_resource_parameters->path[5] = '0';
01251     m2mbase_stub::nsdl_resource->static_resource_parameters->path[6] = '\0';
01252     m2mbase_stub::nsdl_resource->static_resource_parameters->pathlen = 7;
01253 
01254     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
01255 
01256     common_stub::int_value = 0;
01257     m2mbase_stub::string_value = "name/0";
01258     M2MObject *object = new M2MObject("name", "name");
01259     M2MObjectInstance* instance = new M2MObjectInstance(*object,"name", "", "name/0");
01260     m2mbase_stub::int_value = 0;
01261     m2mobject_stub::int_value = 1;
01262     m2mobject_stub::bool_value = true;
01263     m2mobject_stub::instance_list.push_back(instance);
01264     m2mobject_stub::base_type = M2MBase::ObjectInstance;
01265     nsdl->_object_list.push_back(object);
01266 
01267     m2mbase_stub::operation = M2MBase::DELETE_ALLOWED;
01268 
01269     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
01270 
01271     m2mobject_stub::base_type = M2MBase::Object;
01272     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) ==0);
01273 
01274     delete instance;
01275     delete object;
01276     free(m2mbase_stub::nsdl_resource->static_resource_parameters->path);
01277     free(m2mbase_stub::nsdl_resource->static_resource_parameters);
01278     free(m2mbase_stub::nsdl_resource);
01279     free(common_stub::coap_header);
01280     free(address);
01281     free(coap_header);
01282     m2mobject_stub::instance_list.clear();
01283 }
01284 
01285 /*
01286 void Test_M2MNsdlInterface::test_resource_callback_reset()
01287 {
01288     uint8_t value[] = {"name"};
01289     sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
01290     memset(coap_header,0,sizeof(sn_coap_hdr_s));
01291     sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
01292     memset(address,0,sizeof(sn_nsdl_addr_s));
01293 
01294     coap_header->uri_path_ptr = value;
01295     coap_header->uri_path_len = sizeof(value);
01296 
01297     coap_header->msg_type = COAP_MSG_TYPE_RESET;
01298     m2mobjectinstance_stub::base_type = M2MBase::Object;
01299     String *name = new String("name");
01300     common_stub::int_value = 0;
01301     m2mbase_stub::string_value = name;
01302     M2MObject *object = new M2MObject(*name);
01303     M2MObjectInstance* instance = new M2MObjectInstance(*name,*object);
01304     M2MResource* create_resource = new M2MResource(*instance,
01305                                                    *name,
01306                                                    *name,
01307                                                    M2MResourceInstance::INTEGER,
01308                                                    M2MResource::Dynamic,false);
01309     m2mobject_stub::int_value = 2;
01310     m2mobject_stub::instance_list.push_back(instance);
01311 
01312     m2mobjectinstance_stub::resource_list.push_back(create_resource);
01313     m2mobjectinstance_stub::int_value = 1;
01314 
01315     nsdl->_object_list.push_back(object);
01316     // No response for RESET message
01317     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) == 1);
01318 
01319 
01320     m2mobject_stub::base_type = M2MBase::ObjectInstance;
01321     // No response for RESET message
01322     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) == 1);
01323 
01324     m2mobject_stub::base_type = M2MBase::Resource;
01325     // No response for RESET message
01326     CHECK(nsdl->resource_callback(NULL,coap_header,address,SN_NSDL_PROTOCOL_HTTP) == 1);
01327 
01328     delete instance;
01329     delete object;
01330     delete name;
01331     delete create_resource;
01332     free(address);
01333     free(coap_header);
01334     m2mobject_stub::instance_list.clear();
01335     m2mobjectinstance_stub::resource_list.clear();
01336     //nsdl->_object_list.clear();
01337 }
01338 */
01339 void Test_M2MNsdlInterface::test_process_received_data()
01340 {
01341     uint8_t *data = (uint8_t*)malloc(sizeof(uint8_t));
01342     uint16_t data_size = sizeof(uint16_t);
01343     sn_nsdl_addr_s *address = (sn_nsdl_addr_s *)malloc(sizeof(sn_nsdl_addr_s));
01344 
01345     common_stub::int_value = 0;
01346 
01347     CHECK(nsdl->process_received_data(data,data_size,address) == true);
01348 
01349     common_stub::int_value = -1;
01350 
01351     CHECK(nsdl->process_received_data(data,data_size,address) == false);
01352 
01353     free(address);
01354     free(data);
01355     common_stub::clear();
01356 }
01357 
01358 void Test_M2MNsdlInterface::test_stop_timers()
01359 {
01360     // Check if there is no memory leak or crash
01361     nsdl->stop_timers();
01362 }
01363 
01364 void Test_M2MNsdlInterface::test_timer_expired()
01365 {
01366     nsdl->timer_expired(M2MTimerObserver::NsdlExecution);
01367     CHECK(nsdl->_counter_for_nsdl == 1);
01368 
01369     if( nsdl->_endpoint == NULL){
01370         nsdl->_endpoint = (sn_nsdl_ep_parameters_s*)nsdl->memory_alloc(sizeof(sn_nsdl_ep_parameters_s));
01371     }
01372     nsdl->_endpoint->lifetime_ptr = (uint8_t*)malloc(sizeof(uint8_t));
01373 
01374     // For checking the registration update
01375     nsdl->timer_expired(M2MTimerObserver::Registration);
01376 
01377     nsdl->delete_endpoint();
01378     CHECK(nsdl->_endpoint == NULL);
01379 }
01380 
01381 void Test_M2MNsdlInterface::test_observation_to_be_sent()
01382 {
01383     Vector<uint16_t> instance_list_ids;
01384     m2mbase_stub::clear();
01385     M2MObject *object = new M2MObject("name", "name");
01386     M2MObjectInstance* instance = new M2MObjectInstance(*object, "name", "", "");
01387     M2MResource *res = new M2MResource(*instance,"res", "res", M2MResourceInstance::INTEGER,false, "res");
01388     M2MResource *res2 = new M2MResource(*instance,"res2", "res2", M2MResourceInstance::INTEGER,false, "res2");
01389 
01390 
01391     M2MResourceInstance* res_instance = new M2MResourceInstance(*res,
01392                                                                 "res", "res",
01393                                                                 M2MResourceInstance::INTEGER,0,"",false);
01394     M2MResourceInstance* res_instance_1 = new M2MResourceInstance(*res2,
01395                                                                   "res2", "res2",
01396                                                                   M2MResourceInstance::INTEGER,0,"",false);
01397     m2mresource_stub::list.clear();
01398     m2mresource_stub::list.push_back(res_instance);
01399     m2mresource_stub::list.push_back(res_instance_1);
01400     m2mresource_stub::int_value = 2;
01401     instance_list_ids.push_back(0);
01402 
01403     uint8_t value[] = {"value"};
01404     m2mresourceinstance_stub::value = (uint8_t *)malloc(sizeof(value));
01405     memset( m2mresourceinstance_stub::value, 0, sizeof(value));
01406     memcpy(m2mresourceinstance_stub::value,value,sizeof(value));
01407     m2mresourceinstance_stub::int_value = sizeof(value);
01408 
01409     m2mbase_stub::uint16_value = 321;
01410     m2mbase_stub::string_value = "token";
01411 
01412     m2mresourceinstance_stub::base_type = M2MBase::Resource;
01413 
01414     nsdl->_nsdl_handle = (nsdl_s*)malloc(sizeof(nsdl_s));
01415     memset(nsdl->_nsdl_handle,0,sizeof(nsdl_s));
01416     sn_nsdl_oma_server_info_t * nsp_address = (sn_nsdl_oma_server_info_t *)malloc(sizeof(sn_nsdl_oma_server_info_t));
01417     memset(nsp_address,0,sizeof(sn_nsdl_oma_server_info_t));
01418     sn_nsdl_addr_s* address = (sn_nsdl_addr_s*)malloc(sizeof(sn_nsdl_addr_s));
01419     memset(address,0,sizeof(sn_nsdl_addr_s));
01420 
01421     nsdl->_nsdl_handle->nsp_address_ptr = nsp_address;
01422     memset(nsdl->_nsdl_handle->nsp_address_ptr,0,sizeof(sn_nsdl_oma_server_info_t));
01423     nsdl->_nsdl_handle->nsp_address_ptr->omalw_address_ptr = address;
01424 
01425     //CHECK if nothing crashes
01426     common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
01427     common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
01428     nsdl->observation_to_be_sent(res2, 1, instance_list_ids);
01429     free(common_stub::coap_header);
01430 
01431     m2mresourceinstance_stub::resource_type = M2MResource::OPAQUE;
01432 
01433     //CHECK if nothing crashes
01434     common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
01435     common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
01436     nsdl->observation_to_be_sent(res2, 1, instance_list_ids);
01437     free(common_stub::coap_header);
01438 
01439     m2mresource_stub::list.clear();
01440     m2mresource_stub::int_value = 0;
01441 
01442     //CHECK if nothing crashes
01443     common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
01444     common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
01445     nsdl->observation_to_be_sent(res, 500, instance_list_ids);
01446     free(common_stub::coap_header);
01447 
01448     M2MObjectInstance *object_instance = new M2MObjectInstance(*object, "name", "","");
01449     m2mobject_stub::int_value = 1;
01450     m2mobject_stub::base_type = M2MBase::Object;
01451     m2mobject_stub::inst = object_instance;
01452     m2mobjectinstance_stub::resource_list.push_back(res);
01453     nsdl->_object_list.push_back(object);
01454     instance_list_ids.push_back(1);
01455     //CHECK if nothing crashes
01456     common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
01457     common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
01458     nsdl->observation_to_be_sent(object, 1, instance_list_ids);
01459     free(common_stub::coap_header);
01460 
01461     common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
01462     common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
01463     nsdl->observation_to_be_sent(object, 500, instance_list_ids, true);
01464     free(common_stub::coap_header);
01465 
01466     //CHECK if nothing crashes
01467     m2mobjectinstance_stub::base_type = M2MBase::ObjectInstance;
01468     common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
01469     common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
01470     nsdl->observation_to_be_sent(object_instance, 1, instance_list_ids);
01471     free(common_stub::coap_header);
01472 
01473     common_stub::coap_header = (sn_coap_hdr_s *) malloc(sizeof(sn_coap_hdr_s));
01474     common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
01475     nsdl->observation_to_be_sent(object_instance, 500, instance_list_ids);
01476     free(common_stub::coap_header);
01477 
01478     free(m2mresourceinstance_stub::value);
01479     m2mresourceinstance_stub::value = NULL;
01480 
01481     m2mbase_stub::clear();
01482     m2mresourceinstance_stub::clear();
01483     m2mobjectinstance_stub::clear();
01484     m2mobject_stub::clear();
01485     m2mresource_stub::list.clear();
01486     delete res;
01487     res = NULL;
01488 
01489     delete res2;
01490     res2 = NULL;
01491 
01492     delete res_instance;
01493     res_instance = NULL;
01494 
01495     delete res_instance_1;
01496     res_instance_1 = NULL;
01497 
01498     delete object_instance;
01499     object_instance = NULL;
01500 
01501     delete object;
01502     object = NULL;
01503 
01504     delete instance;
01505     instance = NULL;
01506 
01507     free(nsp_address);
01508     free(address);
01509     free(nsdl->_nsdl_handle);
01510 }
01511 
01512 void Test_M2MNsdlInterface::test_resource_to_be_deleted()
01513 {
01514     //Checking coverage for the code
01515     M2MObject *object = new M2MObject("name", "name");
01516     nsdl->resource_to_be_deleted(object);
01517     delete object;
01518 }
01519 
01520 void Test_M2MNsdlInterface::test_value_updated()
01521 {
01522     M2MObject *object = new M2MObject("name", "name");
01523     M2MObjectInstance *object_instance = new M2MObjectInstance(*object, "name", "", "");
01524     M2MResource *resource = new M2MResource(*object_instance,
01525                                             "resource_name",
01526                                             "resource_type",
01527                                             M2MResourceInstance::INTEGER,
01528                                             false,
01529                                             "resource_name");
01530 
01531     M2MResourceInstance *resource_instance = new M2MResourceInstance(*resource,
01532                                                                      "resource_name",
01533                                                                      "resource_type",
01534                                                                      M2MResourceInstance::INTEGER,
01535                                                                      0,"",false);
01536 
01537     m2mobject_stub::base_type = M2MBase::Object;
01538     m2mbase_stub::string_value = "name";
01539     m2mbase_stub::operation = M2MBase::GET_ALLOWED;
01540     nsdl->value_updated(object,"name");
01541     CHECK(observer->value_update == true);
01542     observer->value_update = false;
01543 
01544     m2mobjectinstance_stub::base_type = M2MBase::ObjectInstance;
01545 
01546     nsdl->value_updated(object_instance,"name/0");
01547     CHECK(observer->value_update == true);
01548     observer->value_update = false;
01549 
01550     common_stub::resource = (sn_nsdl_dynamic_resource_parameters_s*)malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s));
01551     memset(common_stub::resource,0, sizeof(sn_nsdl_dynamic_resource_parameters_s));
01552 
01553     common_stub::resource->static_resource_parameters =
01554             (sn_nsdl_static_resource_parameters_s*)malloc(sizeof(sn_nsdl_static_resource_parameters_s));
01555     memset(common_stub::resource->static_resource_parameters,0, sizeof(sn_nsdl_static_resource_parameters_s));
01556 
01557     common_stub::resource->static_resource_parameters->resource = (uint8_t*)malloc(2);
01558     memset(common_stub::resource->static_resource_parameters->resource,0, 2);
01559 
01560     common_stub::resource->static_resource_parameters->mode = SN_GRS_STATIC;
01561     m2mbase_stub::mode_value = M2MBase::Static;
01562 
01563     common_stub::resource->observable = false;
01564     m2mbase_stub::bool_value = true;
01565 
01566     m2mresourceinstance_stub::int_value = 2;
01567     uint8_t value[] = "1";
01568     m2mresourceinstance_stub::value = value;
01569 
01570     m2mresourceinstance_stub::base_type = M2MBase::Resource;
01571 
01572     nsdl->value_updated(resource,"name/0/name");
01573     CHECK(observer->value_update == true);
01574     observer->value_update = false;
01575 
01576     m2mresourceinstance_stub::clear();
01577     free(common_stub::resource->static_resource_parameters->resource);
01578     free(common_stub::resource->static_resource_parameters);
01579     free(common_stub::resource);
01580     common_stub::resource = NULL;
01581     common_stub::clear();
01582 
01583     m2mresourceinstance_stub::base_type = M2MBase::ResourceInstance;
01584 
01585     common_stub::resource = (sn_nsdl_dynamic_resource_parameters_s*)malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s));
01586     memset(common_stub::resource,0, sizeof(sn_nsdl_dynamic_resource_parameters_s));
01587 
01588     common_stub::resource->static_resource_parameters =
01589             (sn_nsdl_static_resource_parameters_s*)malloc(sizeof(sn_nsdl_static_resource_parameters_s));
01590     memset(common_stub::resource->static_resource_parameters,0, sizeof(sn_nsdl_static_resource_parameters_s));
01591 
01592     common_stub::resource->static_resource_parameters->resource = (uint8_t*)malloc(2);
01593     memset(common_stub::resource->static_resource_parameters->resource,0, 2);
01594 
01595     common_stub::resource->static_resource_parameters->mode = SN_GRS_STATIC;
01596     m2mbase_stub::mode_value = M2MBase::Static;
01597 
01598     m2mresourceinstance_stub::int_value = 2;
01599     m2mresourceinstance_stub::value = value;
01600 
01601     nsdl->value_updated(resource_instance,"name/0/name/0");
01602     CHECK(observer->value_update == true);
01603     observer->value_update = false;
01604 
01605     m2mbase_stub::is_value_updated_function_set = true;
01606     nsdl->value_updated(resource_instance,"name/0/name/0");
01607     CHECK(observer->value_update == false);
01608     observer->value_update = false;
01609 
01610     m2mobject_stub::clear();
01611     m2mobjectinstance_stub::clear();
01612 
01613     m2mresourceinstance_stub::clear();
01614 
01615     free(common_stub::resource->static_resource_parameters->resource);
01616     free(common_stub::resource->static_resource_parameters);
01617     free(common_stub::resource);
01618 
01619     common_stub::resource = NULL;
01620     common_stub::clear();
01621 
01622     delete resource_instance;
01623     delete resource;
01624     delete object_instance;
01625     delete object;
01626 }
01627 
01628 
01629 void Test_M2MNsdlInterface::test_find_resource()
01630 {
01631     m2mbase_stub::string_value = "name";
01632     m2mbase_stub::object_instance_name = "name/0";
01633     m2mbase_stub::resource_name_inst = "name/0/resource_name/0";
01634     m2mbase_stub::resource_name = "name/0/resource_name";
01635     m2mbase_stub::find_resource = true;
01636     uint8_t *token = (uint8_t*) malloc(4);
01637     token[0] = 't';
01638     token[1] = 'o';
01639     token[2] = 'k';
01640     token[3] = 'e';
01641     m2mbase_stub::object_token = token;
01642     m2mbase_stub::object_token_len = 4;
01643 
01644     uint8_t *inst_token = (uint8_t*) malloc(4);
01645     inst_token[0] = 't';
01646     inst_token[1] = 'o';
01647     inst_token[2] = 'k';
01648     inst_token[3] = 'k';
01649     m2mbase_stub::object_inst_token = inst_token;
01650     m2mbase_stub::object_inst_token_len = 4;
01651 
01652     uint8_t *resource_token = (uint8_t*) malloc(4);
01653     resource_token[0] = 't';
01654     resource_token[1] = 'k';
01655     resource_token[2] = 'k';
01656     resource_token[3] = 'k';
01657     m2mbase_stub::resource_token = resource_token;
01658     m2mbase_stub::resource_token_len = 4;
01659 
01660     M2MObject *object = new M2MObject("name", "name");
01661     M2MObjectInstance *object_instance = new M2MObjectInstance(*object,"name/0", "","name/0");
01662     M2MResource *resource = new M2MResource(*object_instance,
01663                                             "resource_name",
01664                                             "resource_type",
01665                                             M2MResourceInstance::INTEGER,
01666                                             false,
01667                                             "resource_name");
01668 
01669     M2MResourceInstance *resource_instance = new M2MResourceInstance(*resource,
01670                                                                      "0",
01671                                                                      "resource_type",
01672                                                                      M2MResourceInstance::INTEGER,0,"0",false);
01673 
01674     m2mobjectinstance_stub::base_type = M2MBase::ObjectInstance;
01675     m2mobject_stub::instance_list.push_back(object_instance);
01676     m2mobjectinstance_stub::resource_list.push_back(resource);
01677     m2mresource_stub::list.push_back(resource_instance);
01678     m2mobject_stub::base_type = M2MBase::Object;
01679     nsdl->_object_list.push_back(object);
01680     m2mresource_stub::bool_value = true;
01681     CHECK(nsdl->find_resource("name") == object);
01682     CHECK(nsdl->find_resource("name1") == NULL);
01683     CHECK(nsdl->find_resource("name", token, 4) == object);
01684     CHECK(nsdl->find_resource("name", token, 5) == NULL);
01685 
01686     m2mbase_stub::ret_counter = 0;
01687     CHECK(nsdl->find_resource("name/0") == object_instance);
01688     m2mbase_stub::ret_counter = 0;
01689     CHECK(nsdl->find_resource("name/0", inst_token, 4) == object_instance);
01690     m2mbase_stub::ret_counter = 0;
01691 
01692     CHECK(nsdl->find_resource("name/0/resource_name") == resource);
01693     m2mbase_stub::ret_counter = 0;
01694     CHECK(nsdl->find_resource("name/0/resource_name", resource_token, 4) == resource);
01695 
01696     m2mbase_stub::ret_counter = 0;
01697     CHECK(nsdl->find_resource("name/0/resource_name/0") == resource_instance);
01698 
01699     free(token);
01700     free(inst_token);
01701     free(resource_token);
01702 
01703     m2mobject_stub::clear();
01704     m2mobjectinstance_stub::clear();
01705 
01706     m2mresourceinstance_stub::clear();
01707     m2mresource_stub::clear();
01708     m2mobjectinstance_stub::clear();
01709     m2mobject_stub::clear();
01710 
01711     delete resource_instance;
01712     delete resource;
01713     delete object_instance;
01714     delete object;
01715 }
01716 
01717 void Test_M2MNsdlInterface::test_remove_object()
01718 {
01719     M2MObject *obj = new M2MObject("name", "name");
01720     nsdl->_object_list.push_back(obj);
01721 
01722     nsdl->remove_object((M2MBase*)obj);
01723 
01724     CHECK(nsdl->_object_list.empty() == true);
01725 
01726     nsdl->_object_list.clear();
01727     delete obj;
01728 }
01729 
01730 void Test_M2MNsdlInterface::test_add_object_to_list()
01731 {
01732     M2MObject *obj = new M2MObject("name", "name");
01733     nsdl->_object_list.push_back(obj);
01734 
01735     nsdl->add_object_to_list(obj);
01736     CHECK(nsdl->_object_list.size() == 1);
01737 
01738     nsdl->_object_list.clear();
01739     delete obj;
01740 }
01741 
01742 void Test_M2MNsdlInterface::test_send_delayed_response()
01743 {
01744     common_stub::int_value = 0;
01745     m2mbase_stub::int_value = 0;
01746 
01747     M2MObject *object = new M2MObject("name", "name");
01748     M2MObjectInstance* instance = new M2MObjectInstance(*object, "name", "", "");
01749     nsdl->_nsdl_handle = (nsdl_s*)malloc(sizeof(nsdl_s));
01750     memset(nsdl->_nsdl_handle,0,sizeof(nsdl_s));
01751 
01752     sn_nsdl_oma_server_info_t * nsp_address = (sn_nsdl_oma_server_info_t *)malloc(sizeof(sn_nsdl_oma_server_info_t));
01753     memset(nsp_address,0,sizeof(sn_nsdl_oma_server_info_t));
01754     sn_nsdl_addr_s* address = (sn_nsdl_addr_s*)malloc(sizeof(sn_nsdl_addr_s));
01755     memset(address,0,sizeof(sn_nsdl_addr_s));
01756 
01757     M2MResource* resource = new M2MResource(*instance,
01758                                             "name",
01759                                             "name",
01760                                             M2MResourceInstance::INTEGER,
01761                                             false,
01762                                             "name");
01763 
01764     uint8_t val[] = {"name"};
01765     m2mresource_stub::delayed_token = (uint8_t*)malloc(sizeof(val));
01766     memcpy(m2mresource_stub::delayed_token,val,sizeof(val));
01767     m2mresource_stub::delayed_token_len = sizeof(val);
01768 
01769     m2mresourceinstance_stub::base_type = M2MBase::Resource;
01770 
01771     nsdl->_nsdl_handle->nsp_address_ptr = nsp_address;
01772     memset(nsdl->_nsdl_handle->nsp_address_ptr,0,sizeof(sn_nsdl_oma_server_info_t));
01773     nsdl->_nsdl_handle->nsp_address_ptr->omalw_address_ptr = address;
01774 
01775     nsdl->send_delayed_response(resource);
01776 
01777     free(nsp_address);
01778     free(address);
01779     free(nsdl->_nsdl_handle);
01780 
01781     delete object;
01782     delete instance;
01783     delete resource;
01784     free(m2mresource_stub::delayed_token);
01785     m2mresource_stub::delayed_token = NULL;
01786     m2mresource_stub::delayed_token_len = 0;
01787 }
01788 
01789 void Test_M2MNsdlInterface::test_get_nsdl_handle()
01790 {
01791     CHECK(nsdl->get_nsdl_handle() == nsdl->_nsdl_handle);
01792 }
01793 
01794 void Test_M2MNsdlInterface::test_endpoint_name()
01795 {
01796     String endpoint = "test";
01797     nsdl->_endpoint_name = endpoint;
01798     CHECK(nsdl->endpoint_name() == endpoint);
01799 }