Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / memory_cache_http_server_unittest.py
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
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 MemoryCacheHTTPServerTest(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.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
31       # Test basic html hosting.
32       self.assertEquals(x, 'Hello world')
33
34       file_size = self.test_file_size
35       last_byte = file_size - 1
36       # Test byte range request: no end byte.
37       self.CheckContentHeaders(b, t, '0-', '0-%d' % last_byte, file_size)
38
39       # Test byte range request: greater than zero start byte.
40       self.CheckContentHeaders(b, t, '100-', '100-%d' % last_byte,
41                                file_size - 100)
42
43       # Test byte range request: explicit byte range.
44       self.CheckContentHeaders(b, t, '2-500', '2-500', '499')
45
46       # Test byte range request: no start byte.
47       self.CheckContentHeaders(b, t, '-228',
48                                '%d-%d' % (file_size - 228, last_byte),
49                                '228')
50
51       # Test byte range request: end byte less than start byte.
52       self.CheckContentHeaders(b, t, '100-5', '100-%d' % last_byte,
53                                file_size - 100)
54
55   def CheckContentHeaders(self, browser, tab, content_range_request,
56                           content_range_response, content_lenght_response):
57     tab.ExecuteJavaScript("""
58         var loaded = false;
59         var xmlhttp = new XMLHttpRequest();
60         xmlhttp.onload = function(e) {
61           loaded = true;
62         };
63         // Avoid cached content by appending unique URL param.
64         xmlhttp.open('GET', "%s?t=" + Date.now(), true);
65         xmlhttp.setRequestHeader('Range', 'bytes=%s');
66         xmlhttp.send();
67     """ % (browser.http_server.UrlOf('/%s' % self.test_file),
68            content_range_request))
69     tab.WaitForJavaScriptExpression('loaded', 5)
70     content_range = tab.EvaluateJavaScript(
71         'xmlhttp.getResponseHeader("Content-Range");')
72     content_range_response = 'bytes %s/%d' % (
73         content_range_response, self.test_file_size)
74     self.assertEquals(content_range, content_range_response)
75     content_length = tab.EvaluateJavaScript(
76         'xmlhttp.getResponseHeader("Content-Length");')
77     self.assertEquals(content_length, str(content_lenght_response))