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_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_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 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 auth(self, rand, ident, secret): self.transport.write(msgauth(rand, ident, secret))
def on_info(self, name, rand): self.transport.write(msgauth(rand, self.ident, self.secret)) self.connection_ready()
def test_msgauth(self): msg = msgauth(b'rand', 'ident', 'secret') assert msg == ( b'\x00\x00\x00\x1f\x02\x05ident\xbf\xa9^\x11I\xcd\x9es' b'\x80\xfd\xfcaJW\tZ\xb7\x19\xc1\xb4' )