UnitTest cases for Resource Client with resource manipulation API
authorJay Sharma <jay.sharma@samsung.com>
Wed, 15 Jul 2015 09:32:31 +0000 (15:02 +0530)
committerUze Choi <uzchoi@samsung.com>
Wed, 15 Jul 2015 13:20:00 +0000 (13:20 +0000)
Change-Id: I224d370e1a3be92d93b6806ed44d8863a99029cb
Signed-off-by: Jay Sharma <jay.sharma@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/1666
Reviewed-by: Uze Choi <uzchoi@samsung.com>
Tested-by: Uze Choi <uzchoi@samsung.com>
service/resource-manipulation/SConscript
service/resource-manipulation/unittests/ResourceClient_Test.cpp [new file with mode: 0644]
service/resource-manipulation/unittests/SConscript [new file with mode: 0644]

index d0ea7ec..2bbc460 100644 (file)
@@ -37,13 +37,13 @@ SConscript('sdk/SConscript')
 ######################################################################
 
 if env.get('RELEASE'):
-       env.AppendUnique(CCFLAGS = ['-Os'])
-       env.AppendUnique(CPPDEFINES = ['NDEBUG'])
+        env.AppendUnique(CCFLAGS = ['-Os'])
+        env.AppendUnique(CPPDEFINES = ['NDEBUG'])
 else:
-       env.AppendUnique(CCFLAGS = ['-g'])
+        env.AppendUnique(CCFLAGS = ['-g'])
 
 if env.get('LOGGING'):
-       env.AppendUnique(CPPDEFINES = ['TB_LOG'])
+        env.AppendUnique(CPPDEFINES = ['TB_LOG'])
 
 # Add third party libraries
 lib_env = env.Clone()
@@ -81,5 +81,12 @@ ResourceClientsdk = resourceClient_env.StaticLibrary('ResourceClient', client_sr
 
 resourceClient_env.InstallTarget(ResourceClientsdk , 'libResourceClient')
 
-#Go to build sample apps
+######################################################################
+# Build Sample App: SampleResourceClient & SampleResourceServer
+######################################################################
 SConscript('examples/SConscript')
+######################################################################
+# Build UnitTests Resource Client
+######################################################################
+SConscript('unittests/SConscript')
+
diff --git a/service/resource-manipulation/unittests/ResourceClient_Test.cpp b/service/resource-manipulation/unittests/ResourceClient_Test.cpp
new file mode 100644 (file)
index 0000000..7e861ef
--- /dev/null
@@ -0,0 +1,357 @@
+#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();
+}
diff --git a/service/resource-manipulation/unittests/SConscript b/service/resource-manipulation/unittests/SConscript
new file mode 100644 (file)
index 0000000..4a67e17
--- /dev/null
@@ -0,0 +1,93 @@
+#******************************************************************
+#
+# 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')
+