You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.2 KiB

  1. import asyncio
  2. import socket
  3. import unittest
  4. from aiodnsresolver import (
  5. TYPES,
  6. Resolver,
  7. IPv4AddressExpiresAt,
  8. )
  9. from dnsrewriteproxy import (
  10. DnsProxy,
  11. )
  12. def async_test(func):
  13. def wrapper(*args, **kwargs):
  14. future = func(*args, **kwargs)
  15. loop = asyncio.get_event_loop()
  16. loop.run_until_complete(future)
  17. return wrapper
  18. class TestProxy(unittest.TestCase):
  19. def add_async_cleanup(self, coroutine):
  20. self.addCleanup(asyncio.get_running_loop().run_until_complete, coroutine())
  21. @async_test
  22. async def test_e2e(self):
  23. def get_socket():
  24. sock = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
  25. sock.setblocking(False)
  26. sock.bind(('', 3535))
  27. return sock
  28. async def get_nameservers(_, __):
  29. for _ in range(0, 5):
  30. yield (0.5, ('127.0.0.1', 3535))
  31. resolve, clear_cache = Resolver(get_nameservers=get_nameservers)
  32. self.add_async_cleanup(clear_cache)
  33. start = DnsProxy(get_socket=get_socket)
  34. stop = await start()
  35. self.add_async_cleanup(stop)
  36. response = await resolve('www.google.com', TYPES.A)
  37. self.assertTrue(isinstance(response[0], IPv4AddressExpiresAt))