Skip to content

Add MockBroker / MockTransport for deterministic protocol tests#2861

Merged
dpkp merged 2 commits intomasterfrom
claude/mock-broker
Apr 12, 2026
Merged

Add MockBroker / MockTransport for deterministic protocol tests#2861
dpkp merged 2 commits intomasterfrom
claude/mock-broker

Conversation

@dpkp
Copy link
Copy Markdown
Owner

@dpkp dpkp commented Apr 12, 2026

In-memory mock broker infrastructure that plugs into kafka.net's
KafkaConnection at the transport layer, enabling protocol-level tests
without a real Kafka broker.

MockTransport replaces KafkaTCPTransport: no sockets, no select().
On write(), it decodes framed Kafka requests, passes them to
MockBroker for handling, and delivers response bytes back to the
connection's data_received() via the event loop's call_soon.

MockBroker provides:

  • Auto-responses for ApiVersionsRequest (with UnsupportedVersionError
    version negotiation per KIP-511) and MetadataRequest (configurable
    via set_metadata())
  • respond(request_class, response) for scripted FIFO responses
    matched by API key
  • respond_fn(request_class, fn) for dynamic responses; fn can be
    sync or async (coroutine) to support delay injection via
    await net.sleep()
  • attach(manager) to monkey-patch a KafkaConnectionManager
  • client_factory() returning a kafka_client= callable for use with
    KafkaConsumer, KafkaProducer, and KafkaAdminClient constructors

10 tests covering: unit-level construction/queuing, bootstrap
round-trip, topic metadata, scripted responses, metadata updates,
send/receive, ApiVersions version negotiation, and KafkaAdminClient
integration.

Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com

In-memory mock broker infrastructure that plugs into kafka.net's
KafkaConnection at the transport layer, enabling protocol-level tests
without a real Kafka broker.

MockTransport replaces KafkaTCPTransport: no sockets, no select().
On write(), it decodes framed Kafka requests, passes them to
MockBroker for handling, and delivers response bytes back to the
connection's data_received() via the event loop's call_soon.

MockBroker provides:
- Auto-responses for ApiVersionsRequest (with UnsupportedVersionError
  version negotiation per KIP-511) and MetadataRequest (configurable
  via set_metadata())
- respond(request_class, response) for scripted FIFO responses
  matched by API key
- respond_fn(request_class, fn) for dynamic responses; fn can be
  sync or async (coroutine) to support delay injection via
  await net.sleep()
- attach(manager) to monkey-patch a KafkaConnectionManager
- client_factory() returning a kafka_client= callable for use with
  KafkaConsumer, KafkaProducer, and KafkaAdminClient constructors

10 tests covering: unit-level construction/queuing, bootstrap
round-trip, topic metadata, scripted responses, metadata updates,
send/receive, ApiVersions version negotiation, and KafkaAdminClient
integration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@dpkp dpkp added this to the 3.0 Release milestone Apr 12, 2026
Comment thread test/mock_broker.py Dismissed
@dpkp dpkp merged commit 22818dc into master Apr 12, 2026
19 checks passed
@dpkp dpkp deleted the claude/mock-broker branch April 12, 2026 14: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.

2 participants