OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import base64 | 5 import base64 |
6 import unittest | 6 import unittest |
7 | 7 |
| 8 from integration_tests import network_metrics |
8 from metrics import test_page_measurement_results | 9 from metrics import test_page_measurement_results |
9 from metrics import network | |
10 from telemetry.timeline import event | 10 from telemetry.timeline import event |
11 | 11 |
12 | 12 |
13 HTML_BODY = """<!DOCTYPE HTML> | 13 HTML_BODY = """<!DOCTYPE HTML> |
14 <html> | 14 <html> |
15 <head> </head> | 15 <head> </head> |
16 <body> | 16 <body> |
17 <div id="test"> TEST HTML</div> | 17 <div id="test"> TEST HTML</div> |
18 </body> | 18 </body> |
19 </html>""" | 19 </html>""" |
20 IMAGE_BODY = """fake image data""" | 20 IMAGE_BODY = """fake image data""" |
21 GZIPPED_HTML_LEN = network.HTTPResponse.GetGizppedBodyLength(HTML_BODY) | 21 GZIPPED_HTML_LEN = network_metrics.HTTPResponse.GetGizppedBodyLength(HTML_BODY) |
22 # Make up original content length for the image. | 22 # Make up original content length for the image. |
23 IMAGE_OCL = 3 * len(IMAGE_BODY) | 23 IMAGE_OCL = 3 * len(IMAGE_BODY) |
24 | 24 |
25 | 25 |
26 class NetworkMetricTest(unittest.TestCase): | 26 class NetworkMetricTest(unittest.TestCase): |
27 @staticmethod | 27 @staticmethod |
28 def MakeNetworkTimelineEvent( | 28 def MakeNetworkTimelineEvent( |
29 url, response_headers, body=None, base64_encoded_body=False, | 29 url, response_headers, body=None, base64_encoded_body=False, |
30 served_from_cache=False, request_headers=None, status=200): | 30 served_from_cache=False, request_headers=None, status=200): |
31 if not request_headers: | 31 if not request_headers: |
(...skipping 10 matching lines...) Expand all Loading... |
42 e.args['body'] = body | 42 e.args['body'] = body |
43 e.args['base64_encoded_body'] = base64_encoded_body | 43 e.args['base64_encoded_body'] = base64_encoded_body |
44 e.args['served_from_cache'] = served_from_cache | 44 e.args['served_from_cache'] = served_from_cache |
45 return e | 45 return e |
46 | 46 |
47 def testHTTPResponse(self): | 47 def testHTTPResponse(self): |
48 url = 'http://test.url' | 48 url = 'http://test.url' |
49 self.assertLess(GZIPPED_HTML_LEN, len(HTML_BODY)) | 49 self.assertLess(GZIPPED_HTML_LEN, len(HTML_BODY)) |
50 | 50 |
51 # A plain text HTML response | 51 # A plain text HTML response |
52 resp = network.HTTPResponse(self.MakeNetworkTimelineEvent( | 52 resp = network_metrics.HTTPResponse(self.MakeNetworkTimelineEvent( |
53 url=url, | 53 url=url, |
54 response_headers={ | 54 response_headers={ |
55 'Content-Type': 'text/html', | 55 'Content-Type': 'text/html', |
56 'Content-Length': str(len(HTML_BODY)), | 56 'Content-Length': str(len(HTML_BODY)), |
57 }, | 57 }, |
58 body=HTML_BODY)) | 58 body=HTML_BODY)) |
59 self.assertEqual(url, resp.response.url) | 59 self.assertEqual(url, resp.response.url) |
60 body, base64_encoded = resp.response.GetBody() | 60 body, base64_encoded = resp.response.GetBody() |
61 self.assertEqual(HTML_BODY, body) | 61 self.assertEqual(HTML_BODY, body) |
62 self.assertFalse(base64_encoded) | 62 self.assertFalse(base64_encoded) |
63 self.assertEqual('text/html', resp.response.GetHeader('Content-Type')) | 63 self.assertEqual('text/html', resp.response.GetHeader('Content-Type')) |
64 | 64 |
65 self.assertEqual(len(HTML_BODY), resp.content_length) | 65 self.assertEqual(len(HTML_BODY), resp.content_length) |
66 self.assertEqual(None, resp.response.GetHeader('Content-Encoding')) | 66 self.assertEqual(None, resp.response.GetHeader('Content-Encoding')) |
67 self.assertFalse(resp.has_original_content_length) | 67 self.assertFalse(resp.has_original_content_length) |
68 self.assertEqual(0.0, resp.data_saving_rate) | 68 self.assertEqual(0.0, resp.data_saving_rate) |
69 | 69 |
70 # A gzipped HTML response | 70 # A gzipped HTML response |
71 resp = network.HTTPResponse(self.MakeNetworkTimelineEvent( | 71 resp = network_metrics.HTTPResponse(self.MakeNetworkTimelineEvent( |
72 url=url, | 72 url=url, |
73 response_headers={ | 73 response_headers={ |
74 'Content-Type': 'text/html', | 74 'Content-Type': 'text/html', |
75 'Content-Encoding': 'gzip', | 75 'Content-Encoding': 'gzip', |
76 'X-Original-Content-Length': str(len(HTML_BODY)), | 76 'X-Original-Content-Length': str(len(HTML_BODY)), |
77 }, | 77 }, |
78 body=HTML_BODY)) | 78 body=HTML_BODY)) |
79 body, base64_encoded = resp.response.GetBody() | 79 body, base64_encoded = resp.response.GetBody() |
80 self.assertFalse(base64_encoded) | 80 self.assertFalse(base64_encoded) |
81 self.assertEqual(GZIPPED_HTML_LEN, resp.content_length) | 81 self.assertEqual(GZIPPED_HTML_LEN, resp.content_length) |
82 self.assertEqual('gzip', resp.response.GetHeader('Content-Encoding')) | 82 self.assertEqual('gzip', resp.response.GetHeader('Content-Encoding')) |
83 self.assertTrue(resp.has_original_content_length) | 83 self.assertTrue(resp.has_original_content_length) |
84 self.assertEqual(len(HTML_BODY), resp.original_content_length) | 84 self.assertEqual(len(HTML_BODY), resp.original_content_length) |
85 self.assertEqual( | 85 self.assertEqual( |
86 float(len(HTML_BODY) - GZIPPED_HTML_LEN) / len(HTML_BODY), | 86 float(len(HTML_BODY) - GZIPPED_HTML_LEN) / len(HTML_BODY), |
87 resp.data_saving_rate) | 87 resp.data_saving_rate) |
88 | 88 |
89 # A JPEG image response. | 89 # A JPEG image response. |
90 resp = network.HTTPResponse(self.MakeNetworkTimelineEvent( | 90 resp = network_metrics.HTTPResponse(self.MakeNetworkTimelineEvent( |
91 url='http://test.image', | 91 url='http://test.image', |
92 response_headers={ | 92 response_headers={ |
93 'Content-Type': 'image/jpeg', | 93 'Content-Type': 'image/jpeg', |
94 'Content-Encoding': 'gzip', | 94 'Content-Encoding': 'gzip', |
95 'X-Original-Content-Length': str(IMAGE_OCL), | 95 'X-Original-Content-Length': str(IMAGE_OCL), |
96 }, | 96 }, |
97 body=base64.b64encode(IMAGE_BODY), | 97 body=base64.b64encode(IMAGE_BODY), |
98 base64_encoded_body=True)) | 98 base64_encoded_body=True)) |
99 body, base64_encoded = resp.response.GetBody() | 99 body, base64_encoded = resp.response.GetBody() |
100 self.assertTrue(base64_encoded) | 100 self.assertTrue(base64_encoded) |
101 self.assertEqual(IMAGE_BODY, base64.b64decode(body)) | 101 self.assertEqual(IMAGE_BODY, base64.b64decode(body)) |
102 self.assertEqual(len(IMAGE_BODY), resp.content_length) | 102 self.assertEqual(len(IMAGE_BODY), resp.content_length) |
103 self.assertTrue(resp.has_original_content_length) | 103 self.assertTrue(resp.has_original_content_length) |
104 self.assertEqual(IMAGE_OCL, resp.original_content_length) | 104 self.assertEqual(IMAGE_OCL, resp.original_content_length) |
105 self.assertFalse(resp.response.served_from_cache) | 105 self.assertFalse(resp.response.served_from_cache) |
106 self.assertEqual(float(IMAGE_OCL - len(IMAGE_BODY)) / IMAGE_OCL, | 106 self.assertEqual(float(IMAGE_OCL - len(IMAGE_BODY)) / IMAGE_OCL, |
107 resp.data_saving_rate) | 107 resp.data_saving_rate) |
108 | 108 |
109 # A JPEG image response from cache. | 109 # A JPEG image response from cache. |
110 resp = network.HTTPResponse(self.MakeNetworkTimelineEvent( | 110 resp = network_metrics.HTTPResponse(self.MakeNetworkTimelineEvent( |
111 url='http://test.image', | 111 url='http://test.image', |
112 response_headers={ | 112 response_headers={ |
113 'Content-Type': 'image/jpeg', | 113 'Content-Type': 'image/jpeg', |
114 'Content-Encoding': 'gzip', | 114 'Content-Encoding': 'gzip', |
115 'X-Original-Content-Length': str(IMAGE_OCL), | 115 'X-Original-Content-Length': str(IMAGE_OCL), |
116 }, | 116 }, |
117 body=base64.b64encode(IMAGE_BODY), | 117 body=base64.b64encode(IMAGE_BODY), |
118 base64_encoded_body=True, | 118 base64_encoded_body=True, |
119 served_from_cache=True)) | 119 served_from_cache=True)) |
120 self.assertEqual(len(IMAGE_BODY), resp.content_length) | 120 self.assertEqual(len(IMAGE_BODY), resp.content_length) |
(...skipping 26 matching lines...) Expand all Loading... |
147 self.MakeNetworkTimelineEvent( | 147 self.MakeNetworkTimelineEvent( |
148 url='http://test.image', | 148 url='http://test.image', |
149 response_headers={ | 149 response_headers={ |
150 'Content-Type': 'image/jpeg', | 150 'Content-Type': 'image/jpeg', |
151 'Content-Encoding': 'gzip', | 151 'Content-Encoding': 'gzip', |
152 'X-Original-Content-Length': str(IMAGE_OCL), | 152 'X-Original-Content-Length': str(IMAGE_OCL), |
153 }, | 153 }, |
154 body=base64.b64encode(IMAGE_BODY), | 154 body=base64.b64encode(IMAGE_BODY), |
155 base64_encoded_body=True), | 155 base64_encoded_body=True), |
156 ] | 156 ] |
157 metric = network.NetworkMetric() | 157 metric = network_metrics.NetworkMetric() |
158 metric._events = events | 158 metric._events = events |
159 metric.compute_data_saving = True | 159 metric.compute_data_saving = True |
160 | 160 |
161 self.assertTrue(len(events), len(list(metric.IterResponses(None)))) | 161 self.assertTrue(len(events), len(list(metric.IterResponses(None)))) |
162 results = test_page_measurement_results.TestPageMeasurementResults(self) | 162 results = test_page_measurement_results.TestPageMeasurementResults(self) |
163 metric.AddResults(None, results) | 163 metric.AddResults(None, results) |
164 | 164 |
165 cl = len(HTML_BODY) + GZIPPED_HTML_LEN + len(IMAGE_BODY) | 165 cl = len(HTML_BODY) + GZIPPED_HTML_LEN + len(IMAGE_BODY) |
166 results.AssertHasPageSpecificScalarValue('content_length', 'bytes', cl) | 166 results.AssertHasPageSpecificScalarValue('content_length', 'bytes', cl) |
167 | 167 |
168 ocl = len(HTML_BODY) + len(HTML_BODY) + IMAGE_OCL | 168 ocl = len(HTML_BODY) + len(HTML_BODY) + IMAGE_OCL |
169 results.AssertHasPageSpecificScalarValue( | 169 results.AssertHasPageSpecificScalarValue( |
170 'original_content_length', 'bytes', ocl) | 170 'original_content_length', 'bytes', ocl) |
171 | 171 |
172 saving_percent = float(ocl - cl) * 100/ ocl | 172 saving_percent = float(ocl - cl) * 100/ ocl |
173 results.AssertHasPageSpecificScalarValue( | 173 results.AssertHasPageSpecificScalarValue( |
174 'data_saving', 'percent', saving_percent) | 174 'data_saving', 'percent', saving_percent) |
OLD | NEW |