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 os | 5 import os |
6 import unittest | |
7 | 6 |
8 from telemetry.core import browser_finder | |
9 from telemetry.core import util | 7 from telemetry.core import util |
10 from telemetry.unittest import options_for_unittests | 8 from telemetry.unittest import tab_test_case |
11 | 9 |
12 | 10 |
13 class MemoryCacheHTTPServerTest(unittest.TestCase): | 11 class MemoryCacheHTTPServerTest(tab_test_case.TabTestCase): |
14 | |
15 def setUp(self): | 12 def setUp(self): |
16 self.test_file = 'bear.webm' | 13 super(MemoryCacheHTTPServerTest, self).setUp() |
17 test_file_path = os.path.join(util.GetUnittestDataDir(), self.test_file) | 14 self.test_file = os.path.join(util.GetUnittestDataDir(), 'bear.webm') |
18 self.test_file_size = os.stat(test_file_path).st_size | 15 self.test_file_size = os.stat(self.test_file).st_size |
19 | 16 |
20 def testBasicHostingAndRangeRequests(self): | 17 def testBasicHostingAndRangeRequests(self): |
21 options = options_for_unittests.GetCopy() | 18 self.Navigate('blank.html') |
22 browser_to_create = browser_finder.FindBrowser(options) | 19 x = self._tab.EvaluateJavaScript('document.body.innerHTML') |
23 with browser_to_create.Create() as b: | 20 x = x.strip() |
24 b.SetHTTPServerDirectories(util.GetUnittestDataDir()) | |
25 t = b.tabs[0] | |
26 t.Navigate(b.http_server.UrlOf('/blank.html')) | |
27 t.WaitForDocumentReadyStateToBeComplete() | |
28 x = t.EvaluateJavaScript('document.body.innerHTML') | |
29 x = x.strip() | |
30 | 21 |
31 # Test basic html hosting. | 22 # Test basic html hosting. |
32 self.assertEquals(x, 'Hello world') | 23 self.assertEquals(x, 'Hello world') |
33 | 24 |
34 file_size = self.test_file_size | 25 file_size = self.test_file_size |
35 last_byte = file_size - 1 | 26 last_byte = file_size - 1 |
36 # Test byte range request: no end byte. | 27 # Test byte range request: no end byte. |
37 self.CheckContentHeaders(b, t, '0-', '0-%d' % last_byte, file_size) | 28 self.CheckContentHeaders('0-', '0-%d' % last_byte, file_size) |
38 | 29 |
39 # Test byte range request: greater than zero start byte. | 30 # Test byte range request: greater than zero start byte. |
40 self.CheckContentHeaders(b, t, '100-', '100-%d' % last_byte, | 31 self.CheckContentHeaders('100-', '100-%d' % last_byte, |
41 file_size - 100) | 32 file_size - 100) |
42 | 33 |
43 # Test byte range request: explicit byte range. | 34 # Test byte range request: explicit byte range. |
44 self.CheckContentHeaders(b, t, '2-500', '2-500', '499') | 35 self.CheckContentHeaders('2-500', '2-500', '499') |
45 | 36 |
46 # Test byte range request: no start byte. | 37 # Test byte range request: no start byte. |
47 self.CheckContentHeaders(b, t, '-228', | 38 self.CheckContentHeaders('-228', |
48 '%d-%d' % (file_size - 228, last_byte), | 39 '%d-%d' % (file_size - 228, last_byte), |
49 '228') | 40 '228') |
50 | 41 |
51 # Test byte range request: end byte less than start byte. | 42 # Test byte range request: end byte less than start byte. |
52 self.CheckContentHeaders(b, t, '100-5', '100-%d' % last_byte, | 43 self.CheckContentHeaders('100-5', '100-%d' % last_byte, |
53 file_size - 100) | 44 file_size - 100) |
54 | 45 |
55 def CheckContentHeaders(self, browser, tab, content_range_request, | 46 def CheckContentHeaders(self, content_range_request, content_range_response, |
56 content_range_response, content_lenght_response): | 47 content_length_response): |
57 tab.ExecuteJavaScript(""" | 48 self._tab.ExecuteJavaScript(""" |
58 var loaded = false; | 49 var loaded = false; |
59 var xmlhttp = new XMLHttpRequest(); | 50 var xmlhttp = new XMLHttpRequest(); |
60 xmlhttp.onload = function(e) { | 51 xmlhttp.onload = function(e) { |
61 loaded = true; | 52 loaded = true; |
62 }; | 53 }; |
63 // Avoid cached content by appending unique URL param. | 54 // Avoid cached content by appending unique URL param. |
64 xmlhttp.open('GET', "%s?t=" + Date.now(), true); | 55 xmlhttp.open('GET', "%s?t=" + Date.now(), true); |
65 xmlhttp.setRequestHeader('Range', 'bytes=%s'); | 56 xmlhttp.setRequestHeader('Range', 'bytes=%s'); |
66 xmlhttp.send(); | 57 xmlhttp.send(); |
67 """ % (browser.http_server.UrlOf('/%s' % self.test_file), | 58 """ % (self._browser.http_server.UrlOf(self.test_file), |
68 content_range_request)) | 59 content_range_request)) |
69 tab.WaitForJavaScriptExpression('loaded', 5) | 60 self._tab.WaitForJavaScriptExpression('loaded', 5) |
70 content_range = tab.EvaluateJavaScript( | 61 content_range = self._tab.EvaluateJavaScript( |
71 'xmlhttp.getResponseHeader("Content-Range");') | 62 'xmlhttp.getResponseHeader("Content-Range");') |
72 content_range_response = 'bytes %s/%d' % ( | 63 content_range_response = 'bytes %s/%d' % ( |
73 content_range_response, self.test_file_size) | 64 content_range_response, self.test_file_size) |
74 self.assertEquals(content_range, content_range_response) | 65 self.assertEquals(content_range, content_range_response) |
75 content_length = tab.EvaluateJavaScript( | 66 content_length = self._tab.EvaluateJavaScript( |
76 'xmlhttp.getResponseHeader("Content-Length");') | 67 'xmlhttp.getResponseHeader("Content-Length");') |
77 self.assertEquals(content_length, str(content_lenght_response)) | 68 self.assertEquals(content_length, str(content_length_response)) |
OLD | NEW |