test: make tests independent of zip encoding#3239
test: make tests independent of zip encoding#3239supervacuus wants to merge 3 commits intogetsentry:masterfrom
Conversation
loewenheim
left a comment
There was a problem hiding this comment.
As remarked under #3237, I'm in favor of this change, but would like @szokeasaurusrex's opinion as well.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
| decoder.read_to_end(&mut content)?; | ||
| decompressed.push(content); | ||
| } | ||
| } |
There was a problem hiding this comment.
Silent skipping of malformed parts masks test failures
Low Severity
decompress_chunks silently skips any multipart part that doesn't contain a \r\n\r\n header/body separator, causing the returned Vec to have fewer items than split_chunk_body produced. Every caller then asserts on decompressed.len(), but the failure message ("expected N chunks but got M") would be misleading — the real problem would be a malformed or unexpected multipart part, not a wrong chunk count. Returning an error instead of silently dropping the part would make test failures much easier to diagnose.


Description
Extracted from #3237
This change was triggered by bumping
symbolicto12.17.3to include getsentry/symbolic#960.symbolicupdated itszipdependency (2.4.2to7.2.0) since the last bump. This changed encoding internals and invalidated a bunch of test assertions.The PR addresses the issue in the following way:
I rewrote the affected tests so that they decode the incoming chunks and compare their contents against the fixtures, rather than snapshotting, which could break with every change to the encoder. I also simplified the usage of
split_chunk_body()a bit: now it returns aVec, and callers decide how they want to view the data: the simple tests collect into aHashSetfor set comparison, while the small-chunk tests use aSHA1digest multimap to verify exact chunk identity and multiplicity.If you actually wanted an early warning whether the encoding was stable, then we can drop this PR.
Specifically, for
build_deterministic()insrc/utils/source_bundle.rs, it was not entirely clear whether you want two runs of the same version to have predictably the same output (which I changed it to) or whether it should actually be stable across future versions (which azipcrate bump upstream would break).Issues
Raised as part of the fix proposals for getsentry/sentry#104738
Legal Boilerplate
Look, I get it. The entity doing business as "Sentry" was incorporated in the State of Delaware in 2015 as Functional Software, Inc. and is gonna need some rights from me in order to utilize my contributions in this here PR. So here's the deal: I retain all rights, title and interest in and to my contributions, and by keeping this boilerplate intact I confirm that Sentry can use, modify, copy, and redistribute my contributions, under Sentry's choice of terms.