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 #if defined(__linux__)
31 #include <UnitTestHelper.h>
33 #include <gtest/gtest.h>
34 #include <HippoMocks/hippomocks.h>
36 #include "Configuration.h"
37 #include "BundleActivator.h"
38 #include "BundleResource.h"
39 #include "RCSResourceContainer.h"
40 #include "ResourceContainerBundleAPI.h"
41 #include "ResourceContainerImpl.h"
42 #include "RemoteResourceUnit.h"
44 #include "RCSResourceObject.h"
45 #include "RCSRemoteResourceObject.h"
46 #include "SoftSensorResource.h"
48 #include "ResourceContainerTestSimulator.h"
51 using namespace testing;
52 using namespace OIC::Service;
56 string CONFIG_FILE = "ResourceContainerTestConfig.xml";
58 void getCurrentPath(std::string *pPath)
60 char buffer[MAX_PATH];
62 #if defined(__linux__)
64 int length = readlink("/proc/self/exe", buffer, MAX_PATH - 1);
68 buffer[length] = '\0';
69 strPath = strrchr(buffer, '/');
75 pPath->append(buffer);
78 template<typename Derived, typename Base, typename Del>
79 std::unique_ptr<Derived, Del>
80 static_unique_ptr_cast( std::unique_ptr<Base, Del>&& p )
82 auto d = static_cast<Derived *>(p.release());
83 return std::unique_ptr<Derived, Del>(d, std::move(p.get_deleter()));
86 template<typename Derived, typename Base, typename Del>
87 std::unique_ptr<Derived, Del>
88 dynamic_unique_ptr_cast( std::unique_ptr<Base, Del>&& p )
90 if(Derived *result = dynamic_cast<Derived *>(p.get())) {
92 return std::unique_ptr<Derived, Del>(result, std::move(p.get_deleter()));
94 return std::unique_ptr<Derived, Del>(nullptr, p.get_deleter());
97 /*Fake bundle resource class for testing*/
98 class TestBundleResource: public BundleResource
101 virtual void initAttributes() { }
103 virtual void handleSetAttributesRequest(const RCSResourceAttributes &attr,
104 const std::map< std::string, std::string > &queryParams)
107 BundleResource::setAttributes(attr);
110 virtual RCSResourceAttributes handleGetAttributesRequest(const
111 std::map< std::string, std::string > &queryParams)
114 return BundleResource::getAttributes();
118 /*Fake bundle resource class for testing*/
119 class TestBundleResourceWithAttrs: public BundleResource
122 virtual void initAttributes() {
123 setAttribute("attrib1", RCSResourceAttributes::Value("test"));
124 setAttribute("attrib2", RCSResourceAttributes::Value(1));
125 setAttribute("attrib3", RCSResourceAttributes::Value(true));
128 virtual void handleSetAttributesRequest(const RCSResourceAttributes &attr,
129 const std::map< std::string, std::string > &queryParams)
132 BundleResource::setAttributes(attr);
135 virtual RCSResourceAttributes handleGetAttributesRequest(const
136 std::map< std::string, std::string > &queryParams)
139 return BundleResource::getAttributes();
144 /*Fake bundle resource class for testing*/
145 class TestSoftSensorResource: public SoftSensorResource
148 virtual void initAttributes() {
149 SoftSensorResource::initAttributes();
152 virtual void handleSetAttributesRequest(const RCSResourceAttributes &attr,
153 const std::map< std::string, std::string > &queryParams)
156 BundleResource::setAttributes(attr);
159 virtual RCSResourceAttributes handleGetAttributesRequest(const
160 std::map< std::string, std::string > &queryParams)
163 return BundleResource::getAttributes();
166 virtual void executeLogic(){
170 virtual void onUpdatedInputResource(
171 std::string, std::vector<OIC::Service::RCSResourceAttributes::Value>){
176 class ResourceContainerTest: public TestWithMock
180 RCSResourceContainer *m_pResourceContainer;
181 std::string m_strConfigPath;
186 TestWithMock::SetUp();
187 m_pResourceContainer = RCSResourceContainer::getInstance();
188 getCurrentPath(&m_strConfigPath);
189 m_strConfigPath.append("/");
190 m_strConfigPath.append(CONFIG_FILE);
194 TEST_F(ResourceContainerTest, TestBundleResource)
196 TestBundleResourceWithAttrs testResource;
197 testResource.initAttributes();
199 // check if initAttributes worked
200 EXPECT_STREQ("\"test\"", testResource.getAttribute("attrib1").toString().c_str());
202 std::list<string> attrNames = testResource.getAttributeNames();
203 ASSERT_TRUE(std::find(attrNames.begin(), attrNames.end(), "attrib1") != attrNames.end());
205 ASSERT_FALSE(testResource.getAttributes().contains("attrib4"));
207 testResource.getAttributeNames();
209 RCSResourceAttributes fullAttributes;
210 const std::map< std::string, std::string > queryParams = {};
212 fullAttributes["attrib1"] = "test";
213 fullAttributes["attrib2"] = 1;
214 fullAttributes["attrib3"] = true;
216 testResource.setAttributes(fullAttributes);
218 ASSERT_TRUE(testResource.getAttributes().contains("attrib1"));
220 fullAttributes["attrib1"] = "test2";
221 fullAttributes["attrib2"] = 2;
222 fullAttributes["attrib3"] = false;
224 testResource.handleSetAttributesRequest(fullAttributes, queryParams);
226 EXPECT_EQ((unsigned int) 3, testResource.getAttributeNames().size());
228 EXPECT_EQ((unsigned int) 3, testResource.handleGetAttributesRequest(queryParams).size());
229 std::string testString = "test";
230 testResource.setAttribute("attrib1", RCSResourceAttributes::Value(testString), false);
232 testResource.setAttributes(fullAttributes, false);
234 EXPECT_STREQ("\"test2\"", testResource.getAttribute("attrib1").toString().c_str());
235 EXPECT_EQ(2, testResource.getAttribute("attrib2"));
237 testResource.setAttribute("attrib1", RCSResourceAttributes::Value("test"));
238 EXPECT_STREQ("\"test\"", testResource.getAttribute("attrib1").toString().c_str());
239 EXPECT_EQ(2, testResource.getAttribute("attrib2"));
242 TEST_F(ResourceContainerTest, TestSoftSensorResource)
244 TestSoftSensorResource softSensorResource;
245 softSensorResource.initAttributes();
246 EXPECT_EQ((unsigned int) 0, softSensorResource.getAttributeNames().size());
250 TEST_F(ResourceContainerTest, BundleRegisteredWhenContainerStartedWithValidConfigFile)
252 m_pResourceContainer->startContainer(m_strConfigPath);
253 EXPECT_GT(m_pResourceContainer->listBundles().size(), (unsigned int) 0);
254 EXPECT_STREQ("oic.bundle.test",
255 (*m_pResourceContainer->listBundles().begin())->getID().c_str());
256 EXPECT_STREQ("libTestBundle.so",
257 (*m_pResourceContainer->listBundles().begin())->getPath().c_str());
258 EXPECT_STREQ("1.0.0", (*m_pResourceContainer->listBundles().begin())->getVersion().c_str());
259 m_pResourceContainer->stopContainer();
262 TEST_F(ResourceContainerTest, BundleLoadedWhenContainerStartedWithValidConfigFile)
264 m_pResourceContainer->startContainer(m_strConfigPath);
266 EXPECT_GT(m_pResourceContainer->listBundles().size(), (unsigned int) 0);
267 unique_ptr<RCSBundleInfo> first = std::move(*m_pResourceContainer->listBundles().begin());
268 unique_ptr<BundleInfoInternal> firstInternal((BundleInfoInternal*)first.release());
269 EXPECT_TRUE( firstInternal->isLoaded() );
271 firstInternal->getBundleHandle());
273 m_pResourceContainer->stopContainer();
276 TEST_F(ResourceContainerTest, BundleActivatedWhenContainerStartedWithValidConfigFile)
278 m_pResourceContainer->startContainer(m_strConfigPath);
280 EXPECT_GT(m_pResourceContainer->listBundles().size(), (unsigned int) 0);
281 unique_ptr<RCSBundleInfo> first = std::move(*m_pResourceContainer->listBundles().begin());
282 unique_ptr<BundleInfoInternal> firstInternal((BundleInfoInternal*)first.release());
283 EXPECT_TRUE(firstInternal->isActivated());
284 EXPECT_NE(nullptr,firstInternal->getBundleActivator());
286 m_pResourceContainer->stopContainer();
289 TEST_F(ResourceContainerTest, BundleNotRegisteredWhenContainerStartedWithInvalidConfigFile)
291 m_pResourceContainer->startContainer("invalidConfig");
293 EXPECT_EQ((unsigned int) 0, m_pResourceContainer->listBundles().size());
296 TEST_F(ResourceContainerTest, BundleNotRegisteredWhenContainerStartedWithEmptyConfigFile)
298 m_pResourceContainer->startContainer("");
300 EXPECT_EQ((unsigned int) 0, m_pResourceContainer->listBundles().size());
303 TEST_F(ResourceContainerTest, BundleUnregisteredWhenContainerStopped)
305 m_pResourceContainer->startContainer(m_strConfigPath);
306 m_pResourceContainer->stopContainer();
308 EXPECT_EQ((unsigned int) 0, m_pResourceContainer->listBundles().size());
311 TEST_F(ResourceContainerTest, BundleStoppedWithStartBundleAPI)
313 m_pResourceContainer->startContainer(m_strConfigPath);
314 m_pResourceContainer->stopBundle("oic.bundle.test");
316 unique_ptr<RCSBundleInfo> first = std::move(*m_pResourceContainer->listBundles().begin());
317 unique_ptr<BundleInfoInternal> firstInternal((BundleInfoInternal*)first.release());
318 EXPECT_FALSE(firstInternal->isActivated());
320 m_pResourceContainer->stopContainer();
323 TEST_F(ResourceContainerTest, BundleStartedWithStartBundleAPI)
325 m_pResourceContainer->startContainer(m_strConfigPath);
326 m_pResourceContainer->stopBundle("oic.bundle.test");
327 m_pResourceContainer->startBundle("oic.bundle.test");
328 unique_ptr<RCSBundleInfo> first = std::move(*m_pResourceContainer->listBundles().begin());
329 unique_ptr<BundleInfoInternal> firstInternal((BundleInfoInternal*)first.release());
330 EXPECT_TRUE(firstInternal->isActivated());
332 m_pResourceContainer->stopContainer();
335 TEST_F(ResourceContainerTest, AddNewSoBundleToContainer)
337 std::map<string, string> bundleParams;
338 std::list<std::unique_ptr<RCSBundleInfo>> bundles;
340 bundles = m_pResourceContainer->listBundles();
341 m_pResourceContainer->addBundle("oic.bundle.test", "", "libTestBundle.so", "test", bundleParams);
343 EXPECT_EQ(bundles.size() + 1, m_pResourceContainer->listBundles().size());
344 unique_ptr<RCSBundleInfo> first = std::move(*m_pResourceContainer->listBundles().begin());
345 unique_ptr<BundleInfoInternal> firstInternal((BundleInfoInternal*)first.release());
346 EXPECT_TRUE(firstInternal->isLoaded());
349 TEST_F(ResourceContainerTest, RemoveSoBundleFromContainer)
351 std::map<string, string> bundleParams;
352 std::list<std::unique_ptr<RCSBundleInfo>> bundles;
354 bundles = m_pResourceContainer->listBundles();
355 m_pResourceContainer->removeBundle("oic.bundle.test");
357 EXPECT_EQ(bundles.size() - 1, m_pResourceContainer->listBundles().size());
360 TEST_F(ResourceContainerTest, AddBundleAlreadyRegistered)
362 std::map<string, string> bundleParams;
363 std::list<std::unique_ptr<RCSBundleInfo> > bundles;
365 m_pResourceContainer->addBundle("oic.bundle.test", "", "libTestBundle.so", "test", bundleParams);
366 bundles = m_pResourceContainer->listBundles();
367 m_pResourceContainer->addBundle("oic.bundle.test", "", "libTestBundle.so", "test", bundleParams);
369 EXPECT_EQ(bundles.size(), m_pResourceContainer->listBundles().size());
372 TEST_F(ResourceContainerTest, AddAndRemoveSoBundleResource)
374 std::list<string> resources;
375 std::map<string, string> resourceParams;
376 resourceParams["resourceType"] = "container.test";
378 m_pResourceContainer->startContainer(m_strConfigPath);
379 resources = m_pResourceContainer->listBundleResources("oic.bundle.test");
381 m_pResourceContainer->addResourceConfig("oic.bundle.test", "/test_resource", resourceParams);
383 EXPECT_EQ(resources.size() + 1,
384 m_pResourceContainer->listBundleResources("oic.bundle.test").size());
386 m_pResourceContainer->removeResourceConfig("oic.bundle.test", "/test_resource");
388 EXPECT_EQ(resources.size(), m_pResourceContainer->listBundleResources("oic.bundle.test").size());
390 m_pResourceContainer->stopContainer();
393 TEST_F(ResourceContainerTest, TryAddingSoBundleResourceToNotRegisteredBundle)
395 std::map<string, string> resourceParams;
397 mocks.NeverCallFunc(ResourceContainerImpl::buildResourceObject);
399 m_pResourceContainer->addResourceConfig("unvalidBundleId", "", resourceParams);
402 class ResourceContainerBundleAPITest: public TestWithMock
406 RCSResourceObject *m_pResourceObject;
407 ResourceContainerBundleAPI *m_pResourceContainer;
408 BundleResource::Ptr m_pBundleResource;
409 std::string m_strConfigPath;
414 TestWithMock::SetUp();
415 m_pResourceObject = mocks.Mock<RCSResourceObject>();
416 m_pResourceContainer = ResourceContainerBundleAPI::getInstance();
418 getCurrentPath(&m_strConfigPath);
419 m_strConfigPath.append("/");
420 m_strConfigPath.append(CONFIG_FILE);
422 m_pBundleResource = std::make_shared< TestBundleResource >();
423 m_pBundleResource->m_bundleId = "oic.bundle.test";
424 m_pBundleResource->m_uri = "/test_resource";
425 m_pBundleResource->m_resourceType = "container.test";
426 m_pBundleResource->m_interface = "oic.if.baseline";
430 TEST_F(ResourceContainerBundleAPITest, ResourceServerCreatedWhenRegisterResourceCalled)
432 m_pBundleResource = std::make_shared< TestBundleResource >();
433 m_pBundleResource->m_bundleId = "oic.bundle.test";
434 m_pBundleResource->m_uri = "/test_resource/test";
435 m_pBundleResource->m_resourceType = "container.test";
436 m_pBundleResource->m_interface = "oic.if.baseline";
438 mocks.ExpectCallFunc(ResourceContainerImpl::buildResourceObject).With(m_pBundleResource->m_uri,
439 m_pBundleResource->m_resourceType, m_pBundleResource->m_interface).Return(nullptr);
441 m_pResourceContainer->registerResource(m_pBundleResource);
444 TEST_F(ResourceContainerBundleAPITest, RequestHandlerForResourceServerSetWhenRegisterResourceCalled)
446 mocks.OnCallFunc(ResourceContainerImpl::buildResourceObject).Return(
447 RCSResourceObject::Ptr(m_pResourceObject, [](RCSResourceObject *)
450 mocks.ExpectCall(m_pResourceObject, RCSResourceObject::setGetRequestHandler);
451 mocks.ExpectCall(m_pResourceObject, RCSResourceObject::setSetRequestHandler);
453 m_pResourceContainer->registerResource(m_pBundleResource);
455 m_pResourceContainer->unregisterResource(m_pBundleResource);
458 TEST_F(ResourceContainerBundleAPITest, BundleResourceUnregisteredWhenUnregisterResourceCalled)
460 mocks.OnCallFunc(ResourceContainerImpl::buildResourceObject).Return(
461 RCSResourceObject::Ptr(m_pResourceObject, [](RCSResourceObject *)
464 mocks.ExpectCall(m_pResourceObject, RCSResourceObject::setGetRequestHandler);
465 mocks.ExpectCall(m_pResourceObject, RCSResourceObject::setSetRequestHandler);
467 m_pResourceContainer->registerResource(m_pBundleResource);
468 m_pResourceContainer->unregisterResource(m_pBundleResource);
470 EXPECT_EQ((unsigned int) 0,
471 ((ResourceContainerImpl *)m_pResourceContainer)->listBundleResources(
472 m_pBundleResource->m_bundleId).size());
475 TEST_F(ResourceContainerBundleAPITest,
476 ServerNotifiesToObserversWhenNotificationReceivedFromResource)
478 mocks.OnCallFunc(ResourceContainerImpl::buildResourceObject).Return(
479 RCSResourceObject::Ptr(m_pResourceObject, [](RCSResourceObject *)
482 mocks.ExpectCall(m_pResourceObject, RCSResourceObject::setGetRequestHandler);
483 mocks.ExpectCall(m_pResourceObject, RCSResourceObject::setSetRequestHandler);
485 m_pResourceContainer->registerResource(m_pBundleResource);
487 mocks.ExpectCall(m_pResourceObject, RCSResourceObject::notify);
489 m_pResourceContainer->onNotificationReceived(m_pBundleResource->m_uri);
491 m_pResourceContainer->unregisterResource(m_pBundleResource);
494 TEST_F(ResourceContainerBundleAPITest, BundleConfigurationParsedWithValidBundleId)
497 map< string, string > results;
499 ((ResourceContainerImpl *)m_pResourceContainer)->startContainer(m_strConfigPath);
500 m_pResourceContainer->getBundleConfiguration("oic.bundle.test", &bundle);
502 results = *bundle.begin();
504 EXPECT_STREQ("oic.bundle.test", results["id"].c_str());
505 EXPECT_STREQ("libTestBundle.so", results["path"].c_str());
506 EXPECT_STREQ("1.0.0", results["version"].c_str());
508 ((ResourceContainerImpl *)m_pResourceContainer)->stopContainer();
511 TEST_F(ResourceContainerBundleAPITest, BundleResourceConfigurationListParsed)
513 vector< resourceInfo > resourceConfig;
516 ((ResourceContainerImpl *)m_pResourceContainer)->startContainer(m_strConfigPath);
517 m_pResourceContainer->getResourceConfiguration("oic.bundle.test", &resourceConfig);
519 result = *resourceConfig.begin();
521 EXPECT_STREQ("test_resource", result.name.c_str());
522 EXPECT_STREQ("container.test", result.resourceType.c_str());
524 ((ResourceContainerImpl *)m_pResourceContainer)->stopContainer();
527 class ResourceContainerImplTest: public TestWithMock
531 ResourceContainerImpl *m_pResourceContainer;
532 shared_ptr<BundleInfoInternal> m_pBundleInfo;
537 TestWithMock::SetUp();
538 m_pResourceContainer = ResourceContainerImpl::getImplInstance();
539 m_pBundleInfo = std::make_shared<BundleInfoInternal>();
544 m_pBundleInfo.reset();
549 /* Test for Configuration */
550 TEST(ConfigurationTest, ConfigFileLoadedWithValidPath)
552 std::string strConfigPath;
553 getCurrentPath(&strConfigPath);
554 strConfigPath.append("/");
555 strConfigPath.append(CONFIG_FILE);
557 Configuration *config = new Configuration(strConfigPath);
559 EXPECT_TRUE(config->isLoaded());
564 TEST(ConfigurationTest, ConfigFileNotLoadedWithInvalidPath)
566 Configuration *config = new Configuration("InvalidPath");
568 EXPECT_FALSE(config->isLoaded());
573 TEST(ConfigurationTest, BundleConfigurationListParsed)
575 std::string strConfigPath;
576 getCurrentPath(&strConfigPath);
577 strConfigPath.append("/");
578 strConfigPath.append(CONFIG_FILE);
580 Configuration *config = new Configuration(strConfigPath);
583 map< string, string > results;
585 config->getConfiguredBundles(&bundles);
587 results = *bundles.begin();
589 EXPECT_STREQ("oic.bundle.test", results["id"].c_str());
590 EXPECT_STREQ("libTestBundle.so", results["path"].c_str());
591 EXPECT_STREQ("1.0.0", results["version"].c_str());
596 TEST(ConfigurationTest, BundleConfigurationParsedWithValidBundleId)
598 std::string strConfigPath;
599 getCurrentPath(&strConfigPath);
600 strConfigPath.append("/");
601 strConfigPath.append(CONFIG_FILE);
603 Configuration *config = new Configuration(strConfigPath);
606 map< string, string > results;
608 config->getBundleConfiguration("oic.bundle.test", &bundle);
610 results = *bundle.begin();
612 EXPECT_STREQ("oic.bundle.test", results["id"].c_str());
613 EXPECT_STREQ("libTestBundle.so", results["path"].c_str());
614 EXPECT_STREQ("1.0.0", results["version"].c_str());
619 TEST(ConfigurationTest, BundleConfigurationNotParsedWithInvalidBundleId)
621 std::string strConfigPath;
622 getCurrentPath(&strConfigPath);
623 strConfigPath.append("/");
624 strConfigPath.append(CONFIG_FILE);
626 Configuration *config = new Configuration(strConfigPath);
629 config->getBundleConfiguration("test", &bundles);
631 EXPECT_TRUE(bundles.empty());
636 TEST(ConfigurationTest, BundleResourceConfigurationListParsed)
638 std::string strConfigPath;
639 getCurrentPath(&strConfigPath);
640 strConfigPath.append("/");
641 strConfigPath.append(CONFIG_FILE);
643 Configuration *config = new Configuration(strConfigPath);
645 vector< resourceInfo > resourceConfig;
648 config->getResourceConfiguration("oic.bundle.test", &resourceConfig);
650 result = *resourceConfig.begin();
652 EXPECT_STREQ("test_resource", result.name.c_str());
653 EXPECT_STREQ("container.test", result.resourceType.c_str());
658 TEST(ConfigurationTest, BundleResourceConfigurationNotParsedWithInvalidBundleId)
660 std::string strConfigPath;
661 getCurrentPath(&strConfigPath);
662 strConfigPath.append("/");
663 strConfigPath.append(CONFIG_FILE);
665 Configuration *config = new Configuration(strConfigPath);
668 vector< resourceInfo > resourceConfig;
669 config->getResourceConfiguration("test", &resourceConfig);
671 EXPECT_TRUE(bundles.empty());
676 class DiscoverResourceUnitTest: public TestWithMock
679 typedef std::function<void(const std::string attributeName,
680 std::vector<RCSResourceAttributes::Value> values)>
683 ResourceContainerTestSimulator::Ptr testObject;
684 DiscoverResourceUnit::Ptr m_pDiscoverResourceUnit;
685 std::string m_bundleId;
686 UpdatedCB m_updatedCB;
691 TestWithMock::SetUp();
693 testObject = std::make_shared<ResourceContainerTestSimulator>();
694 testObject->createResource();
695 m_bundleId = "/a/TempHumSensor/Container";
696 m_pDiscoverResourceUnit = std::make_shared< DiscoverResourceUnit >( m_bundleId );
697 m_updatedCB = ([](const std::string, std::vector< RCSResourceAttributes::Value >) { });
702 m_pDiscoverResourceUnit.reset();
704 TestWithMock::TearDown();
708 TEST_F(DiscoverResourceUnitTest, startDiscover)
710 std::string type = "resource.container";
711 std::string attributeName = "TestResourceContainer";
713 m_pDiscoverResourceUnit->startDiscover(
714 DiscoverResourceUnit::DiscoverResourceInfo("", type, attributeName), m_updatedCB);
716 std::chrono::milliseconds interval(ResourceContainerTestSimulator::DEFAULT_WAITTIME);
717 std::this_thread::sleep_for(interval);
720 TEST_F(DiscoverResourceUnitTest, onUpdateCalled)
722 std::string type = "resource.container";
723 std::string attributeName = "TestResourceContainer";
725 m_pDiscoverResourceUnit->startDiscover(
726 DiscoverResourceUnit::DiscoverResourceInfo("", type, attributeName), m_updatedCB);
728 std::chrono::milliseconds interval(ResourceContainerTestSimulator::DEFAULT_WAITTIME);
729 std::this_thread::sleep_for(interval);
731 testObject->ChangeAttributeValue();
736 void onCacheCB(const RCSResourceAttributes &) { }
739 class RemoteResourceUnitTest: public TestWithMock
742 typedef std::function<void(RemoteResourceUnit::UPDATE_MSG, RCSRemoteResourceObject::Ptr)>
746 ResourceContainerTestSimulator::Ptr testObject;
747 RemoteResourceUnit::Ptr m_pRemoteResourceUnit;
748 RCSRemoteResourceObject::Ptr m_pRCSRemoteResourceObject;
749 UpdatedCBFromServer m_updatedCBFromServer;
754 TestWithMock::SetUp();
755 testObject = std::make_shared<ResourceContainerTestSimulator>();
756 testObject->defaultRunSimulator();
757 m_pRCSRemoteResourceObject = testObject->getRemoteResource();
758 m_updatedCBFromServer = ([](RemoteResourceUnit::UPDATE_MSG, RCSRemoteResourceObject::Ptr) {});
763 m_pRCSRemoteResourceObject.reset();
765 TestWithMock::TearDown();
769 TEST_F(RemoteResourceUnitTest, createRemoteResourceInfo)
771 EXPECT_NE(nullptr, m_pRemoteResourceUnit->createRemoteResourceInfo(m_pRCSRemoteResourceObject,
772 m_updatedCBFromServer));
775 TEST_F(RemoteResourceUnitTest, getRemoteResourceObject)
777 RemoteResourceUnit::Ptr ptr = m_pRemoteResourceUnit->createRemoteResourceInfo(
778 m_pRCSRemoteResourceObject, m_updatedCBFromServer);
779 EXPECT_EQ(m_pRCSRemoteResourceObject, ptr->getRemoteResourceObject());
782 TEST_F(RemoteResourceUnitTest, getRemoteResourceUri)
784 RemoteResourceUnit::Ptr ptr = m_pRemoteResourceUnit->createRemoteResourceInfo(
785 m_pRCSRemoteResourceObject, m_updatedCBFromServer);
786 EXPECT_NE("", ptr->getRemoteResourceUri());
789 TEST_F(RemoteResourceUnitTest, startCaching)
791 RemoteResourceUnit::Ptr ptr = m_pRemoteResourceUnit->createRemoteResourceInfo(
792 m_pRCSRemoteResourceObject, m_updatedCBFromServer);
796 TEST_F(RemoteResourceUnitTest, startMonitoring)
798 RemoteResourceUnit::Ptr ptr = m_pRemoteResourceUnit->createRemoteResourceInfo(
799 m_pRCSRemoteResourceObject, m_updatedCBFromServer);
800 ptr->startMonitoring();
803 TEST_F(RemoteResourceUnitTest, onCacheCBCalled)
805 bool isCalled = false;
806 mocks.ExpectCallFunc(onCacheCB).Do(
807 [this, &isCalled](const RCSResourceAttributes &)
811 RemoteResourceUnit::Ptr ptr = m_pRemoteResourceUnit->createRemoteResourceInfoWithCacheCB(
812 m_pRCSRemoteResourceObject, m_updatedCBFromServer, onCacheCB);
814 testObject->ChangeAttributeValue();
815 EXPECT_TRUE(isCalled);