broker tests: Add system test for publish authorisation

pull/69/head
Stuart Longland 2021-06-07 08:22:05 +10:00 zatwierdzone przez Florian Ludwig
rodzic 653b6cd89c
commit db5e886c7e
1 zmienionych plików z 98 dodań i 0 usunięć

Wyświetl plik

@ -269,6 +269,104 @@ async def test_client_publish(broker, mock_plugin_manager):
)
@pytest.mark.asyncio
async def test_client_publish_acl_permitted(acl_broker):
sub_client = MQTTClient()
ret = await sub_client.connect("mqtt://user2:test@127.0.0.1:1884/")
assert ret == 0
ret = await sub_client.subscribe(
[("public/subtopic/test", QOS_0)]
)
assert ret == [QOS_0]
pub_client = MQTTClient()
ret = await pub_client.connect("mqtt://user1:test@127.0.0.1:1884/")
assert ret == 0
ret_message = await pub_client.publish("public/subtopic/test", b"data", QOS_0)
message = await sub_client.deliver_message(timeout=1)
await pub_client.disconnect()
await sub_client.disconnect()
assert message is not None
assert message.topic == "public/subtopic/test"
assert message.data == b"data"
assert message.qos == QOS_0
@pytest.mark.asyncio
async def test_client_publish_acl_forbidden(acl_broker):
sub_client = MQTTClient()
ret = await sub_client.connect("mqtt://user2:test@127.0.0.1:1884/")
assert ret == 0
ret = await sub_client.subscribe(
[("public/forbidden/test", QOS_0)]
)
assert ret == [QOS_0]
pub_client = MQTTClient()
ret = await pub_client.connect("mqtt://user1:test@127.0.0.1:1884/")
assert ret == 0
ret_message = await pub_client.publish("public/forbidden/test", b"data", QOS_0)
try:
await sub_client.deliver_message(timeout=1)
assert False, 'Should not have worked'
except asyncio.exceptions.TimeoutError:
pass
await pub_client.disconnect()
await sub_client.disconnect()
@pytest.mark.asyncio
async def test_client_publish_acl_permitted_sub_forbidden(acl_broker):
sub_client1 = MQTTClient()
ret = await sub_client1.connect("mqtt://user2:test@127.0.0.1:1884/")
assert ret == 0
sub_client2 = MQTTClient()
ret = await sub_client2.connect("mqtt://user3:test@127.0.0.1:1884/")
assert ret == 0
ret = await sub_client1.subscribe(
[("public/subtopic/test", QOS_0)]
)
assert ret == [QOS_0]
ret = await sub_client2.subscribe(
[("public/subtopic/test", QOS_0)]
)
assert ret == [0x80]
pub_client = MQTTClient()
ret = await pub_client.connect("mqtt://user1:test@127.0.0.1:1884/")
assert ret == 0
ret_message = await pub_client.publish("public/subtopic/test", b"data", QOS_0)
message = await sub_client1.deliver_message(timeout=1)
try:
await sub_client2.deliver_message(timeout=1)
assert False, 'Should not have worked'
except asyncio.exceptions.TimeoutError:
pass
await pub_client.disconnect()
await sub_client1.disconnect()
await sub_client2.disconnect()
assert message is not None
assert message.topic == "public/subtopic/test"
assert message.data == b"data"
assert message.qos == QOS_0
@pytest.mark.asyncio
async def test_client_publish_dup(broker, event_loop):
conn_reader, conn_writer = await asyncio.open_connection(