diff --git a/test/cmp_tool/cmp_tool_integration_test.py b/test/cmp_tool/cmp_tool_integration_test.py index e66f38d533d8122c2001c05740c8707e45c3bb01..8eb95da31adb180ccd3bb3895f63e9ff90ee6b7c 100755 --- a/test/cmp_tool/cmp_tool_integration_test.py +++ b/test/cmp_tool/cmp_tool_integration_test.py @@ -7,6 +7,7 @@ import os import math import shutil from pathlib import Path +import hashlib from datetime import datetime from datetime import timedelta @@ -1415,7 +1416,6 @@ def test_rdcu_pkt(): assert(f1.read() == f2.read()) finally: - pass del_directory('TC_FILES') del_file(data_file_name) del_file(cfg_file_name) @@ -1427,5 +1427,59 @@ def test_rdcu_pkt(): del_file(output_prefix2+'_upmodel.dat') +def test_chunk_compression(): + # decompress the test data + output_prefix1 = "ref_short_cadence_1" + cmp_data_path1 = "test/cmp_tool/ref_short_cadence_1_cmp.cmp" + output_prefix2 = "ref_short_cadence_2" + cmp_data_path2 = "test/cmp_tool/ref_short_cadence_2_cmp.cmp" + + try: + returncode, stdout, stderr = call_cmp_tool( + "--binary -d " + cmp_data_path1 + " -o " + output_prefix1) + + assert(stderr == "") + assert(stdout == CMP_START_STR_DECMP + + "Importing compressed data file %s ... DONE\n" % (cmp_data_path1) + + "Decompress data ... DONE\n" + + "Write decompressed data to file %s.dat ... DONE\n" % (output_prefix1)) + assert(returncode == EXIT_SUCCESS) + + with open(output_prefix1 + '.dat', 'rb') as f: + sha1 = hashlib.sha1() + while True: + chunk = f.read(16 * 1024) + if not chunk: + break + sha1.update(chunk) + + assert(sha1.hexdigest() == "7d8d94d2ac904f9ff4f934bb691b469a7391ce9e") + + returncode, stdout, stderr = call_cmp_tool( + "--binary -d " + cmp_data_path2 + " -m " + output_prefix1 + ".dat -o " + output_prefix2) + + assert(stderr == "") + assert(stdout == CMP_START_STR_DECMP + + "Importing compressed data file %s ... DONE\n" % (cmp_data_path2) + + "Importing model file %s.dat ... DONE\n" % (output_prefix1) + + "Decompress data ... DONE\n" + + "Write decompressed data to file %s.dat ... DONE\n" % (output_prefix2) + + "Write updated model to file %s_upmodel.dat ... DONE\n" % (output_prefix2)) + assert(returncode == EXIT_SUCCESS) + + with open(output_prefix2 + '.dat', 'rb') as f: + sha1 = hashlib.sha1() + while True: + chunk = f.read(16 * 1024) + if not chunk: + break + sha1.update(chunk) + + assert(sha1.hexdigest() == "28ecc82a0c44ae7a461c26112b00f65b9b54e66a") + + finally: + del_file(output_prefix1+'.dat') + del_file(output_prefix2+'.dat') + del_file(output_prefix2+'_upmodel.dat') # TODO: random test diff --git a/test/cmp_tool/gen_test_data.c b/test/cmp_tool/gen_test_data.c new file mode 100644 index 0000000000000000000000000000000000000000..05c1ddab03ad7067e7e9465b80bd78bf1f3691de --- /dev/null +++ b/test/cmp_tool/gen_test_data.c @@ -0,0 +1,41 @@ +#include <stdio.h> +#include <string.h> + +#include "../bench/ref_short_cadence_1_cmp.h" +#include "../bench/ref_short_cadence_2_cmp.h" + + +int main(int argc, char *argv[]) +{ + int i; + FILE *fp; + size_t s; + + if (argc < 1) + return 1; + + for (i = 1; i < argc; i++) { + if (strstr(argv[i], "ref_short_cadence_1_cmp")) { + fp = fopen(argv[i], "wb"); + if(!fp) + return 1; + s = fwrite(ref_short_cadence_1_cmp, 1, ref_short_cadence_1_cmp_len, fp); + fclose(fp); + if (s!=ref_short_cadence_1_cmp_len) + return 1; + } else if (strstr(argv[i], "ref_short_cadence_2_cmp")) { + fp = fopen(argv[i], "wb"); + if(!fp) + return 1; + s = fwrite(ref_short_cadence_2_cmp, 1, ref_short_cadence_2_cmp_len, fp); + fclose(fp); + if (s!=ref_short_cadence_2_cmp_len) + return 1; + } else { + fprintf(stderr,"Unknown test data\n"); + return 1; + } + } + + return 0; +} diff --git a/test/cmp_tool/meson.build b/test/cmp_tool/meson.build index dfa0ce6d35ecffc3639fbe45c2b3a3a85b9d4198..907a7ee0da6a60fcc4537c2545bf691b304faafe 100644 --- a/test/cmp_tool/meson.build +++ b/test/cmp_tool/meson.build @@ -1,12 +1,22 @@ int_test_file = files('cmp_tool_integration_test.py') +gen_test_data = executable('gen_test_data', + 'gen_test_data.c', + c_args : '-Wno-overlength-strings', +) + +test_data = custom_target('gen_test_data', + output : ['ref_short_cadence_1_cmp.cmp', 'ref_short_cadence_2_cmp.cmp'], + command : [gen_test_data, '@OUTPUT@'] +) + pytest = find_program('pytest', required : false) if pytest.found() test('cmp_tool Interface Test', pytest, args : ['--color=yes', '-vvv', int_test_file], env: test_env, - depends : cmp_tool_exe, + depends : [cmp_tool_exe, test_data], timeout : 100, workdir : meson.project_build_root()) else