public void RemoteProxySeserializationFails_throws() { var originContractBuilder = IntegrationTestsHelper .GetOriginBuilder() .UseSerializer(IntegrationTestsHelper.GetThrowsSerializationRuleFor <string>()); using (var tcpPair = new TcpConnectionPair <ITestContract, ITestContract, TestContractMock> (originContractBuilder, IntegrationTestsHelper.GetProxyBuilder())) { //origin contract uses failed string serializer, when it returns answer Assert.Multiple(() => { Assert.Throws <RemoteSerializationException>(() => tcpPair.ProxyContract.Ask("testString")); tcpPair.AssertPairIsDisconnected(); }); } }
public void LocalProxyDeserializationFails_throws() { var proxyContractBuilder = IntegrationTestsHelper .GetProxyBuilder() .UseDeserializer(IntegrationTestsHelper.GetThrowsDeserializationRuleFor <string>()); using (var tcpPair = new TcpConnectionPair <ITestContract, ITestContract, TestContractMock> (IntegrationTestsHelper.GetOriginBuilder(), proxyContractBuilder)) { //proxy contract uses failed string deserializer, when it accepts answer Assert.Multiple(() => { Assert.Throws <LocalSerializationException>(() => tcpPair.ProxyContract.Ask("testString")); tcpPair.AssertPairIsDisconnected(); }); } }
public void HundredOf2mbPacket_transmitsViaTcp_Concurrent() { var origin = TntBuilder .UseContract <ISingleMessageContract <Company>, SingleMessageContract <Company> >() .SetMaxAnsDelay(5 * 60 * 1000); var proxy = TntBuilder .UseContract <ISingleMessageContract <Company> >() .SetMaxAnsDelay(5 * 60 * 1000); using (var tcpPair = new TcpConnectionPair <ISingleMessageContract <Company>, ISingleMessageContract <Company>, SingleMessageContract <Company> >(origin, proxy)) { var receivedList = new List <Company>(200); tcpPair.OriginContract.SayCalled += (Sender, received) => receivedList.Add(received); var company = IntegrationTestsHelper.CreateCompany(2000); int sendCount = 100; List <Task> sendTasks = new List <Task>(sendCount); for (int i = 0; i < sendCount; i++) { sendTasks.Add(new Task(() => tcpPair.ProxyConnection.Contract.Ask(company))); } foreach (Task task in sendTasks) { task.Start(); } if (!Task.WaitAll(sendTasks.ToArray(), 5 * 60 * 1000)) { Assert.Fail("Test timeout "); } Assert.AreEqual(sendCount, receivedList.Count); foreach (var received in receivedList) { received.AssertIsSameTo(company); } } }
public void StringPackets_transmitsViaTcp_concurent(int stringLengthInBytes) { using (var tcpPair = new TcpConnectionPair <ISingleMessageContract <string>, ISingleMessageContract <string>, SingleMessageContract <string> >()) { //Tasks count: int sentCount = 10; string originStringArgument = generateRandomString(stringLengthInBytes / 2); var receivedList = new List <string>(200); tcpPair.OriginContract.SayCalled += (Sender, received) => receivedList.Add(received); //start monitoring disconnection events. var serverDisconnectAwaiter = new EventAwaiter <ClientDisconnectEventArgs <ISingleMessageContract <string>, TcpChannel> >(); tcpPair.Server.Disconnected += serverDisconnectAwaiter.EventRaised; var clientDisconnectAwaiter = new EventAwaiter <ErrorMessage>(); tcpPair.ClientChannel.OnDisconnect += clientDisconnectAwaiter.EventRaised; #region sending var sentTasks = new List <Task>(sentCount); for (var i = 0; i < sentCount; i++) { sentTasks.Add(new Task(() => tcpPair.ProxyConnection.Contract.Ask(originStringArgument))); } foreach (var task in sentTasks) { task.Start(); } #endregion #region checking for exceptions bool allDoneSucc = false; Exception doneException = null; try { allDoneSucc = Task.WaitAll(sentTasks.ToArray(), 60000); } catch (Exception e) { doneException = e; } //Check for client disconnection var clientDisconnectArgs = clientDisconnectAwaiter.WaitOneOrDefault(500); //Check for server disconnection var serverDisconnectedArg = serverDisconnectAwaiter.WaitOneOrDefault(500); if (clientDisconnectArgs != null || serverDisconnectedArg != null) { if (clientDisconnectArgs != null) { Assert.Fail("Client disconnected. Reason: " + clientDisconnectArgs); } else if (serverDisconnectedArg != null) { Assert.Fail("Server disconnected. Reason: " + serverDisconnectedArg.ErrorMessageOrNull); } } //check for tasks agregate exception if (doneException != null) { Assert.Fail("Client side thrown exception during the interaction: " + doneException.ToString()); } //Check for timeout if (!allDoneSucc) { Assert.Fail("Test timeout "); } #endregion #region checking for serialization results Assert.AreEqual(sentCount, receivedList.Count); foreach (var received in receivedList) { Assert.AreEqual(originStringArgument, received); } #endregion } }
public void ProtobuffPackets_transmitViaTcp_concurent(int sizeOfCompanyInUsers, int parralelTasksCount) { //1000 = 0.5mb //2000 = 2mb //5000 = 10mb //10000 = 50mb 5 var origin = TntBuilder .UseContract <ISingleMessageContract <Company>, SingleMessageContract <Company> >() .SetMaxAnsDelay(5 * 60 * 1000); var proxy = TntBuilder .UseContract <ISingleMessageContract <Company> >() .SetMaxAnsDelay(5 * 60 * 1000); using (var tcpPair = new TcpConnectionPair <ISingleMessageContract <Company>, ISingleMessageContract <Company>, SingleMessageContract <Company> >(origin, proxy)) { var originCompany = IntegrationTestsHelper.CreateCompany(sizeOfCompanyInUsers); var receivedList = new List <Company>(parralelTasksCount); tcpPair.OriginContract.SayCalled += (Sender, received) => receivedList.Add(received); //start monitoring the server disconnection event. var serverDisconnectAwaiter = new EventAwaiter <ClientDisconnectEventArgs <ISingleMessageContract <Company>, TcpChannel> >(); tcpPair.Server.Disconnected += serverDisconnectAwaiter.EventRaised; var clientDisconnectAwaiter = new EventAwaiter <ErrorMessage>(); tcpPair.ClientChannel.OnDisconnect += clientDisconnectAwaiter.EventRaised; tcpPair.ClientChannel.OnDisconnect += (s, arg) => { Console.WriteLine(); }; #region sending var sentTasks = new List <Task>(parralelTasksCount); for (var i = 0; i < parralelTasksCount; i++) { sentTasks.Add(new Task(() => tcpPair.ProxyConnection.Contract.Ask(originCompany))); } foreach (var task in sentTasks) { task.Start(); } #endregion #region checking for exceptions bool allDoneSucc = false; Exception doneException = null; try { allDoneSucc = Task.WaitAll(sentTasks.ToArray(), 60000); } catch (Exception e) { doneException = e; } //Check for client disconnection var clientDisconnectArgs = clientDisconnectAwaiter.WaitOneOrDefault(500); //Check for server disconnection var serverDisconnectedArg = serverDisconnectAwaiter.WaitOneOrDefault(500); if (clientDisconnectArgs != null || serverDisconnectedArg != null) { if (clientDisconnectArgs != null) { Assert.Fail("Client disconnected. Reason: " + clientDisconnectArgs); } else if (serverDisconnectedArg != null) { Assert.Fail("Server disconnected. Reason: " + serverDisconnectedArg.ErrorMessageOrNull); } } //check for tasks agregate exception if (doneException != null) { Assert.Fail("Client side thrown exception during the interaction: " + doneException.ToString()); } //Check for timeout if (!allDoneSucc) { Assert.Fail("Test timeout "); } #endregion #region checking for serialization results Assert.AreEqual(parralelTasksCount, receivedList.Count); foreach (var received in receivedList) { received.AssertIsSameTo(originCompany); } #endregion } }