diff options
author | Samuel O'Brien <sam.obrien@ni.com> | 2020-07-01 09:00:53 -0500 |
---|---|---|
committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2020-07-16 09:59:25 -0500 |
commit | 9a75dcf3a3c0f71b49b4d2a7a7f154d008979159 (patch) | |
tree | 42f84d5d052739f6ea04219ee49081e14724c1a2 /host/tests | |
parent | 919a147afcbecace5107a4d0a4da556cfd56df92 (diff) | |
download | uhd-9a75dcf3a3c0f71b49b4d2a7a7f154d008979159.tar.gz uhd-9a75dcf3a3c0f71b49b4d2a7a7f154d008979159.tar.bz2 uhd-9a75dcf3a3c0f71b49b4d2a7a7f154d008979159.zip |
python: Document CHDR Test Generation
The script_test.py script is used to generate data .cpp files from a
wireshark trace for the C++ CHDR Parser tests. This commit expands the
script to also generate the data .py files for the Python CHDR Parser
tests.
Signed-off-by: Samuel O'Brien <sam.obrien@ni.com>
Diffstat (limited to 'host/tests')
-rw-r--r-- | host/tests/common/chdr_resource/README.md | 2 | ||||
-rwxr-xr-x | host/tests/common/chdr_resource/format_trace.py | 61 |
2 files changed, 44 insertions, 19 deletions
diff --git a/host/tests/common/chdr_resource/README.md b/host/tests/common/chdr_resource/README.md index 5664cd132..869b7cb5f 100644 --- a/host/tests/common/chdr_resource/README.md +++ b/host/tests/common/chdr_resource/README.md @@ -21,4 +21,4 @@ It contains many Data packets, as well as some Stream Status and Stream Command 5. Save the trace with a descriptive name in the `host/tests/common/chdr_resource` directory as a `.c` file 6. In the `host/tests/common/chdr_resource` directory, run `./format_trace.py {filename}`, where `{filename}` is the name of the `.c` file you save the trace as. -This will create a `.cpp` file of the same name, which contains the trace data inside a namespace matching the filename. The trace can now be accessed in unit tests with `#include <chdr_resource/{filename}.cpp>`. +This will create a `.cpp` file and a `.py` file of the same name, which contains the trace data inside a namespace matching the filename. The trace can now be accessed in unit tests with `#include <chdr_resource/{filename}.cpp>` in C++ and `from chdr_resource import {filename}` in Python. diff --git a/host/tests/common/chdr_resource/format_trace.py b/host/tests/common/chdr_resource/format_trace.py index 37659668c..ebaa75f70 100755 --- a/host/tests/common/chdr_resource/format_trace.py +++ b/host/tests/common/chdr_resource/format_trace.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# Copyright 2017 Ettus Research, a National Instruments Company +# Copyright 2020 Ettus Research, a National Instruments Brand # # SPDX-License-Identifier: GPL-3.0-or-later # @@ -10,20 +10,21 @@ import re if len(sys.argv) < 2: print("Please supply an input filename!") - exit() + sys.exit() input_arg = sys.argv[1] filename_pat = re.compile(r"(.*)\.c") m = filename_pat.match(input_arg) if not m: print("Please supply a .c file as input!") - exit() + sys.exit() filename = m.group(1) input_file = open(filename + ".c", "r") -output_file = open(filename + ".cpp", "w") +cpp_file = open(filename + ".cpp", "w") +python_file = open(filename + ".py", "w") -output_header = """// +OUTPUT_HEADER_CPP = """// // Copyright 2020 Ettus Research, a National Instruments Brand // // SPDX-License-Identifier: GPL-3.0-or-later @@ -33,6 +34,14 @@ output_header = """// """ +OUTPUT_HEADER_PYTHON = """# +# Copyright 2020 Ettus Research, a National Instruments Company +# +# SPDX-License-Identifier: GPL-3.0-or-later +# + +""" + # Matches a line defining a new packet, e.g # char peer1_19[] = { /* Packet 3153 */ # Group 1 is the array name, e.g. "peer1_19" @@ -40,7 +49,7 @@ output_header = """// define_pat = re.compile(r"^char (peer[0|1]_\d+)\[\] = \{ \/\* (Packet \d+) \*\/$") # Matches a line in the middle of a packet or at the end, e.g. -# 0x01, 0x00, 0x18, 0x00, 0x02, 0x00, 0x80, 0x00, +# 0x01, 0x00, 0x18, 0x00, 0x02, 0x00, 0x80, 0x00, # 0x08, 0x00, 0x0f, 0x00 }; # No groups, use full match other_pat = re.compile(r"^((?:0x[0-9a-f]{2}, )*(?:0x[0-9a-f]{2}))(?: \};|, )$") @@ -48,8 +57,10 @@ other_pat = re.compile(r"^((?:0x[0-9a-f]{2}, )*(?:0x[0-9a-f]{2}))(?: \};|, )$") # Used to seperate the two parties in the conversation (peer0 and peer1) var_sort_pat = re.compile(r"^peer0_\d+$") -output_file.write(output_header) -output_file.write("namespace {} {{\n\n".format(filename)) +cpp_file.write(OUTPUT_HEADER_CPP) +cpp_file.write("namespace {} {{\n\n".format(filename)) + +python_file.write(OUTPUT_HEADER_PYTHON) var_names_peer_0 = [] var_names_peer_1 = [] @@ -60,7 +71,8 @@ while True: break m = define_pat.match(line) if m: - output_file.write("uint8_t {}[] = {{ // {}\n".format(m.group(1), m.group(2))) + cpp_file.write("uint8_t {}[] = {{ // {}\n".format(m.group(1), m.group(2))) + python_file.write("{} = bytes([ # {}\n".format(m.group(1), m.group(2))) var_sort_match = var_sort_pat.match(m.group(1)) if var_sort_match: var_names_peer_0.append(m.group(1)) @@ -69,18 +81,31 @@ while True: continue m = other_pat.match(line) if m: - output_file.write(line) + cpp_file.write(line) + python_file.write(line.replace("};", "])")) continue print("Encountered unexpected line:\n{}".format(line)) - exit() + sys.exit() for peer_name, var_names in [("peer0", var_names_peer_0), ("peer1", var_names_peer_1)]: - output_file.write("\n") - output_file.write("size_t {}_len = {};\n".format(peer_name, len(var_names))) - output_file.write("std::tuple<uint8_t*, size_t> {}[] = {{\n".format(peer_name)) + cpp_file.write("\n") + cpp_file.write("size_t {}_len = {};\n".format(peer_name, len(var_names))) + cpp_file.write("std::tuple<uint8_t*, size_t> {}[] = {{\n".format(peer_name)) + + python_file.write("\n") + python_file.write("{} = [\n\t".format(peer_name)) + for var_name in var_names: - output_file.write("\tstd::make_tuple({0}, sizeof({0})),\n".format(var_name)) - output_file.write("};\n") + cpp_file.write("\tstd::make_tuple({0}, sizeof({0})),\n".format(var_name)) + cpp_file.write("};\n") + + for i, var_name in enumerate(var_names): + python_file.write(var_name) + if i + 1 < len(var_names): + python_file.write(",\t") + if (i + 1) % 10 == 0: + python_file.write("\n\t") + python_file.write("\n]\n") -output_file.write("\n") -output_file.write("}} // namespace {}\n".format(filename)) +cpp_file.write("\n") +cpp_file.write("}} // namespace {}\n".format(filename)) |