Skip to content

Commit 87f9601

Browse files
authored
Convert Akka.Remote.Tests to async - Transport.GenericTransportSpec (#5898)
1 parent b231fad commit 87f9601

File tree

1 file changed

+66
-73
lines changed

1 file changed

+66
-73
lines changed

src/core/Akka.Remote.Tests/Transport/GenericTransportSpec.cs

Lines changed: 66 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,37 @@
99
using System.Linq;
1010
using System.Threading.Tasks;
1111
using Akka.Actor;
12-
using Akka.Remote.Serialization;
1312
using Akka.Remote.Transport;
1413
using Akka.TestKit;
14+
using Akka.TestKit.Extensions;
1515
using Google.Protobuf;
1616
using Xunit;
1717

1818
namespace Akka.Remote.Tests.Transport
1919
{
2020
public abstract class GenericTransportSpec : AkkaSpec
2121
{
22-
private Address addressATest = new Address("test", "testsytemA", "testhostA", 4321);
23-
private Address addressBTest = new Address("test", "testsytemB", "testhostB", 5432);
22+
private readonly Address _addressATest = new Address("test", "testsytemA", "testhostA", 4321);
23+
private readonly Address _addressBTest = new Address("test", "testsytemB", "testhostB", 5432);
2424

25-
private Address addressA;
26-
private Address addressB;
27-
private Address nonExistingAddress;
28-
private bool withAkkaProtocol;
25+
private Address _addressA;
26+
private Address _addressB;
27+
private Address _nonExistingAddress;
28+
private readonly bool _withAkkaProtocol;
2929

30-
public GenericTransportSpec(bool withAkkaProtocol = false)
30+
protected GenericTransportSpec(bool withAkkaProtocol = false)
3131
: base("akka.actor.provider = \"Akka.Remote.RemoteActorRefProvider, Akka.Remote\" ")
3232
{
33-
this.withAkkaProtocol = withAkkaProtocol;
33+
_withAkkaProtocol = withAkkaProtocol;
34+
}
3435

35-
addressA = addressATest.WithProtocol(string.Format("{0}.{1}", SchemeIdentifier, addressATest.Protocol));
36-
addressB = addressBTest.WithProtocol(string.Format("{0}.{1}", SchemeIdentifier, addressBTest.Protocol));
37-
nonExistingAddress = new Address(SchemeIdentifier + ".test", "nosystem", "nohost", 0);
36+
public override async Task InitializeAsync()
37+
{
38+
await base.InitializeAsync();
39+
40+
_addressA = _addressATest.WithProtocol($"{SchemeIdentifier}.{_addressATest.Protocol}");
41+
_addressB = _addressBTest.WithProtocol($"{SchemeIdentifier}.{_addressBTest.Protocol}");
42+
_nonExistingAddress = new Address(SchemeIdentifier + ".test", "nosystem", "nohost", 0);
3843
}
3944

4045
private TimeSpan DefaultTimeout { get { return Dilated(TestKitSettings.DefaultTimeout); } }
@@ -45,7 +50,7 @@ public GenericTransportSpec(bool withAkkaProtocol = false)
4550

4651
private Akka.Remote.Transport.Transport WrapTransport(Akka.Remote.Transport.Transport transport)
4752
{
48-
if (withAkkaProtocol) {
53+
if (_withAkkaProtocol) {
4954
var provider = (RemoteActorRefProvider)((ExtendedActorSystem)Sys).Provider;
5055

5156
return new AkkaProtocolTransport(transport, Sys, new AkkaProtocolSettings(provider.RemoteSettings.Config), new AkkaPduProtobuffCodec(Sys));
@@ -56,165 +61,153 @@ private Akka.Remote.Transport.Transport WrapTransport(Akka.Remote.Transport.Tran
5661

5762
private Akka.Remote.Transport.Transport NewTransportA(AssociationRegistry registry)
5863
{
59-
return WrapTransport(FreshTransport(new TestTransport(addressATest, registry)));
64+
return WrapTransport(FreshTransport(new TestTransport(_addressATest, registry)));
6065
}
6166

6267
private Akka.Remote.Transport.Transport NewTransportB(AssociationRegistry registry)
6368
{
64-
return WrapTransport(FreshTransport(new TestTransport(addressBTest, registry)));
69+
return WrapTransport(FreshTransport(new TestTransport(_addressBTest, registry)));
6570
}
6671

6772
[Fact]
68-
public void Transport_must_return_an_Address_and_promise_when_listen_is_called()
73+
public async Task Transport_must_return_an_Address_and_promise_when_listen_is_called()
6974
{
7075
var registry = new AssociationRegistry();
7176
var transportA = NewTransportA(registry);
7277

73-
var result = AwaitResult(transportA.Listen());
78+
var result = await transportA.Listen().WithTimeout(DefaultTimeout);
7479

75-
Assert.Equal(addressA, result.Item1);
80+
Assert.Equal(_addressA, result.Item1);
7681
Assert.NotNull(result.Item2);
7782

78-
Assert.Contains(registry.LogSnapshot().OfType<ListenAttempt>(), x => x.BoundAddress == addressATest);
83+
Assert.Contains(registry.LogSnapshot().OfType<ListenAttempt>(), x => x.BoundAddress == _addressATest);
7984
}
8085

8186
[Fact]
82-
public void Transport_must_associate_successfully_with_another_transport_of_its_kind()
87+
public async Task Transport_must_associate_successfully_with_another_transport_of_its_kind()
8388
{
8489
var registry = new AssociationRegistry();
8590
var transportA = NewTransportA(registry);
8691
var transportB = NewTransportB(registry);
8792

8893
// Must complete the returned promise to receive events
89-
AwaitResult(transportA.Listen()).Item2.SetResult(new ActorAssociationEventListener(TestActor));
90-
AwaitResult(transportB.Listen()).Item2.SetResult(new ActorAssociationEventListener(TestActor));
94+
(await transportA.Listen().WithTimeout(DefaultTimeout)).Item2.SetResult(new ActorAssociationEventListener(TestActor));
95+
(await transportB.Listen().WithTimeout(DefaultTimeout)).Item2.SetResult(new ActorAssociationEventListener(TestActor));
9196

92-
AwaitCondition(() => registry.TransportsReady(addressATest, addressBTest));
97+
await AwaitConditionAsync(() => registry.TransportsReady(_addressATest, _addressBTest));
9398

94-
transportA.Associate(addressB);
95-
ExpectMsgPf(DefaultTimeout, "Expect InboundAssociation from A", o =>
99+
// task is not awaited deliberately
100+
var task = transportA.Associate(_addressB);
101+
await ExpectMsgOfAsync(DefaultTimeout, "Expect InboundAssociation from A", o =>
96102
{
97-
var inbound = o as InboundAssociation;
98-
99-
if (inbound != null && inbound.Association.RemoteAddress == addressA)
103+
if (o is InboundAssociation inbound && inbound.Association.RemoteAddress == _addressA)
100104
return inbound.Association;
101105

102106
return null;
103107
});
104108

105-
Assert.Contains(registry.LogSnapshot().OfType<AssociateAttempt>(), x => x.LocalAddress == addressATest && x.RemoteAddress == addressBTest);
106-
AwaitCondition(() => registry.ExistsAssociation(addressATest, addressBTest));
109+
Assert.Contains(registry.LogSnapshot().OfType<AssociateAttempt>(), x => x.LocalAddress == _addressATest && x.RemoteAddress == _addressBTest);
110+
await AwaitConditionAsync(() => registry.ExistsAssociation(_addressATest, _addressBTest));
107111
}
108112

109113
[Fact]
110-
public void Transport_must_fail_to_associate_with_nonexisting_address()
114+
public async Task Transport_must_fail_to_associate_with_non_existing_address()
111115
{
112116
var registry = new AssociationRegistry();
113117
var transportA = NewTransportA(registry);
114118

115-
AwaitResult(transportA.Listen()).Item2.SetResult(new ActorAssociationEventListener(TestActor));
116-
AwaitCondition(() => registry.TransportsReady(addressATest));
119+
(await transportA.Listen().WithTimeout(DefaultTimeout)).Item2.SetResult(new ActorAssociationEventListener(TestActor));
120+
await AwaitConditionAsync(() => registry.TransportsReady(_addressATest));
117121

118122
// Transport throws InvalidAssociationException when trying to associate with non-existing system
119-
XAssert.Throws<InvalidAssociationException>(() =>
120-
AwaitResult(transportA.Associate(nonExistingAddress))
123+
await Assert.ThrowsAsync<InvalidAssociationException>(async () =>
124+
await transportA.Associate(_nonExistingAddress).WithTimeout(DefaultTimeout)
121125
);
122126
}
123127

124128
[Fact]
125-
public void Transport_must_successfully_send_PDUs()
129+
public async Task Transport_must_successfully_send_PDUs()
126130
{
127131
var registry = new AssociationRegistry();
128132
var transportA = NewTransportA(registry);
129133
var transportB = NewTransportB(registry);
130134

131-
AwaitResult(transportA.Listen()).Item2.SetResult(new ActorAssociationEventListener(TestActor));
132-
AwaitResult(transportB.Listen()).Item2.SetResult(new ActorAssociationEventListener(TestActor));
135+
(await transportA.Listen().WithTimeout(DefaultTimeout)).Item2.SetResult(new ActorAssociationEventListener(TestActor));
136+
(await transportB.Listen().WithTimeout(DefaultTimeout)).Item2.SetResult(new ActorAssociationEventListener(TestActor));
133137

134-
AwaitCondition(() => registry.TransportsReady(addressATest, addressBTest));
138+
await AwaitConditionAsync(() => registry.TransportsReady(_addressATest, _addressBTest));
135139

136-
var associate = transportA.Associate(addressB);
137-
var handleB = ExpectMsgPf(DefaultTimeout, "Expect InboundAssociation from A", o =>
140+
var associate = transportA.Associate(_addressB);
141+
var handleB = await ExpectMsgOfAsync(DefaultTimeout, "Expect InboundAssociation from A", o =>
138142
{
139-
var handle = o as InboundAssociation;
140-
if (handle != null && handle.Association.RemoteAddress == addressA)
143+
if (o is InboundAssociation handle && handle.Association.RemoteAddress == _addressA)
141144
return handle.Association;
142145

143146
return null;
144147
});
145148

146-
var handleA = AwaitResult(associate);
149+
var handleA = await associate.WithTimeout(DefaultTimeout);
147150

148151
// Initialize handles
149152
handleA.ReadHandlerSource.SetResult(new ActorHandleEventListener(TestActor));
150153
handleB.ReadHandlerSource.SetResult(new ActorHandleEventListener(TestActor));
151154

152155
var payload = ByteString.CopyFromUtf8("PDU");
153-
var pdu = withAkkaProtocol ? new AkkaPduProtobuffCodec(Sys).ConstructPayload(payload) : payload;
156+
var pdu = _withAkkaProtocol ? new AkkaPduProtobuffCodec(Sys).ConstructPayload(payload) : payload;
154157

155-
AwaitCondition(() => registry.ExistsAssociation(addressATest, addressBTest));
158+
await AwaitConditionAsync(() => registry.ExistsAssociation(_addressATest, _addressBTest));
156159

157160
handleA.Write(payload);
158-
ExpectMsgPf(DefaultTimeout, "Expect InboundPayload from A", o =>
161+
await ExpectMsgOfAsync(DefaultTimeout, "Expect InboundPayload from A", o =>
159162
{
160-
var inboundPayload = o as InboundPayload;
161-
162-
if (inboundPayload != null && inboundPayload.Payload.Equals(pdu))
163+
if (o is InboundPayload inboundPayload && inboundPayload.Payload.Equals(pdu))
163164
return inboundPayload.Payload;
164165

165166
return null;
166167
});
167168

168-
Assert.Contains(registry.LogSnapshot().OfType<WriteAttempt>(), x => x.Sender == addressATest && x.Recipient == addressBTest && x.Payload.Equals(pdu));
169+
Assert.Contains(registry.LogSnapshot().OfType<WriteAttempt>(), x => x.Sender == _addressATest && x.Recipient == _addressBTest && x.Payload.Equals(pdu));
169170
}
170171

171172
[Fact]
172-
public void Transport_must_successfully_disassociate()
173+
public async Task Transport_must_successfully_disassociate()
173174
{
174175
var registry = new AssociationRegistry();
175176
var transportA = NewTransportA(registry);
176177
var transportB = NewTransportB(registry);
177178

178-
AwaitResult(transportA.Listen()).Item2.SetResult(new ActorAssociationEventListener(TestActor));
179-
AwaitResult(transportB.Listen()).Item2.SetResult(new ActorAssociationEventListener(TestActor));
179+
(await transportA.Listen().WithTimeout(DefaultTimeout)).Item2.SetResult(new ActorAssociationEventListener(TestActor));
180+
(await transportB.Listen().WithTimeout(DefaultTimeout)).Item2.SetResult(new ActorAssociationEventListener(TestActor));
180181

181-
AwaitCondition(() => registry.TransportsReady(addressATest, addressBTest));
182+
await AwaitConditionAsync(() => registry.TransportsReady(_addressATest, _addressBTest));
182183

183-
var associate = transportA.Associate(addressB);
184-
var handleB = ExpectMsgPf(DefaultTimeout, "Expect InboundAssociation from A", o =>
184+
var associate = transportA.Associate(_addressB);
185+
var handleB = await ExpectMsgOfAsync(DefaultTimeout, "Expect InboundAssociation from A", o =>
185186
{
186-
var handle = o as InboundAssociation;
187-
if (handle != null && handle.Association.RemoteAddress == addressA)
187+
if (o is InboundAssociation handle && handle.Association.RemoteAddress == _addressA)
188188
return handle.Association;
189189

190190
return null;
191191
});
192192

193-
var handleA = AwaitResult(associate);
193+
var handleA = await associate.WithTimeout(DefaultTimeout);
194194

195195
// Initialize handles
196196
handleA.ReadHandlerSource.SetResult(new ActorHandleEventListener(TestActor));
197197
handleB.ReadHandlerSource.SetResult(new ActorHandleEventListener(TestActor));
198198

199-
AwaitCondition(() => registry.ExistsAssociation(addressATest, addressBTest));
199+
await AwaitConditionAsync(() => registry.ExistsAssociation(_addressATest, _addressBTest));
200200

201-
handleA.Disassociate();
201+
handleA.Disassociate("Disassociation test", Log);
202202

203-
ExpectMsgPf(DefaultTimeout, "Should receive Disassociated", o => o as Disassociated);
203+
await ExpectMsgOfAsync(DefaultTimeout, "Should receive Disassociated", o => o as Disassociated);
204204

205-
AwaitCondition(() => !registry.ExistsAssociation(addressATest, addressBTest));
205+
await AwaitConditionAsync(() => !registry.ExistsAssociation(_addressATest, _addressBTest));
206206

207-
AwaitCondition(() =>
208-
registry.LogSnapshot().OfType<DisassociateAttempt>().Any(x => x.Requestor == addressATest && x.Remote == addressBTest)
207+
await AwaitConditionAsync(() =>
208+
registry.LogSnapshot().OfType<DisassociateAttempt>().Any(x => x.Requestor == _addressATest && x.Remote == _addressBTest)
209209
);
210210
}
211-
212-
private T AwaitResult<T>(Task<T> task)
213-
{
214-
task.Wait(DefaultTimeout);
215-
216-
return task.Result;
217-
}
218211
}
219212
}
220213

0 commit comments

Comments
 (0)