예제 #1
0
    def test_permission_to_pub(self):
        c = self.make_connection()
        name, rand = readinfo(parse(c.transport.write)[0][1])
        c.data_received(msgauth(rand, 'test', 'secret'))
        c.data_received(msgpublish('test', 'test-chan2', b'c'))

        assert parse(c.transport.write)[1][1] == b'Authkey not allowed to pub here. ident=test, chan=test-chan2'
예제 #2
0
    def test_pub_ident_checked(self):
        c = self.make_connection()
        name, rand = readinfo(parse(c.transport.write)[0][1])
        c.data_received(msgauth(rand, 'test', 'secret'))
        c.data_received(msgpublish('wrong-ident', 'test-chan2', b'c'))

        assert parse(c.transport.write)[1][1] == b'Invalid authkey in message, ident=wrong-ident'
예제 #3
0
    def test_auth_failure_no_such_ident(self):
        c = self.make_connection()
        name, rand = readinfo(parse(c.transport.write)[0][1])
        c.data_received(msgauth(rand, 'test2', 'secret'))

        assert parse(
            c.transport.write)[1][1] == b'Authentication failed for test2'
예제 #4
0
    def test_multiple_subscribers(self):
        subscribers = []
        for i in range(5):
            c = self.make_connection()
            name, rand = readinfo(parse(c.transport.write)[0][1])
            c.data_received(msgauth(rand, 'test', 'secret'))
            c.data_received(msgsubscribe('test', 'test-chan'))
            subscribers.append(c)

        c = self.make_connection()
        name, rand = readinfo(parse(c.transport.write)[0][1])
        c.data_received(msgauth(rand, 'test', 'secret'))
        c.data_received(msgpublish('test', 'test-chan', b'c'))

        for c in subscribers:
            msgs = parse(c.transport.write)
            assert readpublish(msgs[1][1]) == ('test', 'test-chan', b'c')
예제 #5
0
    def test_auth_success(self):
        c = self.make_connection()
        name, rand = readinfo(parse(c.transport.write)[0][1])
        c.data_received(msgauth(rand, 'test', 'secret'))
        c.data_received(msgsubscribe('test', 'test-chan'))
        c.data_received(msgpublish('test', 'test-chan', b'c'))

        assert readpublish(parse(c.transport.write)[1][1]) == ('test',
                                                               'test-chan',
                                                               b'c')
예제 #6
0
    def messageReceived(self, opcode, data):
        if opcode == OP_ERROR:
            return self.onError(readerror(data))
        elif opcode == OP_INFO:
            return self.onInfo(*readinfo(data))
        elif opcode == OP_AUTH:
            return self.onAuth(*readauth(data))
        elif opcode == OP_PUBLISH:
            return self.onPublish(*readpublish(data))
        elif opcode == OP_SUBSCRIBE:
            return self.onSubscribe(*readsubscribe(data))
        elif opcode == OP_UNSUBSCRIBE:
            return self.onUnsubscribe(*readunsubscribe(data))

        # Can't recover from an unknown opcode, so drop connection
        self.protocolError('Unknown message opcode: {!r}'.format(opcode))
        self.transport.loseConnection()
예제 #7
0
    def test_auth_unsubscribe(self):
        c = self.make_connection()
        name, rand = readinfo(parse(c.transport.write)[0][1])
        c.data_received(msgauth(rand, 'test', 'secret'))

        c.data_received(msgsubscribe('test', 'test-chan'))
        c.data_received(msgpublish('test', 'test-chan', b'c'))
        c.data_received(msgunsubscribe('test', 'test-chan'))
        c.data_received(msgpublish('test', 'test-chan', b'c'))
        c.data_received(msgsubscribe('test', 'test-chan'))
        c.data_received(msgpublish('test', 'test-chan', b'c'))

        messages = parse(c.transport.write)
        for msg in messages[1:]:
            assert readpublish(msg[1]) == ('test', 'test-chan', b'c')

        # 1 auth and 2 publish
        assert len(messages) == 3
예제 #8
0
 def test_readinfo(self):
     name, rand = readinfo(b'\x07hpfeeds\x01 a\xff')
     assert name == 'hpfeeds'
     assert rand == b'\x01 a\xff'