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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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));
        }
Пример #15
0
        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));
        }