1 //******************************************************************
3 // Copyright 2015 Samsung Electronics All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21 #include "UnitTestHelper.h"
22 #include "MaintenanceCollection.h"
23 #include "ConfigurationCollection.h"
24 #include "FactorySetCollection.h"
27 #include "ActionSet.h"
28 #include "GroupManager.h"
29 #include "ThingsConfiguration.h"
30 #include "ThingsMaintenance.h"
32 #include "OCPlatform.h"
38 #include <condition_variable>
40 #define SUCCESS_RESPONSE 0
41 constexpr int DEFAULT_WAITING_TIME_IN_MILLIS = 3000;
46 namespace PH = std::placeholders;
49 bool isSlowResponse = false;
51 std::string defaultDeviceName = "Legacy Device";
52 std::string defaultLocation = "37.256616, 127.052806";
53 std::string defaultLocationName = "Living Room";
54 std::string defaultRegion = "Won";
55 std::string defaultCurrency = "Seoul, Korea";
57 OCResourceHandle resourceHandle;
58 OCResourceHandle foundResourceHandle;
60 std::shared_ptr< OCResource > g_resource;
61 std::shared_ptr< OCResource > g_room_resource;
62 std::shared_ptr< OCResource > g_light;
63 std::shared_ptr< OCResource > configurationResource;
64 std::vector< string > lights;
65 std::vector< OCResourceHandle > resourceHandleVector;
67 GroupManager *groupMgr = new GroupManager();
68 ConfigurationResource *myConfigurationResource;
69 MaintenanceResource *myMaintenanceResource;
70 FactorySetResource *myFactorySetResource;
72 std::condition_variable cv1;
73 std::condition_variable cv2;
74 std::condition_variable cv3;
75 std::condition_variable cv4;
76 std::condition_variable cv5;
78 bool prepareResponseForResource(std::shared_ptr< OCResourceRequest > request);
79 OCStackResult sendResponseForResource(std::shared_ptr< OCResourceRequest > pRequest);
80 OCEntityHandlerResult entityHandlerForResource(std::shared_ptr< OCResourceRequest > request);
81 OCEntityHandlerResult entityHandlerBootstrap(std::shared_ptr< OCResourceRequest > request);
83 typedef std::function< void(OCRepresentation &) > putFunc;
84 typedef std::function< OCRepresentation(void) > getFunc;
86 void *ChangeLightRepresentation(void *param);
87 void *handleSlowResponse(void *param, std::shared_ptr< OCResourceRequest > pRequest);
89 /****** Light Resource [Required to gtestcases of GroupManager APIs] ******/
96 std::string m_lightUri;
97 OCResourceHandle m_resourceHandle;
98 OCRepresentation m_lightRep;
102 m_power("on"), m_lightUri("/a/light"), m_resourceHandle(0)
104 m_lightRep.setUri(m_lightUri);
105 m_lightRep.setValue("power", m_power);
108 void createResource()
110 std::string resourceURI = m_lightUri;
111 std::string resourceTypeName = "core.light";
112 std::string resourceInterface = DEFAULT_INTERFACE;
113 EntityHandler cb = std::bind(&LightResource::entityHandler, this, PH::_1);
115 OCStackResult result = OCPlatform::registerResource(m_resourceHandle, resourceURI,
116 resourceTypeName, resourceInterface, cb, OC_DISCOVERABLE | OC_OBSERVABLE);
118 if (OC_STACK_OK != result)
120 printf("\nLightResource : OC_STACK_OK != result...");
126 std::condition_variable cv;
127 std::unique_lock < std::mutex > lock(blocker);
132 OCResourceHandle getHandle()
134 return m_resourceHandle;
137 void put(OCRepresentation &rep)
142 if (rep.getValue < std::string > ("power", test))
144 cout << "\t\t\t\t" << "power: " << test << endl;
148 cout << "\t\t\t\t" << "power not found in the representation" << endl;
153 cout << e.what() << endl;
157 OCRepresentation post(OCRepresentation &rep)
163 OCRepresentation get()
165 m_lightRep.setValue("power", m_power);
170 void addType(const std::string &type) const
172 OCStackResult result = OCPlatform::bindTypeToResource(m_resourceHandle, type);
173 if (OC_STACK_OK != result)
175 cout << "Binding TypeName to Resource was unsuccessful\n";
179 void addInterface(const std::string &interface) const
181 OCStackResult result = OCPlatform::bindInterfaceToResource(m_resourceHandle, interface);
182 if (OC_STACK_OK != result)
184 cout << "Binding TypeName to Resource was unsuccessful\n";
189 OCEntityHandlerResult entityHandler(std::shared_ptr< OCResourceRequest > request)
191 cout << "\tIn Server CPP entity handler:\n";
192 OCEntityHandlerResult ehResult = OC_EH_ERROR;
195 std::string requestType = request->getRequestType();
196 int requestFlag = request->getRequestHandlerFlag();
198 if (requestFlag & RequestHandlerFlag::RequestFlag)
200 cout << "\t\trequestFlag : Request\n";
201 auto pResponse = std::make_shared< OC::OCResourceResponse >();
202 pResponse->setRequestHandle(request->getRequestHandle());
203 pResponse->setResourceHandle(request->getResourceHandle());
205 if (requestType == "GET")
207 cout << "\t\t\trequestType : GET\n";
210 static int startedThread = 0;
213 std::thread t(handleSlowResponse, (void *) this, request);
217 ehResult = OC_EH_SLOW;
221 pResponse->setErrorCode(200);
222 pResponse->setResponseResult(OC_EH_OK);
223 pResponse->setResourceRepresentation(get());
224 if (OC_STACK_OK == OCPlatform::sendResponse(pResponse))
230 else if (requestType == "PUT")
232 cout << "\t\t\trequestType : PUT\n";
233 OCRepresentation rep = request->getResourceRepresentation();
235 pResponse->setErrorCode(200);
236 pResponse->setResponseResult(OC_EH_OK);
237 pResponse->setResourceRepresentation(rep);
238 if (OC_STACK_OK == OCPlatform::sendResponse(pResponse))
243 else if (requestType == "POST")
245 cout << "\t\t\trequestType : POST\n";
247 OCRepresentation rep = request->getResourceRepresentation();
248 OCRepresentation rep_post = post(rep);
250 pResponse->setResourceRepresentation(rep_post);
251 pResponse->setErrorCode(200);
252 if (rep_post.hasAttribute("createduri"))
254 pResponse->setResponseResult(OC_EH_RESOURCE_CREATED);
255 pResponse->setNewResourceUri(
256 rep_post.getValue < std::string > ("createduri"));
259 if (OC_STACK_OK == OCPlatform::sendResponse(pResponse))
264 else if (requestType == "DELETE")
271 std::cout << "Request invalid" << std::endl;
277 void *handleSlowResponse(void *param, std::shared_ptr< OCResourceRequest > pRequest)
279 LightResource *lightPtr = (LightResource *) param;
282 auto pResponse = std::make_shared< OC::OCResourceResponse >();
283 pResponse->setRequestHandle(pRequest->getRequestHandle());
284 pResponse->setResourceHandle(pRequest->getResourceHandle());
285 pResponse->setResourceRepresentation(lightPtr->get());
286 pResponse->setErrorCode(200);
287 pResponse->setResponseResult(OC_EH_OK);
289 isSlowResponse = false;
290 OCPlatform::sendResponse(pResponse);
294 /****** Configuration Resource ******/
296 void ConfigurationResource::createResources(ResourceEntityHandler callback)
298 using namespace OC::OCPlatform;
300 if (callback == NULL)
302 std::cout << "callback should be binded\t";
306 OCStackResult result = registerResource(m_configurationHandle, m_configurationUri,
307 m_configurationTypes[0], m_configurationInterfaces[0], callback,
308 OC_DISCOVERABLE | OC_OBSERVABLE);
310 if (OC_STACK_OK != result)
312 std::cout << "Resource creation (configuration) was unsuccessful\n";
318 std::condition_variable cv;
319 std::unique_lock < std::mutex > lock(blocker);
324 void ConfigurationResource::setConfigurationRepresentation(OCRepresentation &rep)
327 if (rep.getValue("n", value))
329 m_deviceName = value;
330 std::cout << "\t\t\t\t" << "m_deviceName: " << m_deviceName << std::endl;
333 if (rep.getValue("loc", value))
336 std::cout << "\t\t\t\t" << "m_location: " << m_location << std::endl;
339 if (rep.getValue("locn", value))
341 m_locationName = value;
342 std::cout << "\t\t\t\t" << "m_locationName: " << m_locationName << std::endl;
345 if (rep.getValue("c", value))
348 std::cout << "\t\t\t\t" << "m_currency: " << m_currency << std::endl;
351 if (rep.getValue("r", value))
354 std::cout << "\t\t\t\t" << "m_region: " << m_region << std::endl;
358 OCRepresentation ConfigurationResource::getConfigurationRepresentation()
360 m_configurationRep.setValue("n", m_deviceName);
361 m_configurationRep.setValue("loc", m_location);
362 m_configurationRep.setValue("locn", m_locationName);
363 m_configurationRep.setValue("c", m_currency);
364 m_configurationRep.setValue("r", m_region);
366 return m_configurationRep;
369 std::string ConfigurationResource::getUri()
371 return m_configurationUri;
374 void ConfigurationResource::factoryReset()
376 m_deviceName = defaultDeviceName;
377 m_location = defaultLocation;
378 m_locationName = defaultLocationName;
379 m_currency = defaultCurrency;
380 m_region = defaultRegion;
383 /****** FactorySet Resource ******/
385 FactorySetResource::FactorySetResource()
387 m_configurationUri = "/factoryset"; // URI of the resource
388 m_configurationTypes.clear();
389 m_configurationTypes.push_back("factoryset"); // resource type name.
390 m_configurationRep.setUri(m_configurationUri);
391 m_configurationRep.setResourceTypes(m_configurationTypes);
394 FactorySetResource::~FactorySetResource()
398 void FactorySetResource::createResources(ResourceEntityHandler callback)
400 using namespace OC::OCPlatform;
402 if (callback == NULL)
404 std::cout << "callback should be binded\t";
408 OCStackResult result = registerResource(m_configurationHandle, m_configurationUri,
409 m_configurationTypes[0], m_configurationInterfaces[0], callback,
410 OC_DISCOVERABLE | OC_OBSERVABLE);
412 if (OC_STACK_OK != result)
414 std::cout << "Resource creation (configuration) was unsuccessful\n";
421 std::condition_variable cv;
422 std::unique_lock < std::mutex > lock(blocker);
427 void FactorySetResource::setFactorySetRepresentation(OCRepresentation &rep)
431 if (rep.getValue("n", value))
433 m_deviceName = value;
434 std::cout << "\t\t\t\t" << "m_deviceName: " << m_deviceName << std::endl;
437 if (rep.getValue("loc", value))
440 std::cout << "\t\t\t\t" << "m_location: " << m_location << std::endl;
443 if (rep.getValue("locn", value))
445 m_locationName = value;
446 std::cout << "\t\t\t\t" << "m_locationName: " << m_locationName << std::endl;
449 if (rep.getValue("c", value))
452 std::cout << "\t\t\t\t" << "m_currency: " << m_currency << std::endl;
455 if (rep.getValue("r", value))
458 std::cout << "\t\t\t\t" << "m_region: " << m_region << std::endl;
462 OCRepresentation FactorySetResource::getFactorySetRepresentation()
464 m_configurationRep.setValue("n", m_deviceName);
465 m_configurationRep.setValue("loc", m_location);
466 m_configurationRep.setValue("locn", m_locationName);
467 m_configurationRep.setValue("c", m_currency);
468 m_configurationRep.setValue("r", m_region);
470 return m_configurationRep;
473 std::string FactorySetResource::getUri()
475 return m_configurationUri;
478 /****** Maintenance Resource ********/
480 void MaintenanceResource::createResources(ResourceEntityHandler callback)
482 using namespace OC::OCPlatform;
484 if (callback == NULL)
486 std::cout << "callback should be binded\t";
490 OCStackResult result = registerResource(m_maintenanceHandle, m_maintenanceUri,
491 m_maintenanceTypes[0], m_maintenanceInterfaces[0], callback,
492 OC_DISCOVERABLE | OC_OBSERVABLE);
494 if (OC_STACK_OK != result)
496 std::cout << "Resource creation (maintenance) was unsuccessful\n";
500 std::function< void(int second) >(
501 std::bind(&MaintenanceResource::maintenanceMonitor, this,
502 std::placeholders::_1)), 10);
506 std::condition_variable cv;
507 std::unique_lock < std::mutex > lock(blocker);
510 std::cout << "maintenance Resource is Created!\n";
513 void MaintenanceResource::setMaintenanceRepresentation(OCRepresentation &rep)
517 if (rep.getValue("fr", value))
519 m_factoryReset = value;
520 std::cout << "\t\t\t\t" << "m_factoryReset: " << m_factoryReset << std::endl;
523 if (rep.getValue("rb", value))
526 std::cout << "\t\t\t\t" << "m_reboot: " << m_reboot << std::endl;
529 if (rep.getValue("ssc", value))
531 m_startStatCollection = value;
532 std::cout << "\t\t\t\t" << "m_startStatCollection: " << m_startStatCollection << std::endl;
536 OCRepresentation MaintenanceResource::getMaintenanceRepresentation()
538 m_maintenanceRep.setValue("fr", m_factoryReset);
539 m_maintenanceRep.setValue("rb", m_reboot);
540 m_maintenanceRep.setValue("ssc", m_startStatCollection);
542 return m_maintenanceRep;
545 std::string MaintenanceResource::getUri()
547 return m_maintenanceUri;
550 void MaintenanceResource::maintenanceMonitor(int second)
556 if (m_reboot == "true")
559 std::cout << "Reboot will be soon..." << std::endl;
560 m_reboot = defaultReboot;
561 res = system("/usr/bin/sudo /etc/init.d/reboot");
563 std::cout << "return: " << res << std::endl;
566 else if (m_factoryReset == "true")
568 std::cout << "Factory Reset will be soon..." << std::endl;
569 m_factoryReset = defaultFactoryReset;
575 getFunc getGetFunction(std::string uri)
579 if (uri == myConfigurationResource->getUri())
581 res = std::bind(&ConfigurationResource::getConfigurationRepresentation,
582 myConfigurationResource);
584 else if (uri == myMaintenanceResource->getUri())
586 res = std::bind(&MaintenanceResource::getMaintenanceRepresentation, myMaintenanceResource);
591 putFunc getPutFunction(std::string uri)
595 if (uri == myConfigurationResource->getUri())
597 res = std::bind(&ConfigurationResource::setConfigurationRepresentation,
598 myConfigurationResource, std::placeholders::_1);
600 else if (uri == myMaintenanceResource->getUri())
602 res = std::bind(&MaintenanceResource::setMaintenanceRepresentation, myMaintenanceResource,
603 std::placeholders::_1);
608 bool prepareResponseForResource(std::shared_ptr< OCResourceRequest > request)
610 std::cout << "\tIn Server CPP prepareResponseForResource:\n";
614 std::string requestType = request->getRequestType();
615 int requestFlag = request->getRequestHandlerFlag();
617 if (requestFlag == RequestHandlerFlag::RequestFlag)
619 std::cout << "\t\trequestFlag : Request\n";
620 if (requestType == "GET")
622 std::cout << "\t\t\trequestType : GET\n";
625 else if (requestType == "PUT")
627 std::cout << "\t\t\trequestType : PUT\n";
629 OCRepresentation rep = request->getResourceRepresentation();
631 putFunction = getPutFunction(request->getResourceUri());
635 else if (requestType == "POST")
638 else if (requestType == "DELETE")
642 else if (requestFlag == RequestHandlerFlag::ObserverFlag)
644 std::cout << "\t\trequestFlag : Observer\n";
649 std::cout << "Request invalid" << std::endl;
655 OCStackResult sendResponseForResource(std::shared_ptr< OCResourceRequest > pRequest)
657 auto pResponse = std::make_shared< OC::OCResourceResponse >();
658 QueryParamsMap queryParamsMap = pRequest->getQueryParameters();
660 pResponse->setRequestHandle(pRequest->getRequestHandle());
661 pResponse->setResourceHandle(pRequest->getResourceHandle());
664 getFunction = getGetFunction(pRequest->getResourceUri());
666 OCRepresentation rep;
669 auto findRes = queryParamsMap.find("if");
671 if (findRes != queryParamsMap.end())
673 pResponse->setResourceRepresentation(rep, findRes->second);
677 pResponse->setResourceRepresentation(rep, DEFAULT_INTERFACE);
680 pResponse->setErrorCode(200);
681 pResponse->setResponseResult(OC_EH_OK);
683 return OCPlatform::sendResponse(pResponse);
686 OCEntityHandlerResult entityHandlerForResource(std::shared_ptr< OCResourceRequest > request)
688 std::cout << "\tIn Server CPP (entityHandlerForResource) entity handler:\n";
689 OCEntityHandlerResult ehResult = OC_EH_ERROR;
691 QueryParamsMap test = request->getQueryParameters();
693 if (prepareResponseForResource(request))
695 if (OC_STACK_OK == sendResponseForResource(request))
701 std::cout << "sendResponse failed." << std::endl;
706 std::cout << "PrepareResponse failed." << std::endl;
711 /****** BootStrap Resource [Required for doBootstrap API of ThingsConfiguration class] ******/
713 class BootstrapResource
716 std::string m_bootstrapUri;
717 std::vector< std::string > m_bootstrapTypes;
718 std::vector< std::string > m_bootstrapInterfaces;
719 OCResourceHandle m_bootstrapHandle;
720 OCRepresentation m_bootstrapRep;
725 m_bootstrapUri = "/bootstrap";
726 m_bootstrapTypes.push_back("bootstrap");
727 m_bootstrapInterfaces.push_back(DEFAULT_INTERFACE);
728 m_bootstrapRep.setUri(m_bootstrapUri);
729 m_bootstrapRep.setResourceTypes(m_bootstrapTypes);
730 m_bootstrapRep.setResourceInterfaces(m_bootstrapInterfaces);
731 m_bootstrapHandle = NULL;
733 void createResources()
735 using namespace OC::OCPlatform;
736 OCStackResult result = registerResource(m_bootstrapHandle, m_bootstrapUri,
737 m_bootstrapTypes[0], m_bootstrapInterfaces[0], entityHandlerBootstrap,
738 OC_DISCOVERABLE | OC_OBSERVABLE);
740 if (OC_STACK_OK != result)
742 cout << "Resource creation (room) was unsuccessful\n";
747 std::condition_variable cv;
748 std::unique_lock < std::mutex > lock(blocker);
752 void setBootstrapRepresentation(OCRepresentation& /*rep*/)
756 OCRepresentation getBootstrapRepresentation()
758 m_bootstrapRep.setValue < std::string > ("n", defaultDeviceName);
759 m_bootstrapRep.setValue < std::string > ("loc", defaultLocation);
760 m_bootstrapRep.setValue < std::string > ("locn", defaultLocationName);
761 m_bootstrapRep.setValue < std::string > ("c", defaultCurrency);
762 m_bootstrapRep.setValue < std::string > ("r", defaultRegion);
764 return m_bootstrapRep;
768 BootstrapResource myBootstrapResource;
770 bool prepareResponse(std::shared_ptr< OCResourceRequest > request)
772 cout << "\tIn Server CPP prepareResponse:\n";
776 std::string requestType = request->getRequestType();
777 int requestFlag = request->getRequestHandlerFlag();
779 if (requestFlag == RequestHandlerFlag::RequestFlag)
781 cout << "\t\trequestFlag : Request\n";
782 if (requestType == "GET")
784 cout << "\t\t\trequestType : GET\n";
787 else if (requestType == "PUT")
789 cout << "\t\t\trequestType : PUT\n";
791 OCRepresentation rep = request->getResourceRepresentation();
792 myBootstrapResource.setBootstrapRepresentation(rep);
795 else if (requestType == "POST")
798 else if (requestType == "DELETE")
802 else if (requestFlag == RequestHandlerFlag::ObserverFlag)
804 cout << "\t\trequestFlag : Observer\n";
809 std::cout << "Request invalid" << std::endl;
815 OCStackResult sendResponse(std::shared_ptr< OCResourceRequest > pRequest)
817 auto pResponse = std::make_shared< OC::OCResourceResponse >();
818 pResponse->setRequestHandle(pRequest->getRequestHandle());
819 pResponse->setResourceHandle(pRequest->getResourceHandle());
820 pResponse->setResourceRepresentation(myBootstrapResource.getBootstrapRepresentation());
821 pResponse->setErrorCode(200);
822 pResponse->setResponseResult(OC_EH_OK);
824 return OCPlatform::sendResponse(pResponse);
827 OCEntityHandlerResult entityHandlerBootstrap(std::shared_ptr< OCResourceRequest > request)
829 cout << "\tIn Server CPP (entityHandlerBootstrap) entity handler:\n";
830 OCEntityHandlerResult ehResult = OC_EH_ERROR;
832 if (prepareResponse(request))
834 if (OC_STACK_OK == sendResponse(request))
840 std::cout << "sendResponse failed." << std::endl;
845 std::cout << "PrepareResponse failed." << std::endl;
850 /****** gtest class ******/
852 class ThingsManagerTest: public TestWithMock
860 void Wait(int waitingTime = DEFAULT_WAITING_TIME_IN_MILLIS)
862 std::unique_lock < std::mutex > lock
864 cond.wait_for(lock, std::chrono::milliseconds
871 TestWithMock::SetUp();
876 TestWithMock::TearDown();
880 std::condition_variable cond;
885 void onUpdate(const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
890 void onGetBootstrapInformation(const HeaderOptions& /*headerOptions*/,
891 const OCRepresentation& /*rep*/, const int /*eCode*/)
895 void onReboot(const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
900 void onFactoryReset(const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
905 void onGet(const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
910 void onPut(const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
915 void onPost(const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
920 void foundResources(std::vector< std::shared_ptr< OC::OCResource > > listOfResource)
922 for (auto rsrc = listOfResource.begin(); rsrc != listOfResource.end(); ++rsrc)
924 if(((*rsrc)->connectivityType() & CT_ADAPTER_TCP) == CT_ADAPTER_TCP)
929 std::string resourceURI = (*rsrc)->uri();
930 std::string hostAddress = (*rsrc)->host();
932 if (resourceURI == "/a/light")
934 result = OCPlatform::registerResource(foundResourceHandle, (*rsrc));
935 if (result == OC_STACK_OK)
937 OCPlatform::bindResource(resourceHandle, foundResourceHandle);
938 resourceHandleVector.push_back(foundResourceHandle);
942 cout << "\tresource Error!" << endl;
944 lights.push_back((hostAddress + resourceURI));
951 configurationResource = (*rsrc);
958 void foundGroupResource(std::shared_ptr< OCResource > resource)
960 if((resource->connectivityType() & CT_ADAPTER_TCP) == CT_ADAPTER_TCP)
965 std::string resourceURI;
966 resourceURI = resource->uri();
967 if (resourceURI == "/core/a/collection")
969 g_resource = resource;
973 g_room_resource = resource;
978 //This test case is to create the lightserver , BootstrapServer & configuration sever
979 TEST_F(ThingsManagerTest, testCreateResources)
982 { OC::ServiceType::InProc, OC::ModeType::Both, "0.0.0.0", 0, OC::QualityOfService::LowQos};
983 OCPlatform::Configure(cfg);
985 LightResource myLight;
986 std::thread t1(&LightResource::createResource, &myLight);
989 std::unique_lock < std::mutex > lock1(blocker1);
992 std::thread t2(&BootstrapResource::createResources, &myBootstrapResource);
995 std::unique_lock < std::mutex > lock2(blocker2);
998 myConfigurationResource = new ConfigurationResource();
999 std::thread t3(&ConfigurationResource::createResources, myConfigurationResource,
1000 &entityHandlerForResource);
1003 std::mutex blocker3;
1004 std::unique_lock < std::mutex > lock3(blocker3);
1007 myMaintenanceResource = new MaintenanceResource();
1008 std::thread t4(&MaintenanceResource::createResources, myMaintenanceResource,
1009 &entityHandlerForResource);
1012 std::mutex blocker4;
1013 std::unique_lock < std::mutex > lock4(blocker4);
1016 myFactorySetResource = new FactorySetResource();
1017 std::thread t5(&FactorySetResource::createResources, myFactorySetResource,
1018 &entityHandlerForResource);
1021 std::mutex blocker5;
1022 std::unique_lock < std::mutex > lock5(blocker5);
1025 myMaintenanceResource->factoryReset = std::function < void()
1026 > (std::bind(&ConfigurationResource::factoryReset,
1027 myConfigurationResource));
1030 //Check findCandidateResources
1031 TEST_F(ThingsManagerTest, testFindCandidateResources)
1034 string resourceURI = "/core/a/collection";
1035 string resourceTypeName = "a.collection";
1036 string resourceInterface = BATCH_INTERFACE;
1038 OCStackResult res = OCPlatform::registerResource(resourceHandle, resourceURI,
1039 resourceTypeName, resourceInterface, NULL, OC_DISCOVERABLE);
1041 if ( res != OC_STACK_OK )
1043 cout << "Resource registeration failed." << endl;
1046 OCPlatform::bindInterfaceToResource(resourceHandle, GROUP_INTERFACE);
1047 OCPlatform::bindInterfaceToResource(resourceHandle, DEFAULT_INTERFACE);
1049 std::string query = OC_RSRVD_WELL_KNOWN_URI;
1050 query.append("?rt=");
1051 query.append(resourceTypeName);
1053 OCPlatform::findResource("", query, CT_DEFAULT, &foundGroupResource);
1055 std::mutex blocker1;
1056 std::unique_lock < std::mutex > lock1(blocker1);
1059 GroupManager *instance = new GroupManager();
1060 vector<string> types;
1061 types.push_back("core.light");
1063 result = instance->findCandidateResources(types, &foundResources);
1065 std::mutex blocker2;
1066 std::unique_lock < std::mutex > lock2(blocker2);
1070 //Find Candidate Resource when no resources are specified
1071 TEST_F(ThingsManagerTest, testFindCandidateResourcesEmptyResourceType)
1073 GroupManager *instance = new GroupManager();
1074 vector<string> types;
1075 result = instance->findCandidateResources(types, &foundResources);
1076 EXPECT_TRUE(result == OC_STACK_ERROR);
1080 //Find Candidate Resource when Callback is null
1081 TEST_F(ThingsManagerTest, testFindCandidateResourcesNullCallback)
1083 GroupManager *instance = new GroupManager();
1084 vector<string> types;
1085 types.push_back("core.light");
1086 result = instance->findCandidateResources(types, NULL);
1087 EXPECT_TRUE(result == OC_STACK_ERROR);
1091 //test bind resource to group
1092 TEST_F(ThingsManagerTest, testBindResourceToGroup)
1094 GroupManager *instance = new GroupManager();
1095 OCResourceHandle rHandle = NULL;
1097 string resourceURI = "/core/room-large";
1098 string resourceTypeName = "core.room-large";
1099 string resourceInterface = BATCH_INTERFACE;
1101 OCStackResult res = OCPlatform::registerResource(rHandle, resourceURI,
1102 resourceTypeName, resourceInterface, NULL, OC_DISCOVERABLE);
1104 if ( res != OC_STACK_OK )
1106 cout << "Resource registeration failed." << endl;
1109 OCPlatform::bindInterfaceToResource(rHandle, GROUP_INTERFACE);
1110 OCPlatform::bindInterfaceToResource(rHandle, DEFAULT_INTERFACE);
1112 std::string query = OC_RSRVD_WELL_KNOWN_URI;
1113 query.append("?rt=");
1114 query.append(resourceTypeName);
1116 OCPlatform::findResource("", query, CT_DEFAULT, &foundGroupResource);
1118 std::mutex blocker1;
1119 std::unique_lock < std::mutex > lock1(blocker1);
1122 result = instance->bindResourceToGroup (resourceHandle, g_room_resource, rHandle);
1124 EXPECT_TRUE(result == OC_STACK_OK);
1129 TEST_F(ThingsManagerTest, testAddActionSetAllBulbOff)
1131 string actionsetDesc;
1132 ActionSet *allBulbOff = new ActionSet();
1133 allBulbOff->actionsetName = "AllBulbOff";
1135 mocks.ExpectCallFunc(onPut).
1136 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1137 const int /*eCode*/) { Proceed();});
1139 for (auto iter = lights.begin(); iter != lights.end(); ++iter)
1141 Action *action = new Action();
1142 action->target = (*iter);
1144 Capability *capa = new Capability();
1145 capa->capability = "power";
1146 capa->status = "off";
1148 action->listOfCapability.push_back(capa);
1149 allBulbOff->listOfAction.push_back(action);
1153 result = groupMgr->addActionSet(g_resource, allBulbOff, &onPut);
1155 EXPECT_TRUE(result == OC_STACK_OK);
1161 //Add actionset with NULL resource
1162 TEST_F(ThingsManagerTest, testAddActionSetAllBulbOffResourceNull)
1164 string actionsetDesc;
1165 ActionSet *allBulbOff = new ActionSet();
1166 allBulbOff->actionsetName = "AllBulbOff";
1168 for (auto iter = lights.begin(); iter != lights.end(); ++iter)
1170 Action *action = new Action();
1171 action->target = (*iter);
1173 Capability *capa = new Capability();
1174 capa->capability = "power";
1175 capa->status = "off";
1177 action->listOfCapability.push_back(capa);
1178 allBulbOff->listOfAction.push_back(action);
1181 result = groupMgr->addActionSet(NULL, allBulbOff, &onPut);
1183 EXPECT_TRUE(result == OC_STACK_ERROR);
1189 //Add actionset with NULL ActionSet
1190 TEST_F(ThingsManagerTest, testAddActionSetAllBulbOffActionsetNull)
1194 result = groupMgr->addActionSet(g_resource, NULL, &onPut);
1196 EXPECT_TRUE(result == OC_STACK_ERROR);
1202 TEST_F(ThingsManagerTest, testAddActionSetAllBulbOn)
1204 string actionsetDesc;
1205 ActionSet *allBulbON = new ActionSet();
1206 allBulbON->actionsetName = "AllBulbOn";
1208 mocks.ExpectCallFunc(onPut).
1209 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1210 const int /*eCode*/) { Proceed();});
1212 for (auto iter = lights.begin(); iter != lights.end(); ++iter)
1214 Action *action = new Action();
1215 action->target = (*iter);
1217 Capability *capa = new Capability();
1218 capa->capability = "power";
1219 capa->status = "on";
1221 action->listOfCapability.push_back(capa);
1222 allBulbON->listOfAction.push_back(action);
1226 result = groupMgr->addActionSet(g_resource, allBulbON, onPut);
1228 EXPECT_TRUE(result == OC_STACK_OK);
1234 //Add actionset with NULL Resource
1235 TEST_F(ThingsManagerTest, testAddActionSetAllBulbOnResourceNull)
1237 string actionsetDesc;
1238 ActionSet *allBulbON = new ActionSet();
1239 allBulbON->actionsetName = "AllBulbOn";
1241 for (auto iter = lights.begin(); iter != lights.end(); ++iter)
1243 Action *action = new Action();
1244 action->target = (*iter);
1246 Capability *capa = new Capability();
1247 capa->capability = "power";
1248 capa->status = "on";
1250 action->listOfCapability.push_back(capa);
1251 allBulbON->listOfAction.push_back(action);
1254 result = groupMgr->addActionSet(NULL, allBulbON, onPut);
1256 EXPECT_TRUE(result == OC_STACK_ERROR);
1262 //Add actionset with NULL ActionSet
1263 TEST_F(ThingsManagerTest, testAddActionSetAllBulbOnActionSetNull)
1267 result = groupMgr->addActionSet(g_resource, NULL, onPut);
1269 EXPECT_TRUE(result == OC_STACK_ERROR);
1275 TEST_F(ThingsManagerTest, testExecuteActionSetAllBulbOn)
1277 string actionsetDesc;
1278 ActionSet *allBulbON = new ActionSet();
1279 allBulbON->actionsetName = "AllBulbOn1";
1281 mocks.ExpectCallFunc(onPut).
1282 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1283 const int /*eCode*/) { Proceed();});
1285 for (auto iter = lights.begin(); iter != lights.end(); ++iter)
1287 Action *action = new Action();
1288 action->target = (*iter);
1290 Capability *capa = new Capability();
1291 capa->capability = "power";
1292 capa->status = "on";
1294 action->listOfCapability.push_back(capa);
1295 allBulbON->listOfAction.push_back(action);
1299 result = groupMgr->addActionSet(g_resource, allBulbON, onPut);
1301 EXPECT_TRUE(result == OC_STACK_OK);
1305 mocks.ExpectCallFunc(onPost).
1306 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1307 const int /*eCode*/) { Proceed();});
1311 result = groupMgr->executeActionSet(g_resource, "AllBulbOn", &onPost);
1313 EXPECT_TRUE(result == OC_STACK_OK);
1319 //Execute actionset with NULL Resource
1320 TEST_F(ThingsManagerTest, testExecuteActionSetAllBulbOnResourceNull)
1322 result = groupMgr->executeActionSet(NULL, "AllBulbOn", &onPost);
1324 EXPECT_TRUE(result == OC_STACK_ERROR);
1329 TEST_F(ThingsManagerTest, testExecuteActionSetAllBulbOff)
1331 mocks.ExpectCallFunc(onPost).
1332 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1333 const int /*eCode*/) { Proceed();});
1337 result = groupMgr->executeActionSet(g_resource, "AllBulbOff", &onPost);
1339 EXPECT_TRUE(result == OC_STACK_OK);
1344 //Execute actionset with NULL resource
1345 TEST_F(ThingsManagerTest, testExecuteActionSetAllBulbOffResourceNull)
1347 result = groupMgr->executeActionSet(NULL, "AllBulbOff", &onPost);
1349 EXPECT_TRUE(result == OC_STACK_ERROR);
1353 //Execute actionset with Delay
1354 TEST_F(ThingsManagerTest, testExcecuteActionSetWithDelay)
1356 string actionsetDesc;
1357 ActionSet *allBulbON = new ActionSet();
1358 allBulbON->actionsetName = "AllBulbOnDelay";
1359 allBulbON->setDelay(1);
1361 mocks.ExpectCallFunc(onPut).
1362 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1363 const int /*eCode*/) { Proceed();});
1365 for (auto iter = lights.begin(); iter != lights.end(); ++iter)
1367 Action *action = new Action();
1368 action->target = (*iter);
1370 Capability *capa = new Capability();
1371 capa->capability = "power";
1372 capa->status = "off";
1374 action->listOfCapability.push_back(capa);
1375 allBulbON->listOfAction.push_back(action);
1379 result = groupMgr->addActionSet(g_resource, allBulbON, onPut);
1383 mocks.ExpectCallFunc(onPost).
1384 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1385 const int /*eCode*/) { Proceed();});
1389 result = groupMgr->executeActionSet(g_resource, "AllBulbOnDelay", &onPost);
1391 EXPECT_TRUE(result == OC_STACK_OK);
1398 //Execute actionset with Delay = 0
1399 TEST_F(ThingsManagerTest, testExcecuteActionSetWithDelayEqulasZero)
1401 string actionsetDesc;
1402 ActionSet *allBulbON = new ActionSet();
1403 allBulbON->actionsetName = "AllBulbOnDelay";
1405 mocks.ExpectCallFunc(onPut).
1406 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1407 const int /*eCode*/) { Proceed();});
1409 for (auto iter = lights.begin(); iter != lights.end(); ++iter)
1411 Action *action = new Action();
1412 action->target = (*iter);
1414 Capability *capa = new Capability();
1415 capa->capability = "power";
1416 capa->status = "off";
1418 action->listOfCapability.push_back(capa);
1419 allBulbON->listOfAction.push_back(action);
1423 result = groupMgr->addActionSet(g_resource, allBulbON, onPut);
1429 result = groupMgr->executeActionSet(g_resource, "AllBulbOnDelay", 0, &onPost);
1431 EXPECT_TRUE(result == OC_STACK_INVALID_PARAM);
1438 //Execute actionset with invalid Delay
1439 TEST_F(ThingsManagerTest, testExcecuteActionSetWithInvalidDelay)
1441 string actionsetDesc;
1442 ActionSet *allBulbON = new ActionSet();
1443 allBulbON->actionsetName = "AllBulbOnDelay";
1445 mocks.ExpectCallFunc(onPut).
1446 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1447 const int /*eCode*/) { Proceed();});
1449 for (auto iter = lights.begin(); iter != lights.end(); ++iter)
1451 Action *action = new Action();
1452 action->target = (*iter);
1454 Capability *capa = new Capability();
1455 capa->capability = "power";
1456 capa->status = "off";
1458 action->listOfCapability.push_back(capa);
1459 allBulbON->listOfAction.push_back(action);
1463 result = groupMgr->addActionSet(g_resource, allBulbON, onPut);
1469 result = groupMgr->executeActionSet(g_resource, "AllBulbOnDelay", -10, &onPost);
1471 EXPECT_TRUE(result == OC_STACK_INVALID_PARAM);
1478 //Execute actionset with delay on NULL Resource
1479 TEST_F(ThingsManagerTest, testExcecuteActionSetWithDelayWithResourceNull)
1481 string actionsetDesc;
1482 ActionSet *allBulbON = new ActionSet();
1483 allBulbON->actionsetName = "AllBulbOnDelay";
1484 allBulbON->setDelay(5);
1486 mocks.ExpectCallFunc(onPut).
1487 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1488 const int /*eCode*/) { Proceed();});
1490 for (auto iter = lights.begin(); iter != lights.end(); ++iter)
1492 Action *action = new Action();
1493 action->target = (*iter);
1495 Capability *capa = new Capability();
1496 capa->capability = "power";
1497 capa->status = "off";
1499 action->listOfCapability.push_back(capa);
1500 allBulbON->listOfAction.push_back(action);
1504 result = groupMgr->addActionSet(g_resource, allBulbON, onPut);
1507 result = groupMgr->executeActionSet(NULL, "AllBulbOnDelay", &onPost);
1508 EXPECT_TRUE(result == OC_STACK_ERROR);
1515 TEST_F(ThingsManagerTest, testCancelActionSet)
1517 mocks.ExpectCallFunc(onPost).
1518 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1519 const int /*eCode*/) { Proceed();});
1523 result = groupMgr->cancelActionSet(g_resource, "AllBulbOff", &onPost);
1525 EXPECT_TRUE(result == OC_STACK_OK);
1530 //Cancel ActionSet on NULL Resource
1531 TEST_F(ThingsManagerTest, testCancelActionSetResourceNull)
1533 result = groupMgr->cancelActionSet(NULL, "AllBulbOff", &onPost);
1535 EXPECT_TRUE(result == OC_STACK_ERROR);
1540 TEST_F(ThingsManagerTest, testDeleteActionSet)
1542 mocks.ExpectCallFunc(onPut).
1543 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1544 const int /*eCode*/) { Proceed();});
1548 result = groupMgr->deleteActionSet(g_resource, "AllBulbOff", &onPut);
1550 EXPECT_TRUE(result == OC_STACK_OK);
1555 //Delete ActionSet on NULL Resource
1556 TEST_F(ThingsManagerTest, testDeleteActionSetResourceNull)
1558 result = groupMgr->deleteActionSet(NULL, "AllBulbOff", &onPut);
1560 EXPECT_TRUE(result == OC_STACK_ERROR);
1565 TEST_F(ThingsManagerTest, testGetActionSet)
1567 mocks.ExpectCallFunc(onPost).
1568 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1569 const int /*eCode*/) { Proceed();});
1573 result = groupMgr->getActionSet(g_resource, "AllBulbOn", &onPost);
1575 EXPECT_TRUE(result == OC_STACK_OK);
1580 //Get ActionSet on NULL Resource
1581 TEST_F(ThingsManagerTest, testGetActionSetResourceNull)
1583 result = groupMgr->getActionSet(NULL, "AllBulbOn", &onPost);
1585 EXPECT_TRUE(result == OC_STACK_ERROR);
1589 //Get Configurations
1590 TEST_F(ThingsManagerTest, testGetConfigurations)
1592 ConfigurationName name = "all";
1594 ThingsConfiguration *g_thingsConf = ThingsConfiguration::getInstance();
1595 std::vector< ConfigurationName > configurations;
1597 configurations.push_back(name);
1599 mocks.ExpectCallFunc(onGet).
1600 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1601 const int /*eCode*/) { Proceed();});
1603 vector<string> types;
1604 types.push_back("oic.wk.con");
1606 result = groupMgr->findCandidateResources(types, &foundResources, 3);
1609 std::unique_lock < std::mutex > lock(blocker);
1612 if (result == OC_STACK_OK)
1614 result = g_thingsConf->getConfigurations(configurationResource, configurations, &onGet);
1616 EXPECT_TRUE(result == OC_STACK_OK);
1621 //Get Configurations with empty Configuration
1622 TEST_F(ThingsManagerTest, testGetConfigurationsEmptyConfiguration)
1624 ThingsConfiguration *g_thingsConf = ThingsConfiguration::getInstance();
1625 std::vector< ConfigurationName > configurations;
1627 vector<string> types;
1628 types.push_back("oic.wk.con");
1630 result = groupMgr->findCandidateResources(types, &foundResources, 3);
1633 std::unique_lock < std::mutex > lock(blocker);
1636 if (result == OC_STACK_OK)
1638 result = g_thingsConf->getConfigurations(configurationResource, configurations, &onGet);
1640 EXPECT_TRUE(result == OC_STACK_ERROR);
1645 //Get Configurations on NULL Resource
1646 TEST_F(ThingsManagerTest, testGetConfigurationsResourceNull)
1648 ConfigurationName name = "all";
1649 ThingsConfiguration *g_thingsConf = ThingsConfiguration::getInstance();
1650 std::vector< ConfigurationName > configurations;
1652 configurations.push_back(name);
1654 result = g_thingsConf->getConfigurations(NULL, configurations, &onGet);
1656 EXPECT_TRUE(result == OC_STACK_ERROR);
1660 //Get all supported Configurations
1661 TEST_F(ThingsManagerTest, testGetallSupportedCOnfigurations)
1663 ThingsConfiguration *g_thingsConf = ThingsConfiguration::getInstance();
1664 string retVal = g_thingsConf->getListOfSupportedConfigurationUnits();
1665 EXPECT_FALSE(retVal.size() == 0);
1669 TEST_F(ThingsManagerTest, testDoBootstrap)
1671 ThingsConfiguration *g_thingsConf = ThingsConfiguration::getInstance();
1673 mocks.ExpectCallFunc(onGetBootstrapInformation).
1674 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1675 const int /*eCode*/) { Proceed();});
1676 result = g_thingsConf->doBootstrap(&onGetBootstrapInformation);
1678 EXPECT_TRUE(result == OC_STACK_OK);
1682 //DoBootstrap with NULL callback
1683 TEST_F(ThingsManagerTest, testDoBootstrapCallBackNull)
1685 ThingsConfiguration *g_thingsConf = ThingsConfiguration::getInstance();
1687 result = g_thingsConf->doBootstrap(NULL);
1689 EXPECT_TRUE(result == OC_STACK_ERROR);
1693 //Update Configuration
1694 TEST_F(ThingsManagerTest, testUpdateConfiguration)
1696 ConfigurationName name = "r";
1697 ConfigurationValue value = "INDIA";
1699 std::map< ConfigurationName, ConfigurationValue > configurations;
1700 ThingsConfiguration *g_thingsConf = ThingsConfiguration::getInstance();
1701 configurations.insert(std::make_pair(name, value));
1703 mocks.ExpectCallFunc(onUpdate).
1704 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1705 const int /*eCode*/) { Proceed();});
1707 vector<string> types;
1708 types.push_back("oic.wk.con");
1709 result = groupMgr->findCandidateResources(types, &foundResources, 3);
1711 std::mutex blocker2;
1712 std::unique_lock < std::mutex > lock2(blocker2);
1715 if (result == OC_STACK_OK)
1717 result = g_thingsConf->updateConfigurations(configurationResource, configurations,
1720 EXPECT_TRUE(result == OC_STACK_OK);
1725 //Update Configuration with Empty Configuration
1726 TEST_F(ThingsManagerTest, testUpdateConfigurationEmptyConfiguration)
1728 std::map< ConfigurationName, ConfigurationValue > configurations;
1729 ThingsConfiguration *g_thingsConf = ThingsConfiguration::getInstance();
1731 vector<string> types;
1732 types.push_back("oic.wk.con");
1733 result = groupMgr->findCandidateResources(types, &foundResources, 3);
1735 std::mutex blocker2;
1736 std::unique_lock < std::mutex > lock2(blocker2);
1739 if (result == OC_STACK_OK)
1741 result = g_thingsConf->updateConfigurations(configurationResource, configurations,
1744 EXPECT_TRUE(result == OC_STACK_ERROR);
1749 //Update Configuration on NULL Resource
1750 TEST_F(ThingsManagerTest, testUpdateConfigurationResourceNull)
1752 ConfigurationName name = "r";
1753 ConfigurationValue value = "INDIA";
1755 std::map< ConfigurationName, ConfigurationValue > configurations;
1756 ThingsConfiguration *g_thingsConf = ThingsConfiguration::getInstance();
1758 configurations.insert(std::make_pair(name, value));
1760 result = g_thingsConf->updateConfigurations(NULL, configurations, &onUpdate);
1762 EXPECT_TRUE(result == OC_STACK_ERROR);
1767 TEST_F(ThingsManagerTest, testReboot)
1769 ThingsMaintenance *g_thingsMnt = ThingsMaintenance::getInstance();
1771 mocks.ExpectCallFunc(onReboot).
1772 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1773 const int /*eCode*/) { Proceed();});
1775 vector<string> types;
1776 types.push_back("oic.wk.mnt");
1777 result = groupMgr->findCandidateResources(types, &foundResources, 3);
1780 std::unique_lock < std::mutex > lock(blocker);
1783 if (result == OC_STACK_OK)
1785 result = g_thingsMnt->reboot(configurationResource, &onReboot);
1787 EXPECT_TRUE(result == OC_STACK_OK);
1792 //Reboot on NULL Resource
1793 TEST_F(ThingsManagerTest, testRebootResourceNull)
1795 ThingsMaintenance *g_thingsMnt = ThingsMaintenance::getInstance();
1797 result = g_thingsMnt->reboot(NULL, &onReboot);
1799 EXPECT_TRUE(result == OC_STACK_ERROR);
1804 TEST_F(ThingsManagerTest, testFactoryReset)
1806 ThingsMaintenance *g_thingsMnt = ThingsMaintenance::getInstance();
1808 mocks.ExpectCallFunc(onFactoryReset).
1809 Do([this](const HeaderOptions& /*headerOptions*/, const OCRepresentation& /*rep*/,
1810 const int /*eCode*/) { Proceed();});
1812 vector<string> types;
1813 types.push_back("oic.wk.mnt");
1814 result = groupMgr->findCandidateResources(types, &foundResources, 3);
1817 std::unique_lock < std::mutex > lock(blocker);
1820 if (result == OC_STACK_OK)
1822 result = g_thingsMnt->factoryReset(configurationResource, &onFactoryReset);
1824 EXPECT_TRUE(result == OC_STACK_OK);
1829 //Factory Reset on NULL Resource
1830 TEST_F(ThingsManagerTest, testFactoryResetResourceNull)
1832 ThingsMaintenance *g_thingsMnt = ThingsMaintenance::getInstance();
1834 result = g_thingsMnt->factoryReset(NULL, &onFactoryReset);
1836 EXPECT_TRUE(result == OC_STACK_ERROR);