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); }
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); }
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); }
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); }
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); }
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); }
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); }
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"); }
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 !); }
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); }
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); }
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); }
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); }
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 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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); } }