testdynupdateauthentication.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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, 'dyn': True}
  24. response = self.client.post(url, data)
  25. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  26. self.assertEqual(response.data['dyn'], True)
  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 testSuccessfulAuthentication(self):
  31. response = self.client.get(self.url)
  32. self.assertEqual(response.status_code, status.HTTP_200_OK)
  33. self.assertEqual(response.data, 'good')
  34. def testWrongUsername(self):
  35. self.setCredentials('wrong', self.password)
  36. response = self.client.get(self.url)
  37. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  38. def testWrongPassword(self):
  39. self.setCredentials(self.username, 'wrong')
  40. response = self.client.get(self.url)
  41. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  42. def testDoubleColonInAuthentication(self):
  43. self.client.credentials(
  44. HTTP_AUTHORIZATION='Basic ' + base64.b64encode((self.username + ':' + self.password + ':bullshit').encode()).decode())
  45. response = self.client.get(self.url)
  46. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  47. def testlNoColonInAuthentication(self):
  48. self.client.credentials(
  49. HTTP_AUTHORIZATION='Basic ' + base64.b64encode((self.username + '' + self.password).encode()).decode())
  50. response = self.client.get(self.url)
  51. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
  52. def testNoValidEncoding(self):
  53. self.client.credentials(HTTP_AUTHORIZATION='Basic bull[%]shit')
  54. response = self.client.get(self.url)
  55. self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)