Exemple #1
0
        public async Task InvokeRequest_WithAudit()
        {
            Guid   randomGuid    = Guid.NewGuid();
            var    parameters    = new RpcParameters(InvokerTests.FromRaw(randomGuid.ToString()));
            string methodName    = nameof(TestRouteClass.GuidTypeMethod);
            var    stringRequest = new RpcRequest("1", methodName, parameters);


            int    startCalledCount = 0;
            int    endCalledCount   = 0;
            object data             = new object();

            DefaultRpcInvoker invoker = this.GetInvoker(methodName, configure: (config) =>
            {
                config.OnInvokeStart = (context) =>
                {
                    startCalledCount++;
                    context.CustomContextData = data;
                };
                config.OnInvokeEnd = (context, response) =>
                {
                    endCalledCount++;
                    Assert.Same(data, context.CustomContextData);
                };
            });
            RpcResponse?stringResponse = await invoker.InvokeRequestAsync(stringRequest);

            Assert.Equal(1, startCalledCount);
            Assert.Equal(1, endCalledCount);
        }
Exemple #2
0
        public async Task InvokeRequest_OptionalParameter_Valid()
        {
            DefaultRpcInvoker invoker         = this.GetInvoker();
            IServiceProvider  serviceProvider = this.GetServiceProvider();
            IRouteContext     routeContext    = this.GetRouteContext <TestRouteClass>();


            //No params specified
            RpcRequest  stringRequest = RpcRequest.WithNoParameters("Optional", "1");
            RpcResponse response      = await invoker.InvokeRequestAsync(stringRequest, RpcPath.Default, routeContext);

            RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

            Assert.Null(resultResponse.Result);
            Assert.False(resultResponse.HasError);

            //Param is empty
            stringRequest = RpcRequest.WithParameterList("Optional", new object[0], "1");
            response      = await invoker.InvokeRequestAsync(stringRequest, RpcPath.Default, routeContext);

            resultResponse = Assert.IsType <RpcResponse>(response);
            Assert.Null(resultResponse.Result);
            Assert.False(resultResponse.HasError);


            //Param is a string
            stringRequest = RpcRequest.WithParameterList("Optional", new[] { JToken.FromObject("Test") }, "1");
            response      = await invoker.InvokeRequestAsync(stringRequest, RpcPath.Default, routeContext);

            resultResponse = Assert.IsType <RpcResponse>(response);
            Assert.NotNull(resultResponse.Result);
            Assert.Equal("Test", resultResponse.Result);
        }
Exemple #3
0
        public async Task InvokeRequest_MultipleDictionaryValues_Valid()
        {
            string            methodName = nameof(TestRouteClass.AllTypes);
            DefaultRpcInvoker invoker    = this.GetInvoker(methodName);

            bool   a         = true;
            string bb        = "Test";
            object?ccc       = null;
            var    dddd      = new TestComplexParam();
            int    eeeee     = 1;
            var    paramDict = new Dictionary <string, IRpcParameter>
            {
                ["a"]     = JsonBytesRpcParameter.FromRaw(a),
                ["bb"]    = JsonBytesRpcParameter.FromRaw(bb),
                ["ccc"]   = JsonBytesRpcParameter.FromRaw(ccc),
                ["dddd"]  = JsonBytesRpcParameter.FromRaw(dddd),
                ["eeeee"] = JsonBytesRpcParameter.FromRaw(eeeee)
            };
            RpcRequest  stringRequest = new RpcRequest("1", methodName, parameters: new RpcParameters(paramDict));
            RpcResponse?response      = await invoker.InvokeRequestAsync(stringRequest);

            RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

            Assert.False(resultResponse.HasError);
            var value = Assert.IsType <ValueTuple <bool, string, object, TestComplexParam, int> >(resultResponse.Result);

            Assert.Equal((a, bb, ccc, dddd, eeeee), value);
        }
Exemple #4
0
        public async Task InvokeRequest_ComplexParam_TwoRequests_NotCached()
        {
            string            methodName = nameof(TestRouteClass.ComplexParam);
            DefaultRpcInvoker invoker    = this.GetInvoker(methodName);

            async Task Test(TestComplexParam param)
            {
                var         rpcParameter  = JsonBytesRpcParameter.FromRaw(param);
                RpcRequest  stringRequest = new RpcRequest("1", methodName, parameters: new RpcParameters(rpcParameter));
                RpcResponse?response      = await invoker.InvokeRequestAsync(stringRequest);

                RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

                Assert.False(resultResponse.HasError);
                Assert.Equal(param, resultResponse.Result);
            }

            TestComplexParam param1 = new TestComplexParam
            {
                A = "Test",
                B = 5
            };

            await Test(param1);

            TestComplexParam param2 = new TestComplexParam
            {
                A = "Test2",
                B = 6
            };

            await Test(param2);
        }
Exemple #5
0
        public async Task InvokeRequest_MethodNotFound_ErrorResponse()
        {
            var parameters             = new RpcParameters(JsonBytesRpcParameter.FromRaw(1));
            var stringRequest          = new RpcRequest("1", "MethodNotFound", parameters);
            DefaultRpcInvoker invoker  = this.GetInvoker(methodInfo: null);
            RpcResponse?      response = await invoker.InvokeRequestAsync(stringRequest);

            Assert.NotNull(response);
            Assert.NotNull(response !.Error);
            Assert.Equal((int)RpcErrorCode.MethodNotFound, response.Error !.Code);
        }
Exemple #6
0
        public async Task InvokeRequest_AmbiguousRequest_ErrorResponse()
        {
            RpcRequest stringRequest = RpcRequest.WithParameterList("AmbiguousMethod", new object[] { JToken.FromObject(1) }, "1");

            IRouteContext     routeContext = this.GetRouteContext <TestRouteClass>();
            DefaultRpcInvoker invoker      = this.GetInvoker();
            RpcResponse       response     = await invoker.InvokeRequestAsync(stringRequest, RpcPath.Default, routeContext);

            Assert.NotNull(response.Error);
            Assert.Equal((int)RpcErrorCode.MethodNotFound, response.Error.Code);
        }
Exemple #7
0
        public async Task InvokeRequest_StringParam_ParseAsGuidType()
        {
            Guid       randomGuid    = Guid.NewGuid();
            RpcRequest stringRequest = RpcRequest.WithParameterList("GuidTypeMethod", new[] { JToken.FromObject(randomGuid.ToString()) }, "1");

            IRouteContext     routeContext   = this.GetRouteContext <TestRouteClass>();
            DefaultRpcInvoker invoker        = this.GetInvoker();
            RpcResponse       stringResponse = await invoker.InvokeRequestAsync(stringRequest, RpcPath.Default, routeContext);


            Assert.Equal(randomGuid, stringResponse.Result);
        }
Exemple #8
0
        public void InvokeRequest_AmbiguousRequest_ErrorResponse()
        {
            RpcRequest stringRequest = new RpcRequest("1", "AmbiguousMethod", 1);
            RpcRoute   route         = new RpcRoute();

            route.AddClass <TestRouteClass>();
            IRpcInvoker invoker  = new DefaultRpcInvoker();
            RpcResponse response = invoker.InvokeRequest(stringRequest, route);

            Assert.NotNull(response.Error);
            Assert.Equal(response.Error.Code, RpcErrorCode.AmbiguousMethod);
        }
Exemple #9
0
        public async Task InvokeRequest_Int64RequestParam_ConvertToInt32Param()
        {
            RpcRequest stringRequest = RpcRequest.WithParameterList("IntParameter", new object[] { JToken.FromObject(1L) }, "1");

            IRouteContext     routeContext = this.GetRouteContext <TestRouteClass>();
            DefaultRpcInvoker invoker      = this.GetInvoker();

            RpcResponse response = await invoker.InvokeRequestAsync(stringRequest, RpcPath.Default, routeContext);

            RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

            Assert.NotNull(resultResponse.Result);
            Assert.Equal(1, resultResponse.Result);
        }
Exemple #10
0
        public async Task InvokeRequest_AsyncMethod_Valid()
        {
            RpcRequest stringRequest = RpcRequest.WithParameterList("AddAsync", new object[] { JToken.FromObject(1), JToken.FromObject(1) }, "1");

            IRouteContext     routeContext = this.GetRouteContext <TestRouteClass>();
            DefaultRpcInvoker invoker      = this.GetInvoker();

            RpcResponse response = await invoker.InvokeRequestAsync(stringRequest, RpcPath.Default, routeContext);

            RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

            Assert.NotNull(resultResponse.Result);
            Assert.Equal(2, resultResponse.Result);
        }
Exemple #11
0
        public async Task InvokeRequest_ServiceProvider_Pass()
        {
            RpcRequest stringRequest = RpcRequest.WithNoParameters("Test", "1");

            DefaultRpcInvoker invoker         = this.GetInvoker();
            IServiceProvider  serviceProvider = this.GetServiceProvider();
            IRouteContext     routeContext    = this.GetRouteContext <TestIoCRouteClass>();
            RpcResponse       response        = await invoker.InvokeRequestAsync(stringRequest, RpcPath.Default, routeContext);

            RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

            Assert.NotNull(resultResponse.Result);
            Assert.Equal(1, resultResponse.Result);
        }
Exemple #12
0
        public async Task InvokeRequest_StringParam_ParseAsGuidType()
        {
            Guid   randomGuid    = Guid.NewGuid();
            var    parameters    = new RpcParameters(JsonBytesRpcParameter.FromRaw(randomGuid.ToString()));
            string methodName    = nameof(TestRouteClass.GuidTypeMethod);
            var    stringRequest = new RpcRequest("1", methodName, parameters);

            DefaultRpcInvoker invoker        = this.GetInvoker(methodName);
            RpcResponse?      stringResponse = await invoker.InvokeRequestAsync(stringRequest);


            Assert.NotNull(stringResponse);
            Assert.Equal(randomGuid, stringResponse !.Result);
        }
Exemple #13
0
        public void InvokeRequest_StringParam_ParseAsGuidType()
        {
            Guid       randomGuid    = Guid.NewGuid();
            RpcRequest stringRequest = new RpcRequest("1", "GuidTypeMethod", randomGuid.ToString());

            RpcRoute route = new RpcRoute();

            route.AddClass <TestRouteClass>();
            IRpcInvoker invoker        = new DefaultRpcInvoker();
            RpcResponse stringResponse = invoker.InvokeRequest(stringRequest, route);


            Assert.Equal(stringResponse.Result, randomGuid);
        }
Exemple #14
0
        public async Task InvokeRequest_AsyncMethod_Valid()
        {
            var    parameters    = new RpcParameters(JsonBytesRpcParameter.FromRaw(1), JsonBytesRpcParameter.FromRaw(1));
            string methodName    = nameof(TestRouteClass.AddAsync);
            var    stringRequest = new RpcRequest("1", methodName, parameters);

            DefaultRpcInvoker invoker = this.GetInvoker(methodName);

            RpcResponse?response = await invoker.InvokeRequestAsync(stringRequest);

            RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

            Assert.NotNull(resultResponse.Result);
            Assert.Equal(2, resultResponse.Result);
        }
Exemple #15
0
        public async Task InvokeRequest_BoolParam_Valid()
        {
            string            methodName = nameof(TestRouteClass.BoolParameter);
            DefaultRpcInvoker invoker    = this.GetInvoker(methodName);

            bool        expectedValue = true;
            var         param         = JsonBytesRpcParameter.FromRaw(expectedValue);
            RpcRequest  stringRequest = new RpcRequest("1", methodName, parameters: new RpcParameters(param));
            RpcResponse?response      = await invoker.InvokeRequestAsync(stringRequest);

            RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

            Assert.False(resultResponse.HasError);
            Assert.Equal(expectedValue, resultResponse.Result);
        }
Exemple #16
0
        public async Task InvokeRequest_Int64RequestParam_ConvertToInt32Param()
        {
            var    parameters    = new RpcParameters(JsonBytesRpcParameter.FromRaw(1L));
            string methodName    = nameof(TestRouteClass.IntParameter);
            var    stringRequest = new RpcRequest("1", methodName, parameters);

            DefaultRpcInvoker invoker = this.GetInvoker(methodName);

            RpcResponse?response = await invoker.InvokeRequestAsync(stringRequest);

            RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

            Assert.NotNull(resultResponse.Result);
            Assert.Equal(1, resultResponse.Result);
        }
        public void InvokeRequest_AsyncMethod_Valid()
        {
            RpcRequest stringRequest = new RpcRequest("1", "2.0", "AddAsync", 1, 1);
            RpcRoute   route         = new RpcRoute();

            route.AddClass <TestRouteClass>();
            IRpcInvoker invoker = new DefaultRpcInvoker();

            RpcResponseBase response = invoker.InvokeRequest(stringRequest, route);

            RpcResultResponse resultResponse = Assert.IsType <RpcResultResponse>(response);

            Assert.NotNull(resultResponse.Result);
            Assert.Equal(resultResponse.Result, 2);
        }
        public void InvokeRequest_Int64RequestParam_ConvertToInt32Param()
        {
            RpcRequest stringRequest = new RpcRequest("1", "2.0", "IntParameter", (long)1);
            RpcRoute   route         = new RpcRoute();

            route.AddClass <TestRouteClass>();
            IRpcInvoker invoker = new DefaultRpcInvoker();

            RpcResponseBase response = invoker.InvokeRequest(stringRequest, route);

            RpcResultResponse resultResponse = Assert.IsType <RpcResultResponse>(response);

            Assert.NotNull(resultResponse.Result);
            Assert.IsType <int>(resultResponse.Result);
            Assert.Equal(resultResponse.Result, 1);
        }
Exemple #19
0
        public async Task InvokeRequest_AmbiguousRequest_ErrorResponse()
        {
            RpcRequest stringRequest = new RpcRequest("1", "AmbiguousMethod", 1);


            var routeCriteria = new List <RouteCriteria>();

            routeCriteria.Add(new RouteCriteria(typeof(TestRouteClass)));
            RpcRoute          route        = new RpcRoute(routeCriteria);
            IRouteContext     routeContext = this.GetRouteContext();
            DefaultRpcInvoker invoker      = this.GetInvoker();
            RpcResponse       response     = await invoker.InvokeRequestAsync(stringRequest, route, routeContext);

            Assert.NotNull(response.Error);
            Assert.Equal(response.Error.Code, (int)RpcErrorCode.MethodNotFound);
        }
Exemple #20
0
        public async Task InvokeRequest_StringParam_ParseAsGuidType()
        {
            Guid       randomGuid    = Guid.NewGuid();
            RpcRequest stringRequest = new RpcRequest("1", "GuidTypeMethod", randomGuid.ToString());

            var routeCriteria = new List <RouteCriteria>();

            routeCriteria.Add(new RouteCriteria(typeof(TestRouteClass)));
            RpcRoute route = new RpcRoute(routeCriteria);

            IRouteContext     routeContext   = this.GetRouteContext();
            DefaultRpcInvoker invoker        = this.GetInvoker();
            RpcResponse       stringResponse = await invoker.InvokeRequestAsync(stringRequest, route, routeContext);


            Assert.Equal(stringResponse.Result, randomGuid);
        }
Exemple #21
0
        public async Task InvokeRequest_ServiceProvider_Pass()
        {
            RpcRequest stringRequest = new RpcRequest("1", "Test");
            var        routeCriteria = new List <RouteCriteria>();

            routeCriteria.Add(new RouteCriteria(typeof(TestIoCRouteClass)));
            RpcRoute route = new RpcRoute(routeCriteria);

            DefaultRpcInvoker invoker         = this.GetInvoker();
            IServiceProvider  serviceProvider = this.GetServiceProvider();
            IRouteContext     routeContext    = this.GetRouteContext();
            RpcResponse       response        = await invoker.InvokeRequestAsync(stringRequest, route, routeContext);

            RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

            Assert.NotNull(resultResponse.Result);
            Assert.Equal(JTokenType.Integer, resultResponse.Result.Type);
            Assert.Equal(resultResponse.Result.Value <int>(), 1);
        }
Exemple #22
0
        public async Task InvokeRequest_ComplexParam_Valid()
        {
            string            methodName = nameof(TestRouteClass.ComplexParam);
            DefaultRpcInvoker invoker    = this.GetInvoker(methodName);

            TestComplexParam param = new TestComplexParam
            {
                A = "Test",
                B = 5
            };
            var         rpcParameter  = InvokerTests.FromRaw(param);
            RpcRequest  stringRequest = new RpcRequest("1", methodName, parameters: new RpcParameters(rpcParameter));
            RpcResponse?response      = await invoker.InvokeRequestAsync(stringRequest);

            RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

            Assert.False(resultResponse.HasError);
            Assert.Equal(param, resultResponse.Result);
        }
Exemple #23
0
        public void InvokeRequest_ServiceProvider_Pass()
        {
            RpcRequest stringRequest = new RpcRequest("1", "Test");
            RpcRoute   route         = new RpcRoute();

            route.AddClass <TestIoCRouteClass>();
            IRpcInvoker        invoker           = new DefaultRpcInvoker();
            IServiceCollection serviceCollection = new ServiceCollection();

            serviceCollection.AddScoped <TestInjectionClass>();
            serviceCollection.AddScoped <TestIoCRouteClass>();
            IServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
            RpcResponse      response        = invoker.InvokeRequest(stringRequest, route, serviceProvider);

            RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

            Assert.NotNull(resultResponse.Result);
            Assert.Equal(JTokenType.Integer, resultResponse.Result.Type);
            Assert.Equal(resultResponse.Result.Value <int>(), 1);
        }
Exemple #24
0
        public async Task InvokeRequest_Int64RequestParam_ConvertToInt32Param()
        {
            RpcRequest stringRequest = new RpcRequest("1", "IntParameter", (long)1);


            var routeCriteria = new List <RouteCriteria>();

            routeCriteria.Add(new RouteCriteria(typeof(TestRouteClass)));
            RpcRoute          route        = new RpcRoute(routeCriteria);
            IRouteContext     routeContext = this.GetRouteContext();
            DefaultRpcInvoker invoker      = this.GetInvoker();

            RpcResponse response = await invoker.InvokeRequestAsync(stringRequest, route, routeContext);

            RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

            Assert.NotNull(resultResponse.Result);
            Assert.Equal(JTokenType.Integer, resultResponse.Result.Type);
            Assert.Equal(resultResponse.Result.Value <int>(), 1);
        }
Exemple #25
0
        public async Task InvokeRequest_AsyncMethod_Valid()
        {
            RpcRequest stringRequest = new RpcRequest("1", "AddAsync", 1, 1);


            var routeCriteria = new List <RouteCriteria>();

            routeCriteria.Add(new RouteCriteria(typeof(TestRouteClass)));
            RpcRoute route = new RpcRoute(routeCriteria);

            IRouteContext     routeContext = this.GetRouteContext();
            DefaultRpcInvoker invoker      = this.GetInvoker();

            RpcResponse response = await invoker.InvokeRequestAsync(stringRequest, route, routeContext);

            RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

            Assert.NotNull(resultResponse.Result);
            Assert.Equal(resultResponse.Result, 2);
        }
Exemple #26
0
        public static async Task RunInvokerAsync()
        {
            var authorizationService = new FakeAuthorizationService();
            var policyProvider       = new FakePolicyProvider();
            var logger            = new FakeLogger();
            var options           = Options.Create(new RpcServerConfiguration());
            var rpcRequestMatcher = new FakeRequestMatcher();
            var invoker           = new DefaultRpcInvoker(authorizationService, policyProvider, logger, options, rpcRequestMatcher);

            var              request         = new RpcRequest("Ping");
            const string     path            = "Test";
            var              routingOptions  = new RpcAutoRoutingOptions();
            var              routeProvider   = new RpcAutoRouteProvider(Options.Create(routingOptions));
            var              user            = new ClaimsPrincipal();
            IServiceProvider serviceProvider = null;
            var              routeContext    = new DefaultRouteContext(serviceProvider, user, routeProvider);

            for (int i = 0; i < 10_000_000; i++)
            {
                await invoker.InvokeRequestAsync(request, path, routeContext);
            }
        }
Exemple #27
0
        public async Task InvokeRequest_OptionalParameter_Valid()
        {
            var routeCriteria = new List <RouteCriteria>();

            routeCriteria.Add(new RouteCriteria(typeof(TestRouteClass)));
            RpcRoute route = new RpcRoute(routeCriteria);

            DefaultRpcInvoker invoker         = this.GetInvoker();
            IServiceProvider  serviceProvider = this.GetServiceProvider();
            IRouteContext     routeContext    = this.GetRouteContext();


            //No params specified
            RpcRequest  stringRequest = new RpcRequest("1", "Optional");
            RpcResponse response      = await invoker.InvokeRequestAsync(stringRequest, route, routeContext);

            RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

            Assert.Null(resultResponse.Result);
            Assert.False(resultResponse.HasError);

            //Param is null
            stringRequest = new RpcRequest("1", "Optional", parameterList: null);
            response      = await invoker.InvokeRequestAsync(stringRequest, route, routeContext);

            resultResponse = Assert.IsType <RpcResponse>(response);
            Assert.Null(resultResponse.Result);
            Assert.False(resultResponse.HasError);


            //Param is a string
            stringRequest = new RpcRequest("1", "Optional", parameterList: "Test");
            response      = await invoker.InvokeRequestAsync(stringRequest, route, routeContext);

            resultResponse = Assert.IsType <RpcResponse>(response);
            Assert.NotNull(resultResponse.Result);
            Assert.Equal(JTokenType.String, resultResponse.Result.Type);
            Assert.Equal(resultResponse.Result.Value <string>(), "Test");
        }
Exemple #28
0
        public async Task InvokeRequest_OptionalParameter_Valid()
        {
            string            methodName = nameof(TestRouteClass.Optional);
            DefaultRpcInvoker invoker    = this.GetInvoker(methodName);


            //No params specified
            RpcRequest  stringRequest = new RpcRequest("1", methodName, parameters: null);
            RpcResponse?response      = await invoker.InvokeRequestAsync(stringRequest);

            RpcResponse resultResponse = Assert.IsType <RpcResponse>(response);

            Assert.Null(resultResponse.Result);
            Assert.False(resultResponse.HasError, resultResponse.Error?.Message);

            //Param is empty
            var parameters = new RpcParameters(new IRpcParameter[0]);

            stringRequest = new RpcRequest("1", methodName, parameters: parameters);
            response      = await invoker.InvokeRequestAsync(stringRequest);

            resultResponse = Assert.IsType <RpcResponse>(response);
            Assert.Null(resultResponse.Result);
            Assert.False(resultResponse.HasError);


            //Param is a string
            const string value = "Test";

            parameters    = new RpcParameters(new IRpcParameter[] { JsonBytesRpcParameter.FromRaw(value) });
            stringRequest = new RpcRequest("1", methodName, parameters: parameters);
            response      = await invoker.InvokeRequestAsync(stringRequest);

            resultResponse = Assert.IsType <RpcResponse>(response);
            Assert.NotNull(resultResponse.Result);
            Assert.IsType <string>(resultResponse.Result);
            Assert.Equal(value, (string)resultResponse.Result !);
        }