- add sources.
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / temporary_http_server_unittest.py
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.
4
5 import os
6 import unittest
7
8 from telemetry.core import browser_finder
9 from telemetry.core import util
10 from telemetry.unittest import options_for_unittests
11
12
13 class TemporaryHTTPServerTest(unittest.TestCase):
14
15   def setUp(self):
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
19
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:
24       b.Start()
25       b.SetHTTPServerDirectories(util.GetUnittestDataDir())
26       t = b.tabs[0]
27       t.Navigate(b.http_server.UrlOf('/blank.html'))
28       t.WaitForDocumentReadyStateToBeComplete()
29       x = t.EvaluateJavaScript('document.body.innerHTML')
30       x = x.strip()
31
32       # Test basic html hosting.
33       self.assertEquals(x, 'Hello world')
34
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)
39
40       # Test byte range request: greater than zero start byte.
41       self.CheckContentHeaders(b, t, '100-', '100-%d' % last_byte,
42                                file_size - 100)
43
44       # Test byte range request: explicit byte range.
45       self.CheckContentHeaders(b, t, '2-500', '2-500', '499')
46
47       # Test byte range request: no start byte.
48       self.CheckContentHeaders(b, t, '-228',
49                                '%d-%d' % (file_size - 228, last_byte),
50                                '228')
51
52       # Test byte range request: end byte less than start byte.
53       self.CheckContentHeaders(b, t, '100-5', '100-%d' % last_byte,
54                                file_size - 100)
55
56   def CheckContentHeaders(self, browser, tab, content_range_request,
57                           content_range_response, content_lenght_response):
58     tab.ExecuteJavaScript("""
59         var loaded = false;
60         var xmlhttp = new XMLHttpRequest();
61         xmlhttp.onload = function(e) {
62           loaded = true;
63         };
64         // Avoid cached content by appending unique URL param.
65         xmlhttp.open('GET', "%s?t=" + Date.now(), true);
66         xmlhttp.setRequestHeader('Range', 'bytes=%s');
67         xmlhttp.send();
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))