Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(104)

Side by Side Diff: chrome/test/remoting/http_server/http_server.py

Issue 180273015: Simple HTTP server for Chromoting End-to-End tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing initial code review comments Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright (c) 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 """Simple HTTP server used in Chromoting End-to-end tests.
6
7 Serves the static host and client pages with associated javascript files.
8 Stores state about host actions and communicates it to the client.
9
10 Built on CherryPy (http://www.cherrypy.org/) and requires the Chromium
11 version of CherryPy to be installed from
12 chromium/tools/build/third_party/cherrypy/.
13
14 """
15
16 import json
17 import os
18 import sys
19
20 try:
21 import cherrypy
22 except ImportError:
23 print ('CNS requires CherryPy v3 or higher to be installed. Please install\n'
Jamie 2014/03/04 21:40:35 What is CNS? Maybe just "This script requires..."?
chaitali 2014/03/05 22:02:22 Done.
24 'and try again.')
25 sys.exit(1)
26
27
28 def HttpMethodsAllowed(methods=['GET', 'HEAD']):
29 method = cherrypy.request.method.upper()
30 if method not in methods:
31 cherrypy.response.headers['Allow'] = ', '.join(methods)
32 raise cherrypy.HTTPError(405)
33
34 cherrypy.tools.allow = cherrypy.Tool('on_start_resource', HttpMethodsAllowed)
35
36
37 class KeyTest(object):
38 """Handler for keyboard test in Chromoting E2E tests."""
39
40 keytest_succeeded = False
41 keytest_text = None
42
43 @cherrypy.expose
44 @cherrypy.tools.allow(methods=['POST'])
45 def test(self, text):
46 """Stores status of host keyboard actions."""
47
Jamie 2014/03/04 21:40:35 I think these blank lines at the start of the meth
chaitali 2014/03/05 22:02:22 Done.
48 self.keytest_succeeded = True
49 self.keytest_text = text
50
51 def process(self):
52 """Build the JSON message that will be conveyed to the client."""\
Jamie 2014/03/04 21:40:35 Nit: Stray backslash?
chaitali 2014/03/05 22:02:22 Done.
53
54 message = {}
55 message['keypressSucceeded'] = self.keytest_succeeded
56 message['keypressText'] = self.keytest_text
Jamie 2014/03/04 21:40:35 I think this can be more succinctly declared simil
chaitali 2014/03/05 22:02:22 Done.
57
58 # The message is now built so reset state on the server
59 if self.keytest_succeeded:
Jamie 2014/03/04 21:40:35 Is this server single-threaded? If not, then you'l
chaitali 2014/03/05 22:02:22 Done. Added server.threadpool = 1 in config below.
60 self.keytest_succeeded = False
61 self.keytest_text = None
62
63 return message
64
65
66 class Root(object):
67 """Root Handler for the server."""
68
69 # Every test has its own class which should be instantiated here
70 keytest = KeyTest()
71
72 # Every test's class should have a process method that the client polling
73 # will call when that test is running.
74 # The method should be registered here with the test name.
75 TEST_DICT = {
76 'keytest': keytest.process
77 }
78
79 @cherrypy.expose
80 @cherrypy.tools.allow()
81 def index(self):
82 """Index page to test if server is ready."""
83
84 return 'Simple HTTP Server for Chromoting Browser Tests!'
85
86 @cherrypy.expose
87 @cherrypy.tools.allow()
88 def poll(self, test):
89 """Responds to poll request from client page with status of host actions."""
90
91 if test not in self.TEST_DICT:
92 cherrypy.response.status = 500
93 return
94
95 cherrypy.response.headers['Content-Type'] = 'application/json'
96 return json.dumps(self.TEST_DICT[test]())
97
98
99 app_config = {
100 '/static': {
101 'tools.staticdir.on': True,
102 'tools.staticdir.dir':
103 os.path.abspath(os.path.dirname(__file__))
104 }
105 }
106 cherrypy.tree.mount(Root(), '/', config=app_config)
107 cherrypy.config.update({'server.socket_host': '0.0.0.0',
108 })
109 cherrypy.engine.start()
110 cherrypy.engine.block()
OLDNEW
« chrome/test/remoting/http_server/hostpage.js ('K') | « chrome/test/remoting/http_server/hostpage.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698