Skip to content

test: main is red on all five Pythons — #811's negative-length guard pre-empts #814's HTTP/2 struct.error assertion #822

Description

@JarryShaw

main at 3cbdf8999 fails 10 legs — Python 3.10/3.11/3.12/3.13/3.14 × (Unit, Engines) — on a single test. Run 36201817798.

FAILED tests/protocols/application/test_http_unit.py::HTTPUnitTests::
  test_guess_version_reports_a_preface_with_no_frame_as_such
  AssertionError: "Field debug resolved to a negative length; template='-1s'"
                  != 'HTTP/2: invalid format'

One defect, ten legs — every version fails identically, so this is not version-dependent. It is separate from #819, which is red on 3.10/3.11/3.12 only and is fixed by #820; main currently carries both.

Cause: an interaction between two PRs that were each green. test_http_unit.py:652 (added by #814) feeds a 16-octet GOAWAY whose declared length is 0x15 = 21 with 7 payload octets, and asserts it surfaces as ProtocolError('HTTP/2: invalid format') with __cause__ a struct.error, from the handler at pcapkit/protocols/application/http.py:319. But #811 added a negative-length guard in pcapkit/corekit/fields/field.py that now raises ProtocolError("Field debug resolved to a negative length; template='-1s'") first, so that handler never runs.

Why neither CI caught it: #814's head a8f804787 is based on 4530424df (#803) — before #811, #812 and #813 merged. It was 27✅/0❌/0inc on its own branch and still broke main, because the two trees differ by exactly field.py and the tests those PRs added. git diff refs/pull/814/head..origin/main shows it.

Either the assertion is now stale and should expect #811's message, or the HTTP/2 arm should normalise ahead of the field guard. That call belongs to the fix.

This is the second time a PR cleared as green-and-conflict-free merged red (#813/#819 was the first). The standing check — merge the PR into current main in a scratch worktree and run its tests before clearing it — was not run for #814, and would have caught this.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugciPull requests that change CI or workflow configuration (ci: subject prefix)testPull requests that add or correct tests (test: subject prefix)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions