mirror of
https://git.yoctoproject.org/poky
synced 2026-01-29 21:08:42 +01:00
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: d5a4a352723258b4d499d3a51f340109c4f36f60) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
65
bitbake/lib/bb/tests/support/httpserver.py
Normal file
65
bitbake/lib/bb/tests/support/httpserver.py
Normal file
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user