Repository URL to install this package:
|
Version:
0.32.0 ▾
|
# Copyright 2015 Docker, Inc. All rights reserved.
import mock
import time
from django.contrib.auth.models import AnonymousUser
from django.http import HttpResponse, Http404
from django.test import TestCase, RequestFactory
from dockerhub.telemetry.middleware import TimingRequestMiddleware
def dummy_func():
return
class TimingRequestMiddlewareTestCase(TestCase):
"""Tests for the ``TimingRequestMiddleware`` middleware."""
def test_view_processing(self):
req = RequestFactory().get('/')
req.user = AnonymousUser()
mware = TimingRequestMiddleware()
mware.process_view(req, dummy_func, 'view_args', 'view_kwargs')
# we expect that '.' in module.view will be replaced with '-'
self.assertIn('tests-telemetry-test_middleware-dummy_func', req._view_name)
self.assertIsNotNone(req._start_time)
def test_get(self):
req = RequestFactory().get('/')
req.user = AnonymousUser()
mware = TimingRequestMiddleware()
mware.process_view(req, dummy_func, 'view_args', 'view_kwargs')
tags, _ = mware.record_time(req)
self.assertIn('method:GET', tags)
self.assertIn('view:tests-telemetry-test_middleware-dummy_func', tags)
def test_post(self):
req = RequestFactory().post('/')
req.user = AnonymousUser()
mware = TimingRequestMiddleware()
mware.process_view(req, dummy_func, 'view_args', 'view_kwargs')
tags, _ = mware.record_time(req)
self.assertIn('method:POST', tags)
self.assertIn('view:tests-telemetry-test_middleware-dummy_func', tags)
def test_timing(self):
req = RequestFactory().post('/')
req.user = AnonymousUser()
mware = TimingRequestMiddleware()
mware.process_view(req, dummy_func, 'view_args', 'view_kwargs')
time.sleep(.5)
_, timing = mware.record_time(req)
self.assertGreater(timing, 500.00)
def test_without_start(self):
req = RequestFactory().post('/')
req.user = AnonymousUser()
mware = TimingRequestMiddleware()
resp = mware.record_time(req)
self.assertIsNone(resp)
@mock.patch('dockerhub.telemetry.middleware.statsd', autospec=True)
def test_status_incr(self, statsd):
req = RequestFactory().get('/')
req.user = AnonymousUser()
mware = TimingRequestMiddleware()
mware.process_view(req, dummy_func, 'view_args', 'view_kwargs')
resp = HttpResponse()
mware.process_response(req, resp)
expected_metric = 'request_status_code'
expected_tags = ['view:tests-telemetry-test_middleware-dummy_func', 'method:GET',
'status_code:200']
statsd.increment.assert_called_once_with(expected_metric, tags=expected_tags)
@mock.patch('dockerhub.telemetry.middleware.statsd', autospec=True)
def test_status_exception(self, statsd):
req = RequestFactory().get('/')
req.user = AnonymousUser()
mware = TimingRequestMiddleware()
mware.process_view(req, dummy_func, 'view_args', 'view_kwargs')
mware.process_exception(req, RuntimeError())
expected_metric = 'request_status_code'
expected_tags = ['view:tests-telemetry-test_middleware-dummy_func', 'method:GET',
'status_code:500']
statsd.increment.assert_called_once_with(expected_metric, tags=expected_tags)
@mock.patch('dockerhub.telemetry.middleware.statsd', autospec=True)
def test_status_404_exception(self, statsd):
req = RequestFactory().get('/')
req.user = AnonymousUser()
mware = TimingRequestMiddleware()
mware.process_view(req, dummy_func, 'view_args', 'view_kwargs')
mware.process_exception(req, Http404())
# increment should not be called for a 404
self.assertFalse(statsd.increment.called)