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

Side by Side Diff: sync/tools/testserver/sync_testserver.py

Issue 797253003: Make Python sync server stoppable (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved. 2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """This is a python sync server used for testing Chrome Sync. 6 """This is a python sync server used for testing Chrome Sync.
7 7
8 By default, it listens on an ephemeral port and xmpp_port and sends the port 8 By default, it listens on an ephemeral port and xmpp_port and sends the port
9 numbers back to the originating process over a pipe. The originating process can 9 numbers back to the originating process over a pipe. The originating process can
10 specify an explicit port and xmpp_port if necessary. 10 specify an explicit port and xmpp_port if necessary.
11 """ 11 """
12 12
13 import asyncore 13 import asyncore
14 import BaseHTTPServer 14 import BaseHTTPServer
15 import errno 15 import errno
16 import os 16 import os
17 import select 17 import select
18 import socket 18 import socket
19 import sys 19 import sys
20 import urlparse 20 import urlparse
21 21
22 import chromiumsync 22 import chromiumsync
23 import echo_message 23 import echo_message
24 import testserver_base 24 import testserver_base
25 import xmppserver 25 import xmppserver
26 26
27 27
28 class SyncHTTPServer(testserver_base.ClientRestrictingServerMixIn, 28 class SyncHTTPServer(testserver_base.ClientRestrictingServerMixIn,
maniscalco 2015/01/06 18:39:59 What's the overall goal of this change? Does the
sigbjorn 2015/01/07 09:26:34 This allows for clean shutdown of the server. On L
29 testserver_base.BrokenPipeHandlerMixIn, 29 testserver_base.BrokenPipeHandlerMixIn,
30 testserver_base.StoppableHTTPServer): 30 BaseHTTPServer.HTTPServer):
31 """An HTTP server that handles sync commands.""" 31 """An HTTP server that handles sync commands."""
32 32
33 def __init__(self, server_address, xmpp_port, request_handler_class): 33 def __init__(self, server_address, xmpp_port, request_handler_class):
34 testserver_base.StoppableHTTPServer.__init__(self, 34 BaseHTTPServer.HTTPServer.__init__(self,
35 server_address, 35 server_address,
36 request_handler_class) 36 request_handler_class)
37 self._sync_handler = chromiumsync.TestServer() 37 self._sync_handler = chromiumsync.TestServer()
38 self._xmpp_socket_map = {} 38 self._xmpp_socket_map = {}
39 self._xmpp_server = xmppserver.XmppServer( 39 self._xmpp_server = xmppserver.XmppServer(
40 self._xmpp_socket_map, ('localhost', xmpp_port)) 40 self._xmpp_socket_map, ('localhost', xmpp_port))
41 self.xmpp_port = self._xmpp_server.getsockname()[1] 41 self.xmpp_port = self._xmpp_server.getsockname()[1]
42 self.authenticated = True 42 self.authenticated = True
43 43
44 def GetXmppServer(self): 44 def GetXmppServer(self):
45 return self._xmpp_server 45 return self._xmpp_server
46 46
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 # removed from socket_map. 85 # removed from socket_map.
86 if xmpp_connection is None: 86 if xmpp_connection is None:
87 return 87 return
88 try: 88 try:
89 handler(xmpp_connection) 89 handler(xmpp_connection)
90 except (asyncore.ExitNow, KeyboardInterrupt, SystemExit): 90 except (asyncore.ExitNow, KeyboardInterrupt, SystemExit):
91 raise 91 raise
92 except: 92 except:
93 xmpp_connection.handle_error() 93 xmpp_connection.handle_error()
94 94
95 while True: 95 self.stop = False
pval...(no longer on Chromium) 2015/01/05 17:49:01 when/where can this be set to True?
sigbjorn 2015/01/06 08:11:27 This would be set to True from the calling thread.
maniscalco 2015/01/06 18:39:59 Maybe I'm missing something, why not create a Stop
sigbjorn 2015/01/07 09:26:34 The reason is compatibility. This is what Stoppabl
96 while not self.stop:
96 read_fds = [ self.fileno() ] 97 read_fds = [ self.fileno() ]
97 write_fds = [] 98 write_fds = []
98 exceptional_fds = [] 99 exceptional_fds = []
99 100
100 for fd, xmpp_connection in self._xmpp_socket_map.items(): 101 for fd, xmpp_connection in self._xmpp_socket_map.items():
101 is_r = xmpp_connection.readable() 102 is_r = xmpp_connection.readable()
102 is_w = xmpp_connection.writable() 103 is_w = xmpp_connection.writable()
103 if is_r: 104 if is_r:
104 read_fds.append(fd) 105 read_fds.append(fd)
105 if is_w: 106 if is_w:
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 testserver_base.TestServerRunner.add_options(self) 558 testserver_base.TestServerRunner.add_options(self)
558 self.option_parser.add_option('--xmpp-port', default='0', type='int', 559 self.option_parser.add_option('--xmpp-port', default='0', type='int',
559 help='Port used by the XMPP server. If ' 560 help='Port used by the XMPP server. If '
560 'unspecified, the XMPP server will listen on ' 561 'unspecified, the XMPP server will listen on '
561 'an ephemeral port.') 562 'an ephemeral port.')
562 # Override the default logfile name used in testserver.py. 563 # Override the default logfile name used in testserver.py.
563 self.option_parser.set_defaults(log_file='sync_testserver.log') 564 self.option_parser.set_defaults(log_file='sync_testserver.log')
564 565
565 if __name__ == '__main__': 566 if __name__ == '__main__':
566 sys.exit(SyncServerRunner().main()) 567 sys.exit(SyncServerRunner().main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698