mirror of https://github.com/ctz/rustls
78 lines
2.2 KiB
Python
Executable File
78 lines
2.2 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import os
|
|
import glob
|
|
import subprocess
|
|
|
|
LLVM_PATH = glob.glob('/usr/lib/llvm-3.8/lib/clang/3.8.[0-9]/lib/linux/')[0]
|
|
COVERAGE_OPTIONS = '-Ccodegen-units=1 -Clink-dead-code -Cpasses=insert-gcov-profiling -Zno-landing-pads -L%s -lclang_rt.profile-x86_64' % LLVM_PATH
|
|
LCOVOPTS = '--gcov-tool ./admin/llvm-gcov --rc lcov_branch_coverage=1 --rc lcov_excl_line=assert'.split()
|
|
|
|
def lcov_exe(*args):
|
|
return ['lcov'] + LCOVOPTS + list(args)
|
|
|
|
def sh(cmd):
|
|
subprocess.check_call(cmd, shell = True)
|
|
|
|
def cleanup():
|
|
sh('cargo clean')
|
|
sh("rm -rf *.gcda *.gcno cov/ && mkdir cov/")
|
|
|
|
def run(which):
|
|
exe = filter(lambda x: '.d' not in x, glob.glob('target/debug/' + which + '-*'))[0]
|
|
sh('./' + exe)
|
|
|
|
def rustc(*args):
|
|
exe = ['cargo', 'rustc', '--all-features'] + list(args)
|
|
env = dict(os.environ)
|
|
env.update(RUSTC_WRAPPER = './admin/coverage-rustc',
|
|
COVERAGE_OPTIONS = COVERAGE_OPTIONS)
|
|
subprocess.check_call(exe, env = env)
|
|
|
|
def lcov(outfile):
|
|
exe = lcov_exe('--capture', '--directory', '.', '--base-directory', '.', '-o', outfile)
|
|
subprocess.check_call(exe)
|
|
return outfile
|
|
|
|
def merge(outfile, infiles):
|
|
arg = []
|
|
for i in infiles:
|
|
arg.append('--add')
|
|
arg.append(i)
|
|
arg.append('-o')
|
|
arg.append(outfile)
|
|
subprocess.check_call(lcov_exe(*arg))
|
|
|
|
def extract(outfile, infile):
|
|
subprocess.check_call(lcov_exe('--extract', infile, os.getcwd() + '/*', '-o', outfile))
|
|
|
|
def genhtml(outdir, infile):
|
|
subprocess.check_call(['genhtml', '--branch-coverage', '--demangle-cpp', '--legend',
|
|
infile, '-o', outdir, '--ignore-errors', 'source'])
|
|
|
|
all_infos = []
|
|
|
|
# unit tests
|
|
cleanup()
|
|
rustc('--profile', 'test', '--lib')
|
|
run('rustls')
|
|
all_infos.append(lcov('rustls.info'))
|
|
|
|
cleanup()
|
|
for example in 'tlsclient tlsserver bench bogo_shim trytls_shim'.split():
|
|
rustc('--profile', 'dev', '--example', example)
|
|
|
|
# tests
|
|
for test in 'api badssl bugs client_suites curves errors features server_suites topsites'.split():
|
|
rustc('--profile', 'dev', '--test', test)
|
|
run(test)
|
|
|
|
# trytls
|
|
sh('cd trytls && ./runme')
|
|
sh('cd bogo && ./runme')
|
|
all_infos.append(lcov('tests.info'))
|
|
|
|
merge('coverage.info', all_infos)
|
|
extract('final.info', 'coverage.info')
|
|
genhtml('target/coverage/', 'final.info')
|