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 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
25 #include "UnitTestHelper.h"
27 #include "RCSDiscoveryManager.h"
28 #include "RCSRemoteResourceObject.h"
29 #include "RCSResourceAttributes.h"
30 #include "RCSAddress.h"
32 using namespace testing;
33 using namespace OIC::Service;
35 class ResourceContainerTestSimulator
36 : public std::enable_shared_from_this<ResourceContainerTestSimulator>
39 typedef std::shared_ptr<ResourceContainerTestSimulator> Ptr;
41 RCSResourceObject::Ptr server;
42 RCSRemoteResourceObject::Ptr remoteResource;
44 static constexpr int DEFAULT_WAITTIME = 3000;
47 std::mutex mutexForDiscovery;
49 std::string MULTICASTURI;
50 std::string RESOURCEURI;
51 std::string RESOURCETYPE;
52 std::string RESOURCEINTERFACE;
55 std::unique_ptr<RCSDiscoveryManager::DiscoveryTask> discoveryTask;
58 ResourceContainerTestSimulator()
59 : server(nullptr), remoteResource(nullptr),
61 MULTICASTURI("/oic/res"),
62 RESOURCEURI("/a/TempHumSensor/Container"),
63 RESOURCETYPE("resource.container"),
64 RESOURCEINTERFACE("oic.if.baseline"),
65 ATTR_KEY("TestResourceContainer"),
70 ~ResourceContainerTestSimulator()
74 if (remoteResource != nullptr && remoteResource->isCaching())
76 remoteResource->stopCaching();
78 if (remoteResource != nullptr && remoteResource->isMonitoring())
80 remoteResource->stopMonitoring();
83 catch (RCSException &e)
85 std::cout << "exception : " << e.what() << std::endl;
90 void onDiscoveryResource_Impl(RCSRemoteResourceObject::Ptr resourceObject)
92 if (remoteResource != nullptr)
97 if (RESOURCEURI.compare(resourceObject->getUri()) != 0)
102 remoteResource = resourceObject;
103 mutexForDiscovery.unlock();
106 static void onDiscoveryResource(RCSRemoteResourceObject::Ptr resourceObject,
107 std::weak_ptr<ResourceContainerTestSimulator> rPtr)
109 std::shared_ptr<ResourceContainerTestSimulator> ptr = rPtr.lock();
112 ptr->onDiscoveryResource_Impl(resourceObject);
116 std::cout << "Aleady delete simulator\n";
119 void waitForDiscovery()
121 std::chrono::milliseconds interval(DEFAULT_WAITTIME);
124 if (mutexForDiscovery.try_lock())
126 mutexForDiscovery.unlock();
129 std::this_thread::sleep_for(interval);
134 void defaultRunSimulator()
141 void createResource()
143 server = RCSResourceObject::Builder(RESOURCEURI, RESOURCETYPE, RESOURCEINTERFACE)
144 .setDiscoverable(true).setObservable(true).build();
145 server->setAttribute(ATTR_KEY, ATTR_VALUE);
148 void discoveryResource()
150 discoveryResource(RESOURCETYPE);
153 void discoveryResource(std::string &resourceType)
157 discoveryTask = RCSDiscoveryManager::getInstance()->discoverResourceByType(
158 RCSAddress::multicast(), MULTICASTURI, resourceType,
159 std::bind(onDiscoveryResource, std::placeholders::_1,
160 std::weak_ptr<ResourceContainerTestSimulator>(shared_from_this())));
161 mutexForDiscovery.lock();
163 catch (RCSInvalidParameterException &e)
165 std::cout << "exception : " << e.what() << std::endl;
169 std::string getServerUri() const
174 RCSResourceObject::Ptr getResourceServer() const
179 RCSRemoteResourceObject::Ptr getRemoteResource() const
181 return remoteResource;
184 void ChangeAttributeValue()
186 std::chrono::milliseconds interval(DEFAULT_WAITTIME);
187 if (server != nullptr)
189 server->setAttribute(ATTR_KEY, ATTR_VALUE + 10);
191 std::this_thread::sleep_for(interval);