Add test for loading JSON dump

- Add a test that compares protobuf and JSON dumps.
- Add input-format=Json to header-abi-linker and diff.

Bug: 112877706
Test: ./test.py
Change-Id: Ic9be304b565a2ac58ed76e1a0fcc96530395b750
This commit is contained in:
Hsin-Yi Chen
2018-09-07 19:24:32 +08:00
parent 868cdf5cb2
commit 4b9b242efe
6 changed files with 34 additions and 18 deletions

View File

@@ -92,19 +92,20 @@ static llvm::cl::opt<bool> consider_opaque_types_different(
" ABIs"),
llvm::cl::Optional, llvm::cl::cat(header_checker_category));
static llvm::cl::opt<abi_util::TextFormatIR> text_format_old(
"text-format-old", llvm::cl::desc("Specify text format of old abi dump"),
"input-format-old", llvm::cl::desc("Specify input format of old abi dump"),
llvm::cl::values(clEnumValN(abi_util::TextFormatIR::ProtobufTextFormat,
"ProtobufTextFormat","ProtobufTextFormat"),
"ProtobufTextFormat", "ProtobufTextFormat"),
clEnumValN(abi_util::TextFormatIR::Json, "Json", "JSON"),
clEnumValEnd),
llvm::cl::init(abi_util::TextFormatIR::ProtobufTextFormat),
llvm::cl::cat(header_checker_category));
static llvm::cl::opt<abi_util::TextFormatIR> text_format_new(
"text-format-new", llvm::cl::desc("Specify text format of new abi dump"),
"input-format-new", llvm::cl::desc("Specify input format of new abi dump"),
llvm::cl::values(clEnumValN(abi_util::TextFormatIR::ProtobufTextFormat,
"ProtobufTextFormat", "ProtobugTextFormat"),
clEnumValN(abi_util::TextFormatIR::Json, "Json", "JSON"),
clEnumValEnd),
llvm::cl::init(abi_util::TextFormatIR::ProtobufTextFormat),
llvm::cl::cat(header_checker_category));

View File

@@ -70,6 +70,7 @@ static llvm::cl::opt<abi_util::TextFormatIR> input_format(
"input-format", llvm::cl::desc("Specify format of input dump files"),
llvm::cl::values(clEnumValN(abi_util::TextFormatIR::ProtobufTextFormat,
"ProtobufTextFormat", "ProtobufTextFormat"),
clEnumValN(abi_util::TextFormatIR::Json, "Json", "JSON"),
clEnumValEnd),
llvm::cl::init(abi_util::TextFormatIR::ProtobufTextFormat),
llvm::cl::cat(header_linker_category));

View File

@@ -67,8 +67,9 @@ TextFormatToIRReader::CreateTextFormatToIRReader(
switch (text_format) {
case TextFormatIR::ProtobufTextFormat:
return std::make_unique<ProtobufTextFormatToIRReader>(exported_headers);
case TextFormatIR::Json:
return std::make_unique<JsonToIRReader>(exported_headers);
default:
// Nothing else is supported yet.
llvm::errs() << "Text format not supported yet\n";
return nullptr;
}

View File

@@ -35,7 +35,7 @@ def relative_to_abs_path_list(relative_path_list):
class Module(object):
def __init__(self, name, arch, srcs, version_script, cflags,
export_include_dirs, api, output_format=None):
export_include_dirs, api, dumper_flags=[], linker_flags=[]):
self.name = name
self.arch = arch
self.srcs = relative_to_abs_path_list(srcs)
@@ -46,7 +46,8 @@ class Module(object):
self.arch_cflags = ARCH_TARGET_CFLAGS.get(self.arch)
self.export_include_dirs = relative_to_abs_path_list(export_include_dirs)
self.api = api
self.output_format = output_format
self.dumper_flags = dumper_flags
self.linker_flags = linker_flags
def get_name(self):
return self.name
@@ -69,8 +70,11 @@ class Module(object):
def get_api(self):
return self.api
def get_output_format(self):
return self.output_format
def get_dumper_flags(self):
return self.dumper_flags
def get_linker_flags(self):
return self.linker_flags
def make_lsdump(self, default_cflags):
""" For each source file, produce a .sdump file, and link them to form
@@ -83,10 +87,11 @@ class Module(object):
dumps_to_link.append(output_path)
run_header_abi_dumper_on_file(
src, output_path, self.export_include_dirs,
self.cflags + self.arch_cflags + default_cflags)
self.cflags + self.arch_cflags + default_cflags,
self.dumper_flags)
return run_header_abi_linker(output_lsdump, dumps_to_link,
self.version_script, self.api,
self.arch, self.output_format)
self.arch, self.linker_flags)
@staticmethod
def mutate_module_for_arch(module, target_arch):
@@ -96,9 +101,10 @@ class Module(object):
cflags = module.get_cflags()
export_include_dirs = module.get_export_include_dirs()
api = module.get_api()
output_format = module.get_output_format()
dumper_flags = module.get_dumper_flags()
linker_flags = module.get_linker_flags()
return Module(name, target_arch, srcs, version_script, cflags,
export_include_dirs, api, output_format)
export_include_dirs, api, dumper_flags, linker_flags)
@staticmethod
def mutate_module_for_all_arches(module):
@@ -496,7 +502,8 @@ TEST_MODULES = [
cflags = [],
arch = '',
api = 'current',
output_format = 'Json'
dumper_flags = ['-output-format', 'Json'],
linker_flags = ['-input-format', 'Json', '-output-format', 'Json']
),
]

View File

@@ -282,6 +282,12 @@ class MyTest(unittest.TestCase):
self.prepare_and_absolute_diff_all_archs(
"libgolden_cpp_json", "libgolden_cpp_json")
def test_libc_and_cpp_in_protobuf_and_json(self):
self.prepare_and_run_abi_diff_all_archs(
"libgolden_cpp", "libgolden_cpp_json", 0,
["-input-format-old", "ProtobufTextFormat",
"-input-format-new", "Json"])
if __name__ == '__main__':
unittest.main()

View File

@@ -93,11 +93,12 @@ def run_header_abi_dumper(input_path, remove_absolute_paths, cflags=[],
return f.read()
def run_header_abi_dumper_on_file(input_path, output_path,
export_include_dirs = [], cflags =[]):
export_include_dirs=[], cflags=[], flags=[]):
input_name, input_ext = os.path.splitext(input_path)
cmd = ['header-abi-dumper', '-o', output_path, input_path,]
for dir in export_include_dirs:
cmd += ['-I', dir]
cmd += flags
cmd += ['--']
cmd += cflags
if input_ext == '.cpp' or input_ext == '.cc' or input_ext == '.h':
@@ -113,13 +114,12 @@ def run_header_abi_dumper_on_file(input_path, output_path,
subprocess.check_call(cmd)
def run_header_abi_linker(output_path, inputs, version_script, api, arch,
output_format=None):
flags=[]):
"""Link inputs, taking version_script into account"""
with tempfile.TemporaryDirectory() as tmp:
cmd = ['header-abi-linker', '-o', output_path, '-v', version_script,
'-api', api, '-arch', arch]
if output_format:
cmd += ['-output-format', output_format]
cmd += flags
cmd += inputs
subprocess.check_call(cmd)
with open(output_path, 'r') as f: