Skip to content

Commit 24d1b9e

Browse files
committed
refactor(h3): remove 0-RTT early data and server push dead code
1 parent 4d56551 commit 24d1b9e

15 files changed

Lines changed: 35 additions & 278 deletions

src/Servus.Akka.Tests/Transport/Quic/Client/QuicTransportStateMachineSpec.cs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -140,21 +140,6 @@ public void Dispatch_OutboundWriteDone_should_signal_pull()
140140
Assert.True(ops.PullCount > 0);
141141
}
142142

143-
[Fact(Timeout = 5000)]
144-
public void Dispatch_EarlyDataRejected_should_push_DataRejected()
145-
{
146-
var ops = new StubOps();
147-
var sm = new QuicTransportStateMachine(ops, ActorRefs.Nobody, ActorRefs.Nobody);
148-
149-
var buffer = TransportBuffer.Rent(16);
150-
buffer.Length = 4;
151-
152-
sm.Dispatch(new EarlyDataRejected(buffer));
153-
154-
Assert.Single(ops.PushedInbound);
155-
Assert.IsType<DataRejected>(ops.PushedInbound[0]);
156-
}
157-
158143
[Fact(Timeout = 5000)]
159144
public void HandlePush_DisconnectTransport_should_signal_pull()
160145
{

src/Servus.Akka.Tests/Transport/Quic/QuicTransportEventSpec.cs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -140,19 +140,4 @@ public void MigrationDetected_should_implement_IQuicTransportEvent()
140140
Assert.Same(newEndPoint, evt.NewEndPoint);
141141
}
142142

143-
[Fact(Timeout = 5000)]
144-
public void EarlyDataRejected_should_implement_IQuicTransportEvent()
145-
{
146-
var buffer = TransportBuffer.Rent(32);
147-
try
148-
{
149-
var evt = new EarlyDataRejected(buffer);
150-
151-
Assert.NotNull(evt.Buffer);
152-
}
153-
finally
154-
{
155-
buffer.Dispose();
156-
}
157-
}
158143
}

src/Servus.Akka.Tests/Transport/TransportOptionsSpec.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ public void QuicTransportOptions_should_have_correct_defaults()
114114
Assert.Equal(TimeSpan.FromSeconds(30), opts.IdleTimeout);
115115
Assert.Equal(100, opts.MaxBidirectionalStreams);
116116
Assert.Equal(3, opts.MaxUnidirectionalStreams);
117-
Assert.False(opts.AllowEarlyData);
118117
Assert.True(opts.AllowConnectionMigration);
119118
}
120119

src/Servus.Akka/Transport/ITransportInbound.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ public sealed record ServerStreamAccepted(long StreamId, StreamDirection Directi
1818

1919
public sealed record InboundStreamAccepted(long StreamId, long StreamType) : ITransportInbound;
2020

21-
public sealed record DataRejected(TransportBuffer Buffer) : ITransportInbound;
22-
2321
public sealed record ConnectionMigrationDetected(
2422
System.Net.EndPoint OldEndPoint,
2523
System.Net.EndPoint NewEndPoint) : ITransportInbound;

src/Servus.Akka/Transport/Quic/Client/QuicTransportStateMachine.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,6 @@ internal void Dispatch(IQuicTransportEvent evt)
9090
case MigrationDetected e:
9191
_ops.OnPushInbound(new ConnectionMigrationDetected(e.OldEndPoint, e.NewEndPoint));
9292
break;
93-
case EarlyDataRejected e:
94-
_ops.OnPushInbound(new DataRejected(e.Buffer));
95-
break;
9693
}
9794
}
9895

src/Servus.Akka/Transport/Quic/QuicTransportEvent.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@ internal interface IQuicTransportEvent;
2525

2626
internal readonly record struct MigrationDetected(EndPoint OldEndPoint, EndPoint NewEndPoint) : IQuicTransportEvent;
2727

28-
internal readonly record struct EarlyDataRejected(TransportBuffer Buffer) : IQuicTransportEvent;
28+

src/Servus.Akka/Transport/QuicTransportOptions.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ public sealed record QuicTransportOptions : TransportOptions
1010
public TimeSpan IdleTimeout { get; init; } = TimeSpan.FromSeconds(30);
1111
public int MaxBidirectionalStreams { get; init; } = 100;
1212
public int MaxUnidirectionalStreams { get; init; } = 3;
13-
public bool AllowEarlyData { get; init; }
1413
public bool AllowConnectionMigration { get; init; } = true;
1514
public X509CertificateCollection? ClientCertificates { get; init; }
1615
public RemoteCertificateValidationCallback? ServerCertificateValidationCallback { get; init; }

src/TurboHTTP.Tests/Http3/Connection/Http3EarlyDataSpec.cs

Lines changed: 0 additions & 95 deletions
This file was deleted.

src/TurboHTTP.Tests/Http3/Connection/Http3StateMachineEdgeCasesSpec.cs

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -47,31 +47,14 @@ public void TryBuildControlPreface_should_return_null_on_subsequent_calls()
4747

4848
[Fact(Timeout = 5000)]
4949
[Trait("RFC", "RFC9114-6.2")]
50-
public void TryBuildControlPreface_should_include_max_push_id_when_push_enabled()
50+
public void TryBuildControlPreface_should_not_include_max_push_id()
5151
{
52-
var sm = CreateMachine(new TurboClientOptions { Http3 = new Http3Options { AllowServerPush = true } });
53-
54-
var preface = sm.TryBuildControlPreface();
55-
56-
Assert.NotNull(preface);
57-
var buf = (MultiplexedData)preface;
58-
// Preface contains: StreamType VarInt + Settings frame + MaxPushIdFrame
59-
// With MAX_PUSH_ID, size should be larger than without it
60-
61-
Assert.True(buf.Buffer.Length > 0);
62-
}
63-
64-
[Fact(Timeout = 5000)]
65-
[Trait("RFC", "RFC9114-6.2")]
66-
public void TryBuildControlPreface_should_not_include_max_push_id_when_push_disabled()
67-
{
68-
var sm = CreateMachine(new TurboClientOptions { Http3 = new Http3Options { AllowServerPush = false } });
52+
var sm = CreateMachine();
6953

7054
var preface = sm.TryBuildControlPreface();
7155

7256
Assert.NotNull(preface);
7357
var buf = (MultiplexedData)preface;
74-
// Without MaxPushIdFrame, still contains StreamType VarInt + Settings frame
7558
Assert.Equal(-2, buf.StreamId);
7659
Assert.True(buf.Buffer.Length > 0);
7760
}

src/TurboHTTP.Tests/Http3/Connection/Http3StateMachineSpec.cs

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -115,60 +115,28 @@ public void ProcessFrame_should_warn_on_non_divisible_by_four_goaway()
115115
}
116116

117117
[Fact(Timeout = 5000)]
118-
public void ProcessFrame_should_reject_push_promise_when_push_disabled()
118+
public void ProcessFrame_should_reject_push_promise_with_cancel_push()
119119
{
120-
var sm = CreateMachine(new TurboClientOptions { Http3 = new Http3Options { AllowServerPush = false } });
120+
var sm = CreateMachine();
121121
var push = new Http3PushPromiseFrame(1, new byte[] { 0x01 });
122122

123123
var result = sm.ProcessFrame(push);
124124

125125
Assert.Null(result);
126-
Assert.Single(_ops.Outbound); // serialized CANCEL_PUSH frame
126+
Assert.Single(_ops.Outbound);
127127
Assert.IsType<TransportData>(_ops.Outbound[0]);
128128
}
129129

130130
[Fact(Timeout = 5000)]
131131
public void ProcessFrame_should_warn_when_push_rejected()
132132
{
133-
var sm = CreateMachine(new TurboClientOptions { Http3 = new Http3Options { AllowServerPush = false } });
133+
var sm = CreateMachine();
134134

135135
sm.ProcessFrame(new Http3PushPromiseFrame(42, new byte[] { 0x01 }));
136136

137137
Assert.Contains(_ops.Warnings, w => w.Contains("push promise rejected") && w.Contains("42"));
138138
}
139139

140-
[Fact(Timeout = 5000)]
141-
public void ProcessFrame_should_forward_push_promise_to_app_when_push_enabled()
142-
{
143-
var sm = CreateMachine(new TurboClientOptions { Http3 = new Http3Options { AllowServerPush = true } });
144-
var push = new Http3PushPromiseFrame(1, new byte[] { 0x01 });
145-
146-
var result = sm.ProcessFrame(push);
147-
148-
Assert.Same(push, result); // forwarded to app layer
149-
Assert.Empty(_ops.Outbound); // no CANCEL_PUSH sent
150-
}
151-
152-
[Fact(Timeout = 5000)]
153-
public void ProcessFrame_should_enforce_push_limit_when_push_enabled()
154-
{
155-
var sm = CreateMachine(new TurboClientOptions { Http3 = new Http3Options { AllowServerPush = true } });
156-
157-
// The default maxPushCount is 100 when AllowServerPush = true.
158-
// Push 100 times to hit the limit, then one more should warn.
159-
for (var i = 0; i < 100; i++)
160-
{
161-
var forwarded = sm.ProcessFrame(new Http3PushPromiseFrame(i, new byte[] { 0x01 }));
162-
Assert.NotNull(forwarded); // each push is forwarded to app
163-
}
164-
165-
_ops.Warnings.Clear();
166-
var exceeded = sm.ProcessFrame(new Http3PushPromiseFrame(100, new byte[] { 0x01 }));
167-
168-
Assert.Null(exceeded); // push limit exceeded — not forwarded
169-
Assert.Contains(_ops.Warnings, w => w.Contains("Push limit exceeded"));
170-
}
171-
172140
[Fact(Timeout = 5000)]
173141
public void ProcessFrame_should_absorb_cancel_push_frame()
174142
{

0 commit comments

Comments
 (0)