| # 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() |