[System] Fix tests that regressed in e6536dd.
[mono.git] / mcs / class / System / Test / System.Net.Sockets / SocketAcceptAsyncTest.cs
index 3815b623c39f53085f8670e788952f2ffcf89077..fff160c768c6e5dac98c6c2986e6c83140d74d95 100644 (file)
@@ -1,3 +1,4 @@
+using System;
 using System.Threading;
 using System.Net;
 using System.Net.Sockets;
@@ -9,6 +10,9 @@ namespace MonoTests.System.Net.Sockets
        public class SocketAcceptAsyncTest
        {
                [Test]
+#if FEATURE_NO_BSD_SOCKETS
+               [ExpectedException (typeof (PlatformNotSupportedException))]
+#endif
                public void AcceptAsyncShouldUseAcceptSocketFromEventArgs()
                {
                        var readyEvent = new ManualResetEvent(false);
@@ -18,27 +22,40 @@ namespace MonoTests.System.Net.Sockets
                        var serverSocket = new Socket(
                                        AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                        Socket acceptedSocket = null;
-
+                       Exception ex = null;
                        ThreadPool.QueueUserWorkItem(_ =>
                        {
-                               listenSocket.Bind(new IPEndPoint(IPAddress.Loopback, 0));
-                               listenSocket.Listen(1);
-
-                               var asyncEventArgs = new SocketAsyncEventArgs {AcceptSocket = serverSocket};
-                               asyncEventArgs.Completed += (s, e) =>
-                               {
-                                       acceptedSocket = e.AcceptSocket;
-                                       mainEvent.Set();
-                               };
+                               SocketAsyncEventArgs asyncEventArgs;
+                               try {
+                                       listenSocket.Bind(new IPEndPoint(IPAddress.Loopback, 0));
+                                       listenSocket.Listen(1);
 
-                               readyEvent.Set();
+                                       asyncEventArgs = new SocketAsyncEventArgs {AcceptSocket = serverSocket};
+                                       asyncEventArgs.Completed += (s, e) =>
+                                       {
+                                               acceptedSocket = e.AcceptSocket;
+                                               mainEvent.Set();
+                                       };
 
-                               if (listenSocket.AcceptAsync(asyncEventArgs))
+                               } catch (Exception e) {
+                                       ex = e;
                                        return;
-                               acceptedSocket = asyncEventArgs.AcceptSocket;
-                               mainEvent.Set();
+                               } finally {
+                                       readyEvent.Set();
+                               }
+
+                               try {
+                                       if (listenSocket.AcceptAsync(asyncEventArgs))
+                                               return;
+                                       acceptedSocket = asyncEventArgs.AcceptSocket;
+                                       mainEvent.Set();
+                               } catch (Exception e) {
+                                       ex = e;
+                               }
                        });
                        Assert.IsTrue(readyEvent.WaitOne(1500));
+                       if (ex != null)
+                               throw ex;
 
                        var clientSocket = new Socket(
                                AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
@@ -46,7 +63,7 @@ namespace MonoTests.System.Net.Sockets
                        clientSocket.NoDelay = true;
 
                        Assert.IsTrue(mainEvent.WaitOne(1500));
-                       Assert.AreEqual(serverSocket, acceptedSocket);
+                       Assert.AreEqual(serverSocket, acceptedSocket, "x");
                        mainEvent.Reset();
 
                        if (acceptedSocket != null)