diff options
Diffstat (limited to 'testing/awsy/awsy/webservers.py')
-rw-r--r-- | testing/awsy/awsy/webservers.py | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/testing/awsy/awsy/webservers.py b/testing/awsy/awsy/webservers.py new file mode 100644 index 0000000000..ca278db706 --- /dev/null +++ b/testing/awsy/awsy/webservers.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + + +# mozhttpd web server. + +import argparse +import os +import socket + +import mozhttpd + +# directory of this file +here = os.path.dirname(os.path.realpath(__file__)) + + +class WebServers(object): + def __init__(self, host, port, docroot, count): + self.host = host + self.port = port + self.docroot = docroot + self.count = count + self.servers = [] + + def start(self): + self.stop() + self.servers = [] + port = self.port + num_errors = 0 + while len(self.servers) < self.count: + self.servers.append( + mozhttpd.MozHttpd(host=self.host, port=port, docroot=self.docroot) + ) + try: + self.servers[-1].start() + except socket.error as error: + if isinstance(error, socket.error): + if error.errno == 98: + print("port {} is in use.".format(port)) + else: + print("port {} error {}".format(port, error)) + elif isinstance(error, str): + print("port {} error {}".format(port, error)) + self.servers.pop() + num_errors += 1 + except Exception as error: + print("port {} error {}".format(port, error)) + self.servers.pop() + num_errors += 1 + + if num_errors > 15: + raise Exception("Too many errors in webservers.py") + port += 1 + + def stop(self): + while len(self.servers) > 0: + server = self.servers.pop() + server.stop() + + +def main(): + parser = argparse.ArgumentParser( + description="Start mozhttpd servers for use by areweslimyet." + ) + + parser.add_argument( + "--port", + type=int, + default=8001, + help="Starting port. Defaults to 8001. Web servers will be " + "created for each port from the starting port to starting port " + "+ count - 1.", + ) + parser.add_argument( + "--count", + type=int, + default=100, + help="Number of web servers to start. Defaults to 100.", + ) + parser.add_argument( + "--host", + type=str, + default="localhost", + help="Name of webserver host. Defaults to localhost.", + ) + + args = parser.parse_args() + web_servers = WebServers(args.host, args.port, "%s/html" % here, args.count) + web_servers.start() + + +if __name__ == "__main__": + main() |