コード例 #1
0
ファイル: test_queue.py プロジェクト: vallsv/coilmq
    def test_send_reliableFirst(self):
        """
        Test that messages are prioritized to reliable subscribers.

        This is actually a test of the underlying scheduler more than it is a test
        of the send message, per se.
        """

        dest = '/queue/dest'
        conn1 = MockConnection()
        conn1.reliable_subscriber = True

        self.qm.subscribe(conn1, dest)

        conn2 = MockConnection()
        conn2.reliable_subscriber = False
        self.qm.subscribe(conn2, dest)

        f = Frame(frames.MESSAGE,
                  headers={
                      'destination': dest,
                      'message-id': uuid.uuid4()
                  },
                  body='Empty')
        self.qm.send(f)

        self.assertEqual(len(conn1.frames), 1)
        self.assertEqual(len(conn2.frames), 0)
コード例 #2
0
ファイル: test_scheduler.py プロジェクト: usk-group/coilmq
    def test_favorReliable(self):
        """ Test the favor reliable delivery scheduler. """

        sched = FavorReliableSubscriberScheduler()

        conn1 = MockConnection()
        conn1.reliable_subscriber = True

        conn2 = MockConnection()
        conn2.reliable_subscriber = False

        choice = sched.choice((conn1, conn2), None)

        self.assertIs(
            choice, conn1, "Expected reliable connection to be selected.")
コード例 #3
0
    def test_favorReliable(self):
        """ Test the favor reliable delivery scheduler. """

        sched = FavorReliableSubscriberScheduler()

        conn1 = MockConnection()
        conn1.reliable_subscriber = True

        conn2 = MockConnection()
        conn2.reliable_subscriber = False

        choice = sched.choice((conn1, conn2), None)

        self.assertIs(choice, conn1,
                      "Expected reliable connection to be selected.")
コード例 #4
0
ファイル: test_queue.py プロジェクト: vallsv/coilmq
    def test_ack_basic(self):
        """ Test reliable client (ACK) behavior. """

        dest = '/queue/ack-basic'
        conn1 = MockConnection()
        conn1.reliable_subscriber = True

        self.qm.subscribe(conn1, dest)

        m1 = Frame(frames.MESSAGE,
                   headers={'destination': dest},
                   body='Message body (1)')
        self.qm.send(m1)

        self.assertEqual(conn1.frames[0], m1)

        m2 = Frame(frames.MESSAGE,
                   headers={'destination': dest},
                   body='Message body (2)')
        self.qm.send(m2)

        self.assertEqual(len(conn1.frames), 1)
        self.assertEqual(conn1.frames[0], m1)

        ack = Frame(frames.ACK,
                    headers={
                        'destination': dest,
                        'message-id': m1.headers['message-id']
                    })
        self.qm.ack(conn1, ack)

        self.assertEqual(len(conn1.frames), 2,
                         "Expected 2 frames now, after ACK.")
        self.assertEqual(conn1.frames[1], m2)
コード例 #5
0
ファイル: test_queue.py プロジェクト: usk-group/coilmq
    def test_ack_basic(self):
        """ Test reliable client (ACK) behavior. """

        dest = '/queue/ack-basic'
        conn1 = MockConnection()
        conn1.reliable_subscriber = True

        self.qm.subscribe(conn1, dest)

        m1 = Frame(frames.MESSAGE, headers={
                   'destination': dest}, body='Message body (1)')
        self.qm.send(m1)

        self.assertEqual(conn1.frames[0], m1)

        m2 = Frame(frames.MESSAGE, headers={
                   'destination': dest}, body='Message body (2)')
        self.qm.send(m2)

        self.assertEqual(len(conn1.frames), 1)
        self.assertEqual(conn1.frames[0], m1)

        ack = Frame(frames.ACK, headers={'destination': dest,
                                    'message-id': m1.headers['message-id']})
        self.qm.ack(conn1, ack)

        self.assertEqual(len(conn1.frames), 2, "Expected 2 frames now, after ACK.")
        self.assertEqual(conn1.frames[1], m2)
コード例 #6
0
ファイル: test_queue.py プロジェクト: vallsv/coilmq
    def test_ack_transaction(self):
        """ Test the reliable client (ACK) behavior with transactions. """

        dest = '/queue/ack-transaction'
        conn1 = MockConnection()
        conn1.reliable_subscriber = True

        self.qm.subscribe(conn1, dest)

        m1 = Frame(frames.MESSAGE,
                   headers={
                       'destination': dest,
                   },
                   body='Message body (1)')
        self.qm.send(m1)

        assert conn1.frames[0] == m1

        m2 = Frame(frames.MESSAGE,
                   headers={'destination': dest},
                   body='Message body (2)')
        self.qm.send(m2)

        assert len(conn1.frames
                   ) == 1, "Expected connection to still only have 1 frame."
        assert conn1.frames[0] == m1

        ack = Frame(frames.ACK,
                    headers={
                        'destination': dest,
                        'transaction': 'abc',
                        'message-id': m1.headers.get('message-id')
                    })
        self.qm.ack(conn1, ack, transaction='abc')

        ack = Frame(frames.ACK,
                    headers={
                        'destination': dest,
                        'transaction': 'abc',
                        'message-id': m2.headers.get('message-id')
                    })
        self.qm.ack(conn1, ack, transaction='abc')

        self.assertEqual(len(conn1.frames), 2,
                         "Expected 2 frames now, after ACK.")
        self.assertEqual(conn1.frames[1], m2)

        self.qm.resend_transaction_frames(conn1, transaction='abc')

        self.assertEqual(len(conn1.frames), 3,
                         "Expected 3 frames after re-transmit.")
        self.assertTrue(self.qm._pending[conn1],
                        "Expected 1 pending (waiting on ACK) frame."
                        "")
コード例 #7
0
ファイル: test_queue.py プロジェクト: usk-group/coilmq
    def test_send_reliableFirst(self):
        """
        Test that messages are prioritized to reliable subscribers.

        This is actually a test of the underlying scheduler more than it is a test
        of the send message, per se.
        """

        dest = '/queue/dest'
        conn1 = MockConnection()
        conn1.reliable_subscriber = True

        self.qm.subscribe(conn1, dest)

        conn2 = MockConnection()
        conn2.reliable_subscriber = False
        self.qm.subscribe(conn2, dest)

        f = Frame(frames.MESSAGE, headers={
                  'destination': dest, 'message-id': uuid.uuid4()}, body='Empty')
        self.qm.send(f)

        self.assertEqual(len(conn1.frames), 1)
        self.assertEqual(len(conn2.frames), 0)
コード例 #8
0
ファイル: test_queue.py プロジェクト: usk-group/coilmq
    def test_clear_transaction_frames(self):
        """ Test the clearing of transaction ACK frames. """
        dest = '/queue/tx'

        f = Frame(frames.SEND, headers={'destination': dest,
                                   'transaction': '1'}, body='Body-A')
        self.qm.send(f)

        self.assertIn(dest, self.store.destinations())

        conn1 = MockConnection()
        conn1.reliable_subscriber = True
        self.qm.subscribe(conn1, dest)

        self.assertEqual(len(conn1.frames), 1)

        self.qm.clear_transaction_frames(conn1, '1')
コード例 #9
0
ファイル: test_queue.py プロジェクト: usk-group/coilmq
    def test_disconnect_pending_frames(self):
        """ Test a queue disconnect when there are pending frames. """

        dest = '/queue/disconnect-pending-frames'
        conn1 = MockConnection()
        conn1.reliable_subscriber = True

        self.qm.subscribe(conn1, dest)

        m1 = Frame(frames.MESSAGE, headers={
                   'destination': dest}, body='Message body (1)')
        self.qm.send(m1)

        self.assertEqual(conn1.frames[0], m1)

        self.qm.disconnect(conn1)

        # Now we need to ensure that the frame we sent is re-queued.
        self.assertEqual(len(self.store.frames(dest)), 1)
コード例 #10
0
ファイル: test_queue.py プロジェクト: vallsv/coilmq
    def test_disconnect_pending_frames(self):
        """ Test a queue disconnect when there are pending frames. """

        dest = '/queue/disconnect-pending-frames'
        conn1 = MockConnection()
        conn1.reliable_subscriber = True

        self.qm.subscribe(conn1, dest)

        m1 = Frame(frames.MESSAGE,
                   headers={'destination': dest},
                   body='Message body (1)')
        self.qm.send(m1)

        self.assertEqual(conn1.frames[0], m1)

        self.qm.disconnect(conn1)

        # Now we need to ensure that the frame we sent is re-queued.
        self.assertEqual(len(self.store.frames(dest)), 1)
コード例 #11
0
ファイル: test_queue.py プロジェクト: vallsv/coilmq
    def test_clear_transaction_frames(self):
        """ Test the clearing of transaction ACK frames. """
        dest = '/queue/tx'

        f = Frame(frames.SEND,
                  headers={
                      'destination': dest,
                      'transaction': '1'
                  },
                  body='Body-A')
        self.qm.send(f)

        self.assertIn(dest, self.store.destinations())

        conn1 = MockConnection()
        conn1.reliable_subscriber = True
        self.qm.subscribe(conn1, dest)

        self.assertEqual(len(conn1.frames), 1)

        self.qm.clear_transaction_frames(conn1, '1')
コード例 #12
0
ファイル: test_queue.py プロジェクト: usk-group/coilmq
    def test_ack_transaction(self):
        """ Test the reliable client (ACK) behavior with transactions. """

        dest = '/queue/ack-transaction'
        conn1 = MockConnection()
        conn1.reliable_subscriber = True

        self.qm.subscribe(conn1, dest)

        m1 = Frame(frames.MESSAGE, headers={
                   'destination': dest, }, body='Message body (1)')
        self.qm.send(m1)

        assert conn1.frames[0] == m1

        m2 = Frame(frames.MESSAGE, headers={
                   'destination': dest}, body='Message body (2)')
        self.qm.send(m2)

        assert len(
            conn1.frames) == 1, "Expected connection to still only have 1 frame."
        assert conn1.frames[0] == m1

        ack = Frame(frames.ACK, headers={
                    'destination': dest, 'transaction': 'abc', 'message-id': m1.headers.get('message-id')})
        self.qm.ack(conn1, ack, transaction='abc')

        ack = Frame(frames.ACK, headers={
                    'destination': dest, 'transaction': 'abc', 'message-id': m2.headers.get('message-id')})
        self.qm.ack(conn1, ack, transaction='abc')

        self.assertEqual(len(conn1.frames), 2, "Expected 2 frames now, after ACK.")
        self.assertEqual(conn1.frames[1],  m2)

        self.qm.resend_transaction_frames(conn1, transaction='abc')

        self.assertEqual(len(conn1.frames), 3, "Expected 3 frames after re-transmit.")
        self.assertTrue(self.qm._pending[conn1], "Expected 1 pending (waiting on ACK) frame.""")