Esempio n. 1
0
        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);
                    }
                }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 5
0
        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));
                    }
                }
        }
Esempio n. 6
0
        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));
                    }
                }
        }