Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 38 additions & 18 deletions tests/monotouch-test/Foundation/NSStreamTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,31 +83,51 @@ public void ConnectToHost ()
[Test]
public void ConnectToPeer ()
{
NSInputStream read;
NSOutputStream write;

int port;
var listener = FindPort (out port);
if (listener is null) {
Assert.Inconclusive ("Not possible to bind a port");
return;
}

var listenThread = new Thread (new ParameterizedThreadStart (DebugListener));
listenThread.Start (listener);
NSStream.CreatePairWithPeerSocketSignature (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp, new IPEndPoint (IPAddress.Loopback, port), out read, out write);
read.Open ();
write.Open ();
var send = new byte [] { 1, 2, 3, 4, 5 };
Assert.AreEqual ((nint) 5, write.Write (send), "Write");
var result = new byte [5];
Assert.AreEqual ((nint) 5, read.Read (result, 5), "Read");
for (int i = 0; i < 5; i++)
Assert.AreEqual (send [i] * 10, result [i]);
listenThread.Join ();
listener.Stop ();
read.Close ();
write.Close ();
Exception ex = null;
var thread = new Thread (() => {
try {
NSInputStream read = null;
NSOutputStream write = null;

var listenThread = new Thread (new ParameterizedThreadStart (DebugListener)) {
IsBackground = true,
};
var listenThreadCompleted = false;
try {
listenThread.Start (listener);
NSStream.CreatePairWithPeerSocketSignature (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp, new IPEndPoint (IPAddress.Loopback, port), out read, out write);
read.Open ();
write.Open ();
var send = new byte [] { 1, 2, 3, 4, 5 };
Assert.AreEqual ((nint) 5, write.Write (send), "Write");
var result = new byte [5];
Assert.AreEqual ((nint) 5, read.Read (result, 5), "Read");
for (int i = 0; i < 5; i++)
Assert.AreEqual (send [i] * 10, result [i], "Item " + i);
listenThreadCompleted = listenThread.Join (TimeSpan.FromSeconds (5));
Assert.That (listenThreadCompleted, Is.True, "Listener thread");
} finally {
if (listenThreadCompleted)
listener.Stop ();
read?.Close ();
write?.Close ();
}
} catch (Exception e) {
ex = e;
}
}) {
IsBackground = true,
};
thread.Start ();
Assert.That (thread.Join (TimeSpan.FromSeconds (10)), Is.True, "Background thread completion");
Assert.IsNull (ex, "No exception");
}

void DebugListener (object data)
Expand Down
Loading