Skip to content

Examples: UDP

Ahmed Agabani edited this page Apr 17, 2016 · 2 revisions

Simple

// Arrange
var udpStubServer = new UdpStubServer(IPAddress.Any, 5000);

udpStubServer
	.When(bytes => true)
	.Return(() => Encoding.UTF8.GetBytes("Hello, World!"));

var udpClient = new UdpClient();
udpClient.Connect(IPAddress.Loopback, 5000);

var message = new byte[] {};

udpClient.Send(message, message.Length);

// Act
var ipEndPoint = new IPEndPoint(IPAddress.Any, 0);
var receive = udpClient.Receive(ref ipEndPoint);

// Assert
Assert.That(Encoding.UTF8.GetString(receive), Is.EqualTo("Hello, World!"));

// Cleanup
udpStubServer.Dispose();
udpClient.Close();

Chained Responses

// Arrange
var udpStubServer = new UdpStubServer(IPAddress.Any, 5000);

udpStubServer
	.When(bytes => Encoding.UTF8.GetString(bytes).Equals("Hi!"))
	.Return(() => Encoding.UTF8.GetBytes("Hello, John!"))
	.Return(() => Encoding.UTF8.GetBytes("Hello, Tom!"))
	.Return(() => Encoding.UTF8.GetBytes("Hello, Ben!"));

var udpClient = new UdpClient();
udpClient.Connect(IPAddress.Loopback, 5000);

var message = Encoding.UTF8.GetBytes("Hi!");

// Act & Assert
var ipEndPoint = new IPEndPoint(IPAddress.Any, 0);

udpClient.Send(message, message.Length);
var result = Encoding.UTF8.GetString(udpClient.Receive(ref ipEndPoint));
Assert.That(result, Is.EqualTo("Hello, John!"));

udpClient.Send(message, message.Length);
result = Encoding.UTF8.GetString(udpClient.Receive(ref ipEndPoint));
Assert.That(result, Is.EqualTo("Hello, Tom!"));

udpClient.Send(message, message.Length);
result = Encoding.UTF8.GetString(udpClient.Receive(ref ipEndPoint));
Assert.That(result, Is.EqualTo("Hello, Ben!"));

udpClient.Send(message, message.Length);
result = Encoding.UTF8.GetString(udpClient.Receive(ref ipEndPoint));
Assert.That(result, Is.EqualTo("Hello, Ben!"));

// Cleanup
udpStubServer.Dispose();
udpClient.Close();

Multiple Responses

// Arrange
var udpStubServer = new UdpStubServer(IPAddress.Any, 5000);

udpStubServer
	.When(bytes => Encoding.UTF8.GetString(bytes).Equals("Hi!"))
	.Return(() => Encoding.UTF8.GetBytes("Hello, John!"))
	.Then(() => Encoding.UTF8.GetBytes("Hello, Tom!"))
	.Then(() => Encoding.UTF8.GetBytes("Hello, Ben!"));

var udpClient = new UdpClient();
udpClient.Connect(IPAddress.Loopback, 5000);

var message = Encoding.UTF8.GetBytes("Hi!");

var ipEndPoint = new IPEndPoint(IPAddress.Any, 0);

// Act 
udpClient.Send(message, message.Length);

// Assert
var result = Encoding.UTF8.GetString(udpClient.Receive(ref ipEndPoint));
Assert.That(result, Is.EqualTo("Hello, John!"));

result = Encoding.UTF8.GetString(udpClient.Receive(ref ipEndPoint));
Assert.That(result, Is.EqualTo("Hello, Tom!"));

result = Encoding.UTF8.GetString(udpClient.Receive(ref ipEndPoint));
Assert.That(result, Is.EqualTo("Hello, Ben!"));

// Cleanup
udpStubServer.Dispose();
udpClient.Close();

Asynchronous

// Arrange
var udpStubServer = new UdpStubServer(IPAddress.Any, 5000);

udpStubServer
	.When(bytes => true)
	.Return(async () =>
	{
		await Task.Delay(50);
		return Encoding.UTF8.GetBytes("Hello, World!");
	});

var udpClient = new UdpClient();
udpClient.Connect(IPAddress.Loopback, 5000);

var message = new byte[] { };

udpClient.Send(message, message.Length);

// Act
var ipEndPoint = new IPEndPoint(IPAddress.Any, 0);
var receive = udpClient.Receive(ref ipEndPoint);

// Assert
Assert.That(Encoding.UTF8.GetString(receive), Is.EqualTo("Hello, World!"));

// Cleanup
udpStubServer.Dispose();
udpClient.Close();

No Response

// Arrange
var udpStubServer = new UdpStubServer(IPAddress.Any, 5000);

var udpClient = new UdpClient
{
	Client = {ReceiveTimeout = 1000}
};
udpClient.Connect(IPAddress.Loopback, 5000);

var message = Encoding.UTF8.GetBytes("Incorrect message");

udpClient.Send(message, message.Length);

// Act
var ipEndPoint = new IPEndPoint(IPAddress.Any, 0);
TestDelegate testDelegate = () => udpClient.Receive(ref ipEndPoint);

// Assert
Assert.Throws<SocketException>(testDelegate);

// Cleanup
udpStubServer.Dispose();
udpClient.Close();
Clone this wiki locally