using System;
using NUnit.Framework;
using grof.protocols.membership;
using System.Collections.Generic;
using System.Threading;
using grof;
using System.Diagnostics;
namespace grof.protocols.membership{
/// <summary>
/// Description of TestTcpSender.
/// </summary>
[TestFixture]
public class TestTcpReceiverSender : AbstractTest
{
private TcpSender sender;
private TcpReceiver receiver1;
private TcpReceiver receiver2;
private TcpReceiver receiver3;
private int msgCounter = 0;
public TestTcpReceiverSender()
{
}
[SetUp]
public void SetUp()
{
base.SetUp();
this.sender = new TcpSender( "foo" );
this.receiver1 = new TcpReceiver( "127.0.0.1", 3454, "foo", this.MessageReceived );
this.receiver2 = new TcpReceiver( "127.0.0.1", 3455, "bar", this.MessageReceived );
this.receiver3 = new TcpReceiver( "127.0.0.1", 3456, "any", this.MessageReceived );
this.receiver1.Start();
this.receiver2.Start();
this.receiver3.Start();
}
[TearDown]
public void TearDown()
{
base.TearDown();
this.receiver1.Stop();
this.receiver2.Stop();
this.receiver3.Stop();
this.sender = null;
}
/// <summary>
///
/// </summary>
[Test]
public void TestSending()
{
GroupMemberInfo info1 = new GroupMemberInfo( "ernie", "127.0.0.1", 3454 );
GroupMemberInfo info2 = new GroupMemberInfo( "bert", "127.0.0.1", 3455 );
GroupMemberInfo info3 = new GroupMemberInfo( "grobi", "127.0.0.1", 3456 );
List<GroupMemberInfo> list = new List<GroupMemberInfo>();
list.Add( info1 );
list.Add( info2 );
list.Add( info3 );
// waiting till all receivers have started
Thread.Sleep( 2000 );
MessageCreator creator = new MessageCreator( "i", "127.0.0.1", 9999 );
this.sender.Send( creator.CreateAliveMessage( "hello" ), list );
// waiting till all messages were received.
this.WaitingForReceivedMessages();
Assert.AreEqual( 3, this.msgCounter );
}
public void MessageReceived( Message msg )
{
lock( this )
{
this.msgCounter++;
Monitor.PulseAll( this );
Debug.WriteLine( "[TestTcpSender#MessageReceived] message received: " + msg.ToString() );
}
}
private void WaitingForReceivedMessages()
{
lock( this )
{
while ( this.msgCounter != 3 )
{
Monitor.Wait( this );
}
}
}
}
}
|