Skip to content

test: make tests independent of zip encoding#3239

Open
supervacuus wants to merge 3 commits intogetsentry:masterfrom
supervacuus:test/chunk-zip-stable
Open

test: make tests independent of zip encoding#3239
supervacuus wants to merge 3 commits intogetsentry:masterfrom
supervacuus:test/chunk-zip-stable

Conversation

@supervacuus
Copy link
Copy Markdown

Description

Extracted from #3237

This change was triggered by bumping symbolic to 12.17.3 to include getsentry/symbolic#960.

symbolic updated its zip dependency (2.4.2 to 7.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 a Vec, and callers decide how they want to view the data: the simple tests collect into a HashSet for set comparison, while the small-chunk tests use a SHA1 digest 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() in src/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 a zip crate 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.

@supervacuus supervacuus requested review from a team and szokeasaurusrex as code owners March 24, 2026 18:51
Copy link
Copy Markdown
Contributor

@loewenheim loewenheim left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As remarked under #3237, I'm in favor of this change, but would like @szokeasaurusrex's opinion as well.

Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

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);
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Fix in Cursor Fix in Web

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants