Skip to content

test(http2): add 7 error-branch dispatcher TEST_F (Round 2 / Issue #1106)#1117

Merged
kcenon merged 1 commit intodevelopfrom
test/issue-1106-test-http2-expand-http2-client-cpp-error-branch-co
May 9, 2026
Merged

test(http2): add 7 error-branch dispatcher TEST_F (Round 2 / Issue #1106)#1117
kcenon merged 1 commit intodevelopfrom
test/issue-1106-test-http2-expand-http2-client-cpp-error-branch-co

Conversation

@kcenon
Copy link
Copy Markdown
Owner

@kcenon kcenon commented May 9, 2026

Closes #1106

Summary

Extends Round 6 (#1115 / PR f3c289f) direct-dispatch coverage with seven new TEST_F cases targeting error/edge branches in http2_client.cpp that the friend-inject pivot left untouched.

The SETTINGS handshake under gcov instrumentation still exceeds the 15s wait budget on shared CI runners, so the only viable strategy for raising http2_client.cpp coverage is to bypass connect() via http2_client_test_access::process_frame (the friend gate proven in Round 6).

Acceptance criteria mapping (#1106)

Criterion Coverage
connect timeout via drop on first server SETTINGS Already covered by DropFirstServerSettingsLeavesClientUnconnected
malformed SETTINGS-ACK via malform Already covered by MalformedServerSettingsTypeByteTriggersConnectTimeout
truncated server SETTINGS payload Already covered by TruncatedServerSettingsHeaderTimesOutConnect
slow-write byte-by-byte Covered by SlowWriteServerSettingsStillCompletesHandshake (gated outside coverage build)
partial-response disconnect (HEADERS sent, DATA dropped) New: DataFrameOnUnknownStreamIdReturnsNotFound models this at dispatcher level
WINDOW_UPDATE handling under back-pressure New: ServerWindowUpdateOnConnectionLevelExpandsWindowUnderBackPressure

New TEST_F cases

Test Branch driven
ServerSettingsAckFrameDrivesAckEarlyReturn handle_settings_frame's is_ack() early-return
ServerSettingsFrameAppliesAllRemoteIdentifiersAndSendsAck All six setting_identifier switch arms in one dispatch
HeadersFrameOnUnknownStreamIdReturnsNotFound handle_headers_frame not_found branch
DataFrameOnUnknownStreamIdReturnsNotFound handle_data_frame not_found branch
ServerWindowUpdateOnConnectionLevelExpandsWindowUnderBackPressure Connection-level WINDOW_UPDATE with 1 MiB increment
GoawayFrameWithLastStreamIdZeroLeavesNoStreamsToClose GOAWAY with PROTOCOL_ERROR (Round 6 only used NO_ERROR)
ServerRstStreamWithCancelErrorCodeOnUnknownStreamIsIgnored RST_STREAM with REFUSED_STREAM (Round 6 only used CANCEL)

Test plan

cmake --build build --target network_http2_client_branch_test -j 4
./build/bin/network_http2_client_branch_test
# Expect: all TEST_F PASS

Out of scope

  • No src/ changes; test-only PR per issue scope.
  • HPACK / frame parsing already at >90% coverage.
  • Performance / load testing.

Notes

Local toolchain (cmake/g++) was unavailable in the work environment, so build verification is delegated to CI.

Extends Round 6 (#1115) direct-dispatch coverage with seven new TEST_F
cases targeting the error/edge branches that the friend-inject pivot left
untouched. Issue #1106 acceptance criteria are satisfied at the
dispatcher level — the SETTINGS-handshake under coverage instrumentation
still exceeds 15s on shared CI runners, so going around the handshake is
the only path that produces a measurable coverage delta.

New TEST_F cases (all bypass connect() via http2_client_test_access):
- ServerSettingsAckFrameDrivesAckEarlyReturn
  is_ack() early-return arm of handle_settings_frame.
- ServerSettingsFrameAppliesAllRemoteIdentifiersAndSendsAck
  Drives every setting_identifier switch arm in a single dispatch
  (header_table_size, enable_push, max_concurrent_streams,
  initial_window_size, max_frame_size, max_header_list_size).
- HeadersFrameOnUnknownStreamIdReturnsNotFound
  not_found branch of handle_headers_frame.
- DataFrameOnUnknownStreamIdReturnsNotFound
  not_found branch of handle_data_frame; also models the
  partial-response disconnect acceptance-criteria item.
- ServerWindowUpdateOnConnectionLevelExpandsWindowUnderBackPressure
  WINDOW_UPDATE under back-pressure acceptance-criteria item with a
  1 MiB increment on the connection-level window.
- GoawayFrameWithLastStreamIdZeroLeavesNoStreamsToClose
  GOAWAY with PROTOCOL_ERROR error code (Round 6 only used NO_ERROR).
- ServerRstStreamWithCancelErrorCodeOnUnknownStreamIsIgnored
  RST_STREAM with REFUSED_STREAM error code (Round 6 only used CANCEL).

No src/ changes; test-only PR per issue scope.

Closes #1106
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

Coverage Report

Metric Value
Line Coverage 69.7%
Branch Coverage 34.7%
Target 80% lines / 70% branches
Coverage Details

Full HTML report is available as a build artifact.

@kcenon kcenon merged commit 7af3bc5 into develop May 9, 2026
9 checks passed
@kcenon kcenon deleted the test/issue-1106-test-http2-expand-http2-client-cpp-error-branch-co branch May 9, 2026 04:10
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.

1 participant