testdynupdateauthentication.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. import httpretty
  6. import base64
  7. from django.conf import settings
  8. class DynUpdateAuthenticationTests(APITestCase):
  9. def setCredentials(self, username, password):
  10. self.client.credentials(
  11. HTTP_AUTHORIZATION='Basic ' + base64.b64encode((username + ':' + password).encode()).decode())
  12. def setUp(self):
  13. if not hasattr(self, 'owner'):
  14. self.username = utils.generateRandomString(12)
  15. self.password = utils.generateRandomString(12)
  16. self.user = utils.createUser(self.username, self.password)
  17. self.token = utils.createToken(user=self.user)
  18. self.setCredentials(self.username, self.password)
  19. self.url = reverse('dyndns12update')
  20. self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token)
  21. self.domain = utils.generateDynDomainname()
  22. url = reverse('domain-list')
  23. data = {'name': self.domain}
  24. response = self.client.post(url, data)
  25. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  26. httpretty.enable()
  27. httpretty.register_uri(httpretty.POST, settings.NSLORD_PDNS_API + '/zones')
  28. httpretty.register_uri(httpretty.PATCH, settings.NSLORD_PDNS_API + '/zones/' + self.domain + '.')
  29. httpretty.register_uri(httpretty.PUT, settings.NSLORD_PDNS_API + '/zones/' + self.domain + './notify')
  30. def tearDown(self):
  31. httpretty.reset()
  32. httpretty.disable()
  33. def testSuccessfulAuthentication(self):
  34. response = self.client.get(self.url)
  35. self.assertEqual(response.status_code, status.HTTP_200_OK)
  36. self.assertEqual(response.data, 'good')
  37. def testWrongUsername(self):
  38. self.setCredentials('wrong', self.password)
  39. response = self.client.get(self.url)
  40. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  41. def testWrongPassword(self):
  42. self.setCredentials(self.username, 'wrong')
  43. response = self.client.get(self.url)
  44. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  45. def testDoubleColonInAuthentication(self):
  46. self.client.credentials(
  47. HTTP_AUTHORIZATION='Basic ' + base64.b64encode((self.username + ':' + self.password + ':bullshit').encode()).decode())
  48. response = self.client.get(self.url)
  49. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  50. def testlNoColonInAuthentication(self):
  51. self.client.credentials(
  52. HTTP_AUTHORIZATION='Basic ' + base64.b64encode((self.username + '' + self.password).encode()).decode())
  53. response = self.client.get(self.url)
  54. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  55. def testNoValidEncoding(self):
  56. self.client.credentials(HTTP_AUTHORIZATION='Basic bull[%]shit')
  57. response = self.client.get(self.url)
  58. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)