1 //******************************************************************
3 // Copyright 2016 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 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
22 #include <condition_variable>
24 #include "RemoteSceneList.h"
26 #include "UnitTestHelper.h"
27 #include "SceneCommons.h"
28 #include "SceneList.h"
29 #include "RCSResourceObject.h"
30 #include "RCSRemoteResourceObject.h"
31 #include "OCPlatform.h"
34 using namespace OIC::Service;
37 constexpr int DEFAULT_WAITTIME = 2000;
39 constexpr char RESOURCE_URI[]{ "/a/light" };
40 constexpr char RESOURCE_TYPE[]{ "core.light" };
41 constexpr char KEY[]{ "power" };
42 constexpr char VALUE[]{ "off" };
44 static int lightNum = 0;
46 RCSRemoteResourceObject::Ptr pListResource;
47 RemoteSceneList::Ptr pSceneList;
48 RemoteSceneCollection::Ptr pSceneCollection;
49 RemoteScene::Ptr pScene;
50 RemoteSceneAction::Ptr pSceneAction;
51 RCSRemoteResourceObject::Ptr pLightResource;
52 std::condition_variable cond;
55 void onRemoteSceneListCreated(RemoteSceneList::Ptr remoteSceneList, int)
57 pSceneList = std::move(remoteSceneList);
61 void onRemoteSceneCollectionCreated(RemoteSceneCollection::Ptr remoteSceneCol, int)
63 pSceneCollection = remoteSceneCol;
67 void onRemoteSceneCreated(RemoteScene::Ptr remoteScene, int)
73 void onRemoteSceneActionCreated(RemoteSceneAction::Ptr remoteSceneAction, int)
75 pSceneAction = remoteSceneAction;
79 void onActionUpdated(int)
83 void createListServer()
85 std::vector< std::string > vecRT{ SCENE_LIST_RT };
86 std::vector< std::string > vecIF{ OC_RSRVD_INTERFACE_DEFAULT, OC::BATCH_INTERFACE };
88 pListResource = SceneUtils::createRCSResourceObject(
89 "coap://" + SceneUtils::getNetAddress() + SCENE_LIST_URI,
90 SCENE_CONNECTIVITY, vecRT, vecIF);
93 void waitForCallback(int waitingTime = DEFAULT_WAITTIME)
95 std::unique_lock< std::mutex > lock{ g_mutex };
96 cond.wait_for(lock, std::chrono::milliseconds{ waitingTime });
101 SceneList::getInstance()->getName();
104 RemoteSceneList::createInstance(pListResource, onRemoteSceneListCreated);
108 pSceneList->addNewSceneCollection(onRemoteSceneCollectionCreated);
112 pSceneCollection->addNewScene("Test Scene", onRemoteSceneCreated);
118 class RemoteSceneActionTest : public TestWithMock
123 TestWithMock::SetUp();
126 void createLightServer()
128 RCSResourceObject::Ptr pResource = RCSResourceObject::Builder(
129 RESOURCE_URI, RESOURCE_TYPE, DEFAULT_INTERFACE).build();
130 pResource->setAttribute(KEY, RCSResourceAttributes::Value(VALUE));
133 = SceneUtils::createRCSResourceObject(
134 "coap://" + SceneUtils::getNetAddress() + RESOURCE_URI
135 + "/" + std::to_string(lightNum++),
136 SCENE_CONNECTIVITY, pResource->getTypes(), pResource->getInterfaces());
140 TEST_F(RemoteSceneActionTest, createSceneAction)
145 pScene->addNewSceneAction(pLightResource, KEY, RCSResourceAttributes::Value(VALUE),
146 onRemoteSceneActionCreated);
150 ASSERT_NE(nullptr, pSceneAction);
153 TEST_F(RemoteSceneActionTest, createSceneActionWithEmptyRCSRemoteResourceObjectPtr)
155 ASSERT_THROW(pScene->addNewSceneAction(nullptr, KEY, RCSResourceAttributes::Value(VALUE),
156 onRemoteSceneActionCreated), RCSInvalidParameterException);
159 TEST_F(RemoteSceneActionTest, getAllRemoteSceneActions)
164 pScene->addNewSceneAction(pLightResource, KEY, RCSResourceAttributes::Value(VALUE),
165 onRemoteSceneActionCreated);
169 vector< RemoteSceneAction::Ptr > actions
170 = pScene->getRemoteSceneActions();
172 ASSERT_EQ((unsigned int)1, actions.size());
173 ASSERT_TRUE(actions.at(0)->getExecutionParameter().contains(KEY));
174 ASSERT_EQ(VALUE, actions.at(0)->getExecutionParameter().at(KEY).get< string >());
177 TEST_F(RemoteSceneActionTest, getRemoteSceneAction)
181 pScene->addNewSceneAction(pLightResource, KEY, RCSResourceAttributes::Value(VALUE),
182 onRemoteSceneActionCreated);
186 RemoteSceneAction::Ptr action = pScene->getRemoteSceneAction(pLightResource);
188 ASSERT_TRUE(action->getExecutionParameter().contains(KEY));
189 ASSERT_EQ(VALUE, action->getExecutionParameter().at(KEY).get< string >());
192 TEST_F(RemoteSceneActionTest, updateSceneAction)
196 pScene->addNewSceneAction(pLightResource, KEY, RCSResourceAttributes::Value(VALUE),
197 onRemoteSceneActionCreated);
201 pSceneAction->resetExecutionParameter(
202 KEY, RCSResourceAttributes::Value("on"), onActionUpdated);
206 ASSERT_EQ("on", pSceneAction->getExecutionParameter().at(KEY).get< string >());