public void ApiKey_ExecutionRequestValidationShouldFailIfBadToken() { RegisterDb(); ServiceProxySystem.Register <ApiKeyRequiredEcho>(); IUserResolver mockUserResolver = Substitute.For <IUserResolver>(); mockUserResolver.GetUser(Arg.Any <IHttpContext>()).Returns("testUser"); LocalApiKeyManager.Default.UserResolver = mockUserResolver; string methodName = MethodBase.GetCurrentMethod().Name; IApplicationNameProvider nameProvider = new TestApplicationNameProvider(methodName.RandomLetters(4)); IApiKeyProvider keyProvider = new LocalApiKeyProvider(); ExecutionRequest er = new ExecutionRequest("ApiKeyRequiredEcho", "Send", "json") { ApiKeyResolver = new ApiKeyResolver(keyProvider, nameProvider), Request = new ServiceProxyTestHelpers.JsonTestRequest() }; string data = ApiParameters.ParametersToJsonParamsObjectString("some random data"); er.InputString = data; ApiKeyResolver resolver = new ApiKeyResolver(keyProvider, nameProvider); resolver.SetKeyToken(er.Request.Headers, data); er.Request.Headers[Headers.KeyToken] = "bad token value"; ValidationResult result = er.Validate(); Expect.IsFalse(result.Success, "Validation should have failed"); List <ValidationFailures> failures = new List <ValidationFailures>(result.ValidationFailures); Expect.IsTrue(failures.Contains(ValidationFailures.InvalidApiKeyToken), "ValidationFailure should have been InvalidApiKeyToken"); }
public void ApiKey_ExecutionRequestShouldValidateApiKey() { RegisterDb(); ServiceProxySystem.Register <ApiKeyRequiredEcho>(); string testName = MethodBase.GetCurrentMethod().Name; IUserResolver mockUserResolver = Substitute.For <IUserResolver>(); mockUserResolver.GetUser(Arg.Any <IHttpContext>()).Returns("testUser"); LocalApiKeyManager.Default.UserResolver = mockUserResolver; IApplicationNameProvider nameProvider = new TestApplicationNameProvider(testName.RandomLetters(6)); IApiKeyProvider keyProvider = new LocalApiKeyProvider(); ExecutionRequest er = new ExecutionRequest("ApiKeyRequiredEcho", "Send", "json") { ApiKeyResolver = new ApiKeyResolver(keyProvider, nameProvider), Request = new ServiceProxyTestHelpers.JsonTestRequest() }; string data = ApiParameters.ParametersToJsonParamsObjectString("some random data"); er.InputString = data; ValidationResult result = er.Validate(); result.Success.IsFalse(); List <ValidationFailures> failures = new List <ValidationFailures>(result.ValidationFailures); failures.Contains(ValidationFailures.InvalidApiKeyToken).IsTrue(); }
public void ApiKey_ExecutionRequestValidationShouldSucceedIfGoodToken() { Prepare(); ServiceProxySystem.Register <ApiKeyRequiredEcho>(); string methodName = MethodBase.GetCurrentMethod().Name; IApplicationNameProvider nameProvider = new TestApplicationNameProvider(methodName); IApiKeyProvider keyProvider = new LocalApiKeyProvider(); string className = "ApiKeyRequiredEcho"; string method = "Send"; string data = ApiParameters.ParametersToJsonParamsArray("some random data").ToJson(); ExecutionRequest er = new ExecutionRequest(className, method, "json") { JsonParams = data, ApiKeyResolver = new ApiKeyResolver(keyProvider, nameProvider), Request = new ServiceProxyTestHelpers.FormUrlEncodedTestRequest() }; er.ApiKeyResolver.SetKeyToken(er.Request.Headers, ApiParameters.GetStringToHash(className, method, data)); ValidationResult result = er.Validate(); Expect.IsTrue(result.Success); }
public void MissingClassShouldReturnClassNotSpecifiedResult() { ExecutionRequest er = new ExecutionRequest(null, "TestMethod", "json"); ValidationResult result = er.Validate(); Expect.IsFalse(result.Success); Expect.IsTrue(result.ValidationFailures.ToList().Contains(ValidationFailures.ClassNameNotSpecified)); OutFormat(result.Message); }
public void MethodNotFoundShouldBeReturned() { ServiceProxySystem.Register <TestClass>(); ExecutionRequest er = new ExecutionRequest("TestClass", "MissingMethod", "json"); ValidationResult result = er.Validate(); Expect.IsFalse(result.Success); Expect.IsTrue(result.ValidationFailures.ToList().Contains(ValidationFailures.MethodNotFound)); Message.PrintLine(result.Message); }
public void UnregisteredClassShoudReturnClassNotRegistered() { ServiceProxySystem.Unregister <TestClass>(); ExecutionRequest er = new ExecutionRequest("TestClass", "ShouldWork", "json"); ValidationResult result = er.Validate(); Expect.IsFalse(result.Success); Expect.IsTrue(result.ValidationFailures.ToList().Contains(ValidationFailures.ClassNotRegistered)); Message.PrintLine(result.Message); }
public void MissingMethodShouldReturnMethodNotSpecified() { ServiceProxySystem.Register <TestClass>(); ExecutionRequest er = new ExecutionRequest("TestClass", "", "json"); ValidationResult result = er.Validate(); Expect.IsFalse(result.Success); Expect.IsTrue(result.ValidationFailures.ToList().Contains(ValidationFailures.MethodNameNotSpecified)); OutLineFormat(result.Message); }
public void ExecuteShouldSucceed() { ServiceProxySystem.Register <TestClass>(); ExecutionRequest er = new ExecutionRequest("TestClass", "ShouldWork", "json"); ValidationResult result = er.Validate(); Expect.IsTrue(result.Success); er.Execute(); Expect.IsTrue(er.Result.Equals("Yay")); Message.PrintLine(er.Result.ToString()); }
public void ParameterCountMismatchShouldBeReturned() { ServiceProxySystem.Register <TestClass>(); ExecutionRequest er = new ExecutionRequest("TestClass", "TestMethod", "json"); er.Arguments = new object[] { new { }, new { } }; ValidationResult result = er.Validate(); Expect.IsFalse(result.Success); Expect.IsTrue(result.ValidationFailures.ToList().Contains(ValidationFailures.ParameterCountMismatch)); Message.PrintLine(result.Message); }
public void ExecutionRequestShouldBeValid() { string url = "http://blah.com/TestBam/GetPages.json"; RequestWrapper req = new RequestWrapper(new { Headers = new NameValueCollection(), Url = new Uri(url), HttpMethod = "GET", ContentLength = 0, QueryString = new NameValueCollection() }); ResponseWrapper res = new ResponseWrapper(new object()); ExecutionRequest execRequest = new ExecutionRequest(req, res); execRequest.ServiceProvider.Set(typeof(TestBam), new TestBam()); ValidationResult validation = execRequest.Validate(); Expect.IsTrue(validation.Success); }
public void Validation_FailsBecauseRequestFilter() { string url = "http://blah.com/ClassWithTestFilterOnAMethod/Method.json"; RequestWrapper req = new RequestWrapper(new { Headers = new NameValueCollection(), Url = new Uri(url), HttpMethod = "GET", ContentLength = 0, QueryString = new NameValueCollection() }); ResponseWrapper res = new ResponseWrapper(new object()); ExecutionRequest execRequest = new ExecutionRequest(req, res); execRequest.ServiceProvider.Set(typeof(ClassWithTestFilterOnAMethod), new ClassWithTestFilterOnAMethod()); ValidationResult validation = execRequest.Validate(); Expect.AreEqual(_failureMessage, validation.Message); Expect.IsFalse(validation.Success); }
public void ExecutionRequestShouldBeValidForValidUrls() { string url = "http://blah.com/get/TestBam/GetPages.json"; RequestWrapper reqW = new RequestWrapper(new { Headers = new NameValueCollection(), Url = new Uri(url), HttpMethod = "GET", ContentLength = 0, QueryString = new NameValueCollection() }); ResponseWrapper resW = new ResponseWrapper(new object()); ExecutionRequest req = new ExecutionRequest(reqW, resW); req.ServiceProvider.Set <TestBam>(new TestBam()); req.RequestUrl = new Uri(url); req.ResolveExecutionTargetInfo(); ValidationResult result = req.Validate(); Expect.IsTrue(result.Success); Expect.AreEqual("TestBam", req.ClassName); Expect.AreEqual("GetPages", req.MethodName); Expect.AreEqual("json", req.Ext); }
public void LocalMethodShouldValidateIfLocalClient() { ServiceProxySystem.Register <TestClass>(); IRequest request = Substitute.For <IRequest>(); request.QueryString.Returns(new NameValueCollection()); request.UserHostAddress.Returns("127.0.0.1:80"); IResponse response = Substitute.For <IResponse>(); IHttpContext context = Substitute.For <IHttpContext>(); context.Request.Returns(request); context.Response.Returns(response); ExecutionRequest er = new ExecutionRequest("TestClass", "LocalMethod", "json") { Context = context }; ValidationResult result = er.Validate(); Expect.IsTrue(result.Success); }
public void LocalMethodShouldNotValidateIfNotLoopback() { ServiceProxySystem.Register <TestClass>(); IRequest request = Substitute.For <IRequest>(); request.QueryString.Returns(new NameValueCollection()); request.UserHostAddress.Returns("192.168.0.80:80"); IResponse response = Substitute.For <IResponse>(); IHttpContext context = Substitute.For <IHttpContext>(); context.Request.Returns(request); context.Response.Returns(response); ExecutionRequest er = new ExecutionRequest("TestClass", "LocalMethod", "json") { Context = context }; ValidationResult result = er.Validate(); Expect.IsFalse(result.Success); Expect.IsTrue(result.ValidationFailures.ToList().Contains(ValidationFailures.RemoteExecutionNotAllowed)); }
public virtual JsonRpcResponse Execute() { JsonRpcResponse response = new JsonRpcResponse(); // get the method from RpcMethods MethodInfo mi = RpcMethods.FirstOrDefault(m => m.Name.Equals(Method, StringComparison.InvariantCultureIgnoreCase)); // if its not there get it from all methods if (mi == null) { mi = AllMethods.FirstOrDefault(m => m.Name.Equals(Method, StringComparison.InvariantCultureIgnoreCase)); } // if its not there set error in the response if (mi == null) { response = GetErrorResponse(JsonRpcFaultCodes.MethodNotFound); } else { ExecutionRequest execRequest = ExecutionRequest.Create(Incubator, mi, GetInputParameters(mi)); ValidationResult validation = execRequest.Validate(); if (validation.Success) { if (execRequest.ExecuteWithoutValidation()) { response.Result = execRequest.Result; } else { response = GetErrorResponse(JsonRpcFaultCodes.InternalError); } } else { response = GetErrorResponse(JsonRpcFaultCodes.InvalidRequest); } } return(response); }
public void ApiKey_ExecutionRequestShouldValidateApiKey() { RegisterDb(); ServiceProxySystem.Register <ApiKeyRequiredEcho>(); string testName = MethodBase.GetCurrentMethod().Name; IApplicationNameProvider nameProvider = new TestApplicationNameProvider(testName.RandomLetters(6)); IApiKeyProvider keyProvider = new LocalApiKeyProvider(); ExecutionRequest er = new ExecutionRequest("ApiKeyRequiredEcho", "Send", "json"); er.ApiKeyResolver = new ApiKeyResolver(keyProvider, nameProvider); er.Request = new ServiceProxyTestHelpers.JsonTestRequest(); string data = ApiParameters.ParametersToJsonParamsObjectString("some random data"); er.InputString = data; ValidationResult result = er.Validate(); Expect.IsFalse(result.Success); List <ValidationFailures> failures = new List <ValidationFailures>(result.ValidationFailures); Expect.IsTrue(failures.Contains(ValidationFailures.InvalidApiKeyToken)); }