testdynupdateauthentication.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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.POWERDNS_API + '/zones')
  28. httpretty.register_uri(httpretty.PATCH, settings.POWERDNS_API + '/zones/' + self.domain + '.')
  29. def testSuccessfulAuthentication(self):
  30. response = self.client.get(self.url)
  31. self.assertEqual(response.status_code, status.HTTP_200_OK)
  32. self.assertEqual(response.data, 'good')
  33. def testWrongUsername(self):
  34. self.setCredentials('wrong', self.password)
  35. response = self.client.get(self.url)
  36. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  37. def testWrongPassword(self):
  38. self.setCredentials(self.username, 'wrong')
  39. response = self.client.get(self.url)
  40. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  41. def testDoubleColonInAuthentication(self):
  42. self.client.credentials(
  43. HTTP_AUTHORIZATION='Basic ' + base64.b64encode((self.username + ':' + self.password + ':bullshit').encode()).decode())
  44. response = self.client.get(self.url)
  45. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  46. def testlNoColonInAuthentication(self):
  47. self.client.credentials(
  48. HTTP_AUTHORIZATION='Basic ' + base64.b64encode((self.username + '' + self.password).encode()).decode())
  49. response = self.client.get(self.url)
  50. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  51. def testNoValidEncoding(self):
  52. self.client.credentials(HTTP_AUTHORIZATION='Basic bull[%]shit')
  53. response = self.client.get(self.url)
  54. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)