testdyndns12update.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. from django.core.urlresolvers import reverse
  2. from rest_framework import status
  3. from rest_framework.test import APITestCase
  4. from .utils import utils
  5. from django.db import transaction
  6. import base64
  7. import httpretty
  8. from django.conf import settings
  9. class DynDNS12UpdateTest(APITestCase):
  10. owner = None
  11. token = None
  12. username = None
  13. password = None
  14. def setUp(self):
  15. self.owner = utils.createUser()
  16. self.token = utils.createToken(user=self.owner)
  17. self.domain = utils.generateDynDomainname()
  18. self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token)
  19. url = reverse('domain-list')
  20. data = {'name': self.domain, 'dyn': True}
  21. response = self.client.post(url, data)
  22. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  23. self.assertEqual(response.data['dyn'], True)
  24. self.username = response.data['name']
  25. self.password = self.token
  26. self.client.credentials(HTTP_AUTHORIZATION='Basic ' + base64.b64encode((self.username + ':' + self.password).encode()).decode())
  27. httpretty.enable()
  28. httpretty.register_uri(httpretty.POST, settings.POWERDNS_API + '/zones')
  29. httpretty.register_uri(httpretty.PATCH, settings.POWERDNS_API + '/zones/' + self.domain)
  30. def assertIP(self, ipv4=None, ipv6=None):
  31. old_credentials = self.client._credentials['HTTP_AUTHORIZATION']
  32. self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.password)
  33. url = reverse('domain-detail/byName', args=(self.username,))
  34. response = self.client.get(url)
  35. self.assertEqual(response.status_code, status.HTTP_200_OK)
  36. if ipv4 is not None:
  37. self.assertEqual(response.data['arecord'], ipv4)
  38. if ipv6 is not None:
  39. self.assertEqual(response.data['aaaarecord'], ipv6)
  40. self.client.credentials(HTTP_AUTHORIZATION=old_credentials)
  41. def testDynDNS1UpdateDDClientSuccess(self):
  42. # /nic/dyndns?action=edit&started=1&hostname=YES&host_id=foobar.dedyn.io&myip=10.1.2.3
  43. url = reverse('dyndns12update')
  44. response = self.client.get(url,
  45. {
  46. 'action': 'edit',
  47. 'started': 1,
  48. 'hostname': 'YES',
  49. 'host_id': self.username,
  50. 'myip': '10.1.2.3'
  51. })
  52. self.assertEqual(response.status_code, status.HTTP_200_OK)
  53. self.assertEqual(response.data, 'good')
  54. self.assertIP(ipv4='10.1.2.3')
  55. def testDynDNS1UpdateDDClientIPv6Success(self):
  56. # /nic/dyndns?action=edit&started=1&hostname=YES&host_id=foobar.dedyn.io&myipv6=::1337
  57. url = reverse('dyndns12update')
  58. response = self.client.get(url,
  59. {
  60. 'action': 'edit',
  61. 'started': 1,
  62. 'hostname': 'YES',
  63. 'host_id': self.username,
  64. 'myipv6': '::1337'
  65. })
  66. self.assertEqual(response.status_code, status.HTTP_200_OK)
  67. self.assertEqual(response.data, 'good')
  68. self.assertIP(ipv6='::1337')
  69. def testDynDNS2UpdateDDClientIPv4Success(self):
  70. #/nic/update?system=dyndns&hostname=foobar.dedyn.io&myip=10.2.3.4
  71. url = reverse('dyndns12update')
  72. response = self.client.get(url,
  73. {
  74. 'system': 'dyndns',
  75. 'hostname': self.username,
  76. 'myip': '10.2.3.4'
  77. })
  78. self.assertEqual(response.status_code, status.HTTP_200_OK)
  79. self.assertEqual(response.data, 'good')
  80. self.assertIP(ipv4='10.2.3.4')
  81. def testDynDNS2UpdateDDClientIPv6Success(self):
  82. #/nic/update?system=dyndns&hostname=foobar.dedyn.io&myipv6=::1338
  83. url = reverse('dyndns12update')
  84. response = self.client.get(url,
  85. {
  86. 'system': 'dyndns',
  87. 'hostname': self.username,
  88. 'myipv6': '::1338'
  89. })
  90. self.assertEqual(response.status_code, status.HTTP_200_OK)
  91. self.assertEqual(response.data, 'good')
  92. self.assertIP(ipv6='::1338')
  93. def testFritzBoxIPv6(self):
  94. #/
  95. url = reverse('dyndns12update')
  96. response = self.client.get(url)
  97. self.assertEqual(response.status_code, status.HTTP_200_OK)
  98. self.assertEqual(response.data, 'good')
  99. self.assertIP(ipv4='127.0.0.1')
  100. def testManualIPv6(self):
  101. #/update?username=foobar.dedyn.io&password=secret
  102. self.client.credentials(HTTP_AUTHORIZATION='')
  103. url = reverse('dyndns12update')
  104. response = self.client.get(url,
  105. {
  106. 'username': self.username,
  107. 'password': self.token,
  108. })
  109. self.assertEqual(response.status_code, status.HTTP_200_OK)
  110. self.assertEqual(response.data, 'good')
  111. self.assertIP(ipv4='127.0.0.1')