Skip to content

Commit

Permalink
[version-test] Work around bugs in v0.7.3 dict builder
Browse files Browse the repository at this point in the history
Before calling a dictionary good, make sure that it can compress an
input. If v0.7.3 rejects v0.7.3's dictionary, fall back to the v1.0
dictionary. This is not the job of the verison test to test it, because
we cannot fix this code.
  • Loading branch information
terrelln committed Jan 25, 2023
1 parent 8957fef commit 321490c
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion tests/test-zstd-versions.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,18 @@ def get_git_tags():
return tags


def dict_ok(tag, dict_name, sample):
if not os.path.isfile(dict_name):
return False
try:
cmd = ['./zstd.' + tag, '-D', dict_name]
with open(sample, "rb") as i:
subprocess.check_call(cmd, stdin=i, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
return True
except:
return False


def create_dict(tag, dict_source_path, fallback_tag=None):
dict_name = 'dict.' + tag
if not os.path.isfile(dict_name):
Expand All @@ -96,7 +108,7 @@ def create_dict(tag, dict_source_path, fallback_tag=None):
result = execute('./dictBuilder.' + tag + ' ' + ' '.join(files) + ' -o ' + dict_name, print_output=False, param_shell=True)
else:
result = execute('./zstd.' + tag + ' -f --train ' + ' '.join(files) + ' -o ' + dict_name, print_output=False, param_shell=True)
if result == 0 and os.path.isfile(dict_name):
if result == 0 and dict_ok(tag, dict_name, files[0]):
print(dict_name + ' created')
elif fallback_tag is not None:
fallback_dict_name = 'dict.' + fallback_tag
Expand Down

0 comments on commit 321490c

Please sign in to comment.