Skip to content

Commit 9ddf49d

Browse files
tim-schillingmatthiask
authored andcommitted
Reformat Server-Timing headers to updated W3C spec. (#1211)
Fixed basic integration tests. When there was no </body> tag the toolbar's middleware exited earlier and was never inserted.
1 parent fd50ce3 commit 9ddf49d

File tree

3 files changed

+22
-6
lines changed

3 files changed

+22
-6
lines changed

debug_toolbar/middleware.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,9 @@ def generate_server_timing_header(response, panels):
112112
continue
113113

114114
for key, record in stats.items():
115-
# example: `SQLPanel_sql_time=0; "SQL 0 queries"`
115+
# example: `SQLPanel_sql_time;dur=0;desc="SQL 0 queries"`
116116
data.append(
117-
'{}_{}={}; "{}"'.format(
117+
'{}_{};dur={};desc="{}"'.format(
118118
panel.panel_id, key, record.get("value"), record.get("title")
119119
)
120120
)

tests/test_integration.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
import re
23
import unittest
34

45
import html5lib
@@ -92,6 +93,7 @@ class DebugToolbarIntegrationTestCase(TestCase):
9293
def test_middleware(self):
9394
response = self.client.get("/execute_sql/")
9495
self.assertEqual(response.status_code, 200)
96+
self.assertContains(response, "djDebug")
9597

9698
@override_settings(DEFAULT_CHARSET="iso-8859-1")
9799
def test_non_utf8_charset(self):
@@ -245,6 +247,20 @@ def test_incercept_redirects(self):
245247
# Link to LOCATION header.
246248
self.assertIn(b'href="/regular/redirect/"', response.content)
247249

250+
def test_server_timing_headers(self):
251+
response = self.client.get("/execute_sql/")
252+
server_timing = response["Server-Timing"]
253+
expected_partials = [
254+
r'TimerPanel_utime;dur=(\d)*(\.(\d)*)?;desc="User CPU time", ',
255+
r'TimerPanel_stime;dur=(\d)*(\.(\d)*)?;desc="System CPU time", ',
256+
r'TimerPanel_total;dur=(\d)*(\.(\d)*)?;desc="Total CPU time", ',
257+
r'TimerPanel_total_time;dur=(\d)*(\.(\d)*)?;desc="Elapsed time", ',
258+
r'SQLPanel_sql_time;dur=(\d)*(\.(\d)*)?;desc="SQL 1 queries", ',
259+
r'CachePanel_total_time;dur=0;desc="Cache 0 Calls"',
260+
]
261+
for expected in expected_partials:
262+
self.assertTrue(re.compile(expected).search(server_timing))
263+
248264

249265
@unittest.skipIf(webdriver is None, "selenium isn't installed")
250266
@unittest.skipUnless(

tests/views.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
from django.contrib.auth.models import User
2-
from django.http import HttpResponse, HttpResponseRedirect
2+
from django.http import HttpResponseRedirect
33
from django.shortcuts import render
44
from django.template.response import TemplateResponse
55
from django.views.decorators.cache import cache_page
66

77

88
def execute_sql(request):
99
list(User.objects.all())
10-
return HttpResponse()
10+
return render(request, "base.html")
1111

1212

1313
def regular_view(request, title):
@@ -25,12 +25,12 @@ def new_user(request, username="joe"):
2525

2626
def resolving_view(request, arg1, arg2):
2727
# see test_url_resolving in tests.py
28-
return HttpResponse()
28+
return render(request, "base.html")
2929

3030

3131
@cache_page(60)
3232
def cached_view(request):
33-
return HttpResponse()
33+
return render(request, "base.html")
3434

3535

3636
def regular_jinjia_view(request, title):

0 commit comments

Comments
 (0)