Update sdk/platform-tools to version 26.0.0.
[android_tools.git] / sdk / platform-tools / systrace / catapult / telemetry / telemetry / core / local_server_unittest.py
blob46ff85c7e5ee1ce3fe03f2c26178a013172d7463
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 import BaseHTTPServer
5 import SimpleHTTPServer
7 from telemetry import decorators
8 from telemetry.core import local_server
9 from telemetry.testing import tab_test_case
12 class SimpleLocalServerBackendRequestHandler(
13 SimpleHTTPServer.SimpleHTTPRequestHandler):
15 def do_GET(self):
16 msg = """<!DOCTYPE html>
17 <html>
18 <body>
19 hello world
20 </body>
21 """
23 self.send_response(200)
24 self.send_header('Content-Type', 'text/html')
25 self.send_header('Content-Length', len(msg))
26 self.end_headers()
27 self.wfile.write(msg)
29 def log_request(self, code='-', size='-'):
30 pass
33 class SimpleLocalServerBackend(BaseHTTPServer.HTTPServer,
34 local_server.LocalServerBackend):
36 def __init__(self):
37 BaseHTTPServer.HTTPServer.__init__(self, ('127.0.0.1', 0),
38 SimpleLocalServerBackendRequestHandler)
39 local_server.LocalServerBackend.__init__(self)
41 def StartAndGetNamedPorts(self, args):
42 assert 'hello' in args
43 assert args['hello'] == 'world'
44 return [local_server.NamedPort('http', self.server_address[1])]
46 def ServeForever(self):
47 self.serve_forever()
50 class SimpleLocalServer(local_server.LocalServer):
52 def __init__(self):
53 super(SimpleLocalServer, self).__init__(SimpleLocalServerBackend)
55 def GetBackendStartupArgs(self):
56 return {'hello': 'world'}
58 @property
59 def url(self):
60 return self.forwarder.url + '/'
63 class LocalServerUnittest(tab_test_case.TabTestCase):
65 @classmethod
66 def setUpClass(cls):
67 super(LocalServerUnittest, cls).setUpClass()
68 cls._server = SimpleLocalServer()
69 cls._platform.StartLocalServer(cls._server)
71 @decorators.Disabled('all') # https://crbug.com/570955
72 def testLocalServer(self):
73 self.assertTrue(self._server in self._platform.local_servers)
74 self._tab.Navigate(self._server.url)
75 self._tab.WaitForDocumentReadyStateToBeComplete()
76 body_text = self._tab.EvaluateJavaScript('document.body.textContent')
77 body_text = body_text.strip()
78 self.assertEquals('hello world', body_text)
80 @decorators.Disabled('all') # https://crbug.com/570955
81 def testStartingAndRestarting(self):
82 server2 = SimpleLocalServer()
83 self.assertRaises(Exception,
84 lambda: self._platform.StartLocalServer(server2))
86 self._server.Close()
87 self.assertTrue(self._server not in self._platform.local_servers)
89 self._platform.StartLocalServer(server2)