--- /dev/null
+#define private public
+#include <gtest/gtest.h>
+#include <iostream>
+#include "ResourceClient.h"
+#include "ResourceObject.h"
+#include "OCPlatform.h"
+
+#define RESOURCEURI "/a/TemperatureSensor"
+#define RESOURCETYPE "Resource.Hosting"
+#define RESOURCEINTERFACE "oic.if.baseline"
+
+using namespace OIC::Service;
+using namespace OC;
+
+bool cbresult = false;
+std::string uri = "/oic/res?rt=Resource.Hosting";
+std::shared_ptr<RemoteResourceObject> object;
+DiscoveryManager *manager = DiscoveryManager::getInstance();
+ResourceState receivedResourceState;
+ResourceAttributes receivedResourceAttributes;
+ResourceObject::Ptr server;
+
+void createResource()
+{
+ server = ResourceObject::Builder(RESOURCEURI, RESOURCETYPE,
+ RESOURCEINTERFACE).setDiscoverable(true).setObservable(true).build();
+ std::cout << "Resource created successfully " << std::endl;
+ server->setAttribute("Temperature", 0);
+ PlatformConfig config
+ {
+ OC::ServiceType::InProc, ModeType::Client, "0.0.0.0", 0, OC::QualityOfService::LowQos
+ };
+ OCPlatform::Configure(config);
+}
+
+void destroyResource()
+{
+ server = NULL;
+}
+
+//Callbacks
+void onRemoteAttrReceived(const ResourceAttributes &attributes)
+{
+ cbresult = true;
+ receivedResourceAttributes = attributes;
+}
+
+void onResourceDiscoveredCallback(std::shared_ptr<RemoteResourceObject> receivedObject)
+{
+ std::cout << "Resource discovered" << std::endl;
+ object = receivedObject;
+ std::cout << object->getUri() << std::endl;
+ std::cout << "Resource discovered exited" << std::endl;
+ EXPECT_TRUE(object != NULL);
+}
+
+void onResourceStateChanged(ResourceState state)
+{
+ receivedResourceState = state;
+}
+
+void onCacheUpdated(const ResourceAttributes attribute)
+{
+ receivedResourceAttributes = attribute;
+}
+
+void OnRemoteAttributesSetCallback(const ResourceAttributes &attributes)
+{
+ cbresult = true;
+}
+
+//Send valid call to discover resource
+TEST(ResourceClientTest, testDiscoverResourcePass)
+{
+ createResource();
+ DiscoveryManager *instance = DiscoveryManager::getInstance();
+ cbresult = false;
+
+ instance->discoverResource("", uri, CT_DEFAULT, &onResourceDiscoveredCallback);
+ sleep(2);
+ EXPECT_TRUE(object != NULL);
+ destroyResource();
+}
+
+//Get remote attributes when callback is not NULL
+TEST(ResourceClientTest, testGetRemoteAttributesPass)
+{
+ createResource();
+ sleep(2);
+ cbresult = false;
+ object->getRemoteAttributes(&onRemoteAttrReceived);
+ sleep(2);
+
+ EXPECT_TRUE(cbresult);
+ destroyResource();
+}
+
+//Set remote attributes when callback is not NULL
+TEST(ResourceClientTest, testSetRemoteAttributesPass)
+{
+ createResource();
+ sleep(2);
+
+ cbresult = false;
+ object->getRemoteAttributes(&onRemoteAttrReceived);
+ sleep(2);
+ ResourceAttributes::const_iterator iter = receivedResourceAttributes.begin();
+ for (unsigned int i = 0; i < receivedResourceAttributes.size(); ++i)
+ {
+ if ( iter->key() == "Temperature")
+ {
+ std::cout << "It is there" << std::endl;
+ receivedResourceAttributes["Temperature"] = 100;
+ object->setRemoteAttributes(receivedResourceAttributes, &OnRemoteAttributesSetCallback);
+ }
+ ++iter;
+ }
+ sleep(2);
+ EXPECT_TRUE(cbresult);
+ destroyResource();
+}
+
+//Check value of isWatching
+TEST(ResourceClientTest, testIsWatching)
+{
+ createResource();
+ manager->DiscoveryManager::discoverResource("", uri, CT_DEFAULT, &onResourceDiscoveredCallback);
+ sleep(1);
+ destroyResource();
+ EXPECT_FALSE(object->isWatching());
+}
+
+//Check value of isCaching
+TEST(ResourceClientTest, testIsCaching)
+{
+ createResource();
+ destroyResource();
+ EXPECT_FALSE(object->isCaching());
+}
+
+TEST(ResourceClientTest, testIsObservable)
+{
+ createResource();
+ destroyResource();
+ EXPECT_TRUE(object->isObservable());
+}
+
+//Check value of startWatching for NULL callback
+TEST(ResourceClientTest, testStartWatchingFail)
+{
+ createResource();
+ object->m_watchingFlag = false;
+ object->startWatching(NULL);
+ EXPECT_TRUE(object->m_watchingFlag);
+ object->stopWatching();
+ destroyResource();
+}
+
+//Check value of startWatching for non NULL callback
+TEST(ResourceClientTest, testStartWatchingPass)
+{
+ createResource();
+ object->startWatching(&onResourceStateChanged);
+ EXPECT_TRUE(object->m_watchingFlag);
+ object->stopWatching();
+ destroyResource();
+}
+
+//Stop watching when watching is true
+TEST(ResourceClientTest, testStopWatching)
+{
+ createResource();
+ object->startWatching(&onResourceStateChanged);
+ object->stopWatching();
+ EXPECT_FALSE(object->m_watchingFlag);
+ object->startWatching(&onResourceStateChanged);
+ destroyResource();
+}
+
+//Get state of resource
+TEST(ResourceClientTest, testGetStatePass)
+{
+ createResource();
+ ResourceState result = object->getState();
+ EXPECT_TRUE(result >= ResourceState::NOT_WATCHING && result <= ResourceState::DESTROYED);
+ destroyResource();
+}
+
+//Cache ID is not zero
+TEST(ResourceClientTest, testStartCachingPass)
+{
+ createResource();
+ object->m_cachingFlag = false;
+ object->startCaching();
+ EXPECT_TRUE(object->m_cachingFlag);
+ destroyResource();
+}
+
+TEST(ResourceClientTest, testStopCaching)
+{
+ createResource();
+ object->m_cachingFlag = false;
+ object->startCaching();
+ object->stopCaching();
+ EXPECT_FALSE(object->m_cachingFlag);
+ destroyResource();
+}
+
+TEST(ResourceClientTest, testRefreshCache)
+{
+ createResource();
+ object->m_cachingFlag = false;
+ object->startCaching();
+ object->refreshCache();
+ EXPECT_TRUE(object->getResourceCacheState() == CacheState::UPDATING);
+ destroyResource();
+}
+
+//Callback for start caching is not NULL
+TEST(ResourceClientTest, testStartCachingCbPass)
+{
+ createResource();
+ object->m_cachingFlag = false;
+ object->startCaching(&onCacheUpdated);
+ EXPECT_TRUE(object->m_cachingFlag);
+ destroyResource();
+}
+
+//Callback for start caching is NULL
+TEST(ResourceClientTest, testStartCachingCbFail)
+{
+ createResource();
+ object->m_cachingFlag = false;
+ object->startCaching(NULL);
+ EXPECT_TRUE(object->m_cachingFlag);
+ destroyResource();
+}
+
+//Get resource state
+TEST(ResourceClientTest, testGetResourceCacheState)
+{
+ createResource();
+ CacheState result = object->getResourceCacheState();
+ EXPECT_TRUE(result >= CacheState::READY && result <= CacheState::NONE);
+ destroyResource();
+}
+
+//Get cached attributes
+TEST(ResourceClientTest, testGetCachedAttributesWithoutCallback)
+{
+ createResource();
+ ResourceAttributes result = object->getCachedAttributes();
+ EXPECT_TRUE(result != NULL);
+ destroyResource();
+}
+
+//Check with invalid attribute value
+TEST(ResourceClientTest, testGetCachedAttributeWithInvalidAttribute)
+{
+ createResource();
+ ResourceAttributes::Value result = object->getCachedAttribute("");
+ std::nullptr_t null;
+ EXPECT_TRUE(result == null);
+ destroyResource();
+}
+
+//Get remote attributes when callback is NULL
+TEST(ResourceClientTest, testGetRemoteAttributesFail)
+{
+ createResource();
+ cbresult = false;
+ object->getRemoteAttributes(NULL);
+ EXPECT_FALSE(cbresult);
+ destroyResource();
+}
+
+TEST(ResourceClientTest, testGetUri)
+{
+ createResource();
+ std::string result = object->getUri();
+ EXPECT_TRUE(result != NULL);
+ destroyResource();
+}
+
+TEST(ResourceClientTest, testGetAddress)
+{
+ createResource();
+ std::string result = object->getAddress();
+ EXPECT_TRUE(result != NULL);
+ destroyResource();
+}
+
+TEST(ResourceClientTest, testGetTypes)
+{
+ createResource();
+ std::vector < std::string > result = object->getTypes();
+ EXPECT_TRUE(result.size() != 0);
+ destroyResource();
+}
+
+TEST(ResourceClientTest, testGetInterfaces)
+{
+ createResource();
+ std::vector < std::string > result = object->getInterfaces();
+ EXPECT_TRUE(result.size() != 0);
+ destroyResource();
+}
+
+//Check with valid attribute value
+TEST(ResourceClientTest, testGetCachedAttribute)
+{
+ createResource();
+ ResourceAttributes::Value result = object->getCachedAttribute("Temperature");
+ EXPECT_TRUE(result != NULL);
+ destroyResource();
+}
+
+//Test getting instance of DiscoveryManager
+TEST(ResourceClientTest, testGetInstance)
+{
+ createResource();
+ DiscoveryManager *instance = DiscoveryManager::getInstance();
+ EXPECT_TRUE(instance != NULL);
+ destroyResource();
+}
+
+//Send empty resource URI
+TEST(ResourceClientTest, testDiscoverResourceEmptyResource)
+{
+ createResource();
+ DiscoveryManager *instance = DiscoveryManager::getInstance();
+ EXPECT_THROW(instance->discoverResource("", "", CT_DEFAULT, &onResourceDiscoveredCallback),
+ InvalidParameterException);
+ destroyResource();
+}
+
+//Send NULL callback
+TEST(ResourceClientTest, testDiscoverResourceEmptyCallback)
+{
+ createResource();
+ DiscoveryManager *instance = DiscoveryManager::getInstance();
+ EXPECT_THROW(instance->discoverResource("", uri, CT_DEFAULT, NULL), InvalidParameterException);
+ destroyResource();
+ object->stopWatching();
+}
+
+//Send invalid ResourceAttributes object to function
+TEST(ResourceClientTest, testSetRemoteAttributesInvalidAttributes)
+{
+ createResource();
+ cbresult = false;
+ ResourceAttributes attr;
+ //object->getRemoteAttributes(&onRemoteAttrReceived);
+ object->setRemoteAttributes(attr, &OnRemoteAttributesSetCallback);
+ EXPECT_FALSE(cbresult);
+ destroyResource();
+}
--- /dev/null
+#******************************************************************
+#
+# Copyright 2015 Samsung Electronics All Rights Reserved.
+#
+#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+##
+# ResourceClient Unit Test build script
+##
+import os
+Import('env')
+
+if env.get('RELEASE'):
+ env.AppendUnique(CCFLAGS = ['-Os'])
+ env.AppendUnique(CPPDEFINES = ['NDEBUG'])
+else:
+ env.AppendUnique(CCFLAGS = ['-g'])
+
+if env.get('LOGGING'):
+ env.AppendUnique(CPPDEFINES = ['TB_LOG'])
+
+# Add third party libraries
+lib_env = env.Clone()
+SConscript(env.get('SRC_DIR') + '/service/third_party_libs.scons', 'lib_env')
+
+target_os = env.get('TARGET_OS')
+if target_os == 'linux':
+ # Verify that 'google unit test' library is installed. If not,
+ # get it and install it
+ SConscript(env.get('SRC_DIR') + '/extlibs/gtest/SConscript')
+
+ # Verify that 'hippomocks' mocking code is installed. If not,
+ # get it and install it
+ SConscript(env.get('SRC_DIR') + '/extlibs/hippomocks.scons')
+
+ResourceClient_gtest_env = lib_env.Clone()
+
+######################################################################
+#unit test setting
+######################################################################
+src_dir = lib_env.get('SRC_DIR')
+gtest_dir = src_dir + '/extlibs/gtest/gtest-1.7.0'
+
+######################################################################
+# Build flags
+######################################################################
+gtest = File(gtest_dir + '/lib/.libs/libgtest.a')
+gtest_main = File(gtest_dir + '/lib/.libs/libgtest_main.a')
+
+ResourceClient_gtest_env.AppendUnique(
+ CPPPATH = [
+ env.get('SRC_DIR')+'/extlibs',
+ '../include',
+ '..src/serverBuilder/include/internal',
+ '../src/serverBuilder/include',
+ '../src/common/primitiveResource/include',
+ '../src/common/include/expiryTimer'
+ ])
+
+if target_os not in ['windows', 'winrt']:
+ ResourceClient_gtest_env.AppendUnique(CXXFLAGS = ['-std=c++0x', '-Wall'])
+ if target_os != 'android':
+ ResourceClient_gtest_env.AppendUnique(CXXFLAGS = ['-pthread'])
+ ResourceClient_gtest_env.AppendUnique(LIBS = ['pthread'])
+
+ResourceClient_gtest_env.PrependUnique(CPPPATH = [env.get('SRC_DIR')+'/extlibs/hippomocks-master/HippoMocks', gtest_dir + '/include'])
+ResourceClient_gtest_env.AppendUnique(LIBPATH = ['/usr/lib/jvm/jdk1.8.0_40/jre/lib/amd64/server/'])
+ResourceClient_gtest_env.PrependUnique(LIBS = ['ResourceClient','ResourceCache', 'ResourceBroker', 'ExpiryTimer','server_builder', 'service_common', 'oc','octbstack', 'oc_logger', 'oc_logger_core', 'connectivity_abstraction', gtest, gtest_main])
+ResourceClient_gtest_env.AppendUnique(LIBS = ['dl'])
+
+######################################################################
+# Build Test
+######################################################################
+ResourceClient_gtest_src = env.Glob('./*.cpp')
+
+ResourceClient_test = ResourceClient_gtest_env.Program('ResourceClient_Test', ResourceClient_gtest_src)
+Alias("ResourceClient_Test", ResourceClient_test)
+env.AppendTarget('ResourceClient_test')
+