scenemanager_env.AppendUnique(CPPPATH = ['../resource-encapsulation/src/common/primitiveResource/include'])
scenemanager_env.AppendUnique(CPPPATH = ['../resource-encapsulation/src/common/expiryTimer/include'])
+
scenemanager_env.PrependUnique(LIBS = [
'rcs_client',
'rcs_server',
if target_os == 'linux':
scenemanager_env.AppendUnique(LIBS = ['pthread'])
+
if target_os == 'android':
scenemanager_env.AppendUnique(CXXFLAGS = ['-frtti', '-fexceptions'])
scenemanager_env.AppendUnique(LIBS = ['gnustl_shared','log'])
- if not env.get('RELEASE'):
- scenemanager_env.AppendUnique(LIBS = ['log'])
+if not env.get('RELEASE'):
+ scenemanager_env.PrependUnique(LIBS = ['gcov'])
+ scenemanager_env.AppendUnique(CXXFLAGS = ['--coverage'])
######################################################################
# Source files and Targets
scenemanager_env.UserInstallTargetHeader('include/RemoteSceneAction.h', 'service/scene-manager', 'RemoteSceneAction.h')
# Go to build Unit test
-#if target_os == 'linux':
-# SConscript('src/unittest/SConscript')
+if target_os == 'linux':
+ SConscript('unittests/SConscript')
# Go to build sample apps
SConscript('sampleapp/SConscript')
if 'rt' in scenemanager_sample_env.get('LIBS'):
scenemanager_sample_env.Append(LIBS = ['rt'])
+if not env.get('RELEASE'):
+ scenemanager_sample_env.PrependUnique(LIBS = ['gcov'])
+ scenemanager_sample_env.AppendUnique(CXXFLAGS = ['--coverage'])
####################################################################
# Source files and Targets
######################################################################
--- /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.
+#
+#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+##
+# SceneManager Unit Test build script
+##
+
+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'])
+
+lib_env = env.Clone()
+SConscript(env.get('SRC_DIR') + '/service/third_party_libs.scons', 'lib_env')
+
+######################################################################
+#unit test setting
+######################################################################
+src_dir = lib_env.get('SRC_DIR')
+gtest_dir = src_dir + '/extlibs/gtest/gtest-1.7.0'
+
+scene_test_env = lib_env.Clone()
+target_os = env.get('TARGET_OS')
+
+######################################################################
+# Build flags
+######################################################################
+GTest = File(gtest_dir + '/lib/.libs/libgtest.a')
+GTest_Main = File(gtest_dir + '/lib/.libs/libgtest_main.a')
+
+#scene_test_env.AppendUnique(LIBPATH = [gtest_dir + '/lib/.libs'])
+scene_test_env.AppendUnique(LIBPATH = [lib_env.get('BUILD_DIR')])
+scene_test_env.AppendUnique(LIBS = [
+ 'scene_manager', 'rcs_server', 'rcs_client','rcs_common',
+ 'oc', 'octbstack', 'oc_logger', 'connectivity_abstraction', 'coap',
+ GTest_Main, GTest])
+
+if target_os not in ['windows', 'winrt']:
+ scene_test_env.AppendUnique(CXXFLAGS = ['-O2', '-g', '-Wall', '-fmessage-length=0', '-std=c++0x'])
+
+if target_os == 'linux':
+ scene_test_env.AppendUnique(CXXFLAGS = ['-pthread'])
+ scene_test_env.AppendUnique(LIBS = ['pthread'])
+
+if not env.get('RELEASE'):
+ scene_test_env.PrependUnique(LIBS = ['gcov'])
+ scene_test_env.AppendUnique(CXXFLAGS = ['--coverage'])
+
+scene_test_env.PrependUnique(CPPPATH = [ src_dir + '/extlibs/hippomocks-master',
+ gtest_dir + '/include'])
+scene_test_env.AppendUnique(CPPPATH = ['../include'])
+scene_test_env.AppendUnique(CPPPATH = ['../src'])
+scene_test_env.AppendUnique(CPPPATH = ['../../resource-encapsulation/include'])
+scene_test_env.AppendUnique(CPPPATH = ['../../resource-encapsulation/src/common/primitiveResource/include'])
+scene_test_env.AppendUnique(CPPPATH = ['../../resource-encapsulation/src/common/utils/include'])
+######################################################################
+# Build Test
+######################################################################
+
+scene_list_test_src = env.Glob('./SceneListTest.cpp')
+scene_list_test = scene_test_env.Program('scene_list_test', scene_list_test_src)
+Alias("scene_list_test", scene_list_test)
+env.AppendTarget('scene_list_test')
+scene_test_env.InstallTarget(scene_list_test, 'scene_list_test')
+
+scene_collection_test_src = env.Glob('./SceneCollectionTest.cpp')
+scene_collection_test = scene_test_env.Program('scene_collection_test', scene_collection_test_src)
+Alias("scene_collection_test", scene_collection_test)
+env.AppendTarget('scene_collection_test')
+scene_test_env.InstallTarget(scene_collection_test, 'scene_collection_test')
+
+scene_test_src = env.Glob('./SceneTest.cpp')
+scene_test = scene_test_env.Program('scene_test', scene_test_src)
+Alias("scene_test", scene_test)
+env.AppendTarget('scene_test')
+scene_test_env.InstallTarget(scene_test, 'scene_test')
+
+scene_action_test_src = env.Glob('./SceneActionTest.cpp')
+scene_action_test = scene_test_env.Program('scene_action_test', scene_action_test_src)
+Alias("scene_action_test", scene_action_test)
+env.AppendTarget('scene_action_test')
+scene_test_env.InstallTarget(scene_action_test, 'scene_action_test')
+
+#target_os = env.get('TARGET_OS')
+#if target_os == 'linux':
+# from tools.scons.RunTest import *
+# run_test(scene_test_env,
+# '',
+# 'service/scene-manager/unittest/scene_test')
--- /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.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+#include "UnitTestHelper.h"
+
+#include "SceneList.h"
+#include "RCSResourceObject.h"
+#include "RCSRemoteResourceObject.h"
+#include "SceneCommons.h"
+#include "OCPlatform.h"
+
+using namespace std;
+using namespace OIC::Service;
+using namespace OC;
+
+typedef std::function<void (int)> ExecuteCallback;
+
+constexpr char RESOURCE_URI[]{ "/a/light" };
+constexpr char RESOURCE_TYPE[]{ "core.light" };
+constexpr char RESOURCE_URI2[]{ "/a/fan" };
+constexpr char RESOURCE_TYPE2[]{ "core.fan" };
+constexpr char KEY[]{ "power" };
+constexpr char VALUE[]{ "off" };
+constexpr char KEY_2[]{ "state" };
+constexpr char VALUE_2[]{ "100" };
+
+class SceneActionTest: public TestWithMock
+{
+protected:
+ void SetUp()
+ {
+ TestWithMock::SetUp();
+ pSceneList = SceneList::getInstance();
+ }
+
+ void createServer(const std::string& resourceUri1, const std::string& resourceUri2)
+ {
+ auto pResource1 = RCSResourceObject::Builder(
+ resourceUri1, RESOURCE_TYPE, DEFAULT_INTERFACE).build();
+ pResource1->setAttribute(KEY, VALUE);
+
+ auto ocResourcePtr = OC::OCPlatform::constructResourceObject(
+ "coap://" + SceneUtils::getNetAddress(), resourceUri1,
+ OCConnectivityType::CT_ADAPTER_IP, false,
+ pResource1->getTypes(), pResource1->getInterfaces());
+ pRemoteResource1 = RCSRemoteResourceObject::fromOCResource(ocResourcePtr);
+
+ auto pResource2 = RCSResourceObject::Builder(
+ resourceUri2, RESOURCE_TYPE2, DEFAULT_INTERFACE).build();
+ pResource2->setAttribute(KEY_2, VALUE_2);
+
+ ocResourcePtr = OC::OCPlatform::constructResourceObject(
+ "coap://" + SceneUtils::getNetAddress(), resourceUri2,
+ OCConnectivityType::CT_ADAPTER_IP, false,
+ pResource2->getTypes(), pResource2->getInterfaces());
+ pRemoteResource2 = RCSRemoteResourceObject::fromOCResource(ocResourcePtr);
+ }
+
+ void createSceneCollectionAndScene()
+ {
+ auto pSceneCollection = pSceneList->addNewSceneCollection();
+ pScene1 = pSceneCollection->addNewScene("SceneTestName_1");
+ }
+
+ void createSceneAction()
+ {
+ pSceneAction1 = pScene1->addNewSceneAction(pRemoteResource1, KEY, VALUE);
+ pSceneAction2 = pScene1->addNewSceneAction(pRemoteResource2, KEY_2, VALUE_2);
+ }
+
+public:
+ SceneList* pSceneList;
+ shared_ptr<Scene> pScene1;
+ shared_ptr<Scene> pScene2;
+ shared_ptr<SceneAction> pSceneAction1;
+ shared_ptr<SceneAction> pSceneAction2;
+ RCSRemoteResourceObject::Ptr pRemoteResource1;
+ RCSRemoteResourceObject::Ptr pRemoteResource2;
+
+private:
+ std::condition_variable cond;
+ std::mutex mutex;
+};
+
+TEST_F(SceneActionTest, createSceneActionByEmptyRCSRemoteResourceObjectPtr)
+{
+ createServer("/a/testuri1_1", "/a/testuri1_2");
+ createSceneCollectionAndScene();
+ ASSERT_THROW(pScene1->addNewSceneAction(
+ nullptr, KEY, VALUE), RCSInvalidParameterException);
+}
+
+TEST_F(SceneActionTest, createSceneActionByAlreadyExistedRCSRemoteResourceObjectPtr)
+{
+ createServer("/a/testuri2_1", "/a/testuri2_2");
+ createSceneCollectionAndScene();
+ createSceneAction();
+ ASSERT_THROW(pScene1->addNewSceneAction(
+ pRemoteResource1, KEY, "off"), Scene::InvalidAddMemberRequestException);
+}
+
+TEST_F(SceneActionTest, getSceneActionInstance)
+{
+ createServer("/a/testuri3_1", "/a/testuri3_2");
+ createSceneCollectionAndScene();
+ createSceneAction();
+
+ for(const auto &it : pSceneAction1->getExecutionParameter())
+ {
+ ASSERT_EQ(it.key(), KEY);
+ ASSERT_EQ(it.value(), VALUE);
+ }
+
+ for(const auto &it: pSceneAction2->getExecutionParameter())
+ {
+ ASSERT_EQ(it.key(), KEY_2);
+ ASSERT_EQ(it.value(), VALUE_2);
+ }
+}
+
+TEST_F(SceneActionTest, updateSceneAction)
+{
+ createServer("/a/testuri4_1", "/a/testuri4_2");
+ createSceneCollectionAndScene();
+ createSceneAction();
+
+ pSceneAction1->setExecutionParameter(KEY, "off");
+ for(const auto &it : pSceneAction1->getExecutionParameter())
+ {
+ ASSERT_EQ(it.key(), KEY);
+ ASSERT_EQ(it.value(), "off");
+ }
+}
+
+TEST_F(SceneActionTest, getRemoteResourceObject)
+{
+ createServer("/a/testuri5_1", "/a/testuri5_2");
+ createSceneCollectionAndScene();
+ createSceneAction();
+
+ ASSERT_EQ(pSceneAction1->getRemoteResourceObject(), pRemoteResource1);
+}
--- /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.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+#include "UnitTestHelper.h"
+
+#include "SceneList.h"
+#include "OCPlatform.h"
+
+using namespace std;
+using namespace OIC::Service;
+using namespace OC;
+
+class SceneCollectionTest: public TestWithMock
+{
+protected:
+ void SetUp()
+ {
+ TestWithMock::SetUp();
+ pSceneList = SceneList::getInstance();
+ }
+
+public:
+ SceneList* pSceneList;
+ std::shared_ptr<SceneCollection> pSceneCollection;
+};
+
+TEST_F(SceneCollectionTest, createSceneCollectionInstanceAndSceneCollectionResource)
+{
+ bool isNullPtr = false;
+ pSceneCollection = pSceneList->addNewSceneCollection();
+
+ if(pSceneCollection->getId() == "")
+ {
+ isNullPtr = true;
+ }
+
+ EXPECT_FALSE(isNullPtr);
+}
+
+TEST_F(SceneCollectionTest, getSceneCollectionInstanceAndSceneCollectionResource)
+{
+ auto sceneCollections = pSceneList->getSceneCollections();
+ bool isNullPtr = false;
+
+ for(const auto &it : sceneCollections)
+ {
+ if(it->getId() == "")
+ {
+ isNullPtr = true;
+ }
+ ASSERT_FALSE(isNullPtr);
+ }
+}
+
+TEST_F(SceneCollectionTest, setAndGetSceneCollectionResourceName)
+{
+ pSceneCollection = pSceneList->addNewSceneCollection();
+ pSceneCollection->setName("Kitchen");
+ auto sceneCollectionName = pSceneCollection->getName();
+
+ EXPECT_EQ("Kitchen", sceneCollectionName);
+}
--- /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.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+#include "UnitTestHelper.h"
+
+#include "SceneList.h"
+
+using namespace std;
+using namespace OIC::Service;
+using namespace OC;
+
+class SceneListTest: public TestWithMock
+{
+protected:
+ void SetUp()
+ {
+ TestWithMock::SetUp();
+ }
+};
+
+TEST_F(SceneListTest, sceneListInstance)
+{
+ EXPECT_EQ(SceneList::getInstance(), SceneList::getInstance());
+}
+
+TEST_F(SceneListTest, setAndGetSceneListResourceName)
+{
+ SceneList::getInstance()->setName("House");
+ auto sceneListName = SceneList::getInstance()->getName();
+
+ EXPECT_EQ("House", sceneListName);
+}
--- /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.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+#include "UnitTestHelper.h"
+
+#include "SceneList.h"
+
+#include "RCSResourceObject.h"
+#include "RCSRemoteResourceObject.h"
+#include "SceneCommons.h"
+#include "OCPlatform.h"
+
+#include <condition_variable>
+#include <mutex>
+#include <iostream>
+
+using namespace std;
+using namespace OIC::Service;
+using namespace OC;
+
+typedef std::function<void (int)> ExecuteCallback;
+
+constexpr char RESOURCE_URI[]{ "/a/light" };
+constexpr char RESOURCE_TYPE[]{ "core.light" };
+constexpr char RESOURCE_URI2[]{ "/a/fan" };
+constexpr char RESOURCE_TYPE2[]{ "core.fan" };
+constexpr char KEY[]{ "power" };
+constexpr char VALUE[]{ "off" };
+constexpr char KEY_2[]{ "state" };
+constexpr char VALUE_2[]{ "100" };
+
+class SceneTest: public TestWithMock
+{
+protected:
+ void SetUp()
+ {
+ TestWithMock::SetUp();
+ pSceneList = SceneList::getInstance();
+ }
+ void waitForCb(int watingTime)
+ {
+ std::unique_lock< std::mutex > lock{ mutex };
+ cond.wait_for(lock, std::chrono::milliseconds{ watingTime });
+ }
+ void proceed()
+ {
+ cond.notify_all();
+ }
+ void createSceneCollection()
+ {
+ pSceneCollection = pSceneList->addNewSceneCollection();
+ }
+ void createScene()
+ {
+ pScene1 = pSceneCollection->addNewScene("SceneTestName_1");
+ pScene2 = pSceneCollection->addNewScene("SceneTestName_2");
+ }
+ void createServer(const std::string& resourceUri1, const std::string& resourceUri2)
+ {
+ auto pResource1 = RCSResourceObject::Builder(
+ resourceUri1, RESOURCE_TYPE, DEFAULT_INTERFACE).build();
+ pResource1->setAttribute(KEY, VALUE);
+
+ auto ocResourcePtr = OC::OCPlatform::constructResourceObject(
+ "coap://" + SceneUtils::getNetAddress(), resourceUri1,
+ OCConnectivityType::CT_ADAPTER_IP, false,
+ pResource1->getTypes(), pResource1->getInterfaces());
+ pRemoteResource1 = RCSRemoteResourceObject::fromOCResource(ocResourcePtr);
+
+ auto pResource2 = RCSResourceObject::Builder(
+ resourceUri2, RESOURCE_TYPE2, DEFAULT_INTERFACE).build();
+ pResource2->setAttribute(KEY_2, VALUE_2);
+
+ ocResourcePtr = OC::OCPlatform::constructResourceObject(
+ "coap://" + SceneUtils::getNetAddress(), resourceUri2,
+ OCConnectivityType::CT_ADAPTER_IP, false,
+ pResource2->getTypes(), pResource2->getInterfaces());
+ pRemoteResource2 = RCSRemoteResourceObject::fromOCResource(ocResourcePtr);
+ }
+
+public:
+ SceneList* pSceneList;
+ shared_ptr<SceneCollection> pSceneCollection;
+ shared_ptr<Scene> pScene1;
+ shared_ptr<Scene> pScene2;
+ RCSRemoteResourceObject::Ptr pRemoteResource1;
+ RCSRemoteResourceObject::Ptr pRemoteResource2;
+
+private:
+ std::condition_variable cond;
+ std::mutex mutex;
+};
+void executeCallback(int /*code*/) {};
+
+TEST_F(SceneTest, createSceneInstance)
+{
+ createSceneCollection();
+ createScene();
+ ASSERT_EQ("SceneTestName_1", pScene1->getName());
+ ASSERT_EQ("SceneTestName_2", pScene2->getName());
+}
+
+TEST_F(SceneTest, createSceneInstanceByEmptyName)
+{
+ createSceneCollection();
+ ASSERT_THROW(pSceneCollection->addNewScene(""), RCSInvalidParameterException);
+}
+
+TEST_F(SceneTest, getSceneInstanceBySceneName)
+{
+ createSceneCollection();
+ auto scene = pSceneCollection->getScene("SceneTestName_2");
+ EXPECT_EQ("SceneTestName_2", scene->getName());
+}
+
+TEST_F(SceneTest, getAllSceneInstance)
+{
+ createSceneCollection();
+ createScene();
+
+ vector<string> sceneNames{"SceneTestName_1", "SceneTestName_2"};
+ auto scenes = pSceneCollection->getScenes();
+ int count = 0;
+
+ for(const auto &it : scenes)
+ {
+ ASSERT_EQ(it.first, sceneNames.at(count++));
+ }
+}
+
+TEST_F(SceneTest, getSceneActionUsingRemoteResource)
+{
+ createServer(RESOURCE_URI, RESOURCE_URI2);
+ createSceneCollection();
+ createScene();
+
+ auto pSceneAction1 = pScene1->addNewSceneAction(pRemoteResource1, KEY, VALUE);
+ pSceneAction1->setExecutionParameter(KEY_2, VALUE_2);
+
+ ASSERT_EQ(pScene1->getSceneAction(pRemoteResource1)->getExecutionParameter(),
+ pSceneAction1->getExecutionParameter());
+}
+
+TEST_F(SceneTest, getSceneActions)
+{
+ createServer("/a/testuri1_1", "/a/testuri1_2");
+ createSceneCollection();
+ createScene();
+
+ auto pSceneAction1 = pScene1->addNewSceneAction(pRemoteResource1, KEY, VALUE);
+// auto pSceneAction2 = pScene1->addNewSceneAction(pRemoteResource2, KEY, VALUE);
+
+ for(const auto & it : pScene1->getSceneActions())
+ {
+ ASSERT_EQ(it->getExecutionParameter(), pSceneAction1->getExecutionParameter());
+ }
+}
+
+TEST_F(SceneTest, executeScene)
+{
+ mocks.ExpectCallFunc(executeCallback).Do([this](int){ proceed(); });
+
+ createServer("/a/testuri2_1", "/a/testuri2_2");
+ createSceneCollection();
+ createScene();
+ pScene1->addNewSceneAction(pRemoteResource1, KEY, "on");
+ pScene1->addNewSceneAction(pRemoteResource2, KEY_2, VALUE_2);
+
+ pScene1->execute(executeCallback);
+ waitForCb(100);
+}
+
+TEST_F(SceneTest, executeSceneUsingEmptyCallback)
+{
+ createServer("/a/testuri3_1", "/a/testuri3_2");
+ createSceneCollection();
+ createScene();
+ pScene1->addNewSceneAction(pRemoteResource1, KEY, "on");
+ pScene1->addNewSceneAction(pRemoteResource2, KEY_2, VALUE_2);
+
+ ASSERT_THROW(pScene1->execute(nullptr), RCSInvalidParameterException);
+}
+
+//TEST_F(SceneTest, executeSceneByNotExistedSceneName)
+//{
+//
+//}
+