public void InterceptClientSideRedirectCall() { var policy = new MyPolicy("a"); (var server, var client) = SetupClientServerPair(); using (server) using (client) { //client.WhenConnected.Wait(); var counters = new Counters(); server.Main = new TestInterfaceImpl(counters); using (var main = policy.Attach(client.GetMain <ITestInterface>())) { var request1 = main.Foo(123, true, default); Assert.IsTrue(policy.Calls.TryReceive(out var cc)); Assert.IsFalse(request1.IsCompleted); var counters2 = new Counters(); var impl2 = new TestInterfaceImpl(counters2); cc.Bob = impl2; cc.ForwardToBob(); Assert.IsTrue(policy.Returns.ReceiveAsync().Wait(MediumNonDbgTimeout)); cc.ReturnToAlice(); Assert.IsTrue(request1.IsCompleted); Assert.AreEqual("foo", request1.Result); Assert.AreEqual(0, counters.CallCount); Assert.AreEqual(1, counters2.CallCount); } } }
public void BootstrapReuse() { (var server, var client) = SetupClientServerPair(); var counters = new Counters(); var impl = new TestInterfaceImpl(counters); using (server) using (client) { //client.WhenConnected.Wait(); server.Main = impl; for (int i = 0; i < 10; i++) { using (var main = client.GetMain <ITestMoreStuff>()) { ((Proxy)main).WhenResolved.WrappedTask.Wait(MediumNonDbgTimeout); } Assert.IsFalse(impl.IsDisposed); } } Assert.IsTrue(impl.IsDisposed); }
public void InterceptOutCaps() { var policy = new MyPolicy("a"); (var server, var client) = SetupClientServerPair(); using (server) using (client) { //client.WhenConnected.Wait(); var counters = new Counters(); server.Main = policy.Attach <ITestMoreStuff>(new TestMoreStuffImpl(counters)); using (var main = client.GetMain <ITestMoreStuff>()) { var counters2 = new Counters(); var cap = new TestInterfaceImpl(counters2); main.Hold(cap); { var ccf = policy.Calls.ReceiveAsync(); Assert.IsTrue(ccf.Wait(MediumNonDbgTimeout)); ccf.Result.ForwardToBob(); var ccfr = policy.Returns.ReceiveAsync(); Assert.IsTrue(ccfr.Wait(MediumNonDbgTimeout)); ccf.Result.ReturnToAlice(); } var ghf = main.GetHeld(); { var ccf = policy.Calls.ReceiveAsync(); Assert.IsTrue(ccf.Wait(MediumNonDbgTimeout)); ccf.Result.ForwardToBob(); var ccfr = policy.Returns.ReceiveAsync(); Assert.IsTrue(ccfr.Wait(MediumNonDbgTimeout)); ccf.Result.InterceptOutCaps(); ccf.Result.ReturnToAlice(); } Assert.IsTrue(ghf.Wait(MediumNonDbgTimeout)); var held = ghf.Result; var foof = held.Foo(123, true); { var ccf = policy.Calls.ReceiveAsync(); Assert.IsTrue(ccf.Wait(MediumNonDbgTimeout)); ccf.Result.ForwardToBob(); var ccfr = policy.Returns.ReceiveAsync(); Assert.IsTrue(ccfr.Wait(MediumNonDbgTimeout)); ccf.Result.ReturnToAlice(); } Assert.IsTrue(foof.Wait(MediumNonDbgTimeout)); } } }
public void RefType_AsSuccessfulOpResOfBaseType_SuccessfulOperationResultOf() { //Arrange var value = new TestInterfaceImpl(4); //Act OperationResultOf <ITestInterface> opRes = value.AsSuccessfulOpRes <ITestInterface>(); //Assert Assert.IsTrue(opRes.Success); Assert.IsNull(opRes.ErrorMessage); Assert.AreEqual(value, opRes.Value); }
public void MultiAttachAndDetach() { var a = new MyPolicy("a"); var b = new MyPolicy("b"); var c = new MyPolicy("c"); var counters = new Counters(); var impl = new TestInterfaceImpl(counters); var implA = a.Attach <ITestInterface>(impl); var implAbc = b.Attach(a.Attach(b.Attach(c.Attach(implA)))); var implAc = b.Detach(implAbc); (var server, var client) = SetupClientServerPair(); using (server) using (client) { //client.WhenConnected.Wait(); server.Main = implAc; using (var main = client.GetMain <ITestInterface>()) { var foof = main.Foo(123, true); var ccf1 = c.Calls.ReceiveAsync(); Assert.IsTrue(ccf1.Wait(MediumNonDbgTimeout)); var cc1 = ccf1.Result; cc1.ForwardToBob(); var ccf2 = a.Calls.ReceiveAsync(); Assert.IsTrue(ccf2.Wait(MediumNonDbgTimeout)); var cc2 = ccf2.Result; cc2.ForwardToBob(); Assert.IsTrue(a.Returns.ReceiveAsync().Wait(MediumNonDbgTimeout)); cc2.ReturnToAlice(); Assert.IsTrue(c.Returns.ReceiveAsync().Wait(MediumNonDbgTimeout)); cc1.ReturnToAlice(); Assert.IsTrue(foof.Wait(MediumNonDbgTimeout)); } } }
public void InterceptInCaps() { var policy = new MyPolicy("a"); (var server, var client) = SetupClientServerPair(); using (server) using (client) { //client.WhenConnected.Wait(); var counters = new Counters(); server.Main = new TestMoreStuffImpl(counters); using (var main = policy.Attach(client.GetMain <ITestMoreStuff>())) { var counters2 = new Counters(); var cap = new TestInterfaceImpl(counters2); var promise = main.CallFoo(cap); Assert.IsTrue(policy.Calls.TryReceive(out var cc)); cc.InterceptInCaps(); cc.ForwardToBob(); var cc2f = policy.Calls.ReceiveAsync(); Assert.IsTrue(cc2f.Wait(MediumNonDbgTimeout)); var cc2 = cc2f.Result; cc2.ForwardToBob(); var cc2fr = policy.Returns.ReceiveAsync(); Assert.IsTrue(cc2fr.Wait(MediumNonDbgTimeout)); Assert.AreSame(cc2, cc2fr.Result); Assert.AreEqual(1, counters2.CallCount); cc2.ReturnToAlice(); var ccfr = policy.Returns.ReceiveAsync(); Assert.IsTrue(ccfr.Wait(MediumNonDbgTimeout)); Assert.AreSame(cc, ccfr.Result); cc.ReturnToAlice(); Assert.IsTrue(promise.Wait(MediumNonDbgTimeout)); } } }