Merge remote-tracking branch 'origin/master' into notification-service
authorcc <ch79.cho@samsung.com>
Thu, 8 Sep 2016 01:29:09 +0000 (10:29 +0900)
committercc <ch79.cho@samsung.com>
Thu, 8 Sep 2016 01:30:07 +0000 (10:30 +0900)
Change-Id: I46af88cce1a821841baa1fe3f5226537ae1eb83b
Signed-off-by: cc <ch79.cho@samsung.com>
21 files changed:
service/notification/cpp-wrapper/common/NSMessage.cpp
service/notification/cpp-wrapper/common/NSTopicsList.cpp
service/notification/cpp-wrapper/common/NSUtils.h
service/notification/cpp-wrapper/consumer/inc/NSProvider.h
service/notification/cpp-wrapper/consumer/src/NSConsumerService.cpp
service/notification/cpp-wrapper/consumer/src/NSProvider.cpp
service/notification/cpp-wrapper/examples/linux/notificationserviceconsumer.cpp
service/notification/cpp-wrapper/examples/linux/notificationserviceprovider.cpp
service/notification/examples/linux/SConscript
service/notification/examples/linux/notificationconsumer.c
service/notification/examples/linux/notificationprovider.c
service/notification/src/common/NSConstants.h
service/notification/src/consumer/NSConsumerCommon.c
service/notification/src/consumer/NSConsumerCommon.h
service/notification/src/consumer/NSConsumerDiscovery.c
service/notification/src/provider/NSProviderInterface.c
service/notification/src/provider/NSProviderTopic.c
service/notification/src/provider/NSProviderTopic.h
service/notification/unittest/NSConsumerTest.cpp
service/notification/unittest/NSProviderSimulator.h
service/notification/unittest/NSProviderTest.cpp

index 675a01c..2f58fc4 100755 (executable)
@@ -86,21 +86,21 @@ namespace OIC
 \r
         NSMessage &NSMessage::operator=(const NSMessage &msg)\r
         {\r
-            m_messageId = msg.getMessageId();\r
-            m_providerId = msg.getProviderId();\r
+            this->m_messageId = msg.getMessageId();\r
+            this->m_providerId = msg.getProviderId();\r
 \r
-            m_type = msg.getType();\r
-            m_time = msg.getTime();\r
-            m_ttl = msg.getTTL();\r
-            m_title = msg.getTitle();\r
-            m_contentText = msg.getContentText();\r
-            m_sourceName = msg.getSourceName();\r
+            this->m_type = msg.getType();\r
+            this->m_time = msg.getTime();\r
+            this->m_ttl = msg.getTTL();\r
+            this->m_title = msg.getTitle();\r
+            this->m_contentText = msg.getContentText();\r
+            this->m_sourceName = msg.getSourceName();\r
 \r
             if (msg.getMediaContents() != nullptr)\r
-                m_mediaContents = new NSMediaContents(msg.getMediaContents()->getIconImage());\r
+                this->m_mediaContents = new NSMediaContents(msg.getMediaContents()->getIconImage());\r
             else\r
-                m_mediaContents = new NSMediaContents();\r
-            m_topic = msg.getTopic();\r
+                this->m_mediaContents = new NSMediaContents();\r
+            this->m_topic = msg.getTopic();\r
             return *this;\r
         }\r
 \r
index 5178b6c..9dddcd8 100755 (executable)
@@ -49,7 +49,7 @@ namespace OIC
         {
             for (auto it : topicsList.getTopicsList())
             {
-                addTopic(it->getTopicName(), it->getState());
+                this->addTopic(it->getTopicName(), it->getState());
             }
             return *this;
         }
index d8016b7..2c1ea66 100755 (executable)
@@ -51,9 +51,18 @@ namespace OIC
             ALLOW = 1,
             DENY = 2,
             TOPIC = 3,
-            DISCOVERED = 11,
             STOPPED = 12
         };
+        
+        /**
+             * NSProviderSubscribedState of notification service
+             */
+        enum class NSProviderSubscribedState
+        {
+            DENY = 0,
+            DISCOVERED = 1,
+            SUBSCRIBED = 2
+        };
     }
 }
 #endif /* _NS_UTILS_H_ */
index 06556c2..7ddc0c5 100755 (executable)
@@ -70,6 +70,7 @@ namespace OIC
                       * Constructor of NSProvider.\r
                       */\r
                 NSProvider(): m_topicList(new NSTopicsList()), m_state(NSProviderState::DENY),\r
+                    m_subscribedState(NSProviderSubscribedState::DENY),\r
                     m_stateCb(NULL), m_messageCb(NULL), m_syncInfoCb(NULL) {}\r
 \r
                 /**\r
@@ -79,6 +80,7 @@ namespace OIC
                       */\r
                 NSProvider(const std::string &providerId) : m_providerId(providerId),\r
                     m_topicList(new NSTopicsList()), m_state(NSProviderState::DENY),\r
+                    m_subscribedState(NSProviderSubscribedState::DENY),\r
                     m_stateCb(NULL), m_messageCb(NULL), m_syncInfoCb(NULL)  {}\r
 \r
                 /**\r
@@ -89,6 +91,7 @@ namespace OIC
                       */\r
                 NSProvider(const std::string &providerId, NSTopicsList *topicList) : m_providerId(\r
                         providerId), m_topicList(topicList), m_state(NSProviderState::DENY),\r
+                    m_subscribedState(NSProviderSubscribedState::DENY),\r
                     m_stateCb(NULL), m_messageCb(NULL), m_syncInfoCb(NULL)  {}\r
 \r
                 /**\r
@@ -148,6 +151,13 @@ namespace OIC
                 NSProviderState getProviderState() const;\r
 \r
                 /**\r
+                      * This method is for getting SubscribedState from the Notification service provider.\r
+                      *\r
+                      * @return subscribedState as NSProviderSubscribedState.\r
+                      */\r
+                NSProviderSubscribedState getProviderSubscribedState() const;\r
+\r
+                /**\r
                       * This method is for requesting subscription of Notification service.\r
                       *\r
                       */\r
@@ -213,6 +223,13 @@ namespace OIC
                      */\r
                 void setProviderState(const NSProviderState &providerState);\r
 \r
+                /**\r
+                     * This method is for setting subscribedState for the Notification service provider.\r
+                     *\r
+                     * @param subscribedState as NSProviderSubscribedState.\r
+                     */\r
+                void setProviderSubscribedState(const NSProviderSubscribedState &subscribedState);\r
+\r
             private:\r
                 ::NSProvider *getNSProvider();\r
 \r
@@ -220,6 +237,7 @@ namespace OIC
                 std::string m_providerId;\r
                 NSTopicsList *m_topicList;\r
                 NSProviderState m_state;\r
+                NSProviderSubscribedState m_subscribedState;\r
 \r
                 ProviderStateCallback m_stateCb;\r
                 MessageReceivedCallback m_messageCb;\r
index deb31d9..2c083e3 100755 (executable)
@@ -49,6 +49,7 @@ namespace OIC
                 nsProvider->setTopicList(new NSTopicsList(topicLL));\r
                 if (state == NS_DISCOVERED)\r
                 {\r
+                    nsProvider->setProviderSubscribedState(NSProviderSubscribedState::DISCOVERED);\r
                     if (discoveredCallback != NULL)\r
                     {\r
                         NS_LOG(DEBUG, "initiating the Discovered callback : NS_DISCOVERED, policy false");\r
@@ -57,6 +58,7 @@ namespace OIC
                 }\r
                 else if (state == NS_ALLOW)\r
                 {\r
+                    nsProvider->setProviderSubscribedState(NSProviderSubscribedState::SUBSCRIBED);\r
                     if (discoveredCallback != NULL)\r
                     {\r
                         NS_LOG(DEBUG, "initiating the Discovered callback : NS_ALLOW, policy true");\r
@@ -73,6 +75,7 @@ namespace OIC
                 delete nsProvider;\r
                 if (state == NS_ALLOW)\r
                 {\r
+                    oldProvider->setProviderSubscribedState(NSProviderSubscribedState::SUBSCRIBED);\r
                     if (changeCallback != NULL)\r
                     {\r
                         NS_LOG(DEBUG, "initiating the callback for Response : NS_ALLOW");\r
@@ -81,6 +84,7 @@ namespace OIC
                 }\r
                 else if (state == NS_DENY)\r
                 {\r
+                    oldProvider->setProviderSubscribedState(NSProviderSubscribedState::DENY);\r
                     NSConsumerService::getInstance()->getAcceptedProviders().remove(oldProvider);\r
                     if (changeCallback != NULL)\r
                     {\r
@@ -101,10 +105,12 @@ namespace OIC
                 }\r
                 else if (state == NS_STOPPED)\r
                 {\r
+                    oldProvider->setProviderSubscribedState(NSProviderSubscribedState::DENY);\r
+                    NSConsumerService::getInstance()->getAcceptedProviders().remove(oldProvider);\r
                     NS_LOG(DEBUG, "initiating the State callback : NS_STOPPED");\r
                     if (changeCallback != NULL)\r
                     {\r
-                        NS_LOG(DEBUG, "initiating the callback for Response : NS_TOPIC");\r
+                        NS_LOG(DEBUG, "initiating the callback for Response : NS_STOPPED");\r
                         changeCallback((NSProviderState)state);\r
                     }\r
                 }\r
@@ -199,6 +205,11 @@ namespace OIC
         {\r
             NS_LOG(DEBUG, "stop - IN");\r
             NSStopConsumer();\r
+            for (auto it : getAcceptedProviders())\r
+            {\r
+                delete it;\r
+            }\r
+            getAcceptedProviders().clear();\r
             NS_LOG(DEBUG, "stop - OUT");\r
             return;\r
         }\r
index c4d7269..e00e151 100755 (executable)
@@ -43,6 +43,8 @@ namespace OIC
             m_messageCb = NULL;\r
             m_syncInfoCb = NULL;\r
             m_state = NSProviderState::DENY;\r
+            m_subscribedState = NSProviderSubscribedState::DENY;\r
+\r
             m_topicList = new NSTopicsList();\r
 \r
             if (provider != nullptr)\r
@@ -54,6 +56,7 @@ namespace OIC
         NSProvider::NSProvider(const NSProvider &provider)\r
         {\r
             m_providerId = provider.getProviderId();\r
+            m_topicList = new NSTopicsList();\r
             auto topicsList = provider.getTopicList();\r
             if (topicsList != nullptr)\r
             {\r
@@ -65,22 +68,25 @@ namespace OIC
             setListener(provider.getProviderStateReceivedCb(), provider.getMessageReceivedCb(),\r
                         provider.getSyncInfoReceivedCb());\r
             setProviderState(provider.getProviderState());\r
+            setProviderSubscribedState(provider.getProviderSubscribedState());\r
         }\r
 \r
         NSProvider &NSProvider::operator=(const NSProvider &provider)\r
         {\r
-            m_providerId = provider.getProviderId();\r
+            this->m_providerId = provider.getProviderId();\r
+            this->m_topicList = new NSTopicsList();\r
             auto topicsList = provider.getTopicList();\r
             if (topicsList != nullptr)\r
             {\r
                 for (auto it : topicsList->getTopicsList())\r
                 {\r
-                    getTopicList()->addTopic(it->getTopicName(), it->getState());\r
+                    this->getTopicList()->addTopic(it->getTopicName(), it->getState());\r
                 }\r
             }\r
-            setListener(provider.getProviderStateReceivedCb(), provider.getMessageReceivedCb(),\r
-                        provider.getSyncInfoReceivedCb());\r
-            setProviderState(provider.getProviderState());\r
+            this->setListener(provider.getProviderStateReceivedCb(), provider.getMessageReceivedCb(),\r
+                              provider.getSyncInfoReceivedCb());\r
+            this->setProviderState(provider.getProviderState());\r
+            this->setProviderSubscribedState(provider.getProviderSubscribedState());\r
             return *this;\r
         }\r
 \r
@@ -165,6 +171,12 @@ namespace OIC
             return m_state;\r
         }\r
 \r
+        NSProviderSubscribedState NSProvider::getProviderSubscribedState() const\r
+        {\r
+            NS_LOG_V(DEBUG, "getProviderSubscribedState  state : %d", (int)m_subscribedState);\r
+            return m_subscribedState;\r
+        }\r
+\r
         void NSProvider::subscribe()\r
         {\r
             NS_LOG(DEBUG, "Subscribe - IN");\r
@@ -175,9 +187,8 @@ namespace OIC
         bool NSProvider::isSubscribed()\r
         {\r
             NS_LOG(DEBUG, "isSubscribed - IN");\r
-            auto state = getProviderState();\r
-            NS_LOG_V(DEBUG, "state : %d", (int)state);\r
-            if ((state == NSProviderState::ALLOW) || (state == NSProviderState::TOPIC) )\r
+            NS_LOG_V(DEBUG, "Subscribed state : %d", (int)getProviderSubscribedState());\r
+            if (getProviderSubscribedState() == NSProviderSubscribedState::SUBSCRIBED)\r
                 return true;\r
             return false;\r
         }\r
@@ -227,5 +238,10 @@ namespace OIC
         {\r
             m_state = providerState;\r
         }\r
+\r
+        void NSProvider::setProviderSubscribedState(const NSProviderSubscribedState &subscribedState)\r
+        {\r
+            m_subscribedState = subscribedState;\r
+        }\r
     }\r
 }\r
index c90f010..98d8853 100755 (executable)
@@ -44,8 +44,9 @@ void onNotificationPostedCb(OIC::Service::NSMessage *notification)
     std::cout << "topic : " <<  notification->getTopic() << std::endl;\r
 \r
     auto provider = NSConsumerService::getInstance()->getProvider(notification->getProviderId());\r
-    provider->sendSyncInfo(notification->getMessageId(),\r
-                           OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ);\r
+    if (provider != nullptr)\r
+        provider->sendSyncInfo(notification->getMessageId(),\r
+                               OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ);\r
 }\r
 \r
 void onNotificationSyncCb(OIC::Service::NSSyncInfo *sync)\r
index 9da7cb5..ffef86b 100755 (executable)
@@ -145,6 +145,7 @@ int main()
                 {\r
                     std::cout << "SendMessage" << std::endl;\r
 \r
+                    std::string dummy;\r
                     std::string title;\r
                     std::string body;\r
                     std::string topic;\r
@@ -152,13 +153,14 @@ int main()
                     std::cout << "id : " << ++id << std::endl;\r
                     std::cout << "title : ";\r
 \r
-                    std::cin >> title;\r
+                    std::getline(std::cin, dummy);\r
+                    std::getline(std::cin, title);\r
 \r
                     std::cout << "body : ";\r
-                    std::cin >> body;\r
+                    std::getline(std::cin, body);\r
 \r
                     std::cout << "topic : ";\r
-                    std::cin >> topic;\r
+                    std::getline(std::cin, topic);\r
 \r
                     std::cout << "app - mTitle : " << title << std::endl;\r
                     std::cout << "app - mContentText : " << body << std::endl;\r
index 15b2f37..790caca 100644 (file)
@@ -49,10 +49,15 @@ if env.get('WITH_CLOUD') == True:
         notification_sample_env.AppendUnique(CPPPATH = ['../../src/provider'])
        notification_sample_env.AppendUnique(CPPDEFINES = ['WITH_CLOUD'])
 
-       CONSUMER_CLOUD = File('cloud_connector.c')
-       notification_sample_consumer_src = ['notificationconsumer.c', CONSUMER_CLOUD]
-        PROVIDER_CLOUD = File('cloud_connector.c')
-        notification_sample_provider_src = ['notificationprovider.c', PROVIDER_CLOUD]
+        providerCloudConnectorObj = notification_sample_env.Object('cloud_connector.c')
+        consumerCloudConnectorObj = notification_sample_env.Object('cloud_connector.c')
+
+        #PROVIDER_CLOUD = File('cloud_connector.c')
+        #notification_sample_provider_src = ['notificationprovider.c', PROVIDER_CLOUD]
+        notification_sample_provider_src = ['notificationprovider.c', providerCloudConnectorObj]
+       #CONSUMER_CLOUD = File('cloud_connector.c')
+       #notification_sample_consumer_src = ['notificationconsumer.c', CONSUMER_CLOUD]
+        notification_sample_consumer_src = ['notificationconsumer.c', consumerCloudConnectorObj]
 
 if env.get('WITH_TCP') == True:
        notification_sample_env.AppendUnique(CPPDEFINES = ['WITH_TCP'])
@@ -71,3 +76,7 @@ notification_sample_consumer_env = notification_sample_env.Clone()
 notification_sample_consumer_env.AppendUnique(LIBS = 'libnotification_consumer')
 notificationconsumer = notification_sample_consumer_env.Program('notificationconsumer', notification_sample_consumer_src)
 i_notificationprovider = notification_sample_consumer_env.Install(env.get('BUILD_DIR'), notificationconsumer)
+
+if env.get('WITH_CLOUD') == True:
+        Export('providerCloudConnectorObj')
+        Export('consumerCloudConnectorObj')
index 3d96209..5a77ea0 100644 (file)
@@ -73,7 +73,7 @@ void onProviderChanged(NSProvider * provider, NSProviderState response)
     if (response == NS_DISCOVERED)
     {
         printf("notification resource discovered\n");
-        printf("subscribe result %d\n", NSSubscribe(provider));
+        printf("subscribe result %d\n", NSSubscribe(provider->providerId));
         printf("startSubscribing\n");
     }
 
index c643fcf..44dae6b 100644 (file)
@@ -135,6 +135,17 @@ void removeTopics(NSTopicLL * topics)
     }
 }
 
+void input(char * buffer)
+{
+    char ch;
+    int i = 0;
+
+    while( (ch = getchar()) != '\n' && i < 100)
+        buffer[i++] = ch;
+
+    buffer[i] = '\0';
+}
+
 int main()
 {
     int num;
@@ -182,10 +193,15 @@ int main()
 
         printf("input : ");
 
-        scanf("%d", &num);
-        fflush(stdin);
-        scanf("%c", &dummy);
-        fflush(stdin);
+        if(scanf("%d", &num) > 0)
+        {
+            fflush(stdin);
+            if(scanf("%c", &dummy) > 0)
+            {
+                fflush(stdin);
+                printf("\n");
+            }
+        }
 
         switch (num)
         {
@@ -216,19 +232,19 @@ int main()
             case 3:
             {
                 printf("NSSendNotification()");
-                char title[100];
-                char body[100];
-                char topic[100];
+                char title[100] = {'\0',};
+                char body[100] = {'\0',};
+                char topic[100] = {'\0',};
 
                 printf("id : %d\n", ++id);
                 printf("title : ");
-                gets(title);
+                input(title);
 
                 printf("body : ");
-                gets(body);
+                input(body);
 
                 printf("topic : ");
-                gets(topic);
+                input(topic);
 
                 printf("app - mTitle : %s \n", title);
                 printf("app - mContentText : %s \n", body);
index a6cc2a3..3c6d949 100644 (file)
@@ -266,7 +266,9 @@ typedef enum eTaskType
     TASK_DELETE_TOPIC = 11002,
     TASK_SUBSCRIBE_TOPIC = 11003,
     TASK_UNSUBSCRIBE_TOPIC = 11004,
-    TASK_POST_TOPIC = 11005
+    TASK_POST_TOPIC = 11005,
+    TASK_GET_TOPICS = 11006,
+    TAST_GET_CONSUMER_TOPICS = 11007
 
 } NSTaskType;
 
index 3f00281..bc80124 100644 (file)
@@ -475,33 +475,6 @@ void NSRemoveProvider(NSProvider * prov)
     NSOICFree(prov);
 }
 
-NSSyncInfo_internal * NSCopySyncInfo(NSSyncInfo_internal * syncInfo)
-{
-    NS_VERIFY_NOT_NULL(syncInfo, NULL);
-
-    NSProviderConnectionInfo * connections = NSCopyProviderConnections(syncInfo->connection);
-    NS_VERIFY_NOT_NULL(connections, NULL);
-
-    NSSyncInfo_internal * newSyncInfo = (NSSyncInfo_internal *)OICMalloc(sizeof(NSSyncInfo_internal));
-    NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(newSyncInfo, NULL, NSRemoveConnections(connections));
-
-    OICStrcpy(newSyncInfo->providerId, sizeof(char) * NS_DEVICE_ID_LENGTH, syncInfo->providerId);
-    newSyncInfo->messageId = syncInfo->messageId;
-    newSyncInfo->state = syncInfo->state;
-    newSyncInfo->connection = connections;
-
-    return newSyncInfo;
-}
-
-void NSRemoveSyncInfo(NSSyncInfo_internal * syncInfo)
-{
-    NS_VERIFY_NOT_NULL_V(syncInfo);
-
-    NSRemoveConnections(syncInfo->connection);
-
-    NSOICFree(syncInfo);
-}
-
 OCStackResult NSInvokeRequest(OCDoHandle * handle,
         OCMethod method, const OCDevAddr * addr,
         const char * queryUrl, OCPayload * payload,
index b386281..ea1dea8 100644 (file)
@@ -137,9 +137,6 @@ NSProvider * NSCopyProvider(NSProvider_internal *);
 void NSRemoveProvider_internal(NSProvider_internal *);
 void NSRemoveProvider(NSProvider *);
 
-NSSyncInfo_internal * NSCopySyncInfo(NSSyncInfo_internal *);
-void NSRemoveSyncInfo(NSSyncInfo_internal *);
-
 NSTopicLL * NSCopyTopicNode(NSTopicLL *);
 void NSRemoveTopicNode(NSTopicLL *);
 NSResult NSInsertTopicNode(NSTopicLL *, NSTopicLL *);
index 1b21230..98951b3 100644 (file)
@@ -190,10 +190,17 @@ NSProvider_internal * NSGetProvider(OCClientResponse * clientResponse)
     NS_LOG(DEBUG, "create NSProvider");
     NS_VERIFY_NOT_NULL(clientResponse->payload, NULL);
 
+    OCRepPayloadPropType accepterType = OCREP_PROP_BOOL;
+
     OCRepPayload * payload = (OCRepPayload *)clientResponse->payload;
     while (payload)
     {
         NS_LOG_V(DEBUG, "Payload Key : %s", payload->values->name);
+        NS_LOG_V(DEBUG, "Payload Type : %d", (int) payload->values->type);
+        if (!strcmp(payload->values->name, NS_ATTRIBUTE_POLICY))
+        {
+            accepterType = payload->values->type;
+        }
         payload = payload->next;
     }
 
@@ -203,11 +210,20 @@ NSProvider_internal * NSGetProvider(OCClientResponse * clientResponse)
     char * messageUri = NULL;
     char * syncUri = NULL;
     char * topicUri = NULL;
-    int64_t accepter = 0;
+    bool bAccepter = 0;
+    int16_t iAccepter = 0;
     NSProviderConnectionInfo * connection = NULL;
 
     NS_LOG(DEBUG, "get information of accepter");
-    bool getResult = OCRepPayloadGetPropBool(payload, NS_ATTRIBUTE_POLICY, & accepter);
+    bool getResult = false;
+    if (accepterType == OCREP_PROP_BOOL)
+    {
+        getResult = OCRepPayloadGetPropBool(payload, NS_ATTRIBUTE_POLICY, & bAccepter);
+    }
+    else if (accepterType == OCREP_PROP_INT)
+    {
+        getResult = OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_POLICY, (int64_t*) & iAccepter);
+    }
     NS_VERIFY_NOT_NULL(getResult == true ? (void *) 1 : NULL, NULL);
 
     NS_LOG(DEBUG, "get provider ID");
@@ -246,7 +262,15 @@ NSProvider_internal * NSGetProvider(OCClientResponse * clientResponse)
     {
         newProvider->topicUri = topicUri;
     }
-    newProvider->accessPolicy = (NSSelector)accepter;
+    if (accepterType == OCREP_PROP_BOOL)
+    {
+        newProvider->accessPolicy = (NSSelector)bAccepter;
+    }
+    else if (accepterType == OCREP_PROP_INT)
+    {
+        newProvider->accessPolicy = (NSSelector)iAccepter;
+    }
+
     newProvider->connection = connection;
     newProvider->topicLL = NULL;
     newProvider->state = NS_DISCOVERED;
index 51d3785..0a956db 100644 (file)
 #include "cautilinterface.h"
 #include "NSProviderSystem.h"
 #include "oic_time.h"
+#include <pthread.h>
 
 bool initProvider = false;
 
 pthread_mutex_t nsInitMutex;
+pthread_cond_t nstopicCond;
 
 void initializeMutex()
 {
@@ -43,6 +45,31 @@ void initializeMutex()
     nsInitMutex = initMutex;
 }
 
+void NSInitialize()
+{
+    NS_LOG(DEBUG, "NSSetList - IN");
+
+    pthread_mutexattr_init(&NSCacheMutexAttr);
+    pthread_mutexattr_settype(&NSCacheMutexAttr, PTHREAD_MUTEX_RECURSIVE);
+    pthread_mutex_init(&NSCacheMutex, &NSCacheMutexAttr);
+    pthread_cond_init(&nstopicCond, NULL);
+
+    NSInitSubscriptionList();
+    NSInitTopicList();
+    NS_LOG(DEBUG, "NSSetList - OUT");
+}
+
+void NSDeinitailize()
+{
+    NSStorageDestroy(consumerSubList);
+    NSStorageDestroy(consumerTopicList);
+    NSStorageDestroy(registeredTopicList);
+
+    pthread_mutex_destroy(&NSCacheMutex);
+    pthread_mutexattr_destroy(&NSCacheMutexAttr);
+    pthread_cond_destroy(&nstopicCond);
+}
+
 NSResult NSStartProvider(NSProviderConfig config)
 {
     NS_LOG(DEBUG, "NSStartProvider - IN");
@@ -62,7 +89,7 @@ NSResult NSStartProvider(NSProviderConfig config)
         CARegisterNetworkMonitorHandler((CAAdapterStateChangedCB)NSProviderAdapterStateListener,
                 (CAConnectionStateChangedCB)NSProviderConnectionStateListener);
 
-        NSSetList();
+        NSInitialize();
         NSInitScheduler();
         NSStartScheduler();
 
@@ -79,29 +106,6 @@ NSResult NSStartProvider(NSProviderConfig config)
     return NS_OK;
 }
 
-void NSSetList()
-{
-    NS_LOG(DEBUG, "NSSetList - IN");
-
-    pthread_mutexattr_init(&NSCacheMutexAttr);
-    pthread_mutexattr_settype(&NSCacheMutexAttr, PTHREAD_MUTEX_RECURSIVE);
-    pthread_mutex_init(&NSCacheMutex, &NSCacheMutexAttr);
-
-    NSInitSubscriptionList();
-    NSInitTopicList();
-    NS_LOG(DEBUG, "NSSetList - OUT");
-}
-
-void NSDestroyList()
-{
-    NSStorageDestroy(consumerSubList);
-    NSStorageDestroy(consumerTopicList);
-    NSStorageDestroy(registeredTopicList);
-
-    pthread_mutex_destroy(&NSCacheMutex);
-    pthread_mutexattr_destroy(&NSCacheMutexAttr);
-}
-
 NSResult NSStopProvider()
 {
     NS_LOG(DEBUG, "NSStopProvider - IN");
@@ -115,7 +119,7 @@ NSResult NSStopProvider()
         NSRegisterSubscribeRequestCb((NSSubscribeRequestCallback)NULL);
         NSRegisterSyncCb((NSProviderSyncInfoCallback)NULL);
         NSStopScheduler();
-        NSDestroyList();
+        NSDeinitailize();
 
         initProvider = false;
     }
@@ -266,11 +270,18 @@ NSTopicLL * NSProviderGetConsumerTopics(const char * consumerId)
         return NULL;
     }
 
-    NSTopicLL * topics = NSProviderGetConsumerTopicsCacheData(registeredTopicList,
-            consumerTopicList, consumerId);
+    NSTopicSynchronization topics;
+    topics.consumerId = OICStrdup(consumerId);
+    topics.topics = NULL;
+    topics.condition = nstopicCond;
+
+    NSPushQueue(TOPIC_SCHEDULER, TAST_GET_CONSUMER_TOPICS, &topics);
+    pthread_cond_wait(&topics.condition, &nsInitMutex);
+    OICFree(topics.consumerId);
 
     pthread_mutex_unlock(&nsInitMutex);
-    return topics;
+    NS_LOG(DEBUG, "NSProviderGetConsumerTopics - OUT");
+    return topics.topics;
 }
 
 NSTopicLL * NSProviderGetTopics()
@@ -278,12 +289,17 @@ NSTopicLL * NSProviderGetTopics()
     NS_LOG(DEBUG, "NSProviderGetTopics - IN");
     pthread_mutex_lock(&nsInitMutex);
 
-    NSTopicLL * topics = NSProviderGetTopicsCacheData(registeredTopicList);
+    NSTopicSynchronization topics;
+    topics.consumerId = NULL;
+    topics.topics = NULL;
+    topics.condition = nstopicCond;
+
+    NSPushQueue(TOPIC_SCHEDULER, TASK_GET_TOPICS, &topics);
+    pthread_cond_wait(&topics.condition, &nsInitMutex);
 
     pthread_mutex_unlock(&nsInitMutex);
     NS_LOG(DEBUG, "NSProviderGetTopics - OUT");
-
-    return topics;
+    return topics.topics;
 }
 
 NSResult NSProviderRegisterTopic(const char * topicName)
index 12688ce..f7d9940 100644 (file)
@@ -21,6 +21,7 @@
 #include "NSProviderTopic.h"\r
 #include "oic_string.h"\r
 #include "oic_malloc.h"\r
+#include <pthread.h>\r
 \r
 NSResult NSSendTopicUpdation();\r
 \r
@@ -233,12 +234,6 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest)
         }\r
     }\r
 \r
-    if(!topics)\r
-    {\r
-        NS_LOG(DEBUG, "topicList is NULL");\r
-        return NS_ERROR;\r
-    }\r
-\r
     // make response for the Get Request\r
     OCEntityHandlerResponse response;\r
     response.numSendVendorSpecificHeaderOptions = 0;\r
@@ -253,42 +248,56 @@ NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest)
         return NS_ERROR;\r
     }\r
 \r
-    size_t dimensionSize = (size_t)NSProviderGetTopicListSize(topics);\r
-\r
-    NS_LOG_V(DEBUG, "dimensionSize = %d", dimensionSize);\r
-\r
-    if(!dimensionSize)\r
+    OCRepPayloadSetUri(payload, NS_COLLECTION_TOPIC_URI);\r
+    if(id)\r
     {\r
-        return NS_ERROR;\r
+        OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_CONSUMER_ID, id);\r
     }\r
+    OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID,\r
+        NSGetProviderInfo()->providerId);\r
 \r
-    OCRepPayload** payloadTopicArray = (OCRepPayload **) OICMalloc(\r
-            sizeof(OCRepPayload *) * dimensionSize);\r
+    if(topics)\r
+    {\r
+        NS_LOG(DEBUG, "topicList is NULL");\r
+        size_t dimensionSize = (size_t)NSProviderGetTopicListSize(topics);\r
 \r
-    size_t dimensions[3] = {dimensionSize, 0, 0};\r
+        NS_LOG_V(DEBUG, "dimensionSize = %d", (int)dimensionSize);\r
 \r
-    for (int i = 0; i < (int)dimensionSize; i++)\r
-    {\r
-        NS_LOG_V(DEBUG, "topicName = %s", topics->topicName);\r
-        NS_LOG_V(DEBUG, "topicState = %d",(int) topics->state);\r
+        if(!dimensionSize)\r
+        {\r
+            return NS_ERROR;\r
+        }\r
 \r
-        payloadTopicArray[i] = OCRepPayloadCreate();\r
-        OCRepPayloadSetPropString(payloadTopicArray[i], NS_ATTRIBUTE_TOPIC_NAME, topics->topicName);\r
-        OCRepPayloadSetPropInt(payloadTopicArray[i], NS_ATTRIBUTE_TOPIC_SELECTION,\r
-                (int)topics->state);\r
+        OCRepPayload** payloadTopicArray = (OCRepPayload **) OICMalloc(\r
+                sizeof(OCRepPayload *) * dimensionSize);\r
 \r
-        topics = topics->next;\r
-    }\r
+        size_t dimensions[3] = {dimensionSize, 0, 0};\r
 \r
-    OCRepPayloadSetUri(payload, NS_COLLECTION_TOPIC_URI);\r
-    if(id)\r
+        for (int i = 0; i < (int)dimensionSize; i++)\r
+        {\r
+            NS_LOG_V(DEBUG, "topicName = %s", topics->topicName);\r
+            NS_LOG_V(DEBUG, "topicState = %d",(int) topics->state);\r
+\r
+            payloadTopicArray[i] = OCRepPayloadCreate();\r
+            OCRepPayloadSetPropString(payloadTopicArray[i], NS_ATTRIBUTE_TOPIC_NAME,\r
+                    topics->topicName);\r
+            OCRepPayloadSetPropInt(payloadTopicArray[i], NS_ATTRIBUTE_TOPIC_SELECTION,\r
+                    (int)topics->state);\r
+\r
+            topics = topics->next;\r
+        }\r
+\r
+\r
+        OCRepPayloadSetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST,\r
+                (const OCRepPayload**)(payloadTopicArray), dimensions);\r
+    }\r
+    else\r
     {\r
-        OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_CONSUMER_ID, id);\r
+        size_t dimensions[3] = {0, 0, 0};\r
+\r
+        OCRepPayloadSetPropObjectArrayAsOwner(payload, NS_ATTRIBUTE_TOPIC_LIST,\r
+                (OCRepPayload **) NULL, dimensions);\r
     }\r
-    OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID,\r
-        NSGetProviderInfo()->providerId);\r
-    OCRepPayloadSetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST,\r
-            (const OCRepPayload**)(payloadTopicArray), dimensions);\r
 \r
     response.requestHandle = entityHandlerRequest->requestHandle;\r
     response.resourceHandle = entityHandlerRequest->resource;\r
@@ -418,6 +427,25 @@ void * NSTopicSchedule(void * ptr)
                     NSFreeOCEntityHandlerRequest((OCEntityHandlerRequest*) node->taskData);\r
                 }\r
                     break;\r
+                case TASK_GET_TOPICS:\r
+                {\r
+                    NS_LOG(DEBUG, "TASK_GET_TOPICS : ");\r
+                    NSTopicSynchronization * topicData = (NSTopicSynchronization *) node->taskData;\r
+                    NSTopicLL * topics = NSProviderGetTopicsCacheData(registeredTopicList);\r
+                    topicData->topics = topics;\r
+                    pthread_cond_signal(&topicData->condition);\r
+                }\r
+                    break;\r
+                case TAST_GET_CONSUMER_TOPICS:\r
+                {\r
+                    NS_LOG(DEBUG, "TASK_GET_CONSUMER_TOPICS : ");\r
+                    NSTopicSynchronization * topicData = (NSTopicSynchronization *) node->taskData;\r
+                    NSTopicLL * topics = NSProviderGetConsumerTopicsCacheData(registeredTopicList,\r
+                                consumerTopicList, topicData->consumerId);\r
+                    topicData->topics = topics;\r
+                    pthread_cond_signal(&topicData->condition);\r
+                }\r
+                    break;\r
                 default:\r
                     break;\r
             }\r
index 20e416e..e14a8bf 100644 (file)
 #include "NSProviderResource.h"\r
 #include "NSProviderSubscription.h"\r
 \r
+typedef struct {\r
+    pthread_cond_t condition;\r
+    char * consumerId;\r
+    NSTopicLL * topics;\r
+} NSTopicSynchronization;\r
+\r
 NSCacheList * consumerTopicList;\r
 NSCacheList * registeredTopicList;\r
 \r
index 388957d..4360a2b 100644 (file)
@@ -148,8 +148,45 @@ protected:
 
 };
 
+TEST_F(NotificationConsumerTest, StartConsumerNegativeNonSetChangedCB)
+{
+    cfg.changedCb = NULL;
+    cfg.messageCb = NSNotificationReceivedCallbackEmpty;
+    cfg.syncInfoCb = NSSyncCallbackEmpty;
+
+    EXPECT_EQ(NS_ERROR, NSStartConsumer(cfg));
+    std::unique_lock< std::mutex > lock{ mutexForCondition };
+    responseCon.wait_for(lock, g_waitForResponse);
+}
+
+TEST_F(NotificationConsumerTest, StartConsumerNegativeNonSetNotiReceiveCB)
+{
+    cfg.changedCb = NSProviderChangedCallback;
+    cfg.messageCb = NULL;
+    cfg.syncInfoCb = NSSyncCallbackEmpty;
+
+    EXPECT_EQ(NS_ERROR, NSStartConsumer(cfg));
+    std::unique_lock< std::mutex > lock{ mutexForCondition };
+    responseCon.wait_for(lock, g_waitForResponse);
+}
+
+TEST_F(NotificationConsumerTest, StartConsumerNegativeNonSetSyncCB)
+{
+    cfg.changedCb = NSProviderChangedCallback;
+    cfg.messageCb = NSNotificationReceivedCallbackEmpty;
+    cfg.syncInfoCb = NULL;
+
+    EXPECT_EQ(NS_ERROR, NSStartConsumer(cfg));
+    std::unique_lock< std::mutex > lock{ mutexForCondition };
+    responseCon.wait_for(lock, g_waitForResponse);
+}
+
 TEST_F(NotificationConsumerTest, StartConsumerPositive)
 {
+    cfg.changedCb = NSProviderChangedCallback;
+    cfg.messageCb = NSNotificationReceivedCallbackEmpty;
+    cfg.syncInfoCb = NSSyncCallbackEmpty;
+
     EXPECT_EQ(NS_OK, NSStartConsumer(cfg));
     std::unique_lock< std::mutex > lock{ mutexForCondition };
     responseCon.wait_for(lock, g_waitForResponse);
@@ -160,12 +197,19 @@ TEST_F(NotificationConsumerTest, StopConsumerPositive)
     EXPECT_EQ(NSStopConsumer(), NS_OK);
 }
 
+TEST_F(NotificationConsumerTest, StopConsumerNegative)
+{
+    EXPECT_EQ(NSStopConsumer(), NS_ERROR);
+}
+
 TEST_F(NotificationConsumerTest, DiscoverProviderWithNonAccepterWhenStartedConsumerFirst)
 {
-    mocks.ExpectCallFunc(NSProviderChangedCallback).Do(
-            [this](NSProvider *, NSProviderState)
+    NSProviderState revState = NS_STOPPED;
+    mocks.OnCallFunc(NSProviderChangedCallback).Do(
+            [this, & revState](NSProvider *, NSProviderState state)
             {
                 std::cout << "Call Discovered" << std::endl;
+                revState = state;
                 responseCon.notify_all();
             });
 
@@ -179,6 +223,8 @@ TEST_F(NotificationConsumerTest, DiscoverProviderWithNonAccepterWhenStartedConsu
 
     NSStopConsumer();
     g_providerSimul.deleteNotificationResource();
+
+    EXPECT_EQ(NS_DISCOVERED, revState);
 }
 
 TEST_F(NotificationConsumerTest, DiscoverProviderWithNonAccepterWhenStartedConsumerAfter)
@@ -190,11 +236,14 @@ TEST_F(NotificationConsumerTest, DiscoverProviderWithNonAccepterWhenStartedConsu
         responseCon.wait_for(lock, g_waitForResponse);
     }
 
-    mocks.ExpectCallFunc(NSProviderChangedCallback).Do(
-            [this](NSProvider * provider, NSProviderState)
+    NSProviderState revState = NS_STOPPED;
+    mocks.OnCallFunc(NSProviderChangedCallback).Do(
+            [this, & revState](NSProvider * provider, NSProviderState state)
             {
                 std::cout << "Call Discovered" << std::endl;
+
                 g_provider = provider;
+                revState = state;
                 responseCon.notify_all();
             });
 
@@ -203,15 +252,18 @@ TEST_F(NotificationConsumerTest, DiscoverProviderWithNonAccepterWhenStartedConsu
     std::unique_lock< std::mutex > lock{ mutexForCondition };
     responseCon.wait_for(lock, g_waitForResponse);
 
+    EXPECT_EQ(NS_DISCOVERED, revState);
 }
 
 TEST_F(NotificationConsumerTest, DiscoverProviderWithNonAccepterWhenRescan)
 {
     g_providerSimul.setAccepter((int)NSSelector::NS_SELECTION_CONSUMER);
-    mocks.ExpectCallFunc(NSProviderChangedCallback).Do(
-            [this](NSProvider * provider, NSProviderState)
+    NSProviderState revState = NS_STOPPED;
+    mocks.OnCallFunc(NSProviderChangedCallback).Do(
+            [this, &revState](NSProvider * provider, NSProviderState state)
             {
                 std::cout << "Call Discovered" << std::endl;
+                revState = state;
                 g_provider = provider;
                 std::cout << g_provider->providerId << std::endl;
                 responseCon.notify_all();
@@ -222,21 +274,25 @@ TEST_F(NotificationConsumerTest, DiscoverProviderWithNonAccepterWhenRescan)
     std::unique_lock< std::mutex > lock{ mutexForCondition };
     responseCon.wait_for(lock, g_waitForResponse);
 
-//    NSStopConsumer();
+    EXPECT_EQ(NS_DISCOVERED, revState);
 }
 
 TEST_F(NotificationConsumerTest, ExpectSubscribeSuccess)
 {
-//    mocks.ExpectCallFunc(NSSubscriptionAcceptedCallback).Do(
-//            [](NSProvider * )
-//            {
-//                std::cout << "Income Accepted subscription : " << std::endl;
-//            });
+    NSProviderState revState = NS_DENY;
+    mocks.OnCallFunc(NSProviderChangedCallback).Do(
+            [this, & revState](NSProvider * , NSProviderState state)
+            {
+                std::cout << "Income Changed Callback : " << state << std::endl;
+                revState = state;
+                responseCon.notify_all();
+            });
 
     NSResult ret = NSSubscribe(g_provider->providerId);
     std::unique_lock< std::mutex > lock{ mutexForCondition };
     responseCon.wait_for(lock, g_waitForResponse);
 
+    EXPECT_EQ(NS_ALLOW, revState);
     EXPECT_EQ(NS_OK, ret);
 }
 
@@ -247,7 +303,7 @@ TEST_F(NotificationConsumerTest, ExpectReceiveNotification)
     std::string msg = "msg";
 
     mocks.ExpectCallFunc(NSNotificationReceivedCallbackEmpty).Do(
-            [](NSMessage * message)
+            [this](NSMessage * message)
             {
                 std::cout << "Income Notification : " << message->messageId << std::endl;
             });
@@ -260,24 +316,38 @@ TEST_F(NotificationConsumerTest, ExpectReceiveNotification)
     NSStopConsumer();
 }
 
+TEST_F(NotificationConsumerTest, ExpectReceiveSubAllowWithAccepterisProvider)
+{
+    g_providerSimul.setAccepter((int)NSSelector::NS_SELECTION_PROVIDER);
+    NSProviderState revState = NS_DENY;
+
+    mocks.OnCallFunc(NSProviderChangedCallback).Do(
+            [this, & revState](NSProvider * , NSProviderState state)
+            {
+                std::cout << "Income Changed Callback : " << state << std::endl;
+                revState = state;
+                responseCon.notify_all();
+            });
+
+    NSStartConsumer(cfg);
+    std::unique_lock< std::mutex > lock{ mutexForCondition };
+    responseCon.wait_for(lock, g_waitForResponse);
+
+    EXPECT_EQ(NS_ALLOW, revState);
+}
+
 TEST_F(NotificationConsumerTest, ExpectReceiveNotificationWithAccepterisProvider)
 {
     uint64_t id = 11;
     std::string title = "title";
     std::string msg = "msg";
+    uint64_t revId = 1;
 
-    g_providerSimul.setAccepter((int)NSSelector::NS_SELECTION_PROVIDER);
-
-    NSStartConsumer(cfg);
-    {
-        std::unique_lock< std::mutex > lock{ mutexForCondition };
-        responseCon.wait_for(lock, g_waitForResponse);
-    }
-
-    mocks.ExpectCallFunc(NSNotificationReceivedCallbackEmpty).Do(
-            [](NSMessage * message)
+    mocks.OnCallFunc(NSNotificationReceivedCallbackEmpty).Do(
+            [this, & id, & revId](NSMessage * message)
             {
                 std::cout << "Income Notification : " << message->messageId << std::endl;
+                revId = message->messageId;
             });
 
     g_providerSimul.notifyMessage(id, title, msg);
@@ -285,8 +355,7 @@ TEST_F(NotificationConsumerTest, ExpectReceiveNotificationWithAccepterisProvider
     std::unique_lock< std::mutex > lock{ mutexForCondition };
     responseCon.wait_for(lock, g_waitForResponse);
 
-//    g_providerSimul.deleteNotificationResource();
-//    NSStopConsumer();
+    EXPECT_EQ(id, revId);
 }
 
 TEST_F(NotificationConsumerTest, ExpectCallbackReadCheckWhenProviderNotifySync)
@@ -294,22 +363,20 @@ TEST_F(NotificationConsumerTest, ExpectCallbackReadCheckWhenProviderNotifySync)
     uint64_t id = 12;
     std::string title = "title";
     std::string msg = "msg";
-
     NSSyncType type = NS_SYNC_DELETED;
 
     mocks.OnCallFunc(NSNotificationReceivedCallbackEmpty).Do(
-            [](NSMessage * message)
+            [this](NSMessage * message)
             {
                 std::cout << "Income Notification : " << message->messageId << std::endl;
             });
 
-    mocks.ExpectCallFunc(NSSyncCallbackEmpty).Do(
-            [& type](NSSyncInfo * sync)
+    mocks.OnCallFunc(NSSyncCallbackEmpty).Do(
+            [& type, this](NSSyncInfo * sync)
             {
                 std::cout << "Income SyncInfo : " << sync->messageId
                         << ", State : " << sync->state << std::endl;
                 type = sync->state;
-
             });
 
     g_providerSimul.notifyMessage(id, title, msg);
@@ -324,9 +391,6 @@ TEST_F(NotificationConsumerTest, ExpectCallbackReadCheckWhenProviderNotifySync)
         responseCon.wait_for(lock, g_waitForResponse);
     }
 
-//    g_providerSimul.deleteNotificationResource();
-//    NSStopConsumer();
-
     EXPECT_EQ(NS_SYNC_READ, type);
 }
 
@@ -335,22 +399,20 @@ TEST_F(NotificationConsumerTest, ExpectCallbackDismissCheckWhenProviderNotifySyn
     uint64_t id = 13;
     std::string title = "title";
     std::string msg = "msg";
-
     NSSyncType type = NS_SYNC_READ;
 
     mocks.OnCallFunc(NSNotificationReceivedCallbackEmpty).Do(
-            [](NSMessage * message)
+            [this](NSMessage * message)
             {
                 std::cout << "Income Notification : " << message->messageId << std::endl;
             });
 
-    mocks.ExpectCallFunc(NSSyncCallbackEmpty).Do(
-            [& type](NSSyncInfo * sync)
+    mocks.OnCallFunc(NSSyncCallbackEmpty).Do(
+            [& type, this](NSSyncInfo * sync)
             {
                 std::cout << "Income Notification : " << sync->messageId
                         << ", State : " << sync->state << std::endl;
                 type = sync->state;
-
             });
 
     g_providerSimul.notifyMessage(id, title, msg);
@@ -365,9 +427,6 @@ TEST_F(NotificationConsumerTest, ExpectCallbackDismissCheckWhenProviderNotifySyn
         responseCon.wait_for(lock, g_waitForResponse);
     }
 
-//    g_providerSimul.deleteNotificationResource();
-//    NSStopConsumer();
-
     EXPECT_EQ(NS_SYNC_DELETED, type);
 }
 
@@ -376,11 +435,10 @@ TEST_F(NotificationConsumerTest, ExpectCallbackReadCheckWhenConsumerPostSync)
     uint64_t id = 14;
     std::string title = "title";
     std::string msg = "msg";
-
     NSSyncType type = NS_SYNC_DELETED;
 
     mocks.OnCallFunc(NSNotificationReceivedCallbackEmpty).Do(
-            [](NSMessage * message)
+            [this](NSMessage * message)
             {
                 std::cout << "Income Notification : " << message->messageId << std::endl;
                 NSConsumerSendSyncInfo(message->providerId, message->messageId, NS_SYNC_READ);
@@ -388,13 +446,12 @@ TEST_F(NotificationConsumerTest, ExpectCallbackReadCheckWhenConsumerPostSync)
                 responseCon.wait_for(lock, g_waitForResponse);
             });
 
-    mocks.ExpectCallFunc(NSSyncCallbackEmpty).Do(
-            [& type](NSSyncInfo * sync)
+    mocks.OnCallFunc(NSSyncCallbackEmpty).Do(
+            [& type, this](NSSyncInfo * sync)
             {
                 std::cout << "Income Notification : " << sync->messageId
                         << ", State : " << sync->state << std::endl;
                 type = sync->state;
-
             });
 
     g_providerSimul.notifyMessage(id, title, msg);
@@ -403,9 +460,6 @@ TEST_F(NotificationConsumerTest, ExpectCallbackReadCheckWhenConsumerPostSync)
         responseCon.wait_for(lock, g_waitForResponse);
     }
 
-//    g_providerSimul.deleteNotificationResource();
-//    NSStopConsumer();
-
     EXPECT_EQ(NS_SYNC_READ, type);
 }
 
@@ -414,11 +468,10 @@ TEST_F(NotificationConsumerTest, ExpectCallbackDismissCheckWhenConsumerPostSync)
     uint64_t id = 15;
     std::string title = "title";
     std::string msg = "msg";
-
-    NSSyncType type = NS_SYNC_READ;
+    NSSyncType state = NS_SYNC_READ;
 
     mocks.OnCallFunc(NSNotificationReceivedCallbackEmpty).Do(
-            [](NSMessage * message)
+            [this](NSMessage * message)
             {
                 std::cout << "Income Notification : " << message->messageId << std::endl;
                 NSConsumerSendSyncInfo(message->providerId, message->messageId, NS_SYNC_DELETED);
@@ -426,13 +479,12 @@ TEST_F(NotificationConsumerTest, ExpectCallbackDismissCheckWhenConsumerPostSync)
                 responseCon.wait_for(lock, g_waitForResponse);
             });
 
-    mocks.ExpectCallFunc(NSSyncCallbackEmpty).Do(
-            [& type](NSSyncInfo * sync)
+    mocks.OnCallFunc(NSSyncCallbackEmpty).Do(
+            [& state, this](NSSyncInfo * sync)
             {
                 std::cout << "Income Notification : " << sync->messageId
                         << ", State : " << sync->state << std::endl;
-                type = sync->state;
-
+                state = sync->state;
             });
 
     g_providerSimul.notifyMessage(id, title, msg);
@@ -441,10 +493,30 @@ TEST_F(NotificationConsumerTest, ExpectCallbackDismissCheckWhenConsumerPostSync)
         responseCon.wait_for(lock, g_waitForResponse);
     }
 
+    EXPECT_EQ(NS_SYNC_DELETED, state);
+//    g_providerSimul.deleteNotificationResource();
+//    NSStopConsumer();
+}
+
+TEST_F(NotificationConsumerTest, ExpectCallbackDeletedProvider)
+{
+    NSProviderState type = NS_ALLOW;
+    mocks.OnCallFunc(NSProviderChangedCallback).Do(
+            [& type, this](NSProvider * , NSProviderState state)
+            {
+                std::cout << "Income Changed Callback : " << state << std::endl;
+                //EXPECT_EQ(state, NS_STOPPED);
+                type = state;
+                responseCon.notify_all();
+            });
+
     g_providerSimul.deleteNotificationResource();
-    NSStopConsumer();
 
-    EXPECT_EQ(NS_SYNC_DELETED, type);
+    std::unique_lock< std::mutex > lock{ mutexForCondition };
+    responseCon.wait_for(lock, g_waitForResponse);
+
+    EXPECT_EQ(type, NS_STOPPED);
+    NSStopConsumer();
 }
 
 //TEST_F(NotificationConsumerTest, ExpectUnsubscribeSuccess)
index 97c2d15..bae719b 100644 (file)
@@ -98,7 +98,7 @@ private:
                     std::string msgUri = m_notificationUri + m_messageUri;
                     std::string syncUri = m_notificationUri + m_syncUri;
                     std::string providerId = "123456789012345678901234567890123456";
-                    rep.setValue("ACCEPTER", m_accepter);
+                    rep.setValue("ACCEPTER", (bool) m_accepter);
                     rep.setValue("MESSAGE_URI", msgUri);
                     rep.setValue("SYNC_URI", syncUri);
                     rep.setValue("PROVIDER_ID", providerId);
index ba46cc7..dd2238b 100755 (executable)
@@ -341,9 +341,6 @@ TEST_F(NotificationProviderTest, ExpectEqualAddedTopicsAndRegisteredTopics)
     NSProviderRegisterTopic(str.c_str());
     NSProviderRegisterTopic(str2.c_str());
 
-    std::unique_lock< std::mutex > lock{ mutexForCondition };
-    responseCon.wait_for(lock, std::chrono::milliseconds(1000));
-
     bool isSame = true;
     NSTopicLL * topics = NSProviderGetTopics();
 
@@ -378,9 +375,6 @@ TEST_F(NotificationProviderTest, ExpectEqualUnregisteredTopicsAndRegisteredTopic
     NSProviderRegisterTopic(str2.c_str());
     NSProviderUnregisterTopic(str2.c_str());
 
-    std::unique_lock< std::mutex > lock{ mutexForCondition };
-    responseCon.wait_for(lock, std::chrono::milliseconds(1000));
-
     bool isSame = true;
     NSTopicLL * topics = NSProviderGetTopics();