178 lines
6.4 KiB
C#
Raw Normal View History

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]
2020-02-25 21:46:15 +01:00
[TestCategory("Coverage")]
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())
{
client.WhenConnected.Wait();
2019-06-12 21:56:55 +02:00
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());
}
}
}
}
[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())
{
client.WhenConnected.Wait();
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-10-19 13:52:16 +02:00
[TestMethod]
public void InheritFromGenericInterface()
{
using (var server = SetupServer())
{
var counters = new Counters();
server.Main = new B2Impl();
using (var client = SetupClient())
{
client.WhenConnected.Wait();
using (var main = client.GetMain<CapnpGen.IB2>())
{
Assert.IsTrue(main.MethodA("42").Wait(MediumNonDbgTimeout));
var b = main.MethodB(123);
Assert.IsTrue(b.Wait(MediumNonDbgTimeout));
Assert.AreEqual("42", b.Result);
}
}
}
}
2019-10-25 19:29:44 +02:00
[TestMethod]
public void Issue25()
{
using (var server = SetupServer())
{
server.Main = new Issue25BImpl();
using (var client = SetupClient())
{
client.WhenConnected.Wait();
using (var main = client.GetMain<CapnpGen.IIssue25B>())
{
var capholderAPT = main.GetAinCapHolderAnyPointer();
Assert.IsTrue(capholderAPT.Wait(MediumNonDbgTimeout));
var capholderAP = capholderAPT.Result;
var capAPT = capholderAP.Cap();
Assert.IsTrue(capAPT.Wait(MediumNonDbgTimeout));
using (var a = ((BareProxy)capAPT.Result).Cast<CapnpGen.IIssue25A>(true))
{
var r = a.MethodA();
Assert.IsTrue(r.Wait(MediumNonDbgTimeout));
Assert.AreEqual(123L, r.Result);
}
}
}
}
}
2019-06-12 21:56:55 +02:00
}
}