示例#1
0
 public static Task VoidWithEightParametersAsync(
     ComplexParameter parameter1,
     byte parameter2,
     DotNetObjectReference <TestDTO> parameter3,
     int parameter4,
     long parameter5,
     float parameter6,
     List <double> parameter7,
     Segment parameter8)
 {
     Invocations[nameof(VoidWithEightParametersAsync)] = new object[] { parameter1, parameter2, parameter3.Value.GetNonSerializedValue(), parameter4, parameter5, parameter6, parameter7, parameter8 };
     return(Task.CompletedTask);
 }
示例#2
0
        public void ShallRaiseExceptionForTwoWaySetters(string serverAddress, string clientAddress)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    server.Add <IContract>(objectId, hostedObject);

                    var remoteObject = client.Connect <IContract>(objectId);
                    hostedObject.Value  = 0;
                    hostedObject.Action = () => throw new InvalidOperationException("qwerty");

                    //Act
                    var exception = Assert.Catch <FaultException>(() => { remoteObject.Set = 5; });
                    //Assert
                    Assert.AreEqual(0, hostedObject.Value);
                    Assert.AreEqual("qwerty", exception.Message);
                    Assert.AreEqual(typeof(InvalidOperationException).FullName, exception.ExceptionType);

                    //Act
                    exception = Assert.Catch <FaultException>(() => { remoteObject.GetSet = 5; });
                    //Assert
                    Assert.AreEqual(0, hostedObject.Value);
                    Assert.AreEqual("qwerty", exception.Message);
                    Assert.AreEqual(typeof(InvalidOperationException).FullName, exception.ExceptionType);

                    //Act
                    exception = Assert.Catch <FaultException>(() =>
                    {
                        remoteObject.ComplexGetSet = new ComplexParameter {
                            A = 5
                        };
                    });
                    //Assert
                    Assert.AreEqual(0, hostedObject.Value);
                    Assert.AreEqual("qwerty", exception.Message);
                    Assert.AreEqual(typeof(InvalidOperationException).FullName, exception.ExceptionType);

                    //Act
                    ComplexParameter complex = null;
                    exception = Assert.Catch <FaultException>(() => { complex = remoteObject.ComplexGetSet; });
                    //Assert
                    Assert.AreEqual(null, complex);
                    Assert.AreEqual("qwerty", exception.Message);
                    Assert.AreEqual(typeof(InvalidOperationException).FullName, exception.ExceptionType);
                }
        }
示例#3
0
 public static object[] EchoTwoParameters(
     ComplexParameter parameter1,
     byte parameter2)
 {
     return(new object[] { parameter1, parameter2 });
 }
示例#4
0
 public static object[] EchoOneParameter(ComplexParameter parameter1)
 {
     return(new object[] { parameter1 });
 }
示例#5
0
        public void ShallSetValuesForProperties(string serverAddress, string clientAddress)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    server.Add <IContract>(objectId, hostedObject);

                    var remoteObject = client.Connect <IContract>(objectId);

                    var complexParameter = new ComplexParameter
                    {
                        A = 2,
                        B = false,
                        D = 234.234,
                        S = "asd"
                    };
                    hostedObject.ComplexValue = complexParameter;

                    Assert.AreEqual(0, hostedObject.Value);
                    AssertComplexParameter(complexParameter, hostedObject.ComplexValue);

                    //Act
                    remoteObject.Set = 5;
                    //Assert
                    Assert.AreEqual(5, hostedObject.Value);

                    //Act
                    remoteObject.OneWaySet = 7;
                    hostedObject.WaitSet();
                    //Assert
                    Assert.AreEqual(7, hostedObject.Value);

                    //Act
                    remoteObject.OneWayGetSet = 9;
                    hostedObject.WaitSet();
                    //Assert
                    Assert.AreEqual(9, hostedObject.Value);

                    //Act
                    remoteObject.GetSet = 11;
                    //Assert
                    Assert.AreEqual(11, hostedObject.Value);

                    //Act
                    var complexParameter2 = new ComplexParameter
                    {
                        A = 1,
                        B = true,
                        D = 123.123,
                        S = "qwerty"
                    };
                    remoteObject.ComplexGetSet = complexParameter2;
                    //Assert
                    AssertComplexParameter(complexParameter2, hostedObject.ComplexValue);
                }
        }
示例#6
0
        public void ShallCallRemoteMethodsOneWayWithParameters(string serverAddress, string clientAddress)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    server.Add <IContract>(objectId, hostedObject);

                    var remoteObject = client.Connect <IContract>(objectId);

                    Assert.IsFalse(hostedObject.OneWayWithParameterCalled);

                    //Act
                    var complexParameter1 = new ComplexParameter
                    {
                        A = 5,
                        B = true,
                        D = 543.543,
                        S = "asd"
                    };
                    var complexParameter2 = new ComplexParameter
                    {
                        A = 6,
                        B = false,
                        D = 345.345,
                        S = "zxc"
                    };
                    var complexParameter3 = new ComplexParameter
                    {
                        A = 5,
                        B = true,
                        D = 543.543,
                        S = "123"
                    };

                    remoteObject.CallOneWayWithParameters(
                        1,
                        false,
                        "qwerty",
                        123.123,
                        complexParameter1,
                        new[] { 1, 2, 3 },
                        new[] { false, true, false },
                        new[] { "123", "qwe", "zxc" },
                        new[] { 1.123, 2.234, 3.345 },
                        new[]
                    {
                        complexParameter2,
                        complexParameter3,
                    });
                    hostedObject.WaitCallCompleted();

                    //Assert
                    Assert.IsTrue(hostedObject.OneWayWithParameterCalled);

                    Assert.AreEqual(1, hostedObject.Parameters[0]);
                    Assert.AreEqual(false, hostedObject.Parameters[1]);
                    Assert.AreEqual("qwerty", hostedObject.Parameters[2]);
                    Assert.AreEqual(123.123, hostedObject.Parameters[3]);
                    AssertComplexParameter(complexParameter1, (ComplexParameter)hostedObject.Parameters[4]);
                    Assert.AreEqual(new[] { 1, 2, 3 }, hostedObject.Parameters[5]);
                    Assert.AreEqual(new[] { false, true, false }, hostedObject.Parameters[6]);
                    Assert.AreEqual(new[] { "123", "qwe", "zxc" }, hostedObject.Parameters[7]);
                    Assert.AreEqual(new[] { 1.123, 2.234, 3.345 }, hostedObject.Parameters[8]);
                    Assert.AreEqual(2, ((ComplexParameter[])hostedObject.Parameters[9]).Length);
                    AssertComplexParameter(complexParameter2, ((ComplexParameter[])hostedObject.Parameters[9])[0]);
                    AssertComplexParameter(complexParameter3, ((ComplexParameter[])hostedObject.Parameters[9])[1]);

                    //Act
                    hostedObject.OneWayWithParameterCalled = false;
                    hostedObject.Parameters = null;

                    Assert.IsFalse(hostedObject.OneWayWithParameterCalled);

                    remoteObject.CallOneWayWithParameters(
                        2,
                        true,
                        null,
                        234.234,
                        null,
                        null,
                        null,
                        null,
                        null,
                        null);
                    hostedObject.WaitCallCompleted();

                    //Assert
                    Assert.IsTrue(hostedObject.OneWayWithParameterCalled);

                    Assert.AreEqual(2, hostedObject.Parameters[0]);
                    Assert.AreEqual(true, hostedObject.Parameters[1]);
                    Assert.AreEqual(null, hostedObject.Parameters[2]);
                    Assert.AreEqual(234.234, hostedObject.Parameters[3]);
                    Assert.AreEqual(null, hostedObject.Parameters[4]);
                    Assert.AreEqual(null, hostedObject.Parameters[5]);
                    Assert.AreEqual(null, hostedObject.Parameters[6]);
                    Assert.AreEqual(null, hostedObject.Parameters[7]);
                }
        }
示例#7
0
 public static void VoidWithOneParameter(ComplexParameter parameter1)
 {
     Invocations[nameof(VoidWithOneParameter)] = new object[] { parameter1 };
 }
示例#8
0
 public static Task <object[]> EchoOneParameterAsync(ComplexParameter parameter1)
 {
     return(Task.FromResult(new object[] { parameter1 }));
 }
示例#9
0
        public void ShallRaiseEventWithParameters(string serverAddress, string client1Address, string client2Address)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client1 = new EloquentClient(serverAddress, client1Address))
                    using (var client2 = new EloquentClient(serverAddress, client2Address))
                    {
                        server.Add <IContract>(objectId, hostedObject);

                        var remoteObject1 = client1.Connect <IContract>(objectId);
                        var remoteObject2 = client2.Connect <IContract>(objectId);

                        object[] parameters1 = null;
                        object[] parameters2 = null;

                        var autoResetEvent1 = new AutoResetEvent(false);
                        var autoResetEvent2 = new AutoResetEvent(false);

                        remoteObject1.EventWithParameters += (i, b, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) =>
                        {
                            parameters1 = new object[]
                            {
                                i, b, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10
                            };

                            autoResetEvent1.Set();
                        };

                        remoteObject2.EventWithParameters += (i, b, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) =>
                        {
                            parameters2 = new object[]
                            {
                                i, b, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10
                            };

                            autoResetEvent2.Set();
                        };

                        //Act
                        Assert.IsNull(parameters1);
                        Assert.IsNull(parameters2);

                        //Act
                        var complexParameter1 = new ComplexParameter
                        {
                            A = 5,
                            B = true,
                            D = 543.543,
                            S = "asd"
                        };
                        var complexParameter2 = new ComplexParameter
                        {
                            A = 6,
                            B = false,
                            D = 345.345,
                            S = "zxc"
                        };
                        var complexParameter3 = new ComplexParameter
                        {
                            A = 5,
                            B = true,
                            D = 543.543,
                            S = "123"
                        };

                        hostedObject.SendEventWithParameters(
                            1,
                            false,
                            "qwerty",
                            123.123,
                            complexParameter1,
                            new[] { 1, 2, 3 },
                            new[] { false, true, false },
                            new[] { "123", "qwe", "zxc" },
                            new[] { 1.123, 2.234, 3.345 },
                            new[]
                        {
                            complexParameter2,
                            complexParameter3,
                        });

                        autoResetEvent1.WaitOne(2000);
                        autoResetEvent2.WaitOne(2000);

                        Assert.NotNull(parameters1);
                        Assert.NotNull(parameters2);

                        Assert.AreEqual(1, parameters1[0]);
                        Assert.AreEqual(false, parameters1[1]);
                        Assert.AreEqual("qwerty", parameters1[2]);
                        Assert.AreEqual(123.123, parameters1[3]);
                        AssertComplexParameter(complexParameter1, (ComplexParameter)parameters1[4]);
                        Assert.AreEqual(new[] { 1, 2, 3 }, parameters1[5]);
                        Assert.AreEqual(new[] { false, true, false }, parameters1[6]);
                        Assert.AreEqual(new[] { "123", "qwe", "zxc" }, parameters1[7]);
                        Assert.AreEqual(new[] { 1.123, 2.234, 3.345 }, parameters1[8]);
                        Assert.AreEqual(2, ((ComplexParameter[])parameters1[9]).Length);
                        AssertComplexParameter(complexParameter2, ((ComplexParameter[])parameters1[9])[0]);
                        AssertComplexParameter(complexParameter3, ((ComplexParameter[])parameters1[9])[1]);


                        Assert.AreEqual(1, parameters2[0]);
                        Assert.AreEqual(false, parameters2[1]);
                        Assert.AreEqual("qwerty", parameters2[2]);
                        Assert.AreEqual(123.123, parameters2[3]);
                        AssertComplexParameter(complexParameter1, (ComplexParameter)parameters2[4]);
                        Assert.AreEqual(new[] { 1, 2, 3 }, parameters2[5]);
                        Assert.AreEqual(new[] { false, true, false }, parameters2[6]);
                        Assert.AreEqual(new[] { "123", "qwe", "zxc" }, parameters2[7]);
                        Assert.AreEqual(new[] { 1.123, 2.234, 3.345 }, parameters2[8]);
                        Assert.AreEqual(2, ((ComplexParameter[])parameters2[9]).Length);
                        AssertComplexParameter(complexParameter2, ((ComplexParameter[])parameters2[9])[0]);
                        AssertComplexParameter(complexParameter3, ((ComplexParameter[])parameters2[9])[1]);
                    }
        }
示例#10
0
 public EntryPoint(IContext context, ComplexParameter arg1)
 {
 }
示例#11
0
 public void Run(IContext context, ComplexParameter complexParameter)
 {
     Console.WriteLine(complexParameter.Message);
     Console.WriteLine(complexParameter.HostProcessId);
 }
示例#12
0
        public void RedisStorageStoresAndRetrievesComplexObjects()
        {
            var objectToStore = new ComplexParameter()
                {
                    SomeProperty = "this is string",
                    AnotherProperty = 47
                };
            var objectName = Guid.NewGuid().ToString();

            using (var storage = new RedisStorage(RedisStorageTests.Host))
            {
                storage.Store(objectName, objectToStore);
                var retrievedObject = storage.Retrieve<ComplexParameter>(objectName);

                retrievedObject.SomeProperty.ShouldBe(objectToStore.SomeProperty);
                retrievedObject.AnotherProperty.ShouldBe(objectToStore.AnotherProperty);
            }
        }
示例#13
0
        public void RedisStorageStoresAndRetrievesComplexObjectsInBulks()
        {
            var objectToStore = new ComplexParameter()
            {
                SomeProperty = "this is string",
                AnotherProperty = 47
            };
            KeyValuePair<string, ComplexParameter>[] objectsToStore = new KeyValuePair<string, ComplexParameter>[100];
            for (int i = 0; i < objectsToStore.Length; i++)
            {
                objectsToStore[i] = new KeyValuePair<string, ComplexParameter>(Guid.NewGuid().ToString(), objectToStore);
            }

            using (var storage = new RedisStorage(RedisStorageTests.Host))
            {
                storage.BulkStore(objectsToStore);
                var retrievedObjects = storage.BulkRetrieve<ComplexParameter>(objectsToStore.Select(o => o.Key).ToArray());

                foreach (var retrievedObject in retrievedObjects)
                {
                    retrievedObject.SomeProperty.ShouldBe(objectToStore.SomeProperty);
                    retrievedObject.AnotherProperty.ShouldBe(objectToStore.AnotherProperty);
                }
            }
        }
示例#14
0
 public void CallOneWayWithParameters(int a, bool b, string s, double d, ComplexParameter p, int[] iArr, bool[] bArr, string[] sArr, double[] dArr, ComplexParameter[] pArr)
 {
     OneWayWithParameterCalled = true;
     Parameters = new object[] { a, b, s, d, p, iArr, bArr, sArr, dArr, pArr };
     _autoResetEvent.Set();
 }
示例#15
0
 public static Task VoidWithOneParameterAsync(ComplexParameter parameter1)
 {
     Invocations[nameof(VoidWithOneParameterAsync)] = new object[] { parameter1 };
     return(Task.CompletedTask);
 }
示例#16
0
 public void SendRegularEvent(ComplexParameter complexParameter)
 {
     RegularEvent?.Invoke(this, complexParameter);
 }
示例#17
0
 public void SendEventWithParameters(int a, bool b, string s, double d, ComplexParameter p, int[] iArr, bool[] bArr, string[] sArr, double[] dArr, ComplexParameter[] pArr)
 {
     EventWithParameters?.Invoke(a, b, s, d, p, iArr, bArr, sArr, dArr, pArr);
 }
示例#18
0
 public static Task <object[]> EchoTwoParametersAsync(
     ComplexParameter parameter1,
     byte parameter2)
 {
     return(Task.FromResult(new object[] { parameter1, parameter2 }));
 }
示例#19
0
        public void ShallRaiseRegularEventWithClientAsSender(string serverAddress, string client1Address,
                                                             string client2Address)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client1 = new EloquentClient(serverAddress, client1Address))
                    using (var client2 = new EloquentClient(serverAddress, client2Address))
                    {
                        server.Add <IContract>(objectId, hostedObject);

                        var remoteObject1 = client1.Connect <IContract>(objectId);
                        var remoteObject2 = client2.Connect <IContract>(objectId);
                        var remoteObject3 = client2.Connect <IContract>(objectId);
                        Assert.AreNotSame(remoteObject1, remoteObject2);
                        Assert.AreNotSame(remoteObject2, remoteObject3);

                        object           sender1 = null;
                        object           sender2 = null;
                        object           sender3 = null;
                        object           sender4 = null;
                        ComplexParameter args1   = null;
                        ComplexParameter args2   = null;
                        ComplexParameter args3   = null;
                        ComplexParameter args4   = null;

                        var autoResetEvent1 = new AutoResetEvent(false);
                        var autoResetEvent2 = new AutoResetEvent(false);
                        var autoResetEvent3 = new AutoResetEvent(false);
                        var autoResetEvent4 = new AutoResetEvent(false);

                        remoteObject1.RegularEvent += (s, args) =>
                        {
                            sender1 = s;
                            args1   = args;
                            autoResetEvent1.Set();
                        };
                        remoteObject2.RegularEvent += (s, args) =>
                        {
                            sender2 = s;
                            args2   = args;
                            autoResetEvent2.Set();
                        };
                        remoteObject3.RegularEvent += (s, args) =>
                        {
                            sender3 = s;
                            args3   = args;
                            autoResetEvent3.Set();
                        };
                        remoteObject3.RegularEvent += (s, args) =>
                        {
                            sender4 = s;
                            args4   = args;
                            autoResetEvent4.Set();
                        };

                        var complexParameter1 = new ComplexParameter
                        {
                            A = 5,
                            B = true,
                            D = 543.543,
                            S = "asd"
                        };

                        Assert.IsNull(sender1);
                        Assert.IsNull(sender2);
                        Assert.IsNull(sender3);
                        Assert.IsNull(sender4);
                        Assert.IsNull(args1);
                        Assert.IsNull(args2);
                        Assert.IsNull(args3);
                        Assert.IsNull(args4);

                        //Act
                        hostedObject.SendRegularEvent(complexParameter1);

                        autoResetEvent1.WaitOne(2000);
                        autoResetEvent2.WaitOne(2000);
                        autoResetEvent3.WaitOne(2000);
                        autoResetEvent4.WaitOne(2000);

                        //Assert
                        Assert.AreSame(remoteObject1, sender1);
                        Assert.AreSame(remoteObject2, sender2);
                        Assert.AreSame(remoteObject3, sender3);
                        Assert.AreSame(remoteObject3, sender4);
                        AssertComplexParameter(complexParameter1, args1);
                        AssertComplexParameter(complexParameter1, args2);
                        AssertComplexParameter(complexParameter1, args3);
                        AssertComplexParameter(complexParameter1, args4);
                    }
        }
示例#20
0
 public static void VoidWithTwoParameters(
     ComplexParameter parameter1,
     byte parameter2)
 {
     Invocations[nameof(VoidWithTwoParameters)] = new object[] { parameter1, parameter2 };
 }
示例#21
0
 public void CallTwoWayWithParameters(int a, bool b, string s, double d, ComplexParameter p, int[] iArr,
                                      bool[] bArr, string[] sArr, double[] dArr, ComplexParameter[] pArr)
 {
     TwoWayWithParameterCalled = true;
     Parameters = new object[] { a, b, s, d, p, iArr, bArr, sArr, dArr, pArr };
 }