You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by fr...@apache.org on 2024/10/15 09:11:42 UTC
(logging-log4net) 02/03: fixed telnet test
This is an automated email from the ASF dual-hosted git repository.
freeandnil pushed a commit to branch Feature/TelnetBug
in repository https://gitbox.apache.org/repos/asf/logging-log4net.git
commit 5f0103ef2c8ea1bb0a81703990203f74f7beb89e
Author: Jan Friedrich <fr...@apache.org>
AuthorDate: Sun Oct 13 20:44:14 2024 +0200
fixed telnet test
---
.../Appender/Internal/SimpleTelnetClient.cs | 38 +++++++++++++---------
src/log4net.Tests/Appender/TelnetAppenderTest.cs | 21 +++++++++---
2 files changed, 38 insertions(+), 21 deletions(-)
diff --git a/src/log4net.Tests/Appender/Internal/SimpleTelnetClient.cs b/src/log4net.Tests/Appender/Internal/SimpleTelnetClient.cs
index 8feddc49..619c9c05 100644
--- a/src/log4net.Tests/Appender/Internal/SimpleTelnetClient.cs
+++ b/src/log4net.Tests/Appender/Internal/SimpleTelnetClient.cs
@@ -2,33 +2,39 @@ using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
+using System.Threading.Tasks;
namespace log4net.Tests.Appender.Internal
{
- internal sealed class SimpleTelnetClient(Action<string> received, int port = 9090)
+ internal sealed class SimpleTelnetClient(
+ Action<string> received, TaskCompletionSource<int> taskCompletionSource, int port = 9090): IDisposable
{
+ private readonly TcpClient client = new("localhost", port);
+
internal void Run()
{
- TcpClient client = new("localhost", port);
- try
- {
- // Get a stream object for reading and writing
- using NetworkStream stream = client.GetStream();
+ // Get a stream object for reading and writing
+ using NetworkStream stream = client.GetStream();
- int i;
- byte[] bytes = new byte[256];
+ int i;
+ byte[] bytes = new byte[256];
- // Loop to receive all the data sent by the server
- while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
+ bool wasResultSet = false;
+ // Loop to receive all the data sent by the server
+ while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
+ {
+ if (!wasResultSet)
{
- string data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
- received(data);
+ taskCompletionSource.SetResult(0);
+ wasResultSet = true;
}
- }
- finally
- {
- client.Dispose();
+
+ string data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
+ received(data);
}
}
+
+ /// <inheritdoc/>
+ public void Dispose() => client.Dispose();
}
}
\ No newline at end of file
diff --git a/src/log4net.Tests/Appender/TelnetAppenderTest.cs b/src/log4net.Tests/Appender/TelnetAppenderTest.cs
index 626ae65b..9790077f 100644
--- a/src/log4net.Tests/Appender/TelnetAppenderTest.cs
+++ b/src/log4net.Tests/Appender/TelnetAppenderTest.cs
@@ -20,6 +20,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Threading;
using System.Threading.Tasks;
using System.Xml;
using log4net.Appender;
@@ -62,12 +63,22 @@ public class TelnetAppenderTest
""");
ILoggerRepository rep = LogManager.CreateRepository(Guid.NewGuid().ToString());
XmlConfigurator.Configure(rep, log4netConfig["log4net"]!);
- Task task = Task.Run(() => new SimpleTelnetClient(Received).Run());
- task.Wait(500);
-
- rep.GetLogger("Telnet").Log(typeof(TelnetAppenderTest), Level.Info, "Log-Message", null);
+ TaskCompletionSource<int> startup = new();
+ using SimpleTelnetClient telnetClient = new(Received, startup);
+ Task.Run(() => telnetClient.Run());
+ startup.Task.Wait();
+ var logger = rep.GetLogger("Telnet");
+ while (received.Count < 1)
+ {
+ Thread.Sleep(10);
+ }
+ logger.Log(typeof(TelnetAppenderTest), Level.Info, "Log-Message", null);
- Assert.AreEqual(1, received.Count);
+ while (received.Count < 2)
+ {
+ Thread.Sleep(10);
+ }
+ Assert.AreEqual(2, received.Count);
void Received(string message) => received.Add(message);
}