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'
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'
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'
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')
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')
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()
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
def test_readinfo(self): name, rand = readinfo(b'\x07hpfeeds\x01 a\xff') assert name == 'hpfeeds' assert rand == b'\x01 a\xff'