Merge test folder of test branch
[iotivity.git] / test / src / tc / sm / gtest / src / btc / SMSceneActionTest.cpp
1 /******************************************************************
2 *
3 * Copyright 2016 Samsung Electronics All Rights Reserved.
4 *
5 *
6 *
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
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
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.
18 *
19 ******************************************************************/
20
21 #include "SMHelper.h"
22
23 class SMSceneActionTest_btc: public ::testing::Test {
24 public:
25     SMHelper* m_pSMHelper;
26     SceneList* m_pSceneList;
27     std::shared_ptr<SceneCollection> m_pSceneCollection;
28     std::shared_ptr<Scene> m_pScene1;
29     std::shared_ptr<SceneAction> m_pSceneAction1;
30     std::shared_ptr<SceneAction> m_pSceneAction2;
31     std::shared_ptr<RCSRemoteResourceObject> m_pResource;
32
33     SMSceneActionTest_btc() {
34         m_pSMHelper = nullptr;
35         m_pSceneList = nullptr;
36         m_pSceneCollection = nullptr;
37         m_pScene1 = nullptr;
38         m_pSceneAction1 = nullptr;
39         m_pSceneAction2 = nullptr;
40         m_pResource = nullptr;
41     }
42
43     virtual void SetUp() {
44         IOTIVITYTEST_LOG(INFO, "SetUp IN");
45
46         CommonTestUtil::runCommonTCSetUpPart();
47         CommonUtil::launchApp(LIGHT_SERVER);
48         CommonUtil::waitInSecond(MAX_SLEEP_TIME);
49
50         m_pSMHelper = new SMHelper();
51         m_pSMHelper->discoverResource();
52         m_pSMHelper->stopDiscovery();
53
54         m_pSceneList = m_pSMHelper->getSceneListInstance();
55         ASSERT_NE(m_pSceneList,NULL_PTR) << "scenelist pointer is not found";
56
57         m_pSceneCollection = m_pSceneList->addNewSceneCollection();
58         ASSERT_NE(m_pSceneCollection,NULL_PTR) << "scene collection pointer is not found";
59
60         m_pScene1 = m_pSceneCollection->addNewScene(SCENE_NAME_1);
61         ASSERT_NE(m_pScene1,NULL_PTR) << "scene pointer is not found";
62
63         ASSERT_NE(m_pSMHelper->g_foundResourceList.size(),INT_ZERO) << "resource is not found";
64         m_pResource = m_pSMHelper->g_foundResourceList.at(INT_ZERO);
65     }
66
67     virtual void TearDown() {
68         IOTIVITYTEST_LOG(INFO, "TearDown IN");
69
70         CommonUtil::killApp(LIGHT_SERVER);
71         CommonUtil::waitInSecond(MAX_SLEEP_TIME);
72
73         delete m_pSMHelper;
74         m_pSMHelper = nullptr;
75
76         CommonTestUtil::runCommonTCTearDownPart();
77     }
78 };
79
80 /**
81  * @since 2016-02-29
82  * @see void Configure(const PlatformConfig& config);
83  * @see DiscoveryTask::Ptr discoverResourceByTypes(const RCSAddress& address,
84  *                   const std::vector< std::string >& resourceTypes,
85  *                   ResourceDiscoveredCallback cb);
86  * @see static SceneList* getInstance();
87  * @see SceneCollection::Ptr addNewSceneCollection();
88  * @see Scene::Ptr addNewScene(const std::string& sceneName);
89  * @see SceneAction::Ptr addNewSceneAction(const RCSRemoteResourceObject::Ptr& pRCSRemoteResourceObject,
90  *                   RCSResourceAttributes attr);
91  * @objective Test resetExecutionParameter function positively with attribute
92  * @target void resetExecutionParameter(const RCSResourceAttributes& attr);
93  * @test_data RCSResourceAttributes Attributes to set
94  * @pre_condition    1. create light type resource using LIGHT_SERVER simulator
95  *                     2. Discover resource
96  *                     3. get SceneList instance
97  *                     4. get SceneCollection pointer by adding SceneCollection
98  *                     5. get Scene pointer by adding scene
99  *                     6. call addNewSceneAction using one attribute
100  * @procedure call resetExecutionParameter positively using another attribute
101  * @post_condition stop the simulator
102  * @expected resetExecutionParameter will succeed and no exceptions should occur
103  */
104 #if defined(__LINUX__)
105 TEST_F(SMSceneActionTest_btc, ResetExecutionParameterWithAttribute_RSV_P)
106 {
107     const RCSResourceAttributes attribute1;
108     attribute1[KEY_POWER] = VALUE_ON;
109
110     m_pSceneAction1 = m_pScene1->addNewSceneAction(m_pResource,attribute1);
111     ASSERT_NE(m_pSceneAction1,NULL_PTR) << "could not add scene action";
112
113     const RCSResourceAttributes attribute2;
114     attribute2[KEY_POWER] = VALUE_OFF;
115
116     try
117     {
118         m_pSceneAction1->resetExecutionParameter(attribute2);
119     }
120     catch (exception& e)
121     {
122         SET_FAILURE("Exception occurred inside resetExecutionParameter: " + std::string(e.what()));
123     }
124 }
125 #endif
126
127 /**
128  * @since 2016-02-29
129  * @see void Configure(const PlatformConfig& config);
130  * @see DiscoveryTask::Ptr discoverResourceByTypes(const RCSAddress& address,
131  *                   const std::vector< std::string >& resourceTypes,
132  *                   ResourceDiscoveredCallback cb);
133  * @see static SceneList* getInstance();
134  * @see SceneCollection::Ptr addNewSceneCollection();
135  * @see Scene::Ptr addNewScene(const std::string& sceneName);
136  * @see SceneAction::Ptr addNewSceneAction(const RCSRemoteResourceObject::Ptr& pRCSRemoteResourceObject,
137  *                   std::string key, RCSResourceAttributes::Value value);
138  * @objective Test resetExecutionParameter function positively with key and value
139  * @target void resetExecutionParameter(const std::string& key, RCSResourceAttributes::Value value);
140  * @test_data         1. key = "power"
141  *                     2. value = "on"
142  * @pre_condition     1. create light type resource using LIGHT_SERVER simulator
143  *                     2. Discover resource
144  *                     3. get SceneList instance
145  *                     4. get SceneCollection pointer by adding SceneCollection
146  *                     5. get Scene pointer by adding scene
147  *                     6. call addNewSceneAction with value = "on"
148  * @procedure call resetExecutionParameter with value = "off"
149  * @post_condition stop the simulator
150  * @expected resetExecutionParameter will succeed and no exceptions occur
151  */
152 #if defined(__LINUX__)
153 TEST_F(SMSceneActionTest_btc, ResetExecutionParameterWithKeyValue_SRC_P)
154 {
155     m_pSceneAction1 = m_pScene1->addNewSceneAction(m_pResource,KEY_POWER,RCSResourceAttributes::Value(VALUE_ON));
156
157     ASSERT_NE(m_pSceneAction1,NULL_PTR) << "could not add scene action";
158
159     try
160     {
161         m_pSceneAction1->resetExecutionParameter(KEY_POWER,RCSResourceAttributes::Value(VALUE_OFF));
162     }
163     catch (exception& e)
164     {
165         SET_FAILURE("Exception occurred inside resetExecutionParameter: " + std::string(e.what()));
166     }
167 }
168 #endif
169
170 /**
171  * @since 2016-02-29
172  * @see void Configure(const PlatformConfig& config);
173  * @see DiscoveryTask::Ptr discoverResourceByTypes(const RCSAddress& address,
174  *                   const std::vector< std::string >& resourceTypes,
175  *                   ResourceDiscoveredCallback cb);
176  * @see static SceneList* getInstance();
177  * @see SceneCollection::Ptr addNewSceneCollection();
178  * @see Scene::Ptr addNewScene(const std::string& sceneName);
179  * @see SceneAction::Ptr addNewSceneAction(const RCSRemoteResourceObject::Ptr& pRCSRemoteResourceObject,
180  *                   std::string key, RCSResourceAttributes::Value value);
181  * @objective Test resetExecutionParameter function positively with empty key
182  * @target void resetExecutionParameter(const std::string& key, RCSResourceAttributes::Value value);
183  * @test_data         1. key = ""
184  *                     2. value = "off"
185  * @pre_condition     1. create light type resource using LIGHT_SERVER simulator
186  *                     2. Discover resource
187  *                     3. get SceneList instance
188  *                     4. get SceneCollection pointer by adding SceneCollection
189  *                     5. get Scene pointer by adding scene
190  *                     6. call addNewSceneAction
191  * @procedure call resetExecutionParameter positively using empty string as key
192  * @post_condition stop the simulator
193  * @expected resetExecutionParameter will succeed and no exceptions occur
194  */
195 #if defined(__LINUX__)
196 TEST_F(SMSceneActionTest_btc, ResetExecutionParameterWithKeyValueEmptyKey_ESV_P)
197 {
198     m_pSceneAction1 = m_pScene1->addNewSceneAction(m_pResource,KEY_POWER,RCSResourceAttributes::Value(VALUE_ON));
199
200     ASSERT_NE(m_pSceneAction1,NULL_PTR) << "could not add scene action";
201
202     try
203     {
204         m_pSceneAction1->resetExecutionParameter(KEY_EMPTY,RCSResourceAttributes::Value(VALUE_OFF));
205     }
206     catch (exception& e)
207     {
208         SET_FAILURE("Exception occurred inside resetExecutionParameter: " + std::string(e.what()));
209     }
210 }
211 #endif
212
213 /**
214  * @since 2016-02-29
215  * @see void Configure(const PlatformConfig& config);
216  * @see DiscoveryTask::Ptr discoverResourceByTypes(const RCSAddress& address,
217  *                   const std::vector< std::string >& resourceTypes,
218  *                   ResourceDiscoveredCallback cb);
219  * @see static SceneList* getInstance();
220  * @see SceneCollection::Ptr addNewSceneCollection();
221  * @see Scene::Ptr addNewScene(const std::string& sceneName);
222  * @see SceneAction::Ptr addNewSceneAction(const RCSRemoteResourceObject::Ptr& pRCSRemoteResourceObject,
223  *                   std::string key, RCSResourceAttributes::Value value);
224  * @objective Test resetExecutionParameter function positively with empty value
225  * @target void resetExecutionParameter(const std::string& key, RCSResourceAttributes::Value value);
226  * @test_data         1. key = "power"
227  *                     2. value = ""
228  * @pre_condition     1. create light type resource using LIGHT_SERVER simulator
229  *                     2. Discover resource
230  *                     3. get SceneList instance
231  *                     4. get SceneCollection pointer by adding SceneCollection
232  *                     5. get Scene pointer by adding scene
233  *                     6. call addNewSceneAction
234  * @procedure call resetExecutionParameter positively using empty string as value
235  * @post_condition stop the simulator
236  * @expected resetExecutionParameter will succeed and no exceptions occur
237  */
238 #if defined(__LINUX__)
239 TEST_F(SMSceneActionTest_btc, ResetExecutionParameterWithKeyValueEmptyValue_ESV_P)
240 {
241     m_pSceneAction1 = m_pScene1->addNewSceneAction(m_pResource,KEY_POWER,RCSResourceAttributes::Value(VALUE_ON));
242
243     ASSERT_NE(m_pSceneAction1,NULL_PTR) << "could not add scene action";
244
245     try
246     {
247         m_pSceneAction1->resetExecutionParameter(KEY_POWER,RCSResourceAttributes::Value(VALUE_EMPTY));
248     }
249     catch (exception& e)
250     {
251         SET_FAILURE("Exception occurred inside resetExecutionParameter: " + std::string(e.what()));
252     }
253 }
254 #endif
255
256 /**
257  * @since 2016-02-29
258  * @see void Configure(const PlatformConfig& config);
259  * @see DiscoveryTask::Ptr discoverResourceByTypes(const RCSAddress& address,
260  *                   const std::vector< std::string >& resourceTypes,
261  *                   ResourceDiscoveredCallback cb);
262  * @see static SceneList* getInstance();
263  * @see SceneCollection::Ptr addNewSceneCollection();
264  * @see Scene::Ptr addNewScene(const std::string& sceneName);
265  * @see SceneAction::Ptr addNewSceneAction(const RCSRemoteResourceObject::Ptr& pRCSRemoteResourceObject,
266  *                   std::string key, RCSResourceAttributes::Value value);
267  * @see void resetExecutionParameter(const std::string& key, RCSResourceAttributes::Value value);
268  * @objective Test getExecutionParameter function positively
269  * @target const RCSResourceAttributes getExecutionParameter();
270  * @test_data none
271  * @pre_condition     1. create light type resource using LIGHT_SERVER simulator
272  *                     2. Discover resource
273  *                     3. get SceneList instance
274  *                     4. get SceneCollection pointer by adding SceneCollection
275  *                     5. get Scene pointer by adding scene
276  *                     6. call addNewSceneAction with value = "on"
277  *                     7. call resetExecutionParameter with value = "off"
278  * @procedure         1. call getExecutionParameter and check if attribute is get
279  *                     2. check if attributes key or value is not empty
280  * @post_condition stop the simulator
281  * @expected getExecutionParameter should get attribute and no exceptions should occur
282  */
283 #if defined(__LINUX__)
284 TEST_F(SMSceneActionTest_btc, GetExecutionParameter_SRC_P)
285 {
286     m_pSceneAction1 = m_pScene1->addNewSceneAction(m_pResource,KEY_POWER,RCSResourceAttributes::Value(VALUE_ON));
287
288     ASSERT_NE(m_pSceneAction1,NULL_PTR) << "could not add scene action";
289
290     m_pSceneAction1->resetExecutionParameter(KEY_POWER,RCSResourceAttributes::Value(VALUE_OFF));
291
292     try
293     {
294         for(const auto &attribute : m_pSceneAction1->getExecutionParameter())
295         {
296             if(attribute.key() == EMPTY_STRING || attribute.value() == EMPTY_STRING)
297             {
298                 SET_FAILURE("received key or value is empty");
299             }
300         }
301
302     }
303     catch (exception& e)
304     {
305         SET_FAILURE("Exception occurred inside getExecutionParameter: " + std::string(e.what()));
306     }
307 }
308 #endif
309
310 /**
311  * @since 2016-02-29
312  * @see void Configure(const PlatformConfig& config);
313  * @see DiscoveryTask::Ptr discoverResourceByTypes(const RCSAddress& address,
314  *                   const std::vector< std::string >& resourceTypes,
315  *                   ResourceDiscoveredCallback cb);
316  * @see static SceneList* getInstance();
317  * @see SceneCollection::Ptr addNewSceneCollection();
318  * @see Scene::Ptr addNewScene(const std::string& sceneName);
319  * @see SceneAction::Ptr addNewSceneAction(const RCSRemoteResourceObject::Ptr& pRCSRemoteResourceObject,
320  *                   std::string key, RCSResourceAttributes::Value value);
321  * @objective Test getRemoteResourceObject function positively
322  * @target RCSRemoteResourceObject::Ptr getRemoteResourceObject() const;
323  * @test_data none
324  * @pre_condition    1. create light type resource using LIGHT_SERVER simulator
325  *                     2. Discover resource
326  *                     3. get SceneList instance
327  *                     4. get SceneCollection pointer by adding SceneCollection
328  *                     5. get Scene pointer by adding scene
329  *                     6. call addNewSceneAction
330  * @procedure call getRemoteResourceObject and check if remote resource pointer is returned
331  * @post_condition stop the simulator
332  * @expected getRemoteResourceObject will return resource and no exceptions should occur
333  */
334 #if defined(__LINUX__)
335 TEST_F(SMSceneActionTest_btc, GetRemoteResourceObject_SRC_P)
336 {
337     m_pSceneAction1 = m_pScene1->addNewSceneAction(m_pResource,KEY_POWER,RCSResourceAttributes::Value(VALUE_ON));
338
339     ASSERT_NE(m_pSceneAction1,NULL_PTR) << "could not add scene action";
340
341     std::shared_ptr<RCSRemoteResourceObject> m_pReceivedResource = nullptr;
342
343     try
344     {
345         m_pReceivedResource = m_pSceneAction1->getRemoteResourceObject();
346     }
347     catch (exception& e)
348     {
349         SET_FAILURE("Exception occurred inside getRemoteResourceObject: " + std::string(e.what()));
350         return;
351     }
352
353     if(m_pReceivedResource == NULL_PTR)
354     {
355         SET_FAILURE("received resource is null");
356     }
357 }
358 #endif