javaextensions/midprms_db/tsrc/rmsplugin/src/testplugin.cpp
branchRCL_3
changeset 19 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/midprms_db/tsrc/rmsplugin/src/testplugin.cpp	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: RmsExtensionPlugin unit tests with Java Captain
+*
+*/
+
+#include <string>
+#include "TestHarness.h"
+#include "comms.h"
+#include "commsmessage.h"
+#include "commsclientendpoint.h"
+#include "monitor.h"
+
+#include "rmsextensionplugin.h"
+
+using namespace java::rms;
+using namespace java::util;
+using namespace java::comms;
+
+class NotifyListener : public CommsListener
+{
+public:
+    NotifyListener(Monitor& aMonitor, int aMsgCount) : mListenerCountMsg(0), mListenerCount(0),
+            mMonitor(aMonitor), mMsgCount(aMsgCount) {};
+    virtual void processMessage(CommsMessage& aMessage)
+    {
+        int id = aMessage.getMessageId();
+        switch (id)
+        {
+        case MSG_ID_RECORD_CHANGE:
+            if (--mMsgCount == 0)
+            {
+                mMonitor.notify();
+            }
+            break;
+        case MSG_ID_LISTENER_COUNT:
+        {
+            mListenerCountMsg++;
+            std::string name;
+            aMessage >> name >> mListenerCount;
+            break;
+        }
+        default:
+            break;
+        }
+    }
+
+    int mListenerCountMsg;
+    int mListenerCount;
+private:
+    Monitor& mMonitor;
+    int mMsgCount;
+};
+
+
+CommsMessage createAddListenerMsg()
+{
+    CommsMessage addMsg;
+    addMsg.setModuleId(PLUGIN_ID_RMS_C);
+    addMsg.setMessageId(MSG_ID_LISTENER_CHANGE);
+    addMsg << "aaa" << ADD_LISTENER;
+    return addMsg;
+}
+
+CommsMessage createRemoveListenerMsg()
+{
+    CommsMessage removeMsg;
+    removeMsg.setModuleId(PLUGIN_ID_RMS_C);
+    removeMsg.setMessageId(MSG_ID_LISTENER_CHANGE);
+    removeMsg << "aaa" << REMOVE_LISTENER;
+    return removeMsg;
+}
+
+CommsMessage createRecordChangedMsg()
+{
+    CommsMessage recordMsg;
+    recordMsg.setModuleId(PLUGIN_ID_RMS_C);
+    recordMsg.setMessageId(MSG_ID_RECORD_CHANGE);
+    recordMsg << "aaa";
+    return recordMsg;
+}
+
+TEST_GROUP(TestPlugin)
+{
+    TEST_SETUP()
+    {
+    }
+
+    TEST_TEARDOWN()
+    {
+    }
+};
+
+
+TEST(TestPlugin, oneListener)
+{
+    CommsClientEndpoint a;
+    std::auto_ptr<Monitor> monitor(Monitor::createMonitor());
+    NotifyListener listener(*monitor, 1);
+    a.registerDefaultListener(&listener);
+
+    int rc = a.connect(IPC_ADDRESS_JAVA_CAPTAIN_C);
+    CHECK(rc == 0);
+    CommsMessage msg = createAddListenerMsg();
+    CommsMessage receivedMsg;
+    rc = a.sendReceive(msg, receivedMsg, WAIT_FOR_EVER);
+    CHECK(rc == 0);
+    listener.processMessage(receivedMsg);
+    CHECK(listener.mListenerCountMsg == 1);
+
+    CommsClientEndpoint dummy;
+    dummy.connect(IPC_ADDRESS_JAVA_CAPTAIN_C);
+    msg = createRecordChangedMsg();
+    rc = dummy.send(msg);
+    CHECK(rc == 0);
+
+    monitor->wait();
+
+    msg = createRemoveListenerMsg();
+    rc = a.send(msg);
+    CHECK(rc == 0);
+}
+
+TEST(TestPlugin, multipleListeners)
+{
+    // 1st listener
+    CommsClientEndpoint a;
+    std::auto_ptr<Monitor> monitorA(Monitor::createMonitor());
+    NotifyListener listenerA(*monitorA, 2);
+    a.registerDefaultListener(&listenerA);
+    int rc = a.connect(IPC_ADDRESS_JAVA_CAPTAIN_C);
+    CHECK(rc == 0);
+
+    // 2nd listener
+    CommsClientEndpoint b;
+    std::auto_ptr<Monitor> monitorB(Monitor::createMonitor());
+    NotifyListener listenerB(*monitorB, 2);
+    b.registerDefaultListener(&listenerB);
+    rc = b.connect(IPC_ADDRESS_JAVA_CAPTAIN_C);
+    CHECK(rc == 0);
+
+    // 3rd listener
+    CommsClientEndpoint c;
+    std::auto_ptr<Monitor> monitorC(Monitor::createMonitor());
+    NotifyListener listenerC(*monitorC, 2);
+    c.registerDefaultListener(&listenerC);
+    rc = c.connect(IPC_ADDRESS_JAVA_CAPTAIN_C);
+    CHECK(rc == 0);
+
+    // add listeners
+    CommsMessage msg = createAddListenerMsg();
+    rc = a.send(msg);
+    CHECK(rc == 0);
+    rc = b.send(msg);
+    CHECK(rc == 0);
+    rc = c.send(msg);
+    CHECK(rc == 0);
+
+    // send record modified
+    msg = createRecordChangedMsg();
+    rc = a.send(msg);
+    CHECK(rc == 0);
+    rc = b.send(msg);
+    CHECK(rc == 0);
+    rc = c.send(msg);
+    CHECK(rc == 0);
+
+    monitorA->wait();
+    monitorB->wait();
+    monitorC->wait();
+
+    CHECK(listenerA.mListenerCountMsg == 3);
+    CHECK(listenerB.mListenerCountMsg == 2);
+    CHECK(listenerC.mListenerCountMsg == 1);
+
+    CHECK(listenerA.mListenerCount == 3);
+    CHECK(listenerB.mListenerCount == 3);
+    CHECK(listenerC.mListenerCount == 3);
+
+    // remove listeners
+    msg = createRemoveListenerMsg();
+    rc = a.send(msg);
+    CHECK(rc == 0);
+    rc = b.send(msg);
+    CHECK(rc == 0);
+    rc = c.send(msg);
+    CHECK(rc == 0);
+}