From ecd64bc63d5401969306f8c6e856bec0d04bfe8c Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Fri, 20 Dec 2019 17:53:00 +0000 Subject: bitbake: tests/fetch: Allow wget upgrade tests to run against a local server Currently these tests rely upon multiple uptream webservers which may change or be unavailable. Add local copies of the test data, copy the httpserver from OE-Core (used for testing there) and run these tests against a local server instead. (Bitbake rev: 1d4f3a5cb64273508357cddc32cc5367e7807191) Signed-off-by: Richard Purdie --- bitbake/lib/bb/tests/support/httpserver.py | 65 ++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 bitbake/lib/bb/tests/support/httpserver.py (limited to 'bitbake/lib/bb/tests/support/httpserver.py') diff --git a/bitbake/lib/bb/tests/support/httpserver.py b/bitbake/lib/bb/tests/support/httpserver.py new file mode 100644 index 0000000000..78f7660053 --- /dev/null +++ b/bitbake/lib/bb/tests/support/httpserver.py @@ -0,0 +1,65 @@ +# +# SPDX-License-Identifier: MIT +# + +import http.server +import multiprocessing +import os +import traceback +import signal +import logging +from socketserver import ThreadingMixIn + +class HTTPServer(ThreadingMixIn, http.server.HTTPServer): + + def server_start(self, root_dir, logger): + os.chdir(root_dir) + self.serve_forever() + +class HTTPRequestHandler(http.server.SimpleHTTPRequestHandler): + + def log_message(self, format_str, *args): + pass + +class HTTPService(object): + + def __init__(self, root_dir, host='', port=0, logger=None): + self.root_dir = root_dir + self.host = host + self.port = port + if not logger: + logger = logging.getLogger() + self.logger = logger + + def start(self): + print(self.root_dir) + if not os.path.exists(self.root_dir): + self.logger.info("Not starting HTTPService for directory %s which doesn't exist" % (self.root_dir)) + return + + self.server = HTTPServer((self.host, self.port), HTTPRequestHandler) + if self.port == 0: + self.port = self.server.server_port + self.process = multiprocessing.Process(target=self.server.server_start, args=[self.root_dir, self.logger]) + + # The signal handler from testimage.bbclass can cause deadlocks here + # if the HTTPServer is terminated before it can restore the standard + #signal behaviour + orig = signal.getsignal(signal.SIGTERM) + signal.signal(signal.SIGTERM, signal.SIG_DFL) + self.process.start() + signal.signal(signal.SIGTERM, orig) + + if self.logger: + self.logger.info("Started HTTPService on %s:%s" % (self.host, self.port)) + + + def stop(self): + if hasattr(self, "server"): + self.server.server_close() + if hasattr(self, "process"): + self.process.terminate() + self.process.join() + if self.logger: + self.logger.info("Stopped HTTPService on %s:%s" % (self.host, self.port)) + -- cgit v1.2.3-54-g00ecf