testdynupdateauthentication.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from rest_framework.status import HTTP_200_OK, HTTP_401_UNAUTHORIZED, HTTP_404_NOT_FOUND
  2. from desecapi.tests.base import DynDomainOwnerTestCase
  3. class DynUpdateAuthenticationTestCase(DynDomainOwnerTestCase):
  4. NUM_OWNED_DOMAINS = 1
  5. def _get_dyndns12(self):
  6. with self.assertPdnsNoRequestsBut(self.requests_desec_rr_sets_update()):
  7. return self.client.get(self.reverse('v1:dyndns12update'))
  8. def assertDynDNS12Status(self, status=HTTP_200_OK, authorization=None):
  9. if authorization:
  10. self._set_credentials(self.client, 'Basic ' + self._http_header_base64_conversion(authorization))
  11. request = self._get_dyndns12()
  12. self.assertEqual(request.status_code, status, request)
  13. def assertDynDNS12AuthenticationStatus(self, username, token, status):
  14. # Note that this overwrites self.client's credentials, which may be unexpected
  15. self._set_credentials_basic_auth(self.client, username, token)
  16. self.assertDynDNS12Status(status)
  17. def test_username_password(self):
  18. # FIXME the following test fails
  19. # self.assertDyndns12AuthenticationStatus(self.user.get_username(), self.token.key, HTTP_200_OK)
  20. self.assertDynDNS12AuthenticationStatus('', self.token.key, HTTP_200_OK)
  21. self.assertDynDNS12AuthenticationStatus('wrong', self.token.key, HTTP_404_NOT_FOUND)
  22. self.assertDynDNS12AuthenticationStatus('', 'wrong', HTTP_401_UNAUTHORIZED)
  23. self.assertDynDNS12AuthenticationStatus(self.user.get_username(), 'wrong', HTTP_401_UNAUTHORIZED)
  24. def test_malformed_basic_auth(self):
  25. for authorization in [
  26. 'asdf:asdf:sadf',
  27. 'asdf',
  28. 'bull[%]shit',
  29. '你好',
  30. '💩💩💩💩',
  31. '💩💩:💩💩',
  32. ]:
  33. self.assertDynDNS12Status(authorization=authorization, status=HTTP_401_UNAUTHORIZED)