| import asyncio |
| import contextlib |
| import unittest |
|
|
| from aioice import mdns |
|
|
| from .utils import asynctest |
|
|
|
|
| @contextlib.asynccontextmanager |
| async def querier_and_responder(): |
| querier = await mdns.create_mdns_protocol() |
| responder = await mdns.create_mdns_protocol() |
|
|
| try: |
| yield querier, responder |
| finally: |
| await querier.close() |
| await responder.close() |
|
|
|
|
| class MdnsTest(unittest.TestCase): |
| @asynctest |
| async def test_receive_junk(self): |
| async with querier_and_responder() as (querier, _): |
| querier.datagram_received(b"junk", None) |
|
|
| @asynctest |
| async def test_resolve_bad(self): |
| hostname = mdns.create_mdns_hostname() |
|
|
| async with querier_and_responder() as (querier, _): |
| result = await querier.resolve(hostname) |
| self.assertEqual(result, None) |
|
|
| @asynctest |
| async def test_resolve_close(self): |
| hostname = mdns.create_mdns_hostname() |
|
|
| |
| async with querier_and_responder() as (querier, _): |
| result = await asyncio.gather( |
| querier.resolve(hostname, timeout=None), querier.close() |
| ) |
| self.assertEqual(result, [None, None]) |
|
|
| @asynctest |
| async def test_resolve_good_ipv4(self): |
| hostaddr = "1.2.3.4" |
| hostname = mdns.create_mdns_hostname() |
|
|
| async with querier_and_responder() as (querier, responder): |
| await responder.publish(hostname, hostaddr) |
|
|
| result = await querier.resolve(hostname) |
| self.assertEqual(result, hostaddr) |
|
|
| @asynctest |
| async def test_resolve_good_ipv6(self): |
| hostaddr = "::ffff:1.2.3.4" |
| hostname = mdns.create_mdns_hostname() |
|
|
| async with querier_and_responder() as (querier, responder): |
| await responder.publish(hostname, hostaddr) |
|
|
| result = await querier.resolve(hostname) |
| self.assertEqual(result, hostaddr) |
|
|
| @asynctest |
| async def test_resolve_simultaneous_bad(self): |
| hostname = mdns.create_mdns_hostname() |
|
|
| async with querier_and_responder() as (querier, _): |
| results = await asyncio.gather( |
| querier.resolve(hostname), querier.resolve(hostname) |
| ) |
| self.assertEqual(results, [None, None]) |
|
|
| @asynctest |
| async def test_resolve_simultaneous_good(self): |
| hostaddr = "1.2.3.4" |
| hostname = mdns.create_mdns_hostname() |
|
|
| async with querier_and_responder() as (querier, responder): |
| await responder.publish(hostname, hostaddr) |
|
|
| results = await asyncio.gather( |
| querier.resolve(hostname), querier.resolve(hostname) |
| ) |
| self.assertEqual(results, [hostaddr, hostaddr]) |
|
|