Skip to content

Commit 91a63b9

Browse files
committed
refactor(transport): split ConnectionInfo into ConnectionInfo + SecurityInfo
1 parent d59c2c6 commit 91a63b9

30 files changed

Lines changed: 167 additions & 117 deletions

src/Servus.Akka.TestKit.Tests/ActivityLogSpec.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ public void OfType_should_filter_by_type()
2525
var connectionInfo = new ConnectionInfo(
2626
new IPEndPoint(IPAddress.Loopback, 1000),
2727
new IPEndPoint(IPAddress.Loopback, 2000),
28-
null,
29-
null);
28+
TransportProtocol.Tcp);
3029
var inbound = new InboundPushed(0, new TransportConnected(connectionInfo));
3130
var handler = new HandlerInvoked("TestHandler", new TransportData(new byte[] { 0xBB }));
3231

@@ -56,8 +55,7 @@ public void Clear_should_remove_all_entries()
5655
var connectionInfo = new ConnectionInfo(
5756
new IPEndPoint(IPAddress.Loopback, 1000),
5857
new IPEndPoint(IPAddress.Loopback, 2000),
59-
null,
60-
null);
58+
TransportProtocol.Tcp);
6159
log.Record(new InboundPushed(0, new TransportConnected(connectionInfo)));
6260
log.Record(new StageCompleted());
6361

@@ -75,7 +73,7 @@ public void ListenerConnectionAccepted_should_set_properties()
7573

7674
Assert.Equal(42, activity.Index);
7775
Assert.True(activity.FromFactory);
78-
Assert.NotEqual(default(DateTimeOffset), activity.Timestamp);
76+
Assert.NotEqual(default, activity.Timestamp);
7977
}
8078

8179
[Fact(Timeout = 5000)]
@@ -85,4 +83,4 @@ public void Activity_Timestamp_should_be_utc()
8583

8684
Assert.Equal(DateTimeOffset.UtcNow.Offset, activity.Timestamp.Offset);
8785
}
88-
}
86+
}

src/Servus.Akka.TestKit/TestConnectionStageBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public sealed class TestConnectionStageBuilder
1212
public TestConnectionStageBuilder AutoConnect(ConnectionInfo? info = null)
1313
{
1414
_autoConnect = true;
15-
_autoConnectInfo = info ?? new ConnectionInfo(null!, null!, null, null);
15+
_autoConnectInfo = info ?? ConnectionInfo.None;
1616
return this;
1717
}
1818

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

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -8,43 +8,43 @@ namespace Servus.Akka.Tests.Transport;
88
public sealed class ConnectionInfoSpec
99
{
1010
[Fact(Timeout = 5000)]
11-
public void Should_store_all_properties()
11+
public void Should_store_endpoints_and_protocol()
1212
{
1313
var local = new IPEndPoint(IPAddress.Loopback, 5000);
1414
var remote = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 443);
15-
var sslProtocol = SslProtocols.Tls13;
16-
var appProtocol = SslApplicationProtocol.Http2;
1715

18-
var info = new ConnectionInfo(local, remote, sslProtocol, appProtocol);
16+
var info = new ConnectionInfo(local, remote, TransportProtocol.Tcp);
1917

2018
Assert.Equal(local, info.Local);
2119
Assert.Equal(remote, info.Remote);
22-
Assert.Equal(sslProtocol, info.NegotiatedSslProtocol);
23-
Assert.Equal(appProtocol, info.NegotiatedApplicationProtocol);
20+
Assert.Equal(TransportProtocol.Tcp, info.Protocol);
21+
Assert.Null(info.Security);
2422
}
2523

2624
[Fact(Timeout = 5000)]
27-
public void Should_support_null_ssl_properties()
25+
public void Should_store_security_info_when_provided()
2826
{
29-
var local = new IPEndPoint(IPAddress.Loopback, 8080);
30-
var remote = new IPEndPoint(IPAddress.Parse("10.0.0.1"), 80);
27+
var local = new IPEndPoint(IPAddress.Loopback, 5000);
28+
var remote = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 443);
29+
var security = new SecurityInfo(SslProtocols.Tls13, SslApplicationProtocol.Http2);
3130

32-
var info = new ConnectionInfo(local, remote, NegotiatedSslProtocol: null, NegotiatedApplicationProtocol: null);
31+
var info = new ConnectionInfo(local, remote, TransportProtocol.Tls, security);
3332

34-
Assert.Equal(local, info.Local);
35-
Assert.Equal(remote, info.Remote);
36-
Assert.Null(info.NegotiatedSslProtocol);
37-
Assert.Null(info.NegotiatedApplicationProtocol);
33+
Assert.Equal(TransportProtocol.Tls, info.Protocol);
34+
Assert.NotNull(info.Security);
35+
Assert.Equal(SslProtocols.Tls13, info.Security.Protocol);
36+
Assert.Equal(SslApplicationProtocol.Http2, info.Security.ApplicationProtocol);
3837
}
3938

4039
[Fact(Timeout = 5000)]
4140
public void Equality_should_work_for_records()
4241
{
4342
var local = new IPEndPoint(IPAddress.Loopback, 5000);
4443
var remote = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 443);
44+
var security = new SecurityInfo(SslProtocols.Tls13, SslApplicationProtocol.Http2);
4545

46-
var info1 = new ConnectionInfo(local, remote, SslProtocols.Tls13, SslApplicationProtocol.Http2);
47-
var info2 = new ConnectionInfo(local, remote, SslProtocols.Tls13, SslApplicationProtocol.Http2);
46+
var info1 = new ConnectionInfo(local, remote, TransportProtocol.Tls, security);
47+
var info2 = new ConnectionInfo(local, remote, TransportProtocol.Tls, security);
4848

4949
Assert.Equal(info1, info2);
5050
Assert.Equal(info1.GetHashCode(), info2.GetHashCode());
@@ -57,8 +57,8 @@ public void Inequality_should_work_for_different_local_endpoint()
5757
var local2 = new IPEndPoint(IPAddress.Loopback, 5001);
5858
var remote = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 443);
5959

60-
var info1 = new ConnectionInfo(local1, remote, SslProtocols.Tls13, SslApplicationProtocol.Http2);
61-
var info2 = new ConnectionInfo(local2, remote, SslProtocols.Tls13, SslApplicationProtocol.Http2);
60+
var info1 = new ConnectionInfo(local1, remote, TransportProtocol.Tcp);
61+
var info2 = new ConnectionInfo(local2, remote, TransportProtocol.Tcp);
6262

6363
Assert.NotEqual(info1, info2);
6464
}
@@ -70,50 +70,45 @@ public void Inequality_should_work_for_different_remote_endpoint()
7070
var remote1 = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 443);
7171
var remote2 = new IPEndPoint(IPAddress.Parse("192.168.1.2"), 443);
7272

73-
var info1 = new ConnectionInfo(local, remote1, SslProtocols.Tls13, SslApplicationProtocol.Http2);
74-
var info2 = new ConnectionInfo(local, remote2, SslProtocols.Tls13, SslApplicationProtocol.Http2);
73+
var info1 = new ConnectionInfo(local, remote1, TransportProtocol.Tcp);
74+
var info2 = new ConnectionInfo(local, remote2, TransportProtocol.Tcp);
7575

7676
Assert.NotEqual(info1, info2);
7777
}
7878

7979
[Fact(Timeout = 5000)]
80-
public void Inequality_should_work_for_different_ssl_protocol()
80+
public void Inequality_should_work_for_different_protocol()
8181
{
8282
var local = new IPEndPoint(IPAddress.Loopback, 5000);
8383
var remote = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 443);
8484

85-
var info1 = new ConnectionInfo(local, remote, SslProtocols.Tls13, SslApplicationProtocol.Http2);
86-
var info2 = new ConnectionInfo(local, remote, SslProtocols.Tls12, SslApplicationProtocol.Http2);
85+
var info1 = new ConnectionInfo(local, remote, TransportProtocol.Tcp);
86+
var info2 = new ConnectionInfo(local, remote, TransportProtocol.Quic);
8787

8888
Assert.NotEqual(info1, info2);
8989
}
9090

9191
[Fact(Timeout = 5000)]
92-
public void Inequality_should_work_for_different_app_protocol()
92+
public void Inequality_should_work_for_different_security()
9393
{
9494
var local = new IPEndPoint(IPAddress.Loopback, 5000);
9595
var remote = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 443);
9696

97-
var info1 = new ConnectionInfo(local, remote, SslProtocols.Tls13, SslApplicationProtocol.Http2);
98-
var info2 = new ConnectionInfo(local, remote, SslProtocols.Tls13, SslApplicationProtocol.Http11);
97+
var info1 = new ConnectionInfo(local, remote, TransportProtocol.Tls,
98+
new SecurityInfo(SslProtocols.Tls13, SslApplicationProtocol.Http2));
99+
var info2 = new ConnectionInfo(local, remote, TransportProtocol.Tls,
100+
new SecurityInfo(SslProtocols.Tls12, SslApplicationProtocol.Http2));
99101

100102
Assert.NotEqual(info1, info2);
101103
}
102104

103105
[Fact(Timeout = 5000)]
104-
public void Should_support_mixed_null_ssl_fields()
106+
public void None_should_have_sensible_defaults()
105107
{
106-
var local = new IPEndPoint(IPAddress.Loopback, 5000);
107-
var remote = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 443);
108-
109-
var info1 = new ConnectionInfo(local, remote, SslProtocols.Tls13, NegotiatedApplicationProtocol: null);
110-
var info2 = new ConnectionInfo(local, remote, NegotiatedSslProtocol: null, SslApplicationProtocol.Http2);
111-
112-
Assert.Equal(SslProtocols.Tls13, info1.NegotiatedSslProtocol);
113-
Assert.Null(info1.NegotiatedApplicationProtocol);
108+
var none = ConnectionInfo.None;
114109

115-
Assert.Null(info2.NegotiatedSslProtocol);
116-
Assert.Equal(SslApplicationProtocol.Http2, info2.NegotiatedApplicationProtocol);
110+
Assert.Equal(TransportProtocol.None, none.Protocol);
111+
Assert.Null(none.Security);
117112
}
118113

119114
[Fact(Timeout = 5000)]
@@ -122,8 +117,10 @@ public void Should_work_as_dictionary_key()
122117
var local = new IPEndPoint(IPAddress.Loopback, 5000);
123118
var remote = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 443);
124119

125-
var info1 = new ConnectionInfo(local, remote, SslProtocols.Tls13, SslApplicationProtocol.Http2);
126-
var info2 = new ConnectionInfo(local, remote, SslProtocols.Tls13, SslApplicationProtocol.Http2);
120+
var info1 = new ConnectionInfo(local, remote, TransportProtocol.Tls,
121+
new SecurityInfo(SslProtocols.Tls13, SslApplicationProtocol.Http2));
122+
var info2 = new ConnectionInfo(local, remote, TransportProtocol.Tls,
123+
new SecurityInfo(SslProtocols.Tls13, SslApplicationProtocol.Http2));
127124

128125
var dict = new Dictionary<ConnectionInfo, string> { { info1, "pooled" } };
129126

src/Servus.Akka.Tests/Transport/Quic/Listener/QuicServerConnectionStageSpec.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ public void QuicServerConnectionStage_should_have_flow_shape()
2121
var connectionInfo = new ConnectionInfo(
2222
new IPEndPoint(IPAddress.Loopback, 5000),
2323
new IPEndPoint(IPAddress.Loopback, 12345),
24-
null,
25-
null);
24+
TransportProtocol.None);
2625

2726
var stage = new QuicServerConnectionStage(connectionHandle, connectionInfo);
2827

@@ -43,8 +42,7 @@ public void QuicServerConnectionStage_shape_should_have_correct_port_names()
4342
var connectionInfo = new ConnectionInfo(
4443
new IPEndPoint(IPAddress.Loopback, 5000),
4544
new IPEndPoint(IPAddress.Loopback, 12345),
46-
null,
47-
null);
45+
TransportProtocol.None);
4846

4947
var stage = new QuicServerConnectionStage(connectionHandle, connectionInfo);
5048
var shape = stage.Shape;

src/Servus.Akka.Tests/Transport/Tcp/Client/TcpTransportStateMachineSpec.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ private static ConnectionLease CreateTestLease()
3333
var state = new ClientState(Stream.Null);
3434
var cts = new CancellationTokenSource();
3535
var handle = new ConnectionHandle(state.OutboundWriter, state.InboundReader, cts.Token);
36-
return new ConnectionLease(handle, state, cts);
36+
return new ConnectionLease(handle, state, cts, ConnectionInfo.None);
3737
}
3838

3939
private static TransportBuffer CreateTestBuffer(params byte[] data)

src/Servus.Akka.Tests/Transport/Tcp/ConnectionLeaseSpec.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using Servus.Akka.Transport;
12
using Servus.Akka.Transport.Tcp;
23

34
namespace Servus.Akka.Tests.Transport.Tcp;
@@ -9,7 +10,7 @@ private static ConnectionLease CreateLease()
910
var state = new ClientState(Stream.Null);
1011
var cts = new CancellationTokenSource();
1112
var handle = new ConnectionHandle(state.OutboundWriter, state.InboundReader, cts.Token);
12-
var lease = new ConnectionLease(handle, state, cts);
13+
var lease = new ConnectionLease(handle, state, cts, ConnectionInfo.None);
1314
return lease;
1415
}
1516

@@ -55,7 +56,7 @@ public void ConnectionLease_should_dispose_stream_when_disposed()
5556
var state = new ClientState(memStream);
5657
var cts = new CancellationTokenSource();
5758
var handle = new ConnectionHandle(state.OutboundWriter, state.InboundReader, cts.Token);
58-
var lease = new ConnectionLease(handle, state, cts);
59+
var lease = new ConnectionLease(handle, state, cts, ConnectionInfo.None);
5960

6061
lease.Dispose();
6162

src/Servus.Akka.Tests/Transport/Tcp/Listener/TcpServerConnectionStageSpec.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ public void TcpServerConnectionStage_should_have_flow_shape()
1313
var connectionInfo = new ConnectionInfo(
1414
new IPEndPoint(IPAddress.Loopback, 5000),
1515
new IPEndPoint(IPAddress.Loopback, 12345),
16-
null,
17-
null);
16+
TransportProtocol.Tcp);
1817

1918
var stage = new TcpServerConnectionStage(Stream.Null, connectionInfo);
2019

@@ -28,8 +27,7 @@ public void TcpServerConnectionStage_shape_should_have_correct_port_names()
2827
var connectionInfo = new ConnectionInfo(
2928
new IPEndPoint(IPAddress.Loopback, 5000),
3029
new IPEndPoint(IPAddress.Loopback, 12345),
31-
null,
32-
null);
30+
TransportProtocol.Tcp);
3331

3432
var stage = new TcpServerConnectionStage(Stream.Null, connectionInfo);
3533
var shape = stage.Shape;

src/Servus.Akka.Tests/Transport/Tcp/Listener/TcpServerStateMachineSpec.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ public sealed class TcpServerStateMachineSpec
1313
private static readonly ConnectionInfo TestConnectionInfo = new(
1414
new IPEndPoint(IPAddress.Loopback, 5000),
1515
new IPEndPoint(IPAddress.Loopback, 12345),
16-
null,
17-
null);
16+
TransportProtocol.Tcp);
1817

1918
private static (TcpServerStateMachine Sm, MockTransportOperations Ops) CreateStateMachine(Stream? stream = null)
2019
{
@@ -256,9 +255,9 @@ public void HandlePush_unknown_message_type_should_not_throw()
256255
var (sm, ops) = CreateStateMachine();
257256
sm.Start();
258257

259-
sm.HandlePush(new OpenStream(1, StreamDirection.Bidirectional));
258+
sm.HandlePush(new OpenStream(1L, StreamDirection.Bidirectional));
260259

261-
Assert.True(ops.PullOutboundCount >= 0);
260+
Assert.True(ops.PullOutboundCount > 0);
262261
}
263262

264263
[Fact(Timeout = 5000)]

src/Servus.Akka.Tests/Transport/Tcp/TcpTransportEventSpec.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public void LeaseAcquired_should_preserve_lease()
1111
var state = new ClientState(Stream.Null);
1212
var cts = new CancellationTokenSource();
1313
var handle = new ConnectionHandle(state.OutboundWriter, state.InboundReader, cts.Token);
14-
var lease = new ConnectionLease(handle, state, cts);
14+
var lease = new ConnectionLease(handle, state, cts, ConnectionInfo.None);
1515

1616
var evt = new LeaseAcquired(lease);
1717

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

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ public sealed class TransportMessagesSpec
1010
private static readonly ConnectionInfo TestConnectionInfo = new(
1111
Local: new IPEndPoint(IPAddress.Loopback, 12345),
1212
Remote: new IPEndPoint(IPAddress.Parse("93.184.216.34"), 443),
13-
NegotiatedSslProtocol: SslProtocols.Tls13,
14-
NegotiatedApplicationProtocol: SslApplicationProtocol.Http2);
13+
Protocol: TransportProtocol.Tls,
14+
Security: new SecurityInfo(SslProtocols.Tls13, SslApplicationProtocol.Http2));
1515

1616
[Fact(Timeout = 5000)]
1717
public void ConnectTransport_should_implement_ITransportOutbound()
@@ -105,25 +105,26 @@ public void ConnectionInfo_should_expose_all_fields()
105105
{
106106
var local = new IPEndPoint(IPAddress.Loopback, 5000);
107107
var remote = new IPEndPoint(IPAddress.Parse("10.0.0.1"), 443);
108+
var security = new SecurityInfo(SslProtocols.Tls12, SslApplicationProtocol.Http11);
108109

109-
var info = new ConnectionInfo(local, remote, SslProtocols.Tls12, SslApplicationProtocol.Http11);
110+
var info = new ConnectionInfo(local, remote, TransportProtocol.Tls, security);
110111

111112
Assert.Equal(local, info.Local);
112113
Assert.Equal(remote, info.Remote);
113-
Assert.Equal(SslProtocols.Tls12, info.NegotiatedSslProtocol);
114-
Assert.Equal(SslApplicationProtocol.Http11, info.NegotiatedApplicationProtocol);
114+
Assert.Equal(TransportProtocol.Tls, info.Protocol);
115+
Assert.NotNull(info.Security);
116+
Assert.Equal(SslProtocols.Tls12, info.Security.Protocol);
117+
Assert.Equal(SslApplicationProtocol.Http11, info.Security.ApplicationProtocol);
115118
}
116119

117120
[Fact(Timeout = 5000)]
118-
public void ConnectionInfo_should_allow_null_ssl_fields()
121+
public void ConnectionInfo_should_allow_null_security()
119122
{
120123
var info = new ConnectionInfo(
121124
new IPEndPoint(IPAddress.Loopback, 5000),
122125
new IPEndPoint(IPAddress.Loopback, 80),
123-
NegotiatedSslProtocol: null,
124-
NegotiatedApplicationProtocol: null);
126+
TransportProtocol.Tcp);
125127

126-
Assert.Null(info.NegotiatedSslProtocol);
127-
Assert.Null(info.NegotiatedApplicationProtocol);
128+
Assert.Null(info.Security);
128129
}
129130
}

0 commit comments

Comments
 (0)