diff --git a/swh/model/hypothesis_strategies.py b/swh/model/hypothesis_strategies.py --- a/swh/model/hypothesis_strategies.py +++ b/swh/model/hypothesis_strategies.py @@ -215,7 +215,7 @@ target = sha1_git() metadata = optional(revision_metadata()) - return draw( + d = draw( one_of( builds( dict, @@ -242,6 +242,11 @@ ) ) + raw_manifest = draw(optional(binary())) + if raw_manifest: + d["raw_manifest"] = raw_manifest + return d + def releases(): return releases_d().map(Release.from_dict) @@ -256,23 +261,31 @@ ).map(tuple) -def revisions_d(): - return builds( - dict, - message=optional(binary()), - synthetic=booleans(), - author=persons_d(), - committer=persons_d(), - date=timestamps_with_timezone_d(), - committer_date=timestamps_with_timezone_d(), - parents=tuples(sha1_git()), - directory=sha1_git(), - type=sampled_from([x.value for x in RevisionType]), - metadata=optional(revision_metadata()), - extra_headers=extra_headers(), +@composite +def revisions_d(draw): + d = draw( + builds( + dict, + message=optional(binary()), + synthetic=booleans(), + author=persons_d(), + committer=persons_d(), + date=timestamps_with_timezone_d(), + committer_date=timestamps_with_timezone_d(), + parents=tuples(sha1_git()), + directory=sha1_git(), + type=sampled_from([x.value for x in RevisionType]), + metadata=optional(revision_metadata()), + extra_headers=extra_headers(), + ) ) # TODO: metadata['extra_headers'] can have binary keys and values + raw_manifest = draw(optional(binary())) + if raw_manifest: + d["raw_manifest"] = raw_manifest + return d + def revisions(): return revisions_d().map(Revision.from_dict) @@ -316,8 +329,14 @@ return directory_entries_d().map(DirectoryEntry) -def directories_d(): - return builds(dict, entries=tuples(directory_entries_d())) +@composite +def directories_d(draw): + d = draw(builds(dict, entries=tuples(directory_entries_d()))) + + raw_manifest = draw(optional(binary())) + if raw_manifest: + d["raw_manifest"] = raw_manifest + return d def directories(): diff --git a/swh/model/tests/test_model.py b/swh/model/tests/test_model.py --- a/swh/model/tests/test_model.py +++ b/swh/model/tests/test_model.py @@ -753,7 +753,7 @@ # Directory -@given(strategies.directories()) +@given(strategies.directories().filter(lambda d: d.raw_manifest is None)) def test_directory_check(directory): directory.check() @@ -770,7 +770,7 @@ directory2.check() -@given(strategies.directories()) +@given(strategies.directories().filter(lambda d: d.raw_manifest is None)) def test_directory_raw_manifest(directory): assert "raw_manifest" not in directory.to_dict() @@ -813,7 +813,7 @@ # Release -@given(strategies.releases()) +@given(strategies.releases().filter(lambda rel: rel.raw_manifest is None)) def test_release_check(release): release.check() @@ -830,10 +830,8 @@ release2.check() -@given(strategies.releases()) +@given(strategies.releases().filter(lambda rev: rev.raw_manifest is None)) def test_release_raw_manifest(release): - assert "raw_manifest" not in release.to_dict() - raw_manifest = b"foo" id_ = hashlib.new("sha1", raw_manifest).digest() @@ -852,7 +850,7 @@ # Revision -@given(strategies.revisions()) +@given(strategies.revisions().filter(lambda rev: rev.raw_manifest is None)) def test_revision_check(revision): revision.check() @@ -869,9 +867,8 @@ revision2.check() -@given(strategies.revisions()) +@given(strategies.revisions().filter(lambda rev: rev.raw_manifest is None)) def test_revision_raw_manifest(revision): - assert "raw_manifest" not in revision.to_dict() raw_manifest = b"foo" id_ = hashlib.new("sha1", raw_manifest).digest()