--- /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);
+}