Merge test folder of test branch
[iotivity.git] / test / src / tc / ns / gtest / csdk / src / stc / NSIntegrationConsumerTest.cpp
1 /******************************************************************
2  *
3  * Copyright 2018 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
22 #include "../../include/NSConsumerHelper.h"
23 using namespace std;
24
25 class NSIntegrationConsumerTest_stc: public ::testing::Test
26 {
27 protected:
28     NSConsumerHelper* m_pNSHelper;
29     NSTopicLL* m_pTopicLL;
30     NSCommonHelper* m_pCommonHelper;
31     string m_testAppLog;
32
33     virtual void SetUp()
34     {
35         CommonTestUtil::runCommonTCSetUpPart();
36
37         m_pNSHelper = NSConsumerHelper::getInstance();
38         NSConsumerHelper::s_isDiscovered = false;
39         NSConsumerHelper::s_isTopicChanged = false;
40         NSConsumerHelper::s_isConsumerAllowed = false;
41         NSConsumerHelper::s_isNotificationPosted = false;
42         NSConsumerHelper::s_pProvider = nullptr;
43         m_pTopicLL = nullptr;
44
45         m_testAppLog = "";
46         m_pCommonHelper = NSCommonHelper::getInstance();
47         CommonUtil::launchApp(PROVIDER_APP_OPTION);
48         CommonUtil::waitInSecond(WAIT_TIME_MIN);
49         m_pCommonHelper->initPipe(true);
50     }
51
52     virtual void TearDown()
53     {
54         m_pCommonHelper->closePipe();
55         CommonUtil::killApp(PROVIDER_APP);
56         CommonUtil::waitInSecond(WAIT_TIME_MIN);
57
58         CommonTestUtil::runCommonTCTearDownPart();
59     }
60 };
61
62 /**
63  * @since 2016-08-16
64  * @see void Configure(const PlatformConfig& config)
65  * @see OCStackResult stopPresence()
66  * @see NSResult NSStartProvider(NSProviderConfig config)
67  * @objective Test if provider is discovered from consumer side
68  * @target NSResult NSStartConsumer(NSConsumerConfig config)
69  * @test_data config consumer configuration
70  * @pre_condition   1. Perform Configure() and stopPresence() API
71  *                  2. Start Provider with subcontrollability false
72  * @procedure       1. Perform NSStartConsumer() API with config
73  *                  2. Check if onProviderChanged Callback is called
74  * @post_condition None
75  * @expected Callback should be called and provider should be found in callback
76  **/
77 #if defined(__LINUX__) || defined(__TIZEN__)
78 TEST_F(NSIntegrationConsumerTest_stc, StartConsumerAndDiscoverProvider_SQV_CV_P)
79 {
80     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_2);
81     ASSERT_EQ(NSStartConsumer(m_pNSHelper->getConsumerConfig()), NS_OK)<< "NSStartConsumer did not return success";
82     IOTIVITYTEST_LOG(INFO, "Waiting for provider");
83     CommonUtil::waitInSecond(WAIT_TIME_MAX);
84     m_pCommonHelper->closePipe();
85     m_testAppLog = m_pCommonHelper->getAppLog();
86     IOTIVITYTEST_LOG(INFO, "Provider Log: %s", m_testAppLog.c_str());
87
88     ASSERT_EQ(NSConsumerHelper::s_isDiscovered,true)<< "onProviderChanged callback was not called";
89     ASSERT_NE(NSConsumerHelper::s_pProvider,nullptr)<< "Provider object was not found in callback";
90 }
91 #endif
92
93 /**
94  * @since 2016-08-16
95  * @see void Configure(const PlatformConfig& config)
96  * @see OCStackResult stopPresence()
97  * @see NSResult NSStartProvider(NSProviderConfig config)
98  * @objective Test if provider is discovered using 'NSRescanProvider()' API from consumer side
99  * @target NSResult NSStartConsumer(NSConsumerConfig config)
100  * @target NSResult NSRescanProvider()
101  * @test_data config consumer configuration
102  * @pre_condition Perform Configure() and stopPresence() API
103  * @procedure       1. Perform NSStartConsumer() API with config
104  *                  2. Check if onProviderChanged Callback is not called
105  *                  3. Start Provider with subcontrollability false
106  *                  4. Perform NSRescanProvider() API to discover provider now
107  *                  5. Check if onProviderChanged Callback is called
108  * @post_condition None
109  * @expected        1. At step 2, callback should not be called
110  *                  2. At step 5, callback should be called and provider should be found
111  **/
112 #if defined(__LINUX__) || defined(__TIZEN__)
113 TEST_F(NSIntegrationConsumerTest_stc, StartConsumerAndRescanProvider_SQV_CV_P)
114 {
115     ASSERT_EQ(NSStartConsumer(m_pNSHelper->getConsumerConfig()), NS_OK)<< "NSStartConsumer did not return success";
116     IOTIVITYTEST_LOG(INFO, "Waiting for provider when there is no provider");
117     CommonUtil::waitInSecond(WAIT_TIME_MAX);
118     ASSERT_EQ(NSConsumerHelper::s_isDiscovered,false) << "onProviderChanged callback should not be called as there is no provider";
119     ASSERT_EQ(NSConsumerHelper::s_pProvider,nullptr) << "Provider object should not be found as there is no provider";
120
121     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_2);
122     ASSERT_EQ(NSRescanProvider(), NS_OK) << "NSRescanProvider did not return success";
123     IOTIVITYTEST_LOG(INFO, "Rescanning provider");
124     CommonUtil::waitInSecond(WAIT_TIME_MAX);
125     m_pCommonHelper->closePipe();
126     m_testAppLog = m_pCommonHelper->getAppLog();
127     IOTIVITYTEST_LOG(INFO, "TESTAPP LOG: %s",m_testAppLog.c_str());
128
129     ASSERT_EQ(NSConsumerHelper::s_isDiscovered,true) << "onProviderChanged callback was not called";
130     ASSERT_NE(NSConsumerHelper::s_pProvider,nullptr) << "Provider object was not found in callback";
131 }
132 #endif
133
134 /**
135  * @since 2016-08-16
136  * @see void Configure(const PlatformConfig& config)
137  * @see OCStackResult stopPresence()
138  * @see NSResult NSStartProvider(NSProviderConfig config)
139  * @see NSResult NSStartConsumer(NSConsumerConfig config)
140  * @objective Test if consumer can subscribe to provider properly
141  * @target NSResult NSSubscribe(const char * providerId)
142  * @test_data providerId ID of the discovered provider
143  * @pre_condition   1. Perform Configure() and stopPresence() API
144  *                  2. Start Provider with subcontrollability false
145  *                  3. Perform NSStartConsumer() API with config
146  *                  4. Check if provider is found
147  * @procedure       1. Perform NSSubscribe() API with found provider's id
148  *                  2. Check if onProviderChanged Callback is called with NSProviderState NS_ALLOW
149  * @post_condition None
150  * @expected onProviderChanged Callback should be called with NSProviderState NS_ALLOW
151  **/
152 #if defined(__LINUX__) || defined(__TIZEN__)
153 TEST_F(NSIntegrationConsumerTest_stc, SubscribeProvider_SQV_CV_P)
154 {
155     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_2);
156     NSProvider *provider = m_pNSHelper->getProvider();
157
158     ASSERT_NE(provider,nullptr)<< "Provider object was not found in callback";
159
160     ASSERT_EQ(NS_OK, NSSubscribe(provider->providerId))<< "NSSubscribe did not return success";
161
162     IOTIVITYTEST_LOG(INFO, "Waiting for subscribe");
163
164     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
165
166     m_pCommonHelper->closePipe();
167     m_testAppLog = m_pCommonHelper->getAppLog();
168     IOTIVITYTEST_LOG(INFO, "Provider Log: %s", m_testAppLog.c_str());
169
170     ASSERT_EQ(NSConsumerHelper::s_isConsumerAllowed,true)<< "Subscribe was not allowed by provider";
171 }
172 #endif
173
174 /**
175  * @since 2016-08-16
176  * @see void Configure(const PlatformConfig& config)
177  * @see OCStackResult stopPresence()
178  * @see NSResult NSStartProvider(NSProviderConfig config)
179  * @see NSResult NSStartConsumer(NSConsumerConfig config)
180  * @see NSResult NSAcceptSubscription(const char * consumerId, bool accepted)
181  * @see NSResult NSProviderRegisterTopic(const char * topicName)
182  * @see NSResult NSProviderSetConsumerTopic(const char * consumerId, const char * topicName)
183  * @see NSResult NSProviderSendSyncInfo(uint64_t messageId, NSSyncType type)
184  * @objective Test if consumer can send sync info to provider
185  * @target NSResult NSConsumerSendSyncInfo(
186  *       const char * providerId, uint64_t messageId, NSSyncType type);
187  * @test_data providerId ID of the discovered provider
188  * @pre_condition   1. Perform Configure() and stopPresence() API
189  *                  2. Start Provider with subcontrollability true
190  *                  3. Perform NSStartConsumer() API with config
191  *                  4. Check if provider is found and consumer is allowed
192  *                  5. Register one topic from provider side
193  *                  6. Set that topic from provider side
194  *                  7. Send notification from provider side
195  *                  8. Check if consumer onNotificationPosted callback is called
196  * @procedure       1. Call NSConsumerSendSyncInfo() API using NSMessage object found in callback
197  *                      and check if API returns OK
198  *                  2. Check if syncInfoCallback is called in provider side
199  * @post_condition None
200  * @expected NSConsumerSendSyncInfo() API will return OK and provider's syncInfoCallback callback is called
201  **/
202 #if defined(__LINUX__) || defined(__TIZEN__)
203 TEST_F(NSIntegrationConsumerTest_stc, SendSyncInfo_SQV_CV_P)
204 {
205     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_1);
206
207     NSConsumerConfig config = m_pNSHelper->getConsumerConfig();
208
209     NSStartConsumer(config);
210
211     IOTIVITYTEST_LOG(INFO, "Waiting for discovering provider");
212
213     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
214
215     IOTIVITYTEST_LOG(INFO, "Waiting for allowing subscribe");
216
217     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_4);
218
219     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
220
221     NSProvider *provider = NSConsumerHelper::s_pProvider;
222
223     ASSERT_NE(provider,nullptr)<< "Provider object was not found in callback";
224
225     ASSERT_EQ(NSConsumerHelper::s_isConsumerAllowed,true)<< "Subscribe was not allowed by provider";
226
227     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_8);
228     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
229     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_10);
230     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
231     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_6);
232     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
233
234     ASSERT_EQ(true,NSConsumerHelper::s_isNotificationPosted)<< "messageCb was not called";
235
236     NSSyncType type = NS_SYNC_READ;
237     NSMessage* notification = m_pNSHelper->getNotificationMessage();
238     m_pCommonHelper->loggerReader();
239     ASSERT_EQ(NS_OK,NSConsumerSendSyncInfo(notification->providerId, notification->messageId,
240                     type))<< "NSConsumerSendSyncInfo did not return success";
241     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
242     m_pCommonHelper->loggerReader();
243
244     IOTIVITYTEST_LOG(INFO, "Checking if callback called in provider");
245     m_pCommonHelper->closePipe();
246     m_testAppLog = m_pCommonHelper->getAppLog();
247     IOTIVITYTEST_LOG(INFO, "Provider Log: %s", m_testAppLog.c_str());
248     int findResult = m_testAppLog.find("syncInfoCallback Called");
249     ASSERT_NE(-1 , findResult)<< "syncInfoCallback was not called in provider app";
250 }
251 #endif
252
253 /**
254  * @since 2016-08-16
255  * @see void Configure(const PlatformConfig& config)
256  * @see OCStackResult stopPresence()
257  * @see NSResult NSStartProvider(NSProviderConfig config)
258  * @see NSResult NSStartConsumer(NSConsumerConfig config)
259  * @objective Test if NSConsumerGetProvider() API returns the correct provider
260  * @target NSProvider * NSConsumerGetProvider(const char * providerId)
261  * @test_data providerId ID of the discovered provider
262  * @pre_condition   1. Perform Configure() and stopPresence() API
263  *                  2. Start Provider with subcontrollability false
264  *                  3. Perform NSStartConsumer() API with config
265  *                  4. Check if provider is found
266  * @procedure       1. Perform NSConsumerGetProvider() API with found provider's id
267  *                  2. Check if returned provider's ID and previously received provider's ID matches
268  * @post_condition None
269  * @expected The two IDs match
270  **/
271 #if defined(__LINUX__) || defined(__TIZEN__)
272 TEST_F(NSIntegrationConsumerTest_stc, StartConsumerAndGetProvider_GSRV_P)
273 {
274     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_2);
275
276     NSProvider *provider = m_pNSHelper->getProvider();
277
278     ASSERT_NE(provider,nullptr)<< "Provider object was not found in callback";
279
280     NSProvider *receivedProvider = nullptr;
281     receivedProvider = NSConsumerGetProvider(provider->providerId);
282
283     ASSERT_STREQ(receivedProvider->providerId,provider->providerId)<< "NSConsumerGetProvider did not return the same provider";
284
285     m_pCommonHelper->closePipe();
286     m_testAppLog = m_pCommonHelper->getAppLog();
287     IOTIVITYTEST_LOG(INFO, "Provider Log: %s", m_testAppLog.c_str());
288 }
289 #endif
290
291 /**
292  * @since 2016-08-16
293  * @see void Configure(const PlatformConfig& config)
294  * @see OCStackResult stopPresence()
295  * @see NSResult NSStartProvider(NSProviderConfig config)
296  * @see NSResult NSStartConsumer(NSConsumerConfig config)
297  * @see NSResult NSSubscribe(const char * providerId)
298  * @see NSResult NSProviderRegisterTopic(const char * topicName)
299  * @objective Test if consumer can get topic list properly after adding topics in provider
300  * @target NSTopicLL * NSConsumerGetTopicList(const char * providerId)
301  * @test_data providerId ID of the discovered provider
302  * @pre_condition   1. Perform Configure() and stopPresence() API
303  *                  2. Start Provider with subcontrollability false
304  *                  3. Perform NSStartConsumer() API with config
305  *                  4. Check if provider is found
306  *                  5. Perform NSSubscribe() API and check if consumer is allowed
307  * @procedure       1. Register two topics in provider side
308  *                  2. Check if consumer's callback is called
309  *                  3. Perform NSConsumerGetTopicList() API to get topiclist
310  *                  4. Check if added topic exists in the received topic list
311  * @post_condition None
312  * @expected Provider's added topic is found
313  **/
314 #if defined(__LINUX__) || defined(__TIZEN__)
315 TEST_F(NSIntegrationConsumerTest_stc, AddTopicAndGetTopicList_GSRV_CV_P)
316 {
317     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_2);
318
319     NSProvider *provider = m_pNSHelper->getProvider();
320
321     ASSERT_NE(provider,nullptr)<< "Provider object was not found in callback";
322
323     ASSERT_EQ(NS_OK, NSSubscribe(provider->providerId))<< "NSSubscribe did not return success";
324
325     IOTIVITYTEST_LOG(INFO, "Waiting for subscribe");
326
327     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
328
329     ASSERT_EQ(NSConsumerHelper::s_isConsumerAllowed,true)<< "Subscribe was not allowed by provider";
330
331     IOTIVITYTEST_LOG(INFO, "Waiting for adding topic in provider");
332
333     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_8);
334     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
335     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_8);
336     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
337
338     ASSERT_EQ(NSConsumerHelper::s_isTopicChanged,true)<< "Callback was not called after adding topic in provider";
339
340     m_pTopicLL = NSConsumerGetTopicList(provider->providerId);
341
342     ASSERT_NE(m_pTopicLL,nullptr)<< "Topic list was not found by consumer";
343
344     ASSERT_EQ(m_pNSHelper->printTopicList(m_pTopicLL),true)<< "Added and received topic did not match";
345
346     m_pCommonHelper->closePipe();
347     m_testAppLog = m_pCommonHelper->getAppLog();
348     IOTIVITYTEST_LOG(INFO, "Provider Log: %s", m_testAppLog.c_str());
349 }
350 #endif
351
352 /**
353  * @since 2016-08-16
354  * @see void Configure(const PlatformConfig& config)
355  * @see OCStackResult stopPresence()
356  * @see NSResult NSStartProvider(NSProviderConfig config)
357  * @see NSResult NSStartConsumer(NSConsumerConfig config)
358  * @see NSResult NSSubscribe(const char * providerId)
359  * @see NSResult NSProviderRegisterTopic(const char * topicName)
360  * @see NSResult NSProviderUnregisterTopic(const char * topicName)
361  * @objective Test if consumer can update and get topic list properly after deleting previously added
362  *      topics in provider
363  * @target NSResult NSConsumerUpdateTopicList(const char * providerId, NSTopicLL * topics)
364  * @test_data       1. providerId ID of the discovered provider
365  *                  2. NSTopicLL topic list to be updated
366  * @pre_condition   1. Perform Configure() and stopPresence() API
367  *                  2. Start Provider with subcontrollability false
368  *                  3. Perform NSStartConsumer() API with config
369  *                  4. Check if provider is found
370  *                  5. Perform NSSubscribe() API and check if consumer is allowed
371  * @procedure       1. Register two topics in provider side
372  *                  2. Check if consumer's callback is called
373  *                  3. Perform NSConsumerGetTopicList() API to get topiclist
374  *                  4. Check if added topic exists in the received topic list
375  *                  5. Unregister one topic in provider side
376  *                  6. Perform NSConsumerGetTopicList() API to get topiclist and check if list is not null
377  *                  7. Perform NSConsumerUpdateTopicList() API using the received topic list and check if it returns OK
378  *                  8. Perform NSConsumerGetTopicList() API to get topiclist again
379  *                  9. Check if the unregistered topic is does not exist in the received topic list
380  * @post_condition None
381  * @expected Provider's unregistered topic is not found in the list
382  **/
383 #if defined(__LINUX__) || defined(__TIZEN__)
384 TEST_F(NSIntegrationConsumerTest_stc, DeleteTopicAndGetTopicListAfterUpdate_GSRV_CV_P)
385 {
386     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_2);
387
388     NSProvider *provider = m_pNSHelper->getProvider();
389     const char* providerID = provider->providerId;
390
391     ASSERT_NE(provider,nullptr)<< "Provider object was not found in callback";
392
393     ASSERT_EQ(NS_OK, NSSubscribe(providerID))<< "NSSubscribe did not return success";
394
395     IOTIVITYTEST_LOG(INFO, "Waiting for subscribe");
396
397     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
398
399     ASSERT_EQ(NSConsumerHelper::s_isConsumerAllowed,true)<< "Subscribe was not allowed by provider";
400
401     IOTIVITYTEST_LOG(INFO, "Waiting for adding topic in provider");
402
403     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_8);
404     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
405     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_8);
406
407     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
408
409     ASSERT_EQ(NSConsumerHelper::s_isTopicChanged,true)<< "Callback was not called after adding topic in provider";
410
411     m_pTopicLL = NSConsumerGetTopicList(providerID);
412
413     ASSERT_NE(m_pTopicLL,nullptr)<< "Topic list was not found by consumer";
414
415     ASSERT_EQ(m_pNSHelper->printTopicList(m_pTopicLL),true)<< "Added and received topic did not match";
416
417     IOTIVITYTEST_LOG(INFO, "Waiting for deleting topic in provider");
418
419     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_9);
420     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
421
422     m_pTopicLL = NSConsumerGetTopicList(providerID);
423     ASSERT_NE(m_pTopicLL,nullptr)<< "Topic list was not found by consumer";
424
425     ASSERT_EQ(NS_OK, NSConsumerUpdateTopicList(providerID, m_pTopicLL))<< "NSConsumerUpdateTopicList did not return success";
426     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
427
428     m_pTopicLL = NSConsumerGetTopicList(providerID);
429
430     ASSERT_NE(m_pTopicLL,nullptr)<< "Topic list was not found by consumer";
431
432     ASSERT_EQ(m_pNSHelper->printTopicList(m_pTopicLL),false) << "Deleted topic should not be found";
433
434     m_pCommonHelper->closePipe();
435     m_testAppLog = m_pCommonHelper->getAppLog();
436     IOTIVITYTEST_LOG(INFO, "Provider Log: %s", m_testAppLog.c_str());
437 }
438 #endif
439
440 /**
441  * @since 2016-08-16
442  * @see void Configure(const PlatformConfig& config)
443  * @see OCStackResult stopPresence()
444  * @see NSResult NSStartProvider(NSProviderConfig config)
445  * @see NSResult NSStartConsumer(NSConsumerConfig config)
446  * @see NSResult NSProviderRegisterTopic(const char * topicName)
447  * @see NSResult NSProviderUnregisterTopic(const char * topicName)
448  * @objective Test if update returns ERROR when provider is started in True Mode
449  * @target NSResult NSConsumerUpdateTopicList(const char * providerId, NSTopicLL * topics)
450  * @test_data       1. providerId ID of the discovered provider
451  *                  2. NSTopicLL topic list to be updated
452  * @pre_condition   1. Perform Configure() and stopPresence() API
453  *                  2. Start Provider with subcontrollability true
454  *                  3. Perform NSStartConsumer() API with config
455  *                  4. Check if provider is found and consumer is allowed
456  * @procedure       1. Register two topics in provider side
457  *                  2. Check if consumer's callback is called
458  *                  3. Perform NSConsumerGetTopicList() API to get topiclist
459  *                  4. Check if added topic exists in the received topic list
460  *                  5. Unregister one topic in provider side
461  *                  6. Perform NSConsumerGetTopicList() API to get topiclist and check if list is not null
462  *                  7. Perform NSConsumerUpdateTopicList() API using the received topic list and check if it return NS_ERROR
463  * @post_condition None
464  * @expected NSConsumerUpdateTopicList() returns NS_ERROR
465  **/
466 #if defined(__LINUX__) || defined(__TIZEN__)
467 TEST_F(NSIntegrationConsumerTest_stc, DeleteTopicAndUpdateInTrueMode_DSCC_N)
468 {
469     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_1);
470
471     NSConsumerConfig config = m_pNSHelper->getConsumerConfig();
472
473     NSStartConsumer(config);
474
475     IOTIVITYTEST_LOG(INFO, "Waiting for discovering provider");
476
477     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
478
479     IOTIVITYTEST_LOG(INFO, "Waiting for allowing subscribe");
480
481     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_4);
482
483     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
484
485     NSProvider *provider = NSConsumerHelper::s_pProvider;
486
487     ASSERT_NE(provider,nullptr)<< "Provider object was not found in callback";
488
489     const char* providerID = provider->providerId;
490
491     IOTIVITYTEST_LOG(INFO, "Waiting for subscribe");
492
493     ASSERT_EQ(NSConsumerHelper::s_isConsumerAllowed,true)<< "Subscribe was not allowed by provider";
494
495     IOTIVITYTEST_LOG(INFO, "Waiting for adding topic in provider");
496
497     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_8);
498     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
499     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_8);
500
501     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
502
503     ASSERT_EQ(NSConsumerHelper::s_isTopicChanged,true)<< "Callback was not called after adding topic in provider";
504
505     m_pTopicLL = NSConsumerGetTopicList(providerID);
506
507     ASSERT_NE(m_pTopicLL,nullptr)<< "Topic list was not found by consumer";
508
509     ASSERT_EQ(m_pNSHelper->printTopicList(m_pTopicLL),true)<< "Added and received topic did not match";
510
511     IOTIVITYTEST_LOG(INFO, "Waiting for deleting topic in provider");
512
513     m_pCommonHelper->inputMenu(PROVIDER_APP_MENU_9);
514     CommonUtil::waitInSecond(WAIT_TIME_DEFAULT);
515
516     m_pTopicLL = NSConsumerGetTopicList(providerID);
517     ASSERT_NE(m_pTopicLL,nullptr)<< "Topic list was not found by consumer";
518
519     ASSERT_EQ(NS_ERROR, NSConsumerUpdateTopicList(providerID, m_pTopicLL))<< "NSConsumerUpdateTopicList did not return error";
520
521     m_pCommonHelper->closePipe();
522     m_testAppLog = m_pCommonHelper->getAppLog();
523     IOTIVITYTEST_LOG(INFO, "Provider Log: %s", m_testAppLog.c_str());
524 }
525 #endif