# REQUIRES: curl # RUN: rm -rf %t # RUN: mkdir %t # # Query the python server for artifacts # RUN: env DEBUGINFOD_CACHE_PATH=%t %python %s --server-path %S/Inputs \ # RUN: --tool-cmd 'llvm-debuginfod-find --dump --executable abcdef' | \ # RUN: FileCheck %s --check-prefix=EXECUTABLE # RUN: env DEBUGINFOD_CACHE_PATH=%t %python %s --server-path %S/Inputs \ # RUN: --tool-cmd 'llvm-debuginfod-find --dump --source=/directory/file.c abcdef' | \ # RUN: FileCheck %s --check-prefix=SOURCE # RUN: env DEBUGINFOD_CACHE_PATH=%t %python %s --server-path %S/Inputs \ # RUN: --tool-cmd 'llvm-debuginfod-find --dump --debuginfo abcdef' | \ # RUN: FileCheck %s --check-prefix=DEBUGINFO # EXECUTABLE: fake_executable # SOURCE: int foo = 0; # DEBUGINFO: fake_debuginfo # # The artifacts should still be present in the cache without needing to query # # the server. # RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-debuginfod-find --dump --executable abcdef | \ # RUN: FileCheck %s --check-prefix=EXECUTABLE # RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-debuginfod-find --dump \ # RUN: --source=/directory/file.c abcdef | \ # RUN: FileCheck %s --check-prefix=SOURCE # RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-debuginfod-find --dump --debuginfo abcdef | \ # RUN: FileCheck %s --check-prefix=DEBUGINFO # This script is used to test the debuginfod client within a host tool. # It first stands up a Python HTTP static file server and then executes the tool. # This way the tool can make debuginfod HTTP requests to the static file server. import argparse import threading import http.server import functools import subprocess import sys import os # Serves files at the server_path, then runs the tool with specified args. # Sets the DEBUGINFOD_CACHE_PATH env var to point at the given cache_directory. # Sets the DEBUGINFOD_URLS env var to point at the local server. def test_tool(server_path, tool_args): httpd = http.server.ThreadingHTTPServer( ('',0), functools.partial( http.server.SimpleHTTPRequestHandler, directory=server_path)) port = httpd.server_port thread = threading.Thread(target=httpd.serve_forever) try: thread.start() env = os.environ env['DEBUGINFOD_URLS'] = 'http://localhost:%s' % port process = subprocess.Popen( tool_args, env=env) code = process.wait() if code != 0: print('nontrivial return code %s' % code) return 1 finally: httpd.shutdown() thread.join() return 0 def main(): parser = argparse.ArgumentParser() parser.add_argument('--server-path', default='./') parser.add_argument('--tool-cmd', required=True, type=str) args = parser.parse_args() result = test_tool(args.server_path, args.tool_cmd.split()) sys.exit(result) if __name__ == '__main__': main()