1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
8 from telemetry.core import browser_finder
9 from telemetry.core import util
10 from telemetry.unittest import options_for_unittests
13 class TemporaryHTTPServerTest(unittest.TestCase):
16 self.test_file = 'bear.webm'
17 test_file_path = os.path.join(util.GetUnittestDataDir(), self.test_file)
18 self.test_file_size = os.stat(test_file_path).st_size
20 def testBasicHostingAndRangeRequests(self):
21 options = options_for_unittests.GetCopy()
22 browser_to_create = browser_finder.FindBrowser(options)
23 with browser_to_create.Create() as b:
25 b.SetHTTPServerDirectories(util.GetUnittestDataDir())
27 t.Navigate(b.http_server.UrlOf('/blank.html'))
28 t.WaitForDocumentReadyStateToBeComplete()
29 x = t.EvaluateJavaScript('document.body.innerHTML')
32 # Test basic html hosting.
33 self.assertEquals(x, 'Hello world')
35 file_size = self.test_file_size
36 last_byte = file_size - 1
37 # Test byte range request: no end byte.
38 self.CheckContentHeaders(b, t, '0-', '0-%d' % last_byte, file_size)
40 # Test byte range request: greater than zero start byte.
41 self.CheckContentHeaders(b, t, '100-', '100-%d' % last_byte,
44 # Test byte range request: explicit byte range.
45 self.CheckContentHeaders(b, t, '2-500', '2-500', '499')
47 # Test byte range request: no start byte.
48 self.CheckContentHeaders(b, t, '-228',
49 '%d-%d' % (file_size - 228, last_byte),
52 # Test byte range request: end byte less than start byte.
53 self.CheckContentHeaders(b, t, '100-5', '100-%d' % last_byte,
56 def CheckContentHeaders(self, browser, tab, content_range_request,
57 content_range_response, content_lenght_response):
58 tab.ExecuteJavaScript("""
60 var xmlhttp = new XMLHttpRequest();
61 xmlhttp.onload = function(e) {
64 // Avoid cached content by appending unique URL param.
65 xmlhttp.open('GET', "%s?t=" + Date.now(), true);
66 xmlhttp.setRequestHeader('Range', 'bytes=%s');
68 """ % (browser.http_server.UrlOf('/%s' % self.test_file),
69 content_range_request))
70 tab.WaitForJavaScriptExpression('loaded', 5)
71 content_range = tab.EvaluateJavaScript(
72 'xmlhttp.getResponseHeader("Content-Range");')
73 content_range_response = 'bytes %s/%d' % (
74 content_range_response, self.test_file_size)
75 self.assertEquals(content_range, content_range_response)
76 content_length = tab.EvaluateJavaScript(
77 'xmlhttp.getResponseHeader("Content-Length");')
78 self.assertEquals(content_length, str(content_lenght_response))