| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377 | 
							- /*
 
-  *  ctkEventBusManagerTest.cpp
 
-  *  ctkEventBusManagerTest
 
-  *
 
-  *  Created by Paolo Quadrani on 27/03/09.
 
-  *  Copyright 2009 B3C. All rights reserved.
 
-  *
 
-  *  See Licence at: http://tiny.cc/QXJ4D
 
-  *
 
-  */
 
- #include "ctkTestSuite.h"
 
- #include <ctkEventBusManager.h>
 
- #include <ctkEventDefinitions.h>
 
- #include <ctkNetworkConnector.h>
 
- using namespace ctkEventBus;
 
- //-------------------------------------------------------------------------
 
- /**
 
-  Class name: testObjectCustom
 
-  Custom object needed for testing.
 
-  */
 
- class testObjectCustom : public QObject {
 
-     Q_OBJECT
 
- public:
 
-     /// constructor.
 
-     testObjectCustom();
 
-     /// Return tha var's value.
 
-     int var() {return m_Var;}
 
-     /// register a custom callback
 
-     void registerCustomCallback();
 
- public Q_SLOTS:
 
-     /// Test slot that will increment the value of m_Var when an UPDATE_OBJECT event is raised.
 
-     void updateObject();
 
-     void setObjectValue(int v);
 
-     int returnObjectValue();
 
- Q_SIGNALS:
 
-     void valueModified(int v);
 
-     void objectModified();
 
-     int returnObjectValueSignal();
 
- private:
 
-     int m_Var; ///< Test var.
 
- };
 
- testObjectCustom::testObjectCustom() : m_Var(0) {
 
- }
 
- void testObjectCustom::updateObject() {
 
-     m_Var++;
 
- }
 
- void testObjectCustom::setObjectValue(int v) {
 
-     m_Var = v;
 
- }
 
- int testObjectCustom::returnObjectValue() {
 
-     int value = 5;
 
-     return value;
 
- }
 
- void testObjectCustom::registerCustomCallback() {
 
-     ctkRegisterLocalCallback("ctk/local/custom/topic", this, "updateObject()");
 
- }
 
- //------------------------------------------------------------------------------------------
 
- /**
 
-  Class name: testNetworkConnectorForEventBus
 
-  This class implements the network connector to be tested.
 
-  */
 
- class  testNetworkConnectorForEventBus : public  ctkNetworkConnector {
 
-     Q_OBJECT
 
- public:
 
-     /// Object constructor.
 
-     testNetworkConnectorForEventBus();
 
-     /// Create and initialize client
 
-     /*virtual*/ void createClient(QString hostName, unsigned int port);
 
-     /// Return the string variable initializated and updated from the data pipe.
 
-     /*virtual*/ void createServer(unsigned int port);
 
-     /// Allow to send a network request.
 
-     /*virtual*/ void send(const QString event_id, ctkEventArgumentsList *params);
 
-     /// Start the server.
 
-     /*virtual*/ void startListen();
 
-     /// Return connector status.
 
-     QString connectorStatus();
 
-     /// retrieve instance of object
 
-     /*virtual*/ ctkNetworkConnector *clone();
 
-     /// register all the signals and slots
 
-     /*virtual*/ void initializeForEventBus();
 
- private:
 
-     QString m_ConnectorStatus; ///< Test Var.
 
- };
 
- ctkNetworkConnector *testNetworkConnectorForEventBus::clone() {
 
-     return new testNetworkConnectorForEventBus();
 
- }
 
- void testNetworkConnectorForEventBus::initializeForEventBus() {
 
- }
 
- testNetworkConnectorForEventBus::testNetworkConnectorForEventBus() : ctkNetworkConnector(), m_ConnectorStatus("") {
 
-      m_Protocol = "FakeProtocol";
 
- }
 
- void testNetworkConnectorForEventBus::createServer(unsigned int port) {
 
-     m_ConnectorStatus = "Server Created - Port: ";
 
-     m_ConnectorStatus.append(QString::number(port));
 
- }
 
- void testNetworkConnectorForEventBus::startListen() {
 
-     m_ConnectorStatus = "Server Listening";
 
- }
 
- void testNetworkConnectorForEventBus::createClient(QString hostName, unsigned int port) {
 
-     m_ConnectorStatus = "Client Created - Host: ";
 
-     m_ConnectorStatus.append(hostName);
 
-     m_ConnectorStatus.append(" Port: ");
 
-     m_ConnectorStatus.append(QString::number(port));
 
- }
 
- void testNetworkConnectorForEventBus::send(const QString event_id, ctkEventArgumentsList *params) {
 
-     Q_UNUSED(params);
 
-     m_ConnectorStatus = "Event sent with ID: ";
 
-     m_ConnectorStatus.append(event_id);
 
- }
 
- QString testNetworkConnectorForEventBus::connectorStatus() {
 
-     return m_ConnectorStatus;
 
- }
 
- //-------------------------------------------------------------------------
 
- /**
 
-  Class name: ctkEventBusManagerTest
 
-  This class implements the test suite for ctkEventBusManager.
 
-  */
 
- //! <title>
 
- //ctkEventBusManager
 
- //! </title>
 
- //! <description>
 
- //ctkEventBusManager provides the access point of the Communication Bus for ctk framework and
 
- //allows dispatching events coming from local application to attached observers.
 
- //It provides APIs to add a new event property (observer or event) to the event bus hash or
 
- //to remove the event property from the event bus hash.
 
- //It also provides APIs to add or remove observer to the events and to register custom signals
 
- //use by objects to raise them events.
 
- //
 
- //Sender has to:
 
- //- Register a signal (with argument if necessary)
 
- //
 
- //Observer has to:
 
- //- Register the callback that will be called when event will be notified (with argument if necessary)
 
- // with the same Event ID used by the sender
 
- //
 
- //The method "notifyEventLocal(QString topic, ctkEventArgumentsList *argList)" accept a string and a list
 
- //of QGenericArgument: to set QGenericArgument use the ctkEventArgument() macros.
 
- //ctkEventArgument() takes a type name and a const reference of that type.
 
- //! </description>
 
- class ctkEventBusManagerTest : public QObject {
 
-     Q_OBJECT
 
- private Q_SLOTS:
 
-     /// Initialize test variables
 
-     void initTestCase() {
 
-         m_EventBus = ctkEventBusManager::instance();
 
-         m_ObjTestObserver = new testObjectCustom();
 
-         m_ObjTestObserver2 = new testObjectCustom();
 
-     }
 
-     /// Cleanup tes variables memory allocation.
 
-     void cleanupTestCase() {
 
-         delete m_ObjTestObserver;
 
-         delete m_ObjTestObserver2;
 
-         m_EventBus->shutdown();
 
-     }
 
-     /// Check the existence of the ctkEventBusManager singletone creation.
 
-     void ctkEventBusManagerConstructorTest();
 
-     /// Check the event observing registration and notification.
 
-     void eventBusRegistrationNotificationTest();
 
-     /// Check the event observing registration and notification passing one argument.
 
-     void eventBusWithArgumentTest();
 
-     /// Check the event observing registration and notification returning one argument.
 
-     void eventBusWithReturnArgumentTest();
 
-     /// Event notification benchmarks.
 
-     void eventNotificationBenchmarkTest();
 
-     /// Test eventbus with remote connection (xmlrpc test)
 
-     void remoteConnectionTest();
 
-     /// test plugNetworkConnector
 
-     void plugNetworkConnectorTest();
 
-     /// test method for check if the signal is present.
 
-     void isLocalSignalPresentTest();
 
-     /// test registration reversing the order of signal and callback
 
-     void reverseOrderRegistrationTest();
 
- private:
 
-     testObjectCustom *m_ObjTestObserver; ///< Test variable.
 
-     testObjectCustom *m_ObjTestObserver2; ///< Test variable.
 
-     ctkEventBusManager *m_EventBus; ///< EventBus test variable instance.
 
- };
 
- void ctkEventBusManagerTest::ctkEventBusManagerConstructorTest() {
 
-     QVERIFY(m_EventBus != NULL);
 
- }
 
- void ctkEventBusManagerTest::eventBusRegistrationNotificationTest() {
 
-     int status = m_ObjTestObserver->var();
 
-     QVERIFY(status == 0);
 
-     // Create new Event ID used for callback and event notification.
 
-     QString updateID = "ctk/local/eventBus/globalUpdate";
 
-     ctkRegisterLocalCallback(updateID, m_ObjTestObserver, "updateObject()");
 
-     // Register also the second test observer to the global update event
 
-     ctkRegisterLocalCallback(updateID, m_ObjTestObserver2, "updateObject()");
 
-     // Notify the update event... (event logging is disabled)
 
-     m_EventBus->notifyEvent("ctk/local/eventBus/globalUpdate");
 
-     status = m_ObjTestObserver->var();
 
-     QVERIFY(status == 1);
 
-     // Notify again but with event logging enabled...
 
-     m_EventBus->enableEventLogging();
 
-     m_EventBus->notifyEvent(updateID);
 
-     // ... and now filter events only with ID == "CUSTOM_SIGNAL"
 
-     //ctkId customID = idProvider->createNewId("CUSTOM_SIGNAL");
 
-     QString customID = "CUSTOM_SIGNAL";
 
-     // ...and enable event logging for that id.
 
-     m_EventBus->logEventTopic(customID);
 
-     // Previous ID notification should be skipped by logger (so only one log in the console)
 
-     m_EventBus->notifyEvent(updateID);
 
- }
 
-  void ctkEventBusManagerTest::eventBusWithArgumentTest() {
 
-     testObjectCustom *ObjTestSender = new testObjectCustom();
 
-     ObjTestSender->setObjectValue(52);
 
-     // Create new Event ID used for callback and event notification.
 
-     QString setValueID = "SETVALUE_SIGNAL";
 
-     ctkRegisterLocalSignal(setValueID, ObjTestSender, "valueModified(int)");
 
-     // Register the callback to update the object custom:
 
-     ctkRegisterLocalCallback(setValueID, m_ObjTestObserver, "setObjectValue(int)");
 
-     // Register also the second observer...
 
-     ctkRegisterLocalCallback(setValueID, m_ObjTestObserver2, "setObjectValue(int)");
 
-     //! <snippet>
 
-     ctkEventArgumentsList list;
 
-     list.append(ctkEventArgument(int, ObjTestSender->var()));
 
-     m_EventBus->notifyEvent(setValueID, ctkEventTypeLocal, &list);
 
-     //! </snippet>
 
-     int status = m_ObjTestObserver->var();
 
-     QVERIFY(status == ObjTestSender->var());
 
-     delete ObjTestSender;
 
-     ctkEventBusManager::instance()->removeSignal(ObjTestSender, setValueID);
 
- }
 
- void ctkEventBusManagerTest::eventBusWithReturnArgumentTest() {
 
-     testObjectCustom *ObjTestSender = new testObjectCustom();
 
-     ObjTestSender->setObjectValue(52);
 
-     // Create new Event ID used for callback and event notification.
 
-     QString returnValueID = "RETURNVALUE_SIGNAL";
 
-     ctkRegisterLocalSignal(returnValueID, ObjTestSender, "returnObjectValueSignal()");
 
-     ctkRegisterLocalCallback(returnValueID, ObjTestSender, "returnObjectValue()");
 
-     //Notify event with return argument
 
-     int returnValue = 0;
 
-     ctkGenericReturnArgument ret_val = ctkEventReturnArgument(int,returnValue);
 
-     m_EventBus->notifyEvent(returnValueID, ctkEventTypeLocal, NULL, &ret_val);
 
-     QVERIFY(returnValue == 5);
 
-     delete ObjTestSender;
 
- }
 
- void ctkEventBusManagerTest::eventNotificationBenchmarkTest() {
 
-     QString updateID = "ctk/local/eventBus/globalUpdate";
 
-     m_EventBus->logAllEvents();
 
-     QBENCHMARK {
 
-         m_EventBus->notifyEvent(updateID);
 
-     }
 
- }
 
- void ctkEventBusManagerTest::remoteConnectionTest() {
 
-     m_EventBus->createServer("XMLRPC", 8000);
 
-     m_EventBus->startListen();
 
-     m_EventBus->createClient("XMLRPC", "localhost", 8000);
 
-     //create list to send from the client
 
-     //first parameter is a list which contains event properties
 
-     QVariantList eventParameters;
 
-     eventParameters.append("ctk/local/eventBus/globalUpdate");
 
-     eventParameters.append(ctkEventTypeLocal);
 
-     eventParameters.append(ctkSignatureTypeCallback);
 
-     eventParameters.append("updateObject()");
 
-     QVariantList dataParameters;
 
-     ctkEventArgumentsList listToSend;
 
-     listToSend.append(ctkEventArgument(QVariantList, eventParameters));
 
-     listToSend.append(ctkEventArgument(QVariantList, dataParameters));
 
-     //with eventbus
 
-     QString topic = "ctk/remote/eventBus/comunication/send/xmlrpc";
 
-     m_EventBus->notifyEvent(topic, ctkEventTypeRemote , &listToSend);
 
-     QTime dieTime = QTime::currentTime().addSecs(3);
 
-     while(QTime::currentTime() < dieTime) {
 
-        QCoreApplication::processEvents(QEventLoop::AllEvents, 3);
 
-     }
 
- }
 
- void ctkEventBusManagerTest::plugNetworkConnectorTest() {
 
-     m_EventBus->plugNetworkConnector("CUSTOM_CONNECTOR", NULL);
 
- }
 
- void ctkEventBusManagerTest::isLocalSignalPresentTest() {
 
-     QVERIFY(m_EventBus->isLocalSignalPresent("ctk/invalid/signal") == false);
 
- }
 
- void ctkEventBusManagerTest::reverseOrderRegistrationTest() {
 
-     testObjectCustom *ObjTestSender = new testObjectCustom();
 
-     int startValue = 42;
 
-     m_ObjTestObserver->setObjectValue(startValue);
 
-     //register a custom callback
 
-     m_ObjTestObserver->registerCustomCallback();
 
-     //register custom signal
 
-     ctkRegisterLocalSignal("ctk/local/custom/topic", ObjTestSender, "objectModified()");
 
-     //notify event
 
-     m_EventBus->notifyEvent("ctk/local/custom/topic");
 
-     startValue++; //notify will update the value adding 1
 
-     int check = m_ObjTestObserver->var();
 
-     QVERIFY(startValue == check);
 
-     delete ObjTestSender;
 
- }
 
- CTK_REGISTER_TEST(ctkEventBusManagerTest);
 
- #include "ctkEventBusManagerTest.moc"
 
 
  |