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);
   }

Reply via email to