2019-04-10 19:35:16 +00:00
|
|
|
from django.test import TestCase, Client
|
2019-04-18 18:32:55 +00:00
|
|
|
from django_kepi.validation import CachedRemoteUser, IncomingMessage
|
2019-04-14 19:52:47 +00:00
|
|
|
from django_kepi.tasks import fetch
|
2019-04-10 19:35:16 +00:00
|
|
|
from things_for_testing import KepiTestCase
|
|
|
|
import logging
|
|
|
|
import httpretty
|
|
|
|
import json
|
|
|
|
|
2019-04-14 18:27:59 +00:00
|
|
|
logger = logging.getLogger(name='django_kepi')
|
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
POLLY_URL = 'https://remote.example.net/users/polly'
|
|
|
|
SUKI_URL = 'https://remote.example.net/services/suki/kettle'
|
|
|
|
PUT_THE_KETTLE_ON = "Let's put the kettle on"
|
|
|
|
SUKI_TAKE_IT_OFF = "Suki, take it off again"
|
|
|
|
RESULT_URL = 'https://localhost/async_result'
|
2019-04-10 19:35:16 +00:00
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
class TestTasks(TestCase):
|
2019-04-10 19:35:16 +00:00
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
def _mock_remote_object(self,
|
|
|
|
url,
|
|
|
|
ftype = 'Object',
|
|
|
|
content = '',
|
|
|
|
status = 200):
|
2019-04-10 19:35:16 +00:00
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
headers = {
|
|
|
|
'Content-Type': 'application/activity+json',
|
|
|
|
}
|
2019-04-10 19:35:16 +00:00
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
httpretty.register_uri(
|
|
|
|
httpretty.GET,
|
|
|
|
url,
|
|
|
|
status=status,
|
|
|
|
headers=headers,
|
|
|
|
body=bytes(content, encoding='UTF-8'))
|
2019-04-10 19:35:16 +00:00
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
logger.debug('Mocking %s as %d: %s',
|
|
|
|
url,
|
|
|
|
status,
|
|
|
|
content)
|
2019-04-10 19:35:16 +00:00
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
def _mock_remote_service(self,
|
|
|
|
url,
|
|
|
|
):
|
2019-04-10 19:35:16 +00:00
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
def remote_service(request, uri, response_headers):
|
2019-04-10 19:35:16 +00:00
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
self._sent_body = request.body.decode(encoding='ASCII')
|
2019-04-10 19:35:16 +00:00
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
return [200, response_headers, 'Thank you.']
|
2019-04-10 19:35:16 +00:00
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
self._sent_body = None
|
|
|
|
|
|
|
|
httpretty.register_uri(
|
|
|
|
httpretty.POST,
|
|
|
|
url,
|
|
|
|
body=remote_service)
|
|
|
|
|
|
|
|
def _mock_local_endpoint(self):
|
|
|
|
|
|
|
|
def local_endpoint(request, uri, response_headers):
|
|
|
|
|
|
|
|
self._received_code = int(request.querystring['code'][0])
|
|
|
|
self._received_url = request.querystring['url'][0]
|
|
|
|
self._received_body = request.body.decode(encoding='ASCII')
|
|
|
|
|
|
|
|
return [200, response_headers, '']
|
|
|
|
|
|
|
|
self._received_code = None
|
|
|
|
self._received_url = None
|
|
|
|
self._received_body = None
|
|
|
|
|
|
|
|
httpretty.register_uri(
|
|
|
|
httpretty.POST,
|
|
|
|
RESULT_URL,
|
|
|
|
body=local_endpoint)
|
2019-04-10 19:35:16 +00:00
|
|
|
|
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
@httpretty.activate
|
|
|
|
def test_request_success(self):
|
|
|
|
|
|
|
|
self._mock_remote_object(
|
|
|
|
url = POLLY_URL,
|
|
|
|
content = PUT_THE_KETTLE_ON,
|
|
|
|
)
|
|
|
|
self._mock_local_endpoint()
|
|
|
|
|
|
|
|
fetch(
|
|
|
|
fetch_url = POLLY_URL,
|
|
|
|
post_data = None,
|
|
|
|
result_url = RESULT_URL,
|
|
|
|
)
|
|
|
|
|
|
|
|
self.assertEqual(self._received_code, 200)
|
|
|
|
self.assertEqual(self._received_url, POLLY_URL)
|
|
|
|
self.assertEqual(self._received_body, PUT_THE_KETTLE_ON)
|
2019-04-10 19:35:16 +00:00
|
|
|
|
|
|
|
@httpretty.activate
|
2019-04-14 19:52:47 +00:00
|
|
|
def test_request_failure(self):
|
|
|
|
|
|
|
|
self._mock_remote_object(
|
|
|
|
url = POLLY_URL,
|
|
|
|
content = 'no idea, mate',
|
|
|
|
status = 404,
|
2019-04-10 19:35:16 +00:00
|
|
|
)
|
2019-04-14 19:52:47 +00:00
|
|
|
self._mock_local_endpoint()
|
2019-04-10 19:35:16 +00:00
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
fetch(
|
|
|
|
fetch_url = POLLY_URL,
|
|
|
|
post_data = None,
|
|
|
|
result_url = RESULT_URL,
|
|
|
|
)
|
2019-04-10 19:35:16 +00:00
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
self.assertEqual(self._received_code, 404)
|
|
|
|
self.assertEqual(self._received_url, POLLY_URL)
|
2019-04-10 19:35:16 +00:00
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
@httpretty.activate
|
|
|
|
def test_request_gone(self):
|
|
|
|
|
|
|
|
self._mock_remote_object(
|
|
|
|
url = POLLY_URL,
|
|
|
|
content = "they've all gone away",
|
|
|
|
status = 410,
|
|
|
|
)
|
|
|
|
self._mock_local_endpoint()
|
|
|
|
|
|
|
|
fetch(
|
|
|
|
fetch_url = POLLY_URL,
|
|
|
|
post_data = None,
|
|
|
|
result_url = RESULT_URL,
|
2019-04-10 19:35:16 +00:00
|
|
|
)
|
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
self.assertEqual(self._received_code, 410)
|
|
|
|
self.assertEqual(self._received_url, POLLY_URL)
|
2019-04-10 19:35:16 +00:00
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
@httpretty.activate
|
|
|
|
def test_submit_success(self):
|
|
|
|
|
|
|
|
self._mock_remote_service(
|
|
|
|
url = SUKI_URL,
|
|
|
|
)
|
|
|
|
self._mock_local_endpoint()
|
2019-04-10 19:35:16 +00:00
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
fetch(
|
|
|
|
fetch_url = SUKI_URL,
|
|
|
|
post_data = SUKI_TAKE_IT_OFF,
|
|
|
|
result_url = None,
|
2019-04-10 19:35:16 +00:00
|
|
|
)
|
|
|
|
|
2019-04-14 19:52:47 +00:00
|
|
|
self.assertEqual(self._sent_body, SUKI_TAKE_IT_OFF)
|
2019-04-10 19:35:16 +00:00
|
|
|
|
|
|
|
|