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 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
24 #include <condition_variable>
26 #include "UnitTestHelper.h"
28 #include "OCPlatform.h"
29 #include "RCSDiscoveryManager.h"
30 #include "RCSRemoteResourceObject.h"
31 #include "RCSResourceObject.h"
32 #include "RCSResourceAttributes.h"
33 #include "RCSAddress.h"
35 #include "RequestObject.h"
37 using namespace testing;
38 using namespace OIC::Service;
40 class ResourceEncapsulationTestSimulator
43 RCSResourceObject::Ptr server;
44 RCSRemoteResourceObject::Ptr remoteResource;
47 std::mutex mutexForDiscovery;
48 std::unique_ptr<RCSDiscoveryManager::DiscoveryTask> discoveryTask;
50 std::string MULTICASTURI;
51 std::string HOSTED_RESOURCEURI;
52 std::string RESOURCEURI;
53 std::string RESOURCETYPE;
54 std::string RESOURCEINTERFACE;
59 ResourceEncapsulationTestSimulator()
60 :server(nullptr), remoteResource(nullptr),
62 MULTICASTURI("/oic/res"),
63 HOSTED_RESOURCEURI("/a/TempHumSensor"),
64 RESOURCEURI("/a/TempHumSensor/hosting"),
65 RESOURCETYPE("oic.r.resourcehosting"),
66 RESOURCEINTERFACE("oic.if.baseline"),
67 ATTR_KEY("Temperature"),
70 ~ResourceEncapsulationTestSimulator()
74 void onDiscoveryResource(RCSRemoteResourceObject::Ptr resourceObject)
76 if (remoteResource != nullptr)
81 if (RESOURCEURI.compare(resourceObject->getUri()) != 0)
86 remoteResource = resourceObject;
87 discoveryTask->cancel();
88 mutexForDiscovery.unlock();
91 void waitForDiscovery()
93 std::chrono::milliseconds interval(100);
96 if(mutexForDiscovery.try_lock())
98 mutexForDiscovery.unlock();
101 std::this_thread::sleep_for(interval);
104 void WaitForPtrBeingUnique()
106 while((remoteResource && !remoteResource.unique()) || (server && !server.unique()))
108 std::this_thread::sleep_for(std::chrono::milliseconds{ 1000 });
115 if(server.use_count()) server.reset();
116 if(remoteResource.use_count()) remoteResource.reset();
117 WaitForPtrBeingUnique();
119 void defaultRunSimulator()
126 void createResource(std::string postUri = "")
128 HOSTED_RESOURCEURI = HOSTED_RESOURCEURI + postUri;
129 server = RCSResourceObject::Builder(HOSTED_RESOURCEURI + "/hosting",
130 RESOURCETYPE, RESOURCEINTERFACE).
131 setDiscoverable(true).setObservable(true).build();
132 server->setAttribute(ATTR_KEY, RCSResourceAttributes::Value(ATTR_VALUE));
135 void discoveryResource()
137 discoveryResource(RESOURCETYPE);
140 void discoveryResource(std::string & resourceType)
144 discoveryTask = RCSDiscoveryManager::getInstance()->discoverResourceByType(
145 RCSAddress::multicast(), MULTICASTURI, resourceType,
147 &ResourceEncapsulationTestSimulator::onDiscoveryResource,
148 this, std::placeholders::_1));
149 mutexForDiscovery.lock();
151 catch(std::exception & e)
153 std::cout << "exception : " << e.what() << std::endl;
157 std::string getServerUri() const
162 std::string getHostedServerUri() const
164 return HOSTED_RESOURCEURI;
167 RCSResourceObject::Ptr getResourceServer() const
172 RCSRemoteResourceObject::Ptr getRemoteResource() const
174 return remoteResource;