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

Unified 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: Fixing lint issues reported by gjslint Created 6 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/remoting/http_server/hostpage.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/remoting/http_server/http_server.py
diff --git a/chrome/test/remoting/http_server/http_server.py b/chrome/test/remoting/http_server/http_server.py
new file mode 100644
index 0000000000000000000000000000000000000000..9273b6ccd20ed20ca40052553636d563e1d06ee2
--- /dev/null
+++ b/chrome/test/remoting/http_server/http_server.py
@@ -0,0 +1,108 @@
+# Copyright (c) 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Simple HTTP server used in Chromoting End-to-end tests.
+
+Serves the static host and client pages with associated javascript files.
+Stores state about host actions and communicates it to the client.
+
+Built on CherryPy (http://www.cherrypy.org/) and requires the Chromium
+version of CherryPy to be installed from
+chromium/tools/build/third_party/cherrypy/.
+
+"""
+
+import json
+import os
+import sys
+
+try:
+ import cherrypy
+except ImportError:
+ print ('This script requires CherryPy v3 or higher to be installed.\n'
+ 'Please install and try again.')
+ sys.exit(1)
+
+
+def HttpMethodsAllowed(methods=['GET', 'HEAD']):
+ method = cherrypy.request.method.upper()
+ if method not in methods:
+ cherrypy.response.headers['Allow'] = ', '.join(methods)
+ raise cherrypy.HTTPError(405)
+
+cherrypy.tools.allow = cherrypy.Tool('on_start_resource', HttpMethodsAllowed)
+
+
+class KeyTest(object):
+ """Handler for keyboard test in Chromoting E2E tests."""
+
+ keytest_succeeded = False
+ keytest_text = None
+
+ @cherrypy.expose
+ @cherrypy.tools.allow(methods=['POST'])
+ def test(self, text):
+ """Stores status of host keyboard actions."""
+ self.keytest_succeeded = True
+ self.keytest_text = text
+
+ def process(self):
+ """Build the JSON message that will be conveyed to the client."""
+ message = {
+ 'keypressSucceeded': self.keytest_succeeded,
+ 'keypressText': self.keytest_text
+ }
+
+ # The message is now built so reset state on the server
+ if self.keytest_succeeded:
+ self.keytest_succeeded = False
+ self.keytest_text = None
+
+ return message
+
+
+class Root(object):
+ """Root Handler for the server."""
+
+ # Every test has its own class which should be instantiated here
+ keytest = KeyTest()
+
+ # Every test's class should have a process method that the client polling
+ # will call when that test is running.
+ # The method should be registered here with the test name.
+ TEST_DICT = {
+ 'keytest': keytest.process
+ }
+
+ @cherrypy.expose
+ @cherrypy.tools.allow()
+ def index(self):
+ """Index page to test if server is ready."""
+ return 'Simple HTTP Server for Chromoting Browser Tests!'
+
+ @cherrypy.expose
+ @cherrypy.tools.allow()
+ def poll(self, test):
+ """Responds to poll request from client page with status of host actions."""
+ if test not in self.TEST_DICT:
+ cherrypy.response.status = 500
+ return
+
+ cherrypy.response.headers['Content-Type'] = 'application/json'
+ return json.dumps(self.TEST_DICT[test]())
+
+
+app_config = {
+ '/': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir':
+ os.path.abspath(os.path.dirname(__file__))
+ }
+}
+cherrypy.tree.mount(Root(), '/', config=app_config)
+cherrypy.config.update({'server.socket_host': '0.0.0.0',
+ 'server.threadpool': 1,
+ })
+cherrypy.engine.start()
+cherrypy.engine.block()
« no previous file with comments | « 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