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 <[email protected]> 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); }
