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 #define private public
22 #include <gtest/gtest.h>
24 #include "RCSDiscoveryManager.h"
25 #include "RCSRemoteResourceObject.h"
26 #include "RCSResourceObject.h"
27 #include "OCPlatform.h"
28 #include "RCSAddress.h"
30 #define RESOURCEURI "/a/TemperatureSensor"
31 #define RESOURCETYPE "Resource.Hosting"
32 #define RESOURCEINTERFACE "oic.if.baseline"
34 using namespace OIC::Service;
37 bool cbresult = false;
38 std::string uri = "/oic/res?rt=Resource.Hosting";
39 std::shared_ptr<RCSRemoteResourceObject> object;
40 RCSDiscoveryManager*manager = RCSDiscoveryManager::getInstance();
41 ResourceState receivedResourceState;
42 RCSResourceAttributes receivedResourceAttributes;
43 RCSResourceObject::Ptr server;
47 server = RCSResourceObject::Builder(RESOURCEURI, RESOURCETYPE,
48 RESOURCEINTERFACE).setDiscoverable(true).setObservable(true).build();
49 std::cout << "Resource created successfully " << std::endl;
50 server->setAttribute("Temperature", 0);
53 OC::ServiceType::InProc, ModeType::Client, "0.0.0.0", 0, OC::QualityOfService::LowQos
55 OCPlatform::Configure(config);
58 void destroyResource()
64 void onRemoteAttrReceived(const RCSResourceAttributes &attributes)
67 receivedResourceAttributes = attributes;
70 void onResourceDiscoveredCallback(std::shared_ptr<RCSRemoteResourceObject> receivedObject)
72 std::cout << "Resource discovered" << std::endl;
73 object = receivedObject;
74 std::cout << object->getUri() << std::endl;
75 std::cout << "Resource discovered exited" << std::endl;
76 EXPECT_TRUE(object != NULL);
79 void onResourceStateChanged(ResourceState state)
81 receivedResourceState = state;
84 void onCacheUpdated(const RCSResourceAttributes attribute)
86 receivedResourceAttributes = attribute;
89 void OnRemoteAttributesSetCallback(const RCSResourceAttributes &attributes)
94 //Send valid call to discover resource
95 TEST(ResourceClientTest, testDiscoverResourcePass)
98 RCSDiscoveryManager *instance = RCSDiscoveryManager::getInstance();
100 RCSAddress rcsAddress = RCSAddress::multicast();
101 instance->discoverResource(rcsAddress, uri , &onResourceDiscoveredCallback);
103 EXPECT_TRUE(object != NULL);
107 //Get remote attributes when callback is valid
108 TEST(ResourceClientTest, testGetRemoteAttributesPass)
113 object->getRemoteAttributes(&onRemoteAttrReceived);
116 EXPECT_TRUE(cbresult);
120 //Set remote attributes when callback is valid
121 TEST(ResourceClientTest, testSetRemoteAttributesPass)
127 object->getRemoteAttributes(&onRemoteAttrReceived);
129 RCSResourceAttributes::const_iterator iter = receivedResourceAttributes.begin();
130 for (unsigned int i = 0; i < receivedResourceAttributes.size(); ++i)
132 if ( iter->key() == "Temperature")
134 std::cout << "It is there" << std::endl;
135 receivedResourceAttributes["Temperature"] = 100;
136 object->setRemoteAttributes(receivedResourceAttributes, &OnRemoteAttributesSetCallback);
141 EXPECT_TRUE(cbresult);
145 //Check value of isMonitoring
146 TEST(ResourceClientTest, testIsMonitoring)
149 RCSAddress rcsAddress = RCSAddress::multicast();
150 manager->RCSDiscoveryManager::discoverResource(rcsAddress, uri , &onResourceDiscoveredCallback);
153 EXPECT_FALSE(object->isMonitoring());
156 //Check value of isCaching
157 TEST(ResourceClientTest, testIsCaching)
161 EXPECT_FALSE(object->isCaching());
164 TEST(ResourceClientTest, testIsObservable)
168 EXPECT_TRUE(object->isObservable());
171 //Check value of startMonitoring for NULL callback
172 TEST(ResourceClientTest, testStartMonitoringFail)
175 object->m_monitoringFlag = false;
176 object->startMonitoring(NULL);
177 EXPECT_TRUE(object->m_monitoringFlag);
178 object->stopMonitoring();
182 //Check value of startMonitoring for valid callback
183 TEST(ResourceClientTest, testStartMonitoringPass)
186 object->startMonitoring(&onResourceStateChanged);
187 EXPECT_TRUE(object->m_monitoringFlag);
188 object->stopMonitoring();
192 //Stop Monitoring when Monitoring is true
193 TEST(ResourceClientTest, testStopMonitoring)
196 object->startMonitoring(&onResourceStateChanged);
197 object->stopMonitoring();
198 EXPECT_FALSE(object->m_monitoringFlag);
199 object->startMonitoring(&onResourceStateChanged);
203 //Get state of resource
204 TEST(ResourceClientTest, testGetStatePass)
207 ResourceState result = object->getState();
208 EXPECT_TRUE(result >= ResourceState::NOT_MONITORING && result <= ResourceState::DESTROYED);
212 //Cache ID is not zero
213 TEST(ResourceClientTest, testStartCachingPass)
216 object->m_cachingFlag = false;
217 object->startCaching();
218 EXPECT_TRUE(object->m_cachingFlag);
222 TEST(ResourceClientTest, testStopCaching)
225 object->m_cachingFlag = false;
226 object->startCaching();
227 object->stopCaching();
228 EXPECT_FALSE(object->m_cachingFlag);
232 TEST(ResourceClientTest, testRefreshCache)
235 object->m_cachingFlag = false;
236 object->startCaching();
237 object->refreshCache();
238 EXPECT_TRUE(object->getResourceCacheState() == CacheState::UPDATING);
242 //Callback for start caching is valid
243 TEST(ResourceClientTest, testStartCachingCbPass)
246 object->m_cachingFlag = false;
247 object->startCaching(&onCacheUpdated);
248 EXPECT_TRUE(object->m_cachingFlag);
252 //Callback for start caching is NULL
253 TEST(ResourceClientTest, testStartCachingCbFail)
256 object->m_cachingFlag = false;
257 object->startCaching(NULL);
258 EXPECT_TRUE(object->m_cachingFlag);
263 TEST(ResourceClientTest, testGetResourceCacheState)
266 CacheState result = object->getResourceCacheState();
267 EXPECT_TRUE(result >= CacheState::READY && result <= CacheState::NONE);
271 //Get cached attributes
272 TEST(ResourceClientTest, testGetCachedAttributesWithoutCallback)
275 RCSResourceAttributes result = object->getCachedAttributes();
276 EXPECT_TRUE(result.empty());
280 //Check with invalid attribute value
281 TEST(ResourceClientTest, testGetCachedAttributeWithInvalidAttribute)
284 RCSResourceAttributes::Value result = object->getCachedAttribute("");
285 EXPECT_TRUE(result == nullptr);
289 //Get remote attributes when callback is NULL
290 TEST(ResourceClientTest, testGetRemoteAttributesFail)
294 object->getRemoteAttributes(NULL);
295 EXPECT_FALSE(cbresult);
299 TEST(ResourceClientTest, testGetUri)
302 std::string result = object->getUri();
303 EXPECT_TRUE(!result.empty());
307 TEST(ResourceClientTest, testGetAddress)
310 std::string result = object->getAddress();
311 EXPECT_TRUE(!result.empty());
315 TEST(ResourceClientTest, testGetTypes)
318 std::vector < std::string > result = object->getTypes();
319 EXPECT_TRUE(result.size() != 0);
323 TEST(ResourceClientTest, testGetInterfaces)
326 std::vector < std::string > result = object->getInterfaces();
327 EXPECT_TRUE(result.size() != 0);
331 //Check with valid attribute value
332 TEST(ResourceClientTest, testGetCachedAttribute)
335 RCSResourceAttributes::Value result = object->getCachedAttribute("Temperature");
336 EXPECT_TRUE(result != nullptr);
340 //Test getting instance of DiscoveryManager
341 TEST(ResourceClientTest, testGetInstance)
344 RCSDiscoveryManager *instance = RCSDiscoveryManager::getInstance();
345 EXPECT_TRUE(instance != NULL);
349 //Send empty resource URI
350 TEST(ResourceClientTest, testDiscoverResourceEmptyResource)
353 RCSDiscoveryManager *instance = RCSDiscoveryManager::getInstance();
354 RCSAddress rcsAddress = RCSAddress::multicast();
355 EXPECT_THROW(instance->discoverResource(rcsAddress, "", &onResourceDiscoveredCallback),
356 InvalidParameterException);
361 TEST(ResourceClientTest, testDiscoverResourceEmptyCallback)
364 RCSDiscoveryManager *instance = RCSDiscoveryManager::getInstance();
365 RCSAddress rcsAddress = RCSAddress::multicast();
366 EXPECT_THROW(instance->discoverResource(rcsAddress, uri , NULL), InvalidParameterException);
368 object->stopMonitoring();
371 //Send invalid RCSResourceAttributes object to function
372 TEST(ResourceClientTest, testSetRemoteAttributesInvalidAttributes)
376 RCSResourceAttributes attr;
377 //object->getRemoteAttributes(&onRemoteAttrReceived);
378 object->setRemoteAttributes(attr, &OnRemoteAttributesSetCallback);
379 EXPECT_FALSE(cbresult);