Beispiel #1
0
 def _node_disambiguation_precreated(self, ambiguous_send):
     agent = BrokerAgent(self.conn)
     agent.addExchange("fanout", "ambiguous")
     agent.addQueue("ambiguous")
     try:
         r1 = self.ssn.receiver("ambiguous; {node:{type:topic}}")
         r2 = self.ssn.receiver("ambiguous; {node:{type:queue}}")
         self._node_disambiguation_test(r1, r2, ambiguous_send=ambiguous_send)
     finally:
         agent.delExchange("ambiguous")
         agent.delQueue("ambiguous", False, False)
Beispiel #2
0
 def test_ambiguous_delete_2(self):
     agent = BrokerAgent(self.conn)
     agent.addExchange("fanout", "ambiguous")
     agent.addQueue("ambiguous")
     self.ssn.receiver("ambiguous; {delete:receiver, node:{type:queue}}").close()
     exchange = agent.getExchange("ambiguous")
     queue = agent.getQueue("ambiguous")
     try:
         assert(exchange)
         assert(not queue)
     finally:
         if exchange: agent.delExchange("ambiguous")
         if queue: agent.delQueue("ambiguous", False, False)
Beispiel #3
0
 def _node_disambiguation_precreated(self, ambiguous_send):
     agent = BrokerAgent(self.conn)
     agent.addExchange("fanout", "ambiguous")
     agent.addQueue("ambiguous")
     try:
         r1 = self.ssn.receiver("ambiguous; {node:{type:topic}}")
         r2 = self.ssn.receiver("ambiguous; {node:{type:queue}}")
         self._node_disambiguation_test(r1,
                                        r2,
                                        ambiguous_send=ambiguous_send)
     finally:
         agent.delExchange("ambiguous")
         agent.delQueue("ambiguous", False, False)
Beispiel #4
0
 def test_ambiguous_create_2(self):
     #create exchange first, then queue
     r1 = self.ssn.receiver("ambiguous; {create:receiver, node:{type:topic}}")
     r2 = self.ssn.receiver("ambiguous; {create:receiver, node:{type:queue}}")
     agent = BrokerAgent(self.conn)
     exchange = agent.getExchange("ambiguous")
     queue = agent.getQueue("ambiguous")
     try:
         assert(exchange)
         assert(queue)
         self._node_disambiguation_test(r1, r2)
     finally:
         if exchange: agent.delExchange("ambiguous")
         if queue: agent.delQueue("ambiguous", False, False)
Beispiel #5
0
 def test_ambiguous_delete_2(self):
     agent = BrokerAgent(self.conn)
     agent.addExchange("fanout", "ambiguous")
     agent.addQueue("ambiguous")
     self.ssn.receiver(
         "ambiguous; {delete:receiver, node:{type:queue}}").close()
     exchange = agent.getExchange("ambiguous")
     queue = agent.getQueue("ambiguous")
     try:
         assert (exchange)
         assert (not queue)
     finally:
         if exchange: agent.delExchange("ambiguous")
         if queue: agent.delQueue("ambiguous", False, False)
Beispiel #6
0
 def test_ambiguous_create_2(self):
     #create exchange first, then queue
     r1 = self.ssn.receiver(
         "ambiguous; {create:receiver, node:{type:topic}}")
     r2 = self.ssn.receiver(
         "ambiguous; {create:receiver, node:{type:queue}}")
     agent = BrokerAgent(self.conn)
     exchange = agent.getExchange("ambiguous")
     queue = agent.getQueue("ambiguous")
     try:
         assert (exchange)
         assert (queue)
         self._node_disambiguation_test(r1, r2)
     finally:
         if exchange: agent.delExchange("ambiguous")
         if queue: agent.delQueue("ambiguous", False, False)
Beispiel #7
0
                #self.assertEqual(mock.getTask.return_value, rpc.getTask(5))

                # test non existing service method, should timeout
                with self.assertRaises(ValueError) as cm:
                    rpc.rpc('foo', timeout=1)
                    self.assertEqual(
                        cm.exception.message,
                        "{'backtrace': '', 'state': 'TIMEOUT', 'errmsg': 'RPC Timed out'}"
                    )

                ## test method with wrong args
                #with self.assertRaises(TypeError) as cm:
                #rpc.rpc('GetTasks', timeout=1, fooarg='bar')
                #self.assertTrue('got an unexpected keyword argument \'fooarg\'' in cm.exception.message)

        # create and run the service
        with createService(busname=busname):

            # and run all tests
            unittest.main(verbosity=2)

except ConnectError as ce:
    logger.error(ce)
    exit(3)
finally:
    # cleanup test bus and exit
    if broker:
        broker.delExchange(busname)
    if connection:
        connection.close()
Beispiel #8
0
    def test_08_integration_test_with_messagebus(self):
        """ Full blown integration test listening for notifications on the bus,
        and checking which dir is up for a visit next.
        Needs a working local qpid broker. Test is skipped if qpid not available.
        """
        try:
            broker = None
            connection = None

            import uuid
            from threading import Event
            from qpid.messaging import Connection, ConnectError
            from qpidtoollibs import BrokerAgent
            from lofar.messaging.messagebus import ToBus
            from lofar.messaging.messages import EventMessage
            from lofar.lta.ingest.common.config import DEFAULT_INGEST_NOTIFICATION_PREFIX

            # setup broker connection
            connection = Connection.establish('127.0.0.1')
            broker = BrokerAgent(connection)

            # add test service bus
            busname = 'test-LTASOIngestEventHandler-%s' % (uuid.uuid1())
            broker.addExchange('topic', busname)

            sync_event = Event()

            class SyncedLTASOIngestEventHandler(LTASOIngestEventHandler):
                """This derived LTASOIngestEventHandler behaves exactly like the normal
                object under test LTASOIngestEventHandler, but it also sets a sync_event
                to sync between the listener thread and this main test thread"""
                def _handleMessage(self, msg):
                    super(SyncedLTASOIngestEventHandler,
                          self)._handleMessage(msg)
                    sync_event.set()

            with SyncedLTASOIngestEventHandler(self.dbcreds, busname=busname):
                for site in self.db.sites():
                    for root_dir in self.db.rootDirectoriesForSite(site['id']):
                        self._markAllDirectoriesRecentlyVisited()

                        # create the subdir surl
                        sub_dir_name = '/foo'
                        sub_dir_path = root_dir['dir_name'] + sub_dir_name
                        surl = site['url'] + sub_dir_path

                        with ToBus(busname) as sender:
                            msg = EventMessage(
                                subject=DEFAULT_INGEST_NOTIFICATION_PREFIX +
                                "TaskFinished",
                                content={'srm_url': surl})
                            sender.send(msg)

                        # wait for the handler to have processed the message
                        self.assertTrue(sync_event.wait(2))
                        sync_event.clear()

                        # surl should have been scheduled for a visit, all other dir's were marked as visited already...
                        # so there should be a new dir for this surl, and it should be the least_recent_visited_dir
                        site_visit_stats = self.db.visitStats(
                            datetime.utcnow())[site['name']]

                        least_recent_visited_dir_id = site_visit_stats.get(
                            'least_recent_visited_dir_id')
                        self.assertIsNotNone(least_recent_visited_dir_id)

                        least_recent_visited_dir = self.db.directory(
                            least_recent_visited_dir_id)
                        self.assertEqual(sub_dir_path,
                                         least_recent_visited_dir['dir_name'])

        except ImportError as e:
            logger.warning("skipping test due to: %s", e)
        except ConnectError as e:
            logger.warning("skipping test due to: %s", e)
        finally:
            # cleanup test bus and exit
            if broker:
                broker.delExchange(busname)
            if connection:
                connection.close()
                #TODO: fix this test
                #self.assertEqual(None, rpc.getTask(1))
                #self.assertEqual(mock.getTask.return_value, rpc.getTask(5))

                # test non existing service method, should timeout
                with self.assertRaises(ValueError) as cm:
                    rpc.rpc('foo', timeout=1)
                    self.assertEqual(cm.exception.message, "{'backtrace': '', 'state': 'TIMEOUT', 'errmsg': 'RPC Timed out'}")

                ## test method with wrong args
                #with self.assertRaises(TypeError) as cm:
                    #rpc.rpc('GetTasks', timeout=1, fooarg='bar')
                    #self.assertTrue('got an unexpected keyword argument \'fooarg\'' in cm.exception.message)

        # create and run the service
        with createService(busname=busname):

            # and run all tests
            unittest.main(verbosity=2)

except ConnectError as ce:
    logger.error(ce)
    exit(3)
finally:
    # cleanup test bus and exit
    if broker:
        broker.delExchange(busname)
    if connection:
        connection.close()