2019-06-12 21:56:55 +02:00
|
|
|
|
using Capnp.Net.Runtime.Tests.GenImpls;
|
|
|
|
|
using Capnp.Rpc;
|
|
|
|
|
using Capnproto_test.Capnp.Test;
|
|
|
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
namespace Capnp.Net.Runtime.Tests
|
|
|
|
|
{
|
|
|
|
|
[TestClass]
|
2019-07-07 17:12:49 +02:00
|
|
|
|
public class TcpRpcAdvancedStuff : TestBase
|
2019-06-12 21:56:55 +02:00
|
|
|
|
{
|
2019-06-22 18:43:30 -04:00
|
|
|
|
[TestMethod, Timeout(10000)]
|
2019-06-12 21:56:55 +02:00
|
|
|
|
public void MultiConnect()
|
|
|
|
|
{
|
|
|
|
|
using (var server = SetupServer())
|
|
|
|
|
{
|
|
|
|
|
var counters = new Counters();
|
|
|
|
|
var tcs = new TaskCompletionSource<int>();
|
|
|
|
|
server.Main = new TestInterfaceImpl(counters, tcs);
|
|
|
|
|
|
|
|
|
|
for (int i = 1; i <= 10; i++)
|
|
|
|
|
{
|
|
|
|
|
using (var client = SetupClient())
|
|
|
|
|
{
|
|
|
|
|
Assert.IsTrue(client.WhenConnected.Wait(MediumNonDbgTimeout));
|
|
|
|
|
|
|
|
|
|
using (var main = client.GetMain<ITestInterface>())
|
|
|
|
|
{
|
|
|
|
|
var request1 = main.Foo(123, true, default);
|
|
|
|
|
var request3 = Assert.ThrowsExceptionAsync<RpcException>(() => main.Bar(default));
|
|
|
|
|
var s = new TestAllTypes();
|
|
|
|
|
Common.InitTestMessage(s);
|
|
|
|
|
var request2 = main.Baz(s, default);
|
|
|
|
|
|
|
|
|
|
Assert.IsTrue(request1.Wait(MediumNonDbgTimeout));
|
|
|
|
|
Assert.IsTrue(request2.Wait(MediumNonDbgTimeout));
|
|
|
|
|
Assert.IsTrue(request3.Wait(MediumNonDbgTimeout));
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual("foo", request1.Result);
|
|
|
|
|
Assert.AreEqual(2 * i, counters.CallCount);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Bootstrap capability must not be disposed
|
|
|
|
|
Assert.IsFalse(tcs.Task.IsCompleted);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-06-22 18:43:30 -04:00
|
|
|
|
[TestMethod, Timeout(10000)]
|
2019-06-12 21:56:55 +02:00
|
|
|
|
public void TwoClients()
|
|
|
|
|
{
|
|
|
|
|
using (var server = SetupServer())
|
|
|
|
|
{
|
|
|
|
|
var counters = new Counters();
|
|
|
|
|
server.Main = new TestMoreStuffImpl(counters);
|
|
|
|
|
|
|
|
|
|
using (var client1 = SetupClient())
|
|
|
|
|
using (var client2 = SetupClient())
|
|
|
|
|
{
|
|
|
|
|
Assert.IsTrue(client1.WhenConnected.Wait(MediumNonDbgTimeout));
|
|
|
|
|
Assert.IsTrue(client2.WhenConnected.Wait(MediumNonDbgTimeout));
|
|
|
|
|
|
|
|
|
|
using (var main = client1.GetMain<ITestMoreStuff>())
|
|
|
|
|
{
|
|
|
|
|
Assert.IsTrue(main.Hold(new TestInterfaceImpl(counters)).Wait(MediumNonDbgTimeout));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
using (var main = client2.GetMain<ITestMoreStuff>())
|
|
|
|
|
{
|
|
|
|
|
Assert.IsTrue(main.CallHeld().Wait(MediumNonDbgTimeout));
|
|
|
|
|
var getHeld = main.GetHeld();
|
|
|
|
|
Assert.IsTrue(getHeld.Wait(MediumNonDbgTimeout));
|
|
|
|
|
var foo = getHeld.Result.Foo(123, true);
|
|
|
|
|
Assert.IsTrue(foo.Wait(MediumNonDbgTimeout));
|
|
|
|
|
Assert.AreEqual("foo", foo.Result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
client1.Dispose();
|
|
|
|
|
|
|
|
|
|
using (var main = client2.GetMain<ITestMoreStuff>())
|
|
|
|
|
{
|
|
|
|
|
ExpectPromiseThrows(main.CallHeld());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-07-07 17:12:49 +02:00
|
|
|
|
|
|
|
|
|
[TestMethod, Timeout(10000)]
|
|
|
|
|
public void ClosingServerWhileRequestingBootstrap()
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < 100; i++)
|
|
|
|
|
{
|
|
|
|
|
var server = SetupServer();
|
|
|
|
|
var counters = new Counters();
|
|
|
|
|
var tcs = new TaskCompletionSource<int>();
|
|
|
|
|
server.Main = new TestInterfaceImpl(counters, tcs);
|
|
|
|
|
|
|
|
|
|
using (var client = SetupClient())
|
|
|
|
|
{
|
|
|
|
|
Assert.IsTrue(client.WhenConnected.Wait(MediumNonDbgTimeout));
|
|
|
|
|
|
|
|
|
|
using (var main = client.GetMain<ITestInterface>())
|
|
|
|
|
{
|
|
|
|
|
server.Dispose();
|
|
|
|
|
|
|
|
|
|
// Resolution must either succeed or be cancelled. A hanging resolution would be inacceptable.
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
Assert.IsTrue(((IResolvingCapability)main).WhenResolved.Wait(MediumNonDbgTimeout));
|
|
|
|
|
}
|
|
|
|
|
catch (AggregateException)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-06-12 21:56:55 +02:00
|
|
|
|
}
|
|
|
|
|
}
|