Skip to content

Commit a3c111c

Browse files
committed
Add test. Verified that fails before the changes and passes after
1 parent 76e578d commit a3c111c

File tree

1 file changed

+49
-23
lines changed

1 file changed

+49
-23
lines changed

src/libraries/System.Net.Sockets/tests/FunctionalTests/TcpListenerTest.cs

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the MIT license.
33

4+
using Microsoft.DotNet.RemoteExecutor;
5+
using System.Diagnostics.Tracing;
46
using System.Runtime.InteropServices;
7+
using System.Text;
58
using System.Threading;
69
using System.Threading.Tasks;
710
using Xunit;
@@ -228,38 +231,61 @@ async Task VerifyAccept(TcpListener listener)
228231
}
229232
}
230233

231-
[Fact]
232-
public async Task ReadAsyncTest()
234+
internal sealed class RuntimeEventListener : EventListener
233235
{
234-
async Task StartListenerAsync()
236+
protected override void OnEventSourceCreated(EventSource source)
235237
{
236-
TcpListener listener = new TcpListener(IPAddress.Loopback, 0);
237-
listener.Start();
238-
Tcp client = await listener.AcceptTcpClientAsync();
239-
using (NetworkStream stream = client.GetStream())
238+
if (source.Name.Equals("Microsoft-Windows-DotNETRuntime"))
240239
{
241-
byte[] buffer = new byte[1024];
242-
int bytesRead;
243-
while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0);
240+
EnableEvents(source, EventLevel.Verbose, (EventKeywords)0x10000);
244241
}
245-
listener.Stop();
246242
}
243+
}
247244

248-
async Task StartClientAsync()
245+
[ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))]
246+
public void ReadAsyncTest()
247+
{
248+
RemoteExecutor.Invoke(async () =>
249249
{
250-
TcpClient client = new TcpClient(IPAddress.Loopback, 0);
251-
using (NetworkStream stream = client.GetStream())
250+
using (RuntimeEventListener eventListener = new RuntimeEventListener())
252251
{
253-
byte[] data = Encoding.UTF8.GetBytes(new string('*', 1 << 22));
254-
await Task.Delay(10);
255-
await stream.WriteAsync(data, 0, data.Length);
252+
Task.Run(() => Console.WriteLine(Environment.StackTrace)).Wait();
253+
TaskCompletionSource<int> portTcs = new TaskCompletionSource<int>();
254+
async Task StartListenerAsync()
255+
{
256+
TcpListener listener = new TcpListener(IPAddress.Loopback, 0);
257+
listener.Start();
258+
int port = ((IPEndPoint)listener.LocalEndpoint).Port;
259+
portTcs.SetResult(port);
260+
TcpClient client = await listener.AcceptTcpClientAsync();
261+
using (NetworkStream stream = client.GetStream())
262+
{
263+
byte[] buffer = new byte[1024];
264+
int bytesRead;
265+
while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0);
266+
}
267+
listener.Stop();
268+
}
269+
270+
async Task StartClientAsync()
271+
{
272+
int port = await portTcs.Task;
273+
using (TcpClient client = new TcpClient(new IPEndPoint(IPAddress.Loopback, 0)))
274+
{
275+
await client.ConnectAsync(IPAddress.Loopback, port);
276+
using (NetworkStream stream = client.GetStream())
277+
{
278+
byte[] data = Encoding.UTF8.GetBytes(new string('*', 1 << 26));
279+
await stream.WriteAsync(data, 0, data.Length);
280+
}
281+
}
282+
}
283+
284+
Task listenerTask = StartListenerAsync();
285+
Task clientTask = StartClientAsync();
286+
await Task.WhenAll(listenerTask, clientTask);
256287
}
257-
client.Close();
258-
}
259-
260-
Task.Run(() => Console.WriteLine(Environment.StackTrace)).Wait();
261-
await StartListenerAsync();
262-
await StartClientAsync();
288+
}).Dispose();
263289
}
264290

265291
[Fact]

0 commit comments

Comments
 (0)