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 #include <condition_variable>
22 #include "UnitTestHelper.h"
24 #include "SceneList.h"
25 #include "RCSResourceObject.h"
26 #include "RCSRemoteResourceObject.h"
27 #include "SceneCommons.h"
28 #include "OCPlatform.h"
31 using namespace OIC::Service;
34 typedef std::function<void (int)> ExecuteCallback;
36 constexpr char RESOURCE_URI[]{ "/a/light" };
37 constexpr char RESOURCE_TYPE[]{ "core.light" };
38 constexpr char RESOURCE_URI2[]{ "/a/fan" };
39 constexpr char RESOURCE_TYPE2[]{ "core.fan" };
40 constexpr char KEY[]{ "power" };
41 constexpr char VALUE[]{ "on" };
42 constexpr char KEY_2[]{ "state" };
43 constexpr char VALUE_2[]{ "100" };
45 class SceneActionTest: public TestWithMock
50 TestWithMock::SetUp();
51 pSceneList = SceneList::getInstance();
54 void createServer(const std::string& resourceUri1, const std::string& resourceUri2)
56 auto pResource1 = RCSResourceObject::Builder(
57 resourceUri1, RESOURCE_TYPE, DEFAULT_INTERFACE).build();
58 pResource1->setAttribute(KEY, VALUE);
60 auto ocResourcePtr = OC::OCPlatform::constructResourceObject(
61 "coap://" + SceneUtils::getNetAddress(), resourceUri1,
62 OCConnectivityType::CT_ADAPTER_IP, false,
63 pResource1->getTypes(), pResource1->getInterfaces());
64 pRemoteResource1 = RCSRemoteResourceObject::fromOCResource(ocResourcePtr);
66 auto pResource2 = RCSResourceObject::Builder(
67 resourceUri2, RESOURCE_TYPE2, DEFAULT_INTERFACE).build();
68 pResource2->setAttribute(KEY_2, VALUE_2);
70 ocResourcePtr = OC::OCPlatform::constructResourceObject(
71 "coap://" + SceneUtils::getNetAddress(), resourceUri2,
72 OCConnectivityType::CT_ADAPTER_IP, false,
73 pResource2->getTypes(), pResource2->getInterfaces());
74 pRemoteResource2 = RCSRemoteResourceObject::fromOCResource(ocResourcePtr);
77 void createSceneCollectionAndScene()
79 auto pSceneCollection = pSceneList->addNewSceneCollection();
80 pScene1 = pSceneCollection->addNewScene("SceneTestName_1");
83 void createSceneAction()
85 pSceneAction1 = pScene1->addNewSceneAction(pRemoteResource1, KEY, VALUE);
86 pSceneAction2 = pScene1->addNewSceneAction(pRemoteResource2, KEY_2, VALUE_2);
90 SceneList* pSceneList;
91 shared_ptr<Scene> pScene1;
92 shared_ptr<Scene> pScene2;
93 shared_ptr<SceneAction> pSceneAction1;
94 shared_ptr<SceneAction> pSceneAction2;
95 RCSRemoteResourceObject::Ptr pRemoteResource1;
96 RCSRemoteResourceObject::Ptr pRemoteResource2;
99 std::condition_variable cond;
103 TEST_F(SceneActionTest, createSceneActionByEmptyRCSRemoteResourceObjectPtr)
105 createServer("/a/testuri1_1", "/a/testuri1_2");
106 createSceneCollectionAndScene();
107 ASSERT_THROW(pScene1->addNewSceneAction(
108 nullptr, KEY, VALUE), RCSInvalidParameterException);
111 TEST_F(SceneActionTest, createSceneActionByAlreadyExistedRCSRemoteResourceObjectPtr)
113 createServer("/a/testuri2_1", "/a/testuri2_2");
114 createSceneCollectionAndScene();
116 ASSERT_THROW(pScene1->addNewSceneAction(
117 pRemoteResource1, KEY, "off"), RCSBadRequestException);
120 TEST_F(SceneActionTest, getSceneActionInstance)
122 createServer("/a/testuri3_1", "/a/testuri3_2");
123 createSceneCollectionAndScene();
126 for(const auto &it : pSceneAction1->getExecutionParameter())
128 ASSERT_EQ(it.key(), KEY);
129 ASSERT_EQ(it.value(), VALUE);
132 for(const auto &it: pSceneAction2->getExecutionParameter())
134 ASSERT_EQ(it.key(), KEY_2);
135 ASSERT_EQ(it.value(), VALUE_2);
139 TEST_F(SceneActionTest, updateSceneAction)
141 createServer("/a/testuri4_1", "/a/testuri4_2");
142 createSceneCollectionAndScene();
145 pSceneAction1->resetExecutionParameter(KEY, "off");
146 for(const auto &it : pSceneAction1->getExecutionParameter())
148 ASSERT_EQ(it.key(), KEY);
149 ASSERT_EQ(it.value(), "off");
153 TEST_F(SceneActionTest, getRemoteResourceObject)
155 createServer("/a/testuri5_1", "/a/testuri5_2");
156 createSceneCollectionAndScene();
159 ASSERT_EQ(pSceneAction1->getRemoteResourceObject(), pRemoteResource1);