A metronome using the FRDM K64F board

Committer:
ram54288
Date:
Sun May 14 18:40:18 2017 +0000
Revision:
0:a7a43371b306
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ram54288 0:a7a43371b306 1 /*
ram54288 0:a7a43371b306 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
ram54288 0:a7a43371b306 3 * SPDX-License-Identifier: Apache-2.0
ram54288 0:a7a43371b306 4 * Licensed under the Apache License, Version 2.0 (the License); you may
ram54288 0:a7a43371b306 5 * not use this file except in compliance with the License.
ram54288 0:a7a43371b306 6 * You may obtain a copy of the License at
ram54288 0:a7a43371b306 7 *
ram54288 0:a7a43371b306 8 * http://www.apache.org/licenses/LICENSE-2.0
ram54288 0:a7a43371b306 9 *
ram54288 0:a7a43371b306 10 * Unless required by applicable law or agreed to in writing, software
ram54288 0:a7a43371b306 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
ram54288 0:a7a43371b306 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ram54288 0:a7a43371b306 13 * See the License for the specific language governing permissions and
ram54288 0:a7a43371b306 14 * limitations under the License.
ram54288 0:a7a43371b306 15 */
ram54288 0:a7a43371b306 16 #include "CppUTest/TestHarness.h"
ram54288 0:a7a43371b306 17 #include "test_m2mresourceinstance.h"
ram54288 0:a7a43371b306 18 #include "CppUTest/MemoryLeakDetectorMallocMacros.h"
ram54288 0:a7a43371b306 19 #include "m2mbase_stub.h"
ram54288 0:a7a43371b306 20 #include "m2mobservationhandler.h"
ram54288 0:a7a43371b306 21 #include "m2mreporthandler.h"
ram54288 0:a7a43371b306 22 #include "m2mreporthandler_stub.h"
ram54288 0:a7a43371b306 23 #include "common_stub.h"
ram54288 0:a7a43371b306 24 #include "m2mtlvdeserializer_stub.h"
ram54288 0:a7a43371b306 25 #include "m2mblockmessage_stub.h"
ram54288 0:a7a43371b306 26 #include "m2mobjectinstance_stub.h"
ram54288 0:a7a43371b306 27 #include "m2mobject_stub.h"
ram54288 0:a7a43371b306 28 #include "m2mresource_stub.h"
ram54288 0:a7a43371b306 29
ram54288 0:a7a43371b306 30 static bool cb_visited = false;
ram54288 0:a7a43371b306 31 static void callback_function(void *args)
ram54288 0:a7a43371b306 32 {
ram54288 0:a7a43371b306 33 cb_visited = true;
ram54288 0:a7a43371b306 34 }
ram54288 0:a7a43371b306 35 static void global_notification_sent_function()
ram54288 0:a7a43371b306 36 {
ram54288 0:a7a43371b306 37 cb_visited = true;
ram54288 0:a7a43371b306 38 }
ram54288 0:a7a43371b306 39
ram54288 0:a7a43371b306 40 class MyTest{
ram54288 0:a7a43371b306 41 public:
ram54288 0:a7a43371b306 42 void execute_function(void */*argument*/) {
ram54288 0:a7a43371b306 43 visited = true;
ram54288 0:a7a43371b306 44 }
ram54288 0:a7a43371b306 45 void block_message_received(M2MBlockMessage */*argument*/) {
ram54288 0:a7a43371b306 46 block_received = true;
ram54288 0:a7a43371b306 47 }
ram54288 0:a7a43371b306 48 void block_message_requested(const String& /*resource*/, uint8_t *&/*data*/, uint32_t &/*len*/) {
ram54288 0:a7a43371b306 49 block_requested = true;
ram54288 0:a7a43371b306 50 }
ram54288 0:a7a43371b306 51 void notification_sent() {
ram54288 0:a7a43371b306 52 visited = true;
ram54288 0:a7a43371b306 53 }
ram54288 0:a7a43371b306 54
ram54288 0:a7a43371b306 55 bool visited;
ram54288 0:a7a43371b306 56 bool block_received;
ram54288 0:a7a43371b306 57 bool block_requested;
ram54288 0:a7a43371b306 58 };
ram54288 0:a7a43371b306 59
ram54288 0:a7a43371b306 60 class ResourceCallback : public M2MResourceCallback {
ram54288 0:a7a43371b306 61
ram54288 0:a7a43371b306 62 public:
ram54288 0:a7a43371b306 63
ram54288 0:a7a43371b306 64 ResourceCallback() : visited(false) {}
ram54288 0:a7a43371b306 65 ~ResourceCallback(){}
ram54288 0:a7a43371b306 66 void notification_update() {
ram54288 0:a7a43371b306 67 visited = true;
ram54288 0:a7a43371b306 68 }
ram54288 0:a7a43371b306 69
ram54288 0:a7a43371b306 70 void clear() {visited = false;}
ram54288 0:a7a43371b306 71 bool visited;
ram54288 0:a7a43371b306 72 };
ram54288 0:a7a43371b306 73
ram54288 0:a7a43371b306 74 class TestReportObserver : public M2MReportObserver{
ram54288 0:a7a43371b306 75 public :
ram54288 0:a7a43371b306 76 TestReportObserver() {}
ram54288 0:a7a43371b306 77 ~TestReportObserver() {}
ram54288 0:a7a43371b306 78 void observation_to_be_sent(m2m::Vector<uint16_t>,bool){ }
ram54288 0:a7a43371b306 79 };
ram54288 0:a7a43371b306 80
ram54288 0:a7a43371b306 81 class Handler : public M2MObservationHandler {
ram54288 0:a7a43371b306 82
ram54288 0:a7a43371b306 83 public:
ram54288 0:a7a43371b306 84
ram54288 0:a7a43371b306 85 Handler(){}
ram54288 0:a7a43371b306 86 ~Handler(){}
ram54288 0:a7a43371b306 87 void observation_to_be_sent(M2MBase *, uint16_t, m2m::Vector<uint16_t>, bool){
ram54288 0:a7a43371b306 88 visited = true;
ram54288 0:a7a43371b306 89 }
ram54288 0:a7a43371b306 90 void send_delayed_response(M2MBase *){}
ram54288 0:a7a43371b306 91 void resource_to_be_deleted(M2MBase *){visited=true;}
ram54288 0:a7a43371b306 92 void remove_object(M2MBase *){visited = true;}
ram54288 0:a7a43371b306 93 void value_updated(M2MBase *,const String&){visited = true;}
ram54288 0:a7a43371b306 94
ram54288 0:a7a43371b306 95 void clear() {visited = false;}
ram54288 0:a7a43371b306 96 bool visited;
ram54288 0:a7a43371b306 97 };
ram54288 0:a7a43371b306 98
ram54288 0:a7a43371b306 99 Test_M2MResourceInstance::Test_M2MResourceInstance()
ram54288 0:a7a43371b306 100 {
ram54288 0:a7a43371b306 101 handler = new Handler();
ram54288 0:a7a43371b306 102 obj = new M2MObject("name", "name");
ram54288 0:a7a43371b306 103 m2mresource_stub::object_instance = new M2MObjectInstance(*obj, "name", "", "");
ram54288 0:a7a43371b306 104 m2mobjectinstance_stub::resource = new M2MResource(*m2mresource_stub::object_instance,
ram54288 0:a7a43371b306 105 "name",
ram54288 0:a7a43371b306 106 "type",
ram54288 0:a7a43371b306 107 M2MResourceInstance::STRING,
ram54288 0:a7a43371b306 108 false,
ram54288 0:a7a43371b306 109 "name");
ram54288 0:a7a43371b306 110
ram54288 0:a7a43371b306 111 resource_instance = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
ram54288 0:a7a43371b306 112 "name",
ram54288 0:a7a43371b306 113 "resource_type",
ram54288 0:a7a43371b306 114 M2MResourceInstance::STRING,
ram54288 0:a7a43371b306 115 0,
ram54288 0:a7a43371b306 116 "name",
ram54288 0:a7a43371b306 117 false);
ram54288 0:a7a43371b306 118 }
ram54288 0:a7a43371b306 119
ram54288 0:a7a43371b306 120 Test_M2MResourceInstance::~Test_M2MResourceInstance()
ram54288 0:a7a43371b306 121 {
ram54288 0:a7a43371b306 122 delete m2mresource_stub::object_instance;
ram54288 0:a7a43371b306 123 delete m2mobjectinstance_stub::resource;
ram54288 0:a7a43371b306 124 delete resource_instance;
ram54288 0:a7a43371b306 125 delete obj;
ram54288 0:a7a43371b306 126 delete handler;
ram54288 0:a7a43371b306 127 }
ram54288 0:a7a43371b306 128
ram54288 0:a7a43371b306 129 void Test_M2MResourceInstance::test_resource_instance_type()
ram54288 0:a7a43371b306 130 {
ram54288 0:a7a43371b306 131 CHECK(resource_instance->resource_instance_type() == M2MResourceInstance::STRING);
ram54288 0:a7a43371b306 132 }
ram54288 0:a7a43371b306 133
ram54288 0:a7a43371b306 134 void Test_M2MResourceInstance::test_static_resource_instance()
ram54288 0:a7a43371b306 135 {
ram54288 0:a7a43371b306 136 u_int8_t value[] = {"value"};
ram54288 0:a7a43371b306 137 m2mbase_stub::mode_value = M2MBase::Dynamic;
ram54288 0:a7a43371b306 138 M2MResourceInstance *res = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
ram54288 0:a7a43371b306 139 "name1",
ram54288 0:a7a43371b306 140 "type1",
ram54288 0:a7a43371b306 141 M2MResourceInstance::INTEGER,
ram54288 0:a7a43371b306 142 value, (uint32_t)sizeof(value),
ram54288 0:a7a43371b306 143 0,
ram54288 0:a7a43371b306 144 "name1",
ram54288 0:a7a43371b306 145 false);
ram54288 0:a7a43371b306 146
ram54288 0:a7a43371b306 147 CHECK(res != NULL);
ram54288 0:a7a43371b306 148 delete res;
ram54288 0:a7a43371b306 149 res = NULL;
ram54288 0:a7a43371b306 150
ram54288 0:a7a43371b306 151 m2mbase_stub::mode_value = M2MBase::Static;
ram54288 0:a7a43371b306 152 m2mbase_stub::nsdl_resource = (sn_nsdl_dynamic_resource_parameters_s*)malloc(sizeof(sn_nsdl_dynamic_resource_parameters_s));
ram54288 0:a7a43371b306 153 m2mbase_stub::nsdl_resource->static_resource_parameters =
ram54288 0:a7a43371b306 154 (sn_nsdl_static_resource_parameters_s*)malloc(sizeof(sn_nsdl_static_resource_parameters_s));
ram54288 0:a7a43371b306 155
ram54288 0:a7a43371b306 156 res = new M2MResourceInstance(*m2mobjectinstance_stub::resource,
ram54288 0:a7a43371b306 157 "name1",
ram54288 0:a7a43371b306 158 "type1",
ram54288 0:a7a43371b306 159 M2MResourceInstance::INTEGER,
ram54288 0:a7a43371b306 160 value, (uint32_t)sizeof(value),
ram54288 0:a7a43371b306 161 0,
ram54288 0:a7a43371b306 162 "name1",
ram54288 0:a7a43371b306 163 false);
ram54288 0:a7a43371b306 164
ram54288 0:a7a43371b306 165 free(m2mbase_stub::nsdl_resource->static_resource_parameters->resource);
ram54288 0:a7a43371b306 166 free(m2mbase_stub::nsdl_resource->static_resource_parameters);
ram54288 0:a7a43371b306 167 free(m2mbase_stub::nsdl_resource);
ram54288 0:a7a43371b306 168 CHECK(res != NULL);
ram54288 0:a7a43371b306 169 delete res;
ram54288 0:a7a43371b306 170 }
ram54288 0:a7a43371b306 171
ram54288 0:a7a43371b306 172 void Test_M2MResourceInstance::test_base_type()
ram54288 0:a7a43371b306 173 {
ram54288 0:a7a43371b306 174 m2mbase_stub::base_type = M2MBase::Resource;
ram54288 0:a7a43371b306 175 CHECK(M2MBase::Resource == resource_instance->base_type());
ram54288 0:a7a43371b306 176 }
ram54288 0:a7a43371b306 177
ram54288 0:a7a43371b306 178 void Test_M2MResourceInstance::test_handle_observation_attribute()
ram54288 0:a7a43371b306 179 {
ram54288 0:a7a43371b306 180 char *d = "s";
ram54288 0:a7a43371b306 181 TestReportObserver obs;
ram54288 0:a7a43371b306 182 m2mbase_stub::report = new M2MReportHandler(obs);
ram54288 0:a7a43371b306 183
ram54288 0:a7a43371b306 184 CHECK(false == resource_instance->handle_observation_attribute(d));
ram54288 0:a7a43371b306 185
ram54288 0:a7a43371b306 186 resource_instance->_resource_type = M2MResourceInstance::INTEGER;
ram54288 0:a7a43371b306 187 CHECK(false == resource_instance->handle_observation_attribute(d));
ram54288 0:a7a43371b306 188
ram54288 0:a7a43371b306 189 resource_instance->_resource_type = M2MResourceInstance::FLOAT;
ram54288 0:a7a43371b306 190 CHECK(false == resource_instance->handle_observation_attribute(d));
ram54288 0:a7a43371b306 191
ram54288 0:a7a43371b306 192 m2mreporthandler_stub::bool_return = true;
ram54288 0:a7a43371b306 193 CHECK(true == resource_instance->handle_observation_attribute(d));
ram54288 0:a7a43371b306 194
ram54288 0:a7a43371b306 195 m2mbase_stub::bool_value = false;
ram54288 0:a7a43371b306 196 CHECK(true == resource_instance->handle_observation_attribute(d));
ram54288 0:a7a43371b306 197
ram54288 0:a7a43371b306 198 delete m2mbase_stub::report;
ram54288 0:a7a43371b306 199 m2mbase_stub::report = NULL;
ram54288 0:a7a43371b306 200 }
ram54288 0:a7a43371b306 201
ram54288 0:a7a43371b306 202 void Test_M2MResourceInstance::test_set_execute_function()
ram54288 0:a7a43371b306 203 {
ram54288 0:a7a43371b306 204 MyTest test;
ram54288 0:a7a43371b306 205 resource_instance->set_execute_function(execute_callback(&test,&MyTest::execute_function));
ram54288 0:a7a43371b306 206 resource_instance->set_execute_function(callback_function);
ram54288 0:a7a43371b306 207 }
ram54288 0:a7a43371b306 208
ram54288 0:a7a43371b306 209 void Test_M2MResourceInstance::test_execute()
ram54288 0:a7a43371b306 210 {
ram54288 0:a7a43371b306 211 MyTest test;
ram54288 0:a7a43371b306 212 void *args = NULL;
ram54288 0:a7a43371b306 213
ram54288 0:a7a43371b306 214 resource_instance->set_execute_function(execute_callback(&test,&MyTest::execute_function));
ram54288 0:a7a43371b306 215 resource_instance->execute(args);
ram54288 0:a7a43371b306 216
ram54288 0:a7a43371b306 217 cb_visited = false;
ram54288 0:a7a43371b306 218 resource_instance->set_execute_function(callback_function);
ram54288 0:a7a43371b306 219 resource_instance->execute(args);
ram54288 0:a7a43371b306 220 CHECK(true == cb_visited);
ram54288 0:a7a43371b306 221
ram54288 0:a7a43371b306 222 // Check delete
ram54288 0:a7a43371b306 223 cb_visited = false;
ram54288 0:a7a43371b306 224 resource_instance->set_execute_function(callback_function);
ram54288 0:a7a43371b306 225 resource_instance->execute(args);
ram54288 0:a7a43371b306 226 CHECK(true == cb_visited);
ram54288 0:a7a43371b306 227 }
ram54288 0:a7a43371b306 228
ram54288 0:a7a43371b306 229 void Test_M2MResourceInstance::test_set_value()
ram54288 0:a7a43371b306 230 {
ram54288 0:a7a43371b306 231 u_int8_t value[] = {"value2"};
ram54288 0:a7a43371b306 232 resource_instance->_value = (u_int8_t*)malloc(sizeof(u_int8_t));
ram54288 0:a7a43371b306 233 m2mbase_stub::bool_value = true;
ram54288 0:a7a43371b306 234
ram54288 0:a7a43371b306 235 CHECK(resource_instance->set_value(value,(u_int32_t)sizeof(value)) == true);
ram54288 0:a7a43371b306 236 CHECK( resource_instance->_value_length == sizeof(value));
ram54288 0:a7a43371b306 237 CHECK( *resource_instance->_value == *value);
ram54288 0:a7a43371b306 238
ram54288 0:a7a43371b306 239 m2mbase_stub::observe = (M2MObservationHandler*)handler;
ram54288 0:a7a43371b306 240
ram54288 0:a7a43371b306 241 u_int8_t value2[] = {"12"};
ram54288 0:a7a43371b306 242 CHECK(resource_instance->set_value(value2,(u_int32_t)sizeof(value2)) == true);
ram54288 0:a7a43371b306 243
ram54288 0:a7a43371b306 244 u_int8_t value3[] = {"13"};
ram54288 0:a7a43371b306 245 CHECK(resource_instance->set_value(value3,(u_int32_t)sizeof(value3)) == true);
ram54288 0:a7a43371b306 246
ram54288 0:a7a43371b306 247 CHECK(resource_instance->set_value(123456789) == true);
ram54288 0:a7a43371b306 248 CHECK(memcmp(resource_instance->_value, "123456789", 9) == 0);
ram54288 0:a7a43371b306 249
ram54288 0:a7a43371b306 250 // verify int value helper
ram54288 0:a7a43371b306 251 CHECK(resource_instance->get_value_int() == 123456789);
ram54288 0:a7a43371b306 252
ram54288 0:a7a43371b306 253 // verify string value helper
ram54288 0:a7a43371b306 254 CHECK(resource_instance->get_value_string() == "123456789");
ram54288 0:a7a43371b306 255
ram54288 0:a7a43371b306 256 free(resource_instance->_value);
ram54288 0:a7a43371b306 257 resource_instance->_value_length = 0;
ram54288 0:a7a43371b306 258
ram54288 0:a7a43371b306 259 CHECK(resource_instance->set_value(NULL,0) == false);
ram54288 0:a7a43371b306 260
ram54288 0:a7a43371b306 261 CHECK(resource_instance->set_value(NULL,0) == false);
ram54288 0:a7a43371b306 262
ram54288 0:a7a43371b306 263 m2mbase_stub::observation_level_value = M2MBase::R_Attribute;
ram54288 0:a7a43371b306 264 resource_instance->_value = (u_int8_t*)malloc(sizeof(value)+1);
ram54288 0:a7a43371b306 265 memset(resource_instance->_value,0,sizeof(value)+1);
ram54288 0:a7a43371b306 266 memcpy(resource_instance->_value,value,sizeof(value));
ram54288 0:a7a43371b306 267 resource_instance->_value_length = sizeof(value);
ram54288 0:a7a43371b306 268 TestReportObserver obs;
ram54288 0:a7a43371b306 269 m2mbase_stub::report = new M2MReportHandler(obs);
ram54288 0:a7a43371b306 270
ram54288 0:a7a43371b306 271 u_int8_t value4[] = {"value4"};
ram54288 0:a7a43371b306 272 CHECK(resource_instance->set_value(value4,(u_int32_t)sizeof(value4)) == true);
ram54288 0:a7a43371b306 273
ram54288 0:a7a43371b306 274
ram54288 0:a7a43371b306 275 m2mbase_stub::base_type = M2MBase::ResourceInstance;
ram54288 0:a7a43371b306 276 m2mbase_stub::observation_level_value = M2MBase::O_Attribute;
ram54288 0:a7a43371b306 277 resource_instance->_resource_type = M2MResourceInstance::INTEGER;
ram54288 0:a7a43371b306 278 m2mbase_stub::mode_value = M2MBase::Dynamic;
ram54288 0:a7a43371b306 279 ResourceCallback *resource_cb = new ResourceCallback();
ram54288 0:a7a43371b306 280 resource_instance->set_resource_observer(resource_cb);
ram54288 0:a7a43371b306 281 CHECK(resource_instance->set_value(value2,(u_int32_t)sizeof(value2)) == true);
ram54288 0:a7a43371b306 282
ram54288 0:a7a43371b306 283 // XXX: the callback will not be called on current code with combination of
ram54288 0:a7a43371b306 284 // M2MBase::Dynamic and M2MBase::R_Attribute.
ram54288 0:a7a43371b306 285 CHECK(resource_cb->visited == false);
ram54288 0:a7a43371b306 286
ram54288 0:a7a43371b306 287 resource_cb->visited = false;
ram54288 0:a7a43371b306 288 m2mbase_stub::observation_level_value = M2MBase::R_Attribute;
ram54288 0:a7a43371b306 289 CHECK(resource_instance->set_value(value3,(u_int32_t)sizeof(value3)) == true);
ram54288 0:a7a43371b306 290 CHECK(resource_cb->visited == true);
ram54288 0:a7a43371b306 291
ram54288 0:a7a43371b306 292 resource_instance->set_resource_observer(NULL);
ram54288 0:a7a43371b306 293 resource_cb->visited = false;
ram54288 0:a7a43371b306 294 m2mbase_stub::observation_level_value = M2MBase::R_Attribute;
ram54288 0:a7a43371b306 295 CHECK(resource_instance->set_value(value2,(u_int32_t)sizeof(value2)) == true);
ram54288 0:a7a43371b306 296 CHECK(resource_cb->visited == false);
ram54288 0:a7a43371b306 297
ram54288 0:a7a43371b306 298
ram54288 0:a7a43371b306 299 CHECK(resource_instance->set_value(value3,(u_int32_t)sizeof(value3)) == true);
ram54288 0:a7a43371b306 300
ram54288 0:a7a43371b306 301 m2mbase_stub::observation_level_value = M2MBase::OI_Attribute;
ram54288 0:a7a43371b306 302
ram54288 0:a7a43371b306 303 resource_instance->_resource_type = M2MResourceInstance::INTEGER;
ram54288 0:a7a43371b306 304
ram54288 0:a7a43371b306 305 m2mbase_stub::mode_value = M2MBase::Dynamic;
ram54288 0:a7a43371b306 306
ram54288 0:a7a43371b306 307 CHECK(resource_instance->set_value(value2,(u_int32_t)sizeof(value2)) == true);
ram54288 0:a7a43371b306 308
ram54288 0:a7a43371b306 309 m2mbase_stub::observation_level_value = M2MBase::OOI_Attribute;
ram54288 0:a7a43371b306 310
ram54288 0:a7a43371b306 311 resource_instance->_resource_type = M2MResourceInstance::INTEGER;
ram54288 0:a7a43371b306 312
ram54288 0:a7a43371b306 313 m2mbase_stub::mode_value = M2MBase::Dynamic;
ram54288 0:a7a43371b306 314
ram54288 0:a7a43371b306 315 CHECK(resource_instance->set_value(value2,(u_int32_t)sizeof(value2)) == true);
ram54288 0:a7a43371b306 316
ram54288 0:a7a43371b306 317 delete m2mbase_stub::report;
ram54288 0:a7a43371b306 318 m2mbase_stub::report = NULL;
ram54288 0:a7a43371b306 319 delete resource_cb;
ram54288 0:a7a43371b306 320 }
ram54288 0:a7a43371b306 321
ram54288 0:a7a43371b306 322 void Test_M2MResourceInstance::test_clear_value()
ram54288 0:a7a43371b306 323 {
ram54288 0:a7a43371b306 324 u_int8_t value[] = {"value"};
ram54288 0:a7a43371b306 325 resource_instance->_value = (u_int8_t*)malloc(sizeof(u_int8_t));
ram54288 0:a7a43371b306 326
ram54288 0:a7a43371b306 327 m2mbase_stub::observe = handler;
ram54288 0:a7a43371b306 328 TestReportObserver obs;
ram54288 0:a7a43371b306 329 m2mbase_stub::report = new M2MReportHandler(obs);
ram54288 0:a7a43371b306 330
ram54288 0:a7a43371b306 331 CHECK(resource_instance->set_value(value,(u_int32_t)sizeof(value)) == true);
ram54288 0:a7a43371b306 332 CHECK( resource_instance->_value_length == sizeof(value));
ram54288 0:a7a43371b306 333 CHECK( *resource_instance->_value == *value);
ram54288 0:a7a43371b306 334 resource_instance->clear_value();
ram54288 0:a7a43371b306 335
ram54288 0:a7a43371b306 336 CHECK( resource_instance->_value_length == 0);
ram54288 0:a7a43371b306 337 CHECK( resource_instance->_value == NULL);
ram54288 0:a7a43371b306 338
ram54288 0:a7a43371b306 339 m2mbase_stub::bool_value = true;
ram54288 0:a7a43371b306 340 m2mbase_stub::mode_value = M2MBase::Dynamic;
ram54288 0:a7a43371b306 341 m2mbase_stub::observation_level_value = M2MBase::R_Attribute;
ram54288 0:a7a43371b306 342 resource_instance->_resource_type = M2MResourceInstance::INTEGER;
ram54288 0:a7a43371b306 343 resource_instance->clear_value();
ram54288 0:a7a43371b306 344
ram54288 0:a7a43371b306 345 CHECK( resource_instance->_value_length == 0);
ram54288 0:a7a43371b306 346 CHECK( resource_instance->_value == NULL);
ram54288 0:a7a43371b306 347
ram54288 0:a7a43371b306 348 delete m2mbase_stub::report;
ram54288 0:a7a43371b306 349 m2mbase_stub::report = NULL;
ram54288 0:a7a43371b306 350 }
ram54288 0:a7a43371b306 351
ram54288 0:a7a43371b306 352 void Test_M2MResourceInstance::test_get_value()
ram54288 0:a7a43371b306 353 {
ram54288 0:a7a43371b306 354 u_int8_t test_value[] = {"value3"};
ram54288 0:a7a43371b306 355 u_int32_t value_length((u_int32_t)sizeof(test_value));
ram54288 0:a7a43371b306 356
ram54288 0:a7a43371b306 357 resource_instance->_value = (u_int8_t *)malloc(value_length);
ram54288 0:a7a43371b306 358 resource_instance->_value_length = value_length;
ram54288 0:a7a43371b306 359 memcpy((u_int8_t *)resource_instance->_value, (u_int8_t *)test_value, value_length);
ram54288 0:a7a43371b306 360
ram54288 0:a7a43371b306 361 uint8_t* buffer = (uint8_t*)malloc(5);
ram54288 0:a7a43371b306 362 uint32_t val_size = 0;
ram54288 0:a7a43371b306 363 resource_instance->get_value(buffer, val_size);
ram54288 0:a7a43371b306 364 CHECK(val_size == value_length);
ram54288 0:a7a43371b306 365 free(buffer);
ram54288 0:a7a43371b306 366
ram54288 0:a7a43371b306 367 resource_instance->clear_value();
ram54288 0:a7a43371b306 368 CHECK(resource_instance->_value == NULL);
ram54288 0:a7a43371b306 369
ram54288 0:a7a43371b306 370
ram54288 0:a7a43371b306 371 }
ram54288 0:a7a43371b306 372
ram54288 0:a7a43371b306 373 void Test_M2MResourceInstance::test_value()
ram54288 0:a7a43371b306 374 {
ram54288 0:a7a43371b306 375 CHECK(resource_instance->value() == NULL);
ram54288 0:a7a43371b306 376 }
ram54288 0:a7a43371b306 377
ram54288 0:a7a43371b306 378 void Test_M2MResourceInstance::test_value_length()
ram54288 0:a7a43371b306 379 {
ram54288 0:a7a43371b306 380 CHECK(resource_instance->value_length() == 0);
ram54288 0:a7a43371b306 381 }
ram54288 0:a7a43371b306 382
ram54288 0:a7a43371b306 383 void Test_M2MResourceInstance::test_handle_get_request()
ram54288 0:a7a43371b306 384 {
ram54288 0:a7a43371b306 385 uint8_t value[] = {"name"};
ram54288 0:a7a43371b306 386 sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
ram54288 0:a7a43371b306 387 memset(coap_header, 0, sizeof(sn_coap_hdr_s));
ram54288 0:a7a43371b306 388
ram54288 0:a7a43371b306 389 coap_header->uri_path_ptr = value;
ram54288 0:a7a43371b306 390 coap_header->uri_path_len = sizeof(value);
ram54288 0:a7a43371b306 391
ram54288 0:a7a43371b306 392 coap_header->msg_code = COAP_MSG_CODE_REQUEST_GET;
ram54288 0:a7a43371b306 393
ram54288 0:a7a43371b306 394 common_stub::int_value = 0;
ram54288 0:a7a43371b306 395 m2mbase_stub::string_value = "name";
ram54288 0:a7a43371b306 396
ram54288 0:a7a43371b306 397 m2mbase_stub::operation = M2MBase::GET_ALLOWED;
ram54288 0:a7a43371b306 398 m2mbase_stub::uint8_value = 200;
ram54288 0:a7a43371b306 399 common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
ram54288 0:a7a43371b306 400 memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
ram54288 0:a7a43371b306 401
ram54288 0:a7a43371b306 402 coap_header->token_ptr = (uint8_t*)malloc(sizeof(value));
ram54288 0:a7a43371b306 403 memcpy(coap_header->token_ptr, value, sizeof(value));
ram54288 0:a7a43371b306 404
ram54288 0:a7a43371b306 405 common_stub::coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
ram54288 0:a7a43371b306 406 coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
ram54288 0:a7a43371b306 407 coap_header->options_list_ptr->observe = 0;
ram54288 0:a7a43371b306 408
ram54288 0:a7a43371b306 409 coap_header->content_format = sn_coap_content_format_e(110);
ram54288 0:a7a43371b306 410
ram54288 0:a7a43371b306 411 CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
ram54288 0:a7a43371b306 412
ram54288 0:a7a43371b306 413 MyTest test;
ram54288 0:a7a43371b306 414 test.block_requested = false;
ram54288 0:a7a43371b306 415 resource_instance->set_incoming_block_message_callback(
ram54288 0:a7a43371b306 416 incoming_block_message_callback(&test, &MyTest::block_message_received));
ram54288 0:a7a43371b306 417 resource_instance->set_outgoing_block_message_callback(
ram54288 0:a7a43371b306 418 outgoing_block_message_callback(&test,&MyTest::block_message_requested));
ram54288 0:a7a43371b306 419 m2mblockmessage_stub::is_block_message = true;
ram54288 0:a7a43371b306 420 CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
ram54288 0:a7a43371b306 421 CHECK(test.block_requested == true);
ram54288 0:a7a43371b306 422 m2mblockmessage_stub::is_block_message = false;
ram54288 0:a7a43371b306 423
ram54288 0:a7a43371b306 424 // OMA OPAQUE
ram54288 0:a7a43371b306 425 resource_instance->_resource_type = M2MResourceInstance::OPAQUE;
ram54288 0:a7a43371b306 426
ram54288 0:a7a43371b306 427 CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
ram54288 0:a7a43371b306 428
ram54288 0:a7a43371b306 429 // Not OMA TLV or JSON
ram54288 0:a7a43371b306 430 m2mbase_stub::uint8_value = 110;
ram54288 0:a7a43371b306 431 CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
ram54288 0:a7a43371b306 432
ram54288 0:a7a43371b306 433 // OMA TLV
ram54288 0:a7a43371b306 434 m2mbase_stub::uint8_value = 99;
ram54288 0:a7a43371b306 435 CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
ram54288 0:a7a43371b306 436 // OMA JSON
ram54288 0:a7a43371b306 437 m2mbase_stub::uint8_value = 100;
ram54288 0:a7a43371b306 438 CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
ram54288 0:a7a43371b306 439
ram54288 0:a7a43371b306 440 coap_header->options_list_ptr->observe = 0;
ram54288 0:a7a43371b306 441 m2mbase_stub::uint16_value = 0x1c1c;
ram54288 0:a7a43371b306 442 m2mbase_stub::bool_value = true;
ram54288 0:a7a43371b306 443
ram54288 0:a7a43371b306 444 CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
ram54288 0:a7a43371b306 445
ram54288 0:a7a43371b306 446 // Not observable
ram54288 0:a7a43371b306 447 m2mbase_stub::bool_value = false;
ram54288 0:a7a43371b306 448 CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
ram54288 0:a7a43371b306 449
ram54288 0:a7a43371b306 450 m2mbase_stub::bool_value = true;
ram54288 0:a7a43371b306 451
ram54288 0:a7a43371b306 452 coap_header->options_list_ptr->observe = 0;
ram54288 0:a7a43371b306 453
ram54288 0:a7a43371b306 454 CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
ram54288 0:a7a43371b306 455
ram54288 0:a7a43371b306 456 coap_header->options_list_ptr->observe = 1;
ram54288 0:a7a43371b306 457 CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
ram54288 0:a7a43371b306 458
ram54288 0:a7a43371b306 459 m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
ram54288 0:a7a43371b306 460 CHECK(resource_instance->handle_get_request(NULL,coap_header,handler) != NULL);
ram54288 0:a7a43371b306 461
ram54288 0:a7a43371b306 462 CHECK(resource_instance->handle_get_request(NULL,NULL,handler) != NULL);
ram54288 0:a7a43371b306 463
ram54288 0:a7a43371b306 464 if(coap_header->token_ptr) {
ram54288 0:a7a43371b306 465 free(coap_header->token_ptr);
ram54288 0:a7a43371b306 466 coap_header->token_ptr = NULL;
ram54288 0:a7a43371b306 467 }
ram54288 0:a7a43371b306 468 if(coap_header->options_list_ptr) {
ram54288 0:a7a43371b306 469 free(coap_header->options_list_ptr);
ram54288 0:a7a43371b306 470 coap_header->options_list_ptr = NULL;
ram54288 0:a7a43371b306 471 }
ram54288 0:a7a43371b306 472
ram54288 0:a7a43371b306 473 if(common_stub::coap_header){
ram54288 0:a7a43371b306 474 if(common_stub::coap_header->options_list_ptr) {
ram54288 0:a7a43371b306 475 free(common_stub::coap_header->options_list_ptr);
ram54288 0:a7a43371b306 476 common_stub::coap_header->options_list_ptr = NULL;
ram54288 0:a7a43371b306 477 }
ram54288 0:a7a43371b306 478 free(common_stub::coap_header);
ram54288 0:a7a43371b306 479 common_stub::coap_header = NULL;
ram54288 0:a7a43371b306 480 }
ram54288 0:a7a43371b306 481 free(coap_header);
ram54288 0:a7a43371b306 482 coap_header = NULL;
ram54288 0:a7a43371b306 483
ram54288 0:a7a43371b306 484 m2mbase_stub::clear();
ram54288 0:a7a43371b306 485 common_stub::clear();
ram54288 0:a7a43371b306 486 }
ram54288 0:a7a43371b306 487
ram54288 0:a7a43371b306 488 void Test_M2MResourceInstance::test_handle_put_request()
ram54288 0:a7a43371b306 489 {
ram54288 0:a7a43371b306 490 uint8_t value[] = {"name"};
ram54288 0:a7a43371b306 491 bool execute_value_updated = false;
ram54288 0:a7a43371b306 492 sn_coap_hdr_s *coap_header = (sn_coap_hdr_s *)malloc(sizeof(sn_coap_hdr_s));
ram54288 0:a7a43371b306 493 memset(coap_header, 0, sizeof(sn_coap_hdr_s));
ram54288 0:a7a43371b306 494
ram54288 0:a7a43371b306 495 coap_header->uri_path_ptr = value;
ram54288 0:a7a43371b306 496 coap_header->uri_path_len = sizeof(value);
ram54288 0:a7a43371b306 497
ram54288 0:a7a43371b306 498 coap_header->msg_code = COAP_MSG_CODE_REQUEST_PUT;
ram54288 0:a7a43371b306 499
ram54288 0:a7a43371b306 500 common_stub::int_value = 0;
ram54288 0:a7a43371b306 501 m2mbase_stub::string_value = "name";
ram54288 0:a7a43371b306 502
ram54288 0:a7a43371b306 503 m2mbase_stub::operation = M2MBase::PUT_ALLOWED;
ram54288 0:a7a43371b306 504 m2mbase_stub::uint8_value = 200;
ram54288 0:a7a43371b306 505
ram54288 0:a7a43371b306 506 common_stub::coap_header = (sn_coap_hdr_ *)malloc(sizeof(sn_coap_hdr_));
ram54288 0:a7a43371b306 507 memset(common_stub::coap_header,0,sizeof(sn_coap_hdr_));
ram54288 0:a7a43371b306 508
ram54288 0:a7a43371b306 509 coap_header->payload_ptr = (uint8_t*)malloc(1);
ram54288 0:a7a43371b306 510
ram54288 0:a7a43371b306 511 coap_header->options_list_ptr = (sn_coap_options_list_s*)malloc(sizeof(sn_coap_options_list_s));
ram54288 0:a7a43371b306 512 coap_header->options_list_ptr->uri_query_ptr = value;
ram54288 0:a7a43371b306 513 coap_header->options_list_ptr->uri_query_len = sizeof(value);
ram54288 0:a7a43371b306 514
ram54288 0:a7a43371b306 515 coap_header->content_format = sn_coap_content_format_e(99);
ram54288 0:a7a43371b306 516 m2mtlvdeserializer_stub::bool_value = true;
ram54288 0:a7a43371b306 517
ram54288 0:a7a43371b306 518 m2mbase_stub::bool_value = false;
ram54288 0:a7a43371b306 519
ram54288 0:a7a43371b306 520 sn_coap_hdr_s *coap_response = NULL;
ram54288 0:a7a43371b306 521 coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
ram54288 0:a7a43371b306 522 CHECK( coap_response != NULL);
ram54288 0:a7a43371b306 523
ram54288 0:a7a43371b306 524 free(coap_header->options_list_ptr);
ram54288 0:a7a43371b306 525 coap_header->options_list_ptr = NULL;
ram54288 0:a7a43371b306 526
ram54288 0:a7a43371b306 527 coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
ram54288 0:a7a43371b306 528 CHECK( coap_response != NULL);
ram54288 0:a7a43371b306 529
ram54288 0:a7a43371b306 530 m2mtlvdeserializer_stub::bool_value = false;
ram54288 0:a7a43371b306 531
ram54288 0:a7a43371b306 532 coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
ram54288 0:a7a43371b306 533
ram54288 0:a7a43371b306 534 CHECK( coap_response != NULL);
ram54288 0:a7a43371b306 535
ram54288 0:a7a43371b306 536 coap_header->content_format = sn_coap_content_format_e(100);
ram54288 0:a7a43371b306 537
ram54288 0:a7a43371b306 538 coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
ram54288 0:a7a43371b306 539
ram54288 0:a7a43371b306 540 CHECK( coap_response != NULL);
ram54288 0:a7a43371b306 541
ram54288 0:a7a43371b306 542 m2mbase_stub::bool_value = true;
ram54288 0:a7a43371b306 543
ram54288 0:a7a43371b306 544 coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
ram54288 0:a7a43371b306 545
ram54288 0:a7a43371b306 546 CHECK( coap_response != NULL);
ram54288 0:a7a43371b306 547
ram54288 0:a7a43371b306 548 m2mbase_stub::operation = M2MBase::NOT_ALLOWED;
ram54288 0:a7a43371b306 549
ram54288 0:a7a43371b306 550 coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
ram54288 0:a7a43371b306 551
ram54288 0:a7a43371b306 552 CHECK( coap_response != NULL);
ram54288 0:a7a43371b306 553
ram54288 0:a7a43371b306 554 coap_response = resource_instance->handle_put_request(NULL,NULL,handler,execute_value_updated);
ram54288 0:a7a43371b306 555
ram54288 0:a7a43371b306 556 CHECK( coap_response != NULL);
ram54288 0:a7a43371b306 557
ram54288 0:a7a43371b306 558 MyTest test;
ram54288 0:a7a43371b306 559 test.block_received = false;
ram54288 0:a7a43371b306 560 m2mbase_stub::operation = M2MBase::PUT_ALLOWED;
ram54288 0:a7a43371b306 561 m2mblockmessage_stub::is_block_message = true;
ram54288 0:a7a43371b306 562 m2mblockmessage_stub::is_last_block = false;
ram54288 0:a7a43371b306 563 resource_instance->set_incoming_block_message_callback(
ram54288 0:a7a43371b306 564 incoming_block_message_callback(&test, &MyTest::block_message_received));
ram54288 0:a7a43371b306 565 coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
ram54288 0:a7a43371b306 566 CHECK(test.block_received == true);
ram54288 0:a7a43371b306 567 CHECK( coap_response != NULL);
ram54288 0:a7a43371b306 568
ram54288 0:a7a43371b306 569 test.block_received = false;
ram54288 0:a7a43371b306 570 m2mblockmessage_stub::is_block_message = true;
ram54288 0:a7a43371b306 571 m2mblockmessage_stub::is_last_block = true;
ram54288 0:a7a43371b306 572 coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
ram54288 0:a7a43371b306 573 CHECK(test.block_received == true);
ram54288 0:a7a43371b306 574 CHECK( coap_response != NULL);
ram54288 0:a7a43371b306 575
ram54288 0:a7a43371b306 576 test.block_received = false;
ram54288 0:a7a43371b306 577 m2mblockmessage_stub::is_block_message = false;
ram54288 0:a7a43371b306 578 m2mblockmessage_stub::is_last_block = false;
ram54288 0:a7a43371b306 579 coap_response = resource_instance->handle_put_request(NULL,coap_header,handler,execute_value_updated);
ram54288 0:a7a43371b306 580 CHECK(test.block_received == false);
ram54288 0:a7a43371b306 581 CHECK( coap_response != NULL);
ram54288 0:a7a43371b306 582
ram54288 0:a7a43371b306 583 free(coap_header->options_list_ptr);
ram54288 0:a7a43371b306 584 free(coap_header->payload_ptr);
ram54288 0:a7a43371b306 585 free(common_stub::coap_header);
ram54288 0:a7a43371b306 586 free(coap_header);
ram54288 0:a7a43371b306 587
ram54288 0:a7a43371b306 588 m2mtlvdeserializer_stub::clear();
ram54288 0:a7a43371b306 589 common_stub::clear();
ram54288 0:a7a43371b306 590 m2mbase_stub::clear();
ram54288 0:a7a43371b306 591 }
ram54288 0:a7a43371b306 592
ram54288 0:a7a43371b306 593 void Test_M2MResourceInstance::test_set_resource_observer()
ram54288 0:a7a43371b306 594 {
ram54288 0:a7a43371b306 595 ResourceCallback *resource_cb = new ResourceCallback();
ram54288 0:a7a43371b306 596 resource_instance->set_resource_observer(resource_cb);
ram54288 0:a7a43371b306 597 CHECK(resource_instance->_resource_callback == resource_cb)
ram54288 0:a7a43371b306 598 delete resource_cb;
ram54288 0:a7a43371b306 599 }
ram54288 0:a7a43371b306 600
ram54288 0:a7a43371b306 601
ram54288 0:a7a43371b306 602 void Test_M2MResourceInstance::test_get_object_name()
ram54288 0:a7a43371b306 603 {
ram54288 0:a7a43371b306 604 m2mbase_stub::string_value = "name";
ram54288 0:a7a43371b306 605 CHECK(resource_instance->object_name() == "name");
ram54288 0:a7a43371b306 606 }
ram54288 0:a7a43371b306 607
ram54288 0:a7a43371b306 608 void Test_M2MResourceInstance::test_get_object_instance_id()
ram54288 0:a7a43371b306 609 {
ram54288 0:a7a43371b306 610 resource_instance->_object_instance_id = 100;
ram54288 0:a7a43371b306 611 CHECK(resource_instance->object_instance_id() == 100);
ram54288 0:a7a43371b306 612 }
ram54288 0:a7a43371b306 613
ram54288 0:a7a43371b306 614 void Test_M2MResourceInstance::test_set_notification_sent_function()
ram54288 0:a7a43371b306 615 {
ram54288 0:a7a43371b306 616 MyTest test;
ram54288 0:a7a43371b306 617 resource_instance->set_notification_sent_callback(
ram54288 0:a7a43371b306 618 notification_sent_callback(&test,&MyTest::notification_sent));
ram54288 0:a7a43371b306 619 resource_instance->set_notification_sent_callback(global_notification_sent_function);
ram54288 0:a7a43371b306 620 }
ram54288 0:a7a43371b306 621
ram54288 0:a7a43371b306 622 void Test_M2MResourceInstance::test_notification_sent()
ram54288 0:a7a43371b306 623 {
ram54288 0:a7a43371b306 624 MyTest test;
ram54288 0:a7a43371b306 625 void *args = NULL;
ram54288 0:a7a43371b306 626
ram54288 0:a7a43371b306 627 resource_instance->set_notification_sent_callback(
ram54288 0:a7a43371b306 628 notification_sent_callback(&test,&MyTest::notification_sent));
ram54288 0:a7a43371b306 629 resource_instance->notification_sent();
ram54288 0:a7a43371b306 630
ram54288 0:a7a43371b306 631 cb_visited = false;
ram54288 0:a7a43371b306 632 resource_instance->set_notification_sent_callback(global_notification_sent_function);
ram54288 0:a7a43371b306 633 resource_instance->notification_sent();
ram54288 0:a7a43371b306 634 CHECK(true == cb_visited);
ram54288 0:a7a43371b306 635
ram54288 0:a7a43371b306 636 // Check delete
ram54288 0:a7a43371b306 637 cb_visited = false;
ram54288 0:a7a43371b306 638 resource_instance->set_notification_sent_callback(global_notification_sent_function);
ram54288 0:a7a43371b306 639 resource_instance->notification_sent();
ram54288 0:a7a43371b306 640 CHECK(true == cb_visited);
ram54288 0:a7a43371b306 641 }
ram54288 0:a7a43371b306 642
ram54288 0:a7a43371b306 643 void Test_M2MResourceInstance::test_ctor()
ram54288 0:a7a43371b306 644 {
ram54288 0:a7a43371b306 645 M2MResourceInstance* instance = new M2MResourceInstance(*m2mobjectinstance_stub::resource, &params,
ram54288 0:a7a43371b306 646 M2MResourceInstance::STRING, 0);
ram54288 0:a7a43371b306 647 CHECK(instance != NULL);
ram54288 0:a7a43371b306 648 delete instance;
ram54288 0:a7a43371b306 649 }
ram54288 0:a7a43371b306 650
ram54288 0:a7a43371b306 651 void Test_M2MResourceInstance::test_get_parent_resource()
ram54288 0:a7a43371b306 652 {
ram54288 0:a7a43371b306 653 M2MResourceInstance* instance = new M2MResourceInstance(*m2mobjectinstance_stub::resource, &params,
ram54288 0:a7a43371b306 654 M2MResourceInstance::STRING, 0);
ram54288 0:a7a43371b306 655 // Only for the code coverage
ram54288 0:a7a43371b306 656 instance->get_parent_resource();
ram54288 0:a7a43371b306 657 delete instance;
ram54288 0:a7a43371b306 658 }