123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- #!/usr/bin/env python3
- # Copyright (c) 2017 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- """Helper to update the "net_unittests_bundle_data" section of
- //net/BUILD.gn so that it lists all of the current files (based on
- simpler globbing rules).
- """
- import glob
- import os
- import re
- import sys
- # ------------------------------------------
- # test_support_bundle_data
- # ------------------------------------------
- # This is a bit more expansive than it needs to be (includes README). Meh.
- test_support_bundle_data_globs = [
- "data/quic_http_response_cache_data/test.example.com/*",
- "data/quic_http_response_cache_data_with_push/test.example.com/*",
- "data/ssl/certificates/*",
- ]
- # This regular expression identifies the "sources" section of
- # test_support_bundle_data.
- test_support_bundle_data_regex = re.compile(r"""
- bundle_data\("test_support_bundle_data"\) \{
- visibility = \[ ":test_support" \]
- testonly = true
- sources = \[
- (.+?)
- \]
- outputs = \[""", re.MULTILINE | re.DOTALL)
- # ------------------------------------------
- # net_unittest_bundle_data
- # ------------------------------------------
- net_unittest_bundle_data_globs = [
- "data/cert_issuer_source_aia_unittest/*.pem",
- "data/cert_issuer_source_static_unittest/*.pem",
- "data/certificate_policies_unittest/*.pem",
- "data/crl_unittest/*.pem",
- "data/embedded_test_server/*",
- "data/filter_unittests/*",
- "data/name_constraints_unittest/*.pem",
- "data/ocsp_unittest/*.pem",
- "data/ov_name_constraints/*.pem",
- "data/path_builder_unittest/**/*.pem",
- "data/parse_certificate_unittest/**/*.pem",
- "data/parse_certificate_unittest/*.pem",
- "data/parse_certificate_unittest/*.pk8",
- "data/test.html",
- "data/trial_comparison_cert_verifier_unittest/**/*.pem",
- "data/url_request_unittest/*",
- "data/verify_certificate_chain_unittest/**/*.pem",
- "data/verify_certificate_chain_unittest/**/*.test",
- "data/verify_certificate_chain_unittest/pkits_errors/*.txt",
- "data/verify_name_match_unittest/names/*.pem",
- "data/verify_signed_data_unittest/*.pem",
- "third_party/nist-pkits/certs/*.crt",
- "third_party/nist-pkits/crls/*.crl",
- ]
- # This regular expression identifies the "sources" section of
- # net_unittests_bundle_data
- net_unittest_bundle_data_regex = re.compile(r"""
- bundle_data\("net_unittests_bundle_data"\) \{
- testonly = true
- sources = \[
- (.+?)
- \]
- outputs = \[""", re.MULTILINE | re.DOTALL)
- # ------------------------------------------
- def get_net_path():
- """Returns the path to //net"""
- return os.path.realpath(os.path.join(os.path.dirname(__file__), os.pardir))
- def do_file_glob(rule):
- # Do the globbing relative to //net
- prefix = get_net_path()
- matches = glob.glob(prefix + os.sep + rule)
- # Strip off the prefix.
- return [f[len(prefix) + 1:] for f in matches]
- def resolve_file_globs(rules):
- paths = []
- for rule in rules:
- paths.extend(do_file_glob(rule))
- return paths
- def read_file_to_string(path):
- with open(path, 'r', encoding='utf-8') as f:
- return f.read()
- def write_string_to_file(data, path):
- with open(path, 'w', encoding='utf-8') as f:
- f.write(data)
- def fatal(message):
- print("FATAL: " + message)
- sys.exit(1)
- def format_file_list(files):
- # Keep the file list in sorted order.
- files = sorted(files)
- # Format to a string for GN (assume the filepaths don't contain
- # characters that need escaping).
- return ",\n".join(' "%s"' % f for f in files) + ","
- def replace_sources(data, sources_regex, globs):
- m = sources_regex.search(data)
- if not m:
- fatal("Couldn't find the sources section: %s" % sources_regex.pattern)
- formatted_files = format_file_list(resolve_file_globs(globs))
- return data[0:m.start(1)] + formatted_files + data[m.end(1):]
- def main():
- # Read in //net/BUILD.gn
- path = os.path.join(get_net_path(), "BUILD.gn")
- data = read_file_to_string(path)
- # Replace the sources part of "net_unittests_bundle_data" with
- # the current results of file globbing.
- data = replace_sources(data, test_support_bundle_data_regex,
- test_support_bundle_data_globs)
- # Replace the sources part of "net_unittests_bundle_data" with
- # the current results of file globbing.
- data = replace_sources(data, net_unittest_bundle_data_regex,
- net_unittest_bundle_data_globs)
- write_string_to_file(data, path)
- print("Wrote %s" % path)
- if __name__ == '__main__':
- sys.exit(main())
|