testdyndns12update.py 5.1 KB

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