Esempio n. 1
0
        public void Put_on_empty_repo_returns_404()
        {
            var configRoot = new ConfigRoot
            {
                ComponentName = "tabouli",
                Data          = new ConfigNode
                {
                    Name     = "tabouli",
                    Value    = "tomatoes",
                    Children =
                        new List <ConfigNode> {
                        new ConfigNode {
                            Name = "Side", Value = "Rice"
                        }
                    }
                }
            };

            IRequest request = new InMemoryRequest
            {
                HttpMethod = "PUT",
                Uri        = new Uri("http://localhost/Config/tacos")
            };

            request.Headers["Content-Type"] = "application/json";

            var length = WriteConfigRootToStream(request.Entity.Stream, configRoot);

            request.Headers["Content-Length"] = length.ToString(CultureInfo.InvariantCulture);

            var response = _host.ProcessRequest(request);

            Assert.AreEqual(404, response.StatusCode);
        }
Esempio n. 2
0
        public void CanRetrieveSimpleResourceDetails()
        {
            using (var host = new InMemoryHost(new SampleApi.Configuration()))
            {
                var request = new InMemoryRequest
                {
                    Uri        = new Uri("http://localhost/api-docs/simple"),
                    HttpMethod = "GET",
                    Entity     = { ContentType = MediaType.Json }
                };

                request.Entity.Headers["Accept"] = "application/json";

                var response   = host.ProcessRequest(request);
                var statusCode = response.StatusCode;
                Assert.AreEqual(200, statusCode);

                Assert.IsTrue(response.Entity.ContentLength > 0);

                response.Entity.Stream.Seek(0, SeekOrigin.Begin);

                var serializer      = new DataContractJsonSerializer(typeof(ResourceDetails));
                var resourceDetails = (ResourceDetails)serializer.ReadObject(response.Entity.Stream);

                Assert.IsNotNull(resourceDetails);
            }
        }
Esempio n. 3
0
        public void Get_component_list_returns_list()
        {
            var entity = _repository.Create();

            entity.Contents = new ConfigRoot
            {
                ComponentName = "tacos",
                Data          = new ConfigNode {
                    Name = "host", Value = "tortilla"
                }
            };
            _repository.Add(entity);
            _repository.Save();

            IRequest request = new InMemoryRequest
            {
                HttpMethod = "GET",
                Uri        = new Uri("http://localhost/Config")
            };

            var response = _host.ProcessRequest(request);
            var data     = GetStringListFromResponseStream(response.Entity.Stream);

            Assert.AreEqual(200, response.StatusCode);
            Assert.AreEqual("tacos", data.ToArray()[0]);
        }
Esempio n. 4
0
        public void Post_returns_400_if_component_name_contains_invalid_characters()
        {
            var configRoot = new ConfigRoot
            {
                ComponentName = "jsnsadnc sd 8d8*** sad8s7sagd ^Q^ G5asds",
                Data          = new ConfigNode
                {
                    Name  = string.Empty,
                    Value = string.Empty
                }
            };

            IRequest request = new InMemoryRequest
            {
                HttpMethod = "POST",
                Uri        = new Uri("http://localhost/Config")
            };

            request.Headers["Content-Type"] = "application/json";

            var length = WriteConfigRootToStream(request.Entity.Stream, configRoot);

            request.Headers["Content-Length"] = length.ToString(CultureInfo.InvariantCulture);

            var response = _host.ProcessRequest(request);

            Assert.AreEqual(400, response.StatusCode);
        }
Esempio n. 5
0
        public void Create_server_and_issue_a_get_request()
        {
            using (var host = new InMemoryHost(new OpenRastaConfiguration()))
            {
                var request = new InMemoryRequest()
                {
                    Uri        = new Uri("http://localhost/10000/refData"),
                    HttpMethod = "GET"
                };

                // set up code formats

                request.Entity.ContentType       = MediaType.Json;
                request.Entity.Headers["Accept"] = "application/json";

                // send the request and save the resulting response
                var response   = host.ProcessRequest(request);
                int statusCode = response.StatusCode;

                // deserialize the content from the response

                if (response.Entity.ContentLength > 0)
                {
                    // rewind the stream, as OpenRasta won't do this
                    response.Entity.Stream.Seek(0, SeekOrigin.Begin);

                    var serializer =
                        new DataContractJsonSerializer(typeof(RefData));

                    refData = (RefData)serializer.ReadObject(response.Entity.Stream);
                }
            }
        }
Esempio n. 6
0
        public void Get_returns_valid_config_root()
        {
            var entity = _repository.Create();

            entity.Contents = new ConfigRoot
            {
                ComponentName = "tacos",
                Data          = new ConfigNode {
                    Name = "host", Value = "tortilla"
                }
            };
            _repository.Add(entity);
            _repository.Save();

            IRequest request = new InMemoryRequest
            {
                HttpMethod = "GET",
                Uri        = new Uri("http://localhost/Config/tacos")
            };

            var response = _host.ProcessRequest(request);

            Assert.AreEqual(200, response.StatusCode);

            var configObj = GetConfigRootFromResponseStream(response.Entity.Stream);

            Assert.IsNotNull(configObj);
            Assert.AreEqual("tortilla", configObj.Data.Value);
        }
Esempio n. 7
0
        public void If_an_attempt_is_made_to_change_a_name_using_put_make_sure_it_doesnt_overwrite_something_else()
        {
            var entity = _repository.Create();

            entity.Contents = new ConfigRoot
            {
                ComponentName = "taBouli",
                Data          = new ConfigNode {
                    Name = "tabouli", Value = "salad"
                }
            };
            _repository.Add(entity);

            var anotherEntity = _repository.Create();

            anotherEntity.Contents = new ConfigRoot
            {
                ComponentName = "Grapes",
                Data          = new ConfigNode {
                    Name = "grapes", Value = "wrath"
                }
            };
            _repository.Add(anotherEntity);

            _repository.Save();

            var configRoot = new ConfigRoot
            {
                ComponentName = "grapeS",
                Data          = new ConfigNode
                {
                    Name     = "taboulI",
                    Value    = "tomatoes",
                    Children =
                        new List <ConfigNode>
                    {
                        new ConfigNode {
                            Name = "Side", Value = "Rice"
                        }
                    }
                }
            };

            IRequest request = new InMemoryRequest
            {
                HttpMethod = "PUT",
                Uri        = new Uri("http://localhost/Config/tabouli")
            };

            request.Headers["Content-Type"] = "application/json";

            var length = WriteConfigRootToStream(request.Entity.Stream, configRoot);

            request.Headers["Content-Length"] = length.ToString(CultureInfo.InvariantCulture);

            var response = _host.ProcessRequest(request);

            Assert.AreEqual(409, response.StatusCode);
        }
Esempio n. 8
0
        private IRequest BuildRequest()
        {
            var request = new InMemoryRequest {
                HttpMethod = Method, Uri = new Uri(Uri)
            };

            request.Entity.Headers["Accept"] = Accept.ToString();
            return(request);
        }
Esempio n. 9
0
        static InMemoryRequest WriteString(this InMemoryRequest request, string text, string contentType = null)
        {
            request.Entity.ContentType = new MediaType(contentType ?? "text/plain;charset=utf-8");

            var buffer = Encoding.UTF8.GetBytes(text);

            request.Entity.ContentLength = buffer.Length;
            request.Entity.Stream.Write(buffer);
            return(request);
        }
Esempio n. 10
0
        public void Put_updates_config_root_in_repository()
        {
            var entity = _repository.Create();

            entity.Contents = new ConfigRoot
            {
                ComponentName = "taboUli",
                Data          = new ConfigNode {
                    Name = "tabouli", Value = "salad"
                }
            };
            _repository.Add(entity);
            _repository.Save();

            var configRoot = new ConfigRoot
            {
                ComponentName = "tabouLi",
                Data          = new ConfigNode
                {
                    Name     = "tabouli",
                    Value    = "tomatoes",
                    Children =
                        new List <ConfigNode>
                    {
                        new ConfigNode {
                            Name = "Side", Value = "Rice"
                        }
                    }
                }
            };

            IRequest request = new InMemoryRequest
            {
                HttpMethod = "PUT",
                Uri        = new Uri("http://localhost/Config/tabouli")
            };

            request.Headers["Content-Type"] = "application/json";

            var length = WriteConfigRootToStream(request.Entity.Stream, configRoot);

            request.Headers["Content-Length"] = length.ToString(CultureInfo.InvariantCulture);

            var response = _host.ProcessRequest(request);

            Assert.AreEqual(200, response.StatusCode);

            var configObj = GetConfigRootFromResponseStream(response.Entity.Stream);

            Assert.IsNotNull(configObj);
            Assert.AreEqual("tabouli", configObj.ComponentName.ToLower());
            Assert.AreEqual("tomatoes", configObj.Data.Value);
            Assert.AreEqual("Rice", configObj.Data.Children[0].Value);
        }
Esempio n. 11
0
        public void Delete_on_empty_repo_returns_404()
        {
            IRequest request = new InMemoryRequest
            {
                HttpMethod = "DELETE",
                Uri        = new Uri("http://localhost/Config/tabouli")
            };

            var response = _host.ProcessRequest(request);

            Assert.AreEqual(404, response.StatusCode);
        }
        IResponse RedirectOn303SeeOther(IResponse response)
        {
            string acceptHeader      = response.Headers["Accept"];
            var    redirectedRequest = new InMemoryRequest
            {
                Uri        = new Uri(response.Headers["Location"], UriKind.Absolute),
                HttpMethod = "GET"
            }.Accept(acceptHeader);

            response = _host.ProcessRequest(redirectedRequest);
            return(response);
        }
Esempio n. 13
0
        public void Ensure_that_error_handling_works_for_put()
        {
            // Override the config to give it a broken logger

            /*var mockLogger = new Mock<ILog>();
             * mockLogger.Setup(s => s.Debug(It.Is<string>(m => m.Contains("Entering ConfigHandler"))))
             *  .Throws(new ApplicationException("ha ha!"));*/

            _mockFileSystem = (new MockFileSystemProvider()).MockFileSystem;
            _repository     = new DurableMemoryRepository <ConfigRoot>(DataPath, _mockFileSystem.Object);

            var container = new Container();

            container.Configure(x =>
            {
                x.For <IRepository <IJsonEntity <ConfigRoot> > >().Singleton().Use(_repository);
                //x.For<ILog>().Singleton().Use(mockLogger.Object);
            });

            _host = new InMemoryHost(new Configuration(container));

            var configRoot = new ConfigRoot
            {
                ComponentName = "tabOuli",
                Data          = new ConfigNode
                {
                    Name     = "tabouli",
                    Value    = "tomatoes",
                    Children =
                        new List <ConfigNode> {
                        new ConfigNode {
                            Name = "Side", Value = "Rice"
                        }
                    }
                }
            };

            IRequest request = new InMemoryRequest
            {
                HttpMethod = "PUT",
                Uri        = new Uri("http://localhost/Config/tacos")
            };

            request.Headers["Content-Type"] = "application/json";
            var length = WriteConfigRootToStream(request.Entity.Stream, configRoot);

            request.Headers["Content-Length"] = length.ToString(CultureInfo.InvariantCulture);

            var response = _host.ProcessRequest(request);

            Assert.AreEqual(500, response.StatusCode);
        }
Esempio n. 14
0
        public void Post_to_existing_component_config_returns_400()
        {
            // add tabouli to repo
            var entity = _repository.Create();

            entity.Contents = new ConfigRoot
            {
                ComponentName = "tabouli",
                Data          = new ConfigNode {
                    Name = "host", Value = "tortilla"
                }
            };
            _repository.Add(entity);
            _repository.Save();

            // create new tabouli config to POST
            var configRoot = new ConfigRoot
            {
                ComponentName = "tabouli",
                Data          = new ConfigNode
                {
                    Name     = "tabouli",
                    Value    = "tomatoes",
                    Children =
                        new List <ConfigNode>
                    {
                        new ConfigNode {
                            Name = "Side", Value = "Rice"
                        }
                    }
                }
            };

            IRequest request = new InMemoryRequest
            {
                HttpMethod = "POST",
                Uri        = new Uri("http://localhost/Config")
            };

            request.Headers["Content-Type"] = "application/json";

            var length = WriteConfigRootToStream(request.Entity.Stream, configRoot);

            request.Headers["Content-Length"] = length.ToString(CultureInfo.InvariantCulture);

            var response = _host.ProcessRequest(request);

            Assert.AreEqual(400, response.StatusCode);
        }
Esempio n. 15
0
        protected void when_executing_request(string uri)
        {
            _host = new InMemoryHost(_configuration);
            _host.Resolver.AddDependencyInstance(typeof(caching), this, DependencyLifetime.Singleton);
            var request = new InMemoryRequest
            {
                HttpMethod = _method,
                Uri        = new Uri(new Uri("http://localhost"), new Uri(uri, UriKind.RelativeOrAbsolute))
            };

            foreach (var kv in _requestHeaders)
            {
                request.Headers.Add(kv);
            }
            response = _host.ProcessRequest(request);
        }
Esempio n. 16
0
        public void Missing_registration_throws_exception()
        {
            var container = new Container();

            _host = new InMemoryHost(new Configuration(container));

            IRequest request = new InMemoryRequest
            {
                HttpMethod = "GET",
                Uri        = new Uri("http://localhost/Config/tacos")
            };

            var response = _host.ProcessRequest(request);

            Assert.AreEqual(500, response.StatusCode);
        }
Esempio n. 17
0
        public void Put_with_invalid_content_type_returns_415()
        {
            var entity = _repository.Create();

            entity.Contents = new ConfigRoot
            {
                ComponentName = "taboUli",
                Data          = new ConfigNode {
                    Name = "tabouli", Value = "salad"
                }
            };
            _repository.Add(entity);
            _repository.Save();

            var configRoot = new ConfigRoot
            {
                ComponentName = "tabouLi",
                Data          = new ConfigNode
                {
                    Name     = "tabouli",
                    Value    = "tomatoes",
                    Children =
                        new List <ConfigNode> {
                        new ConfigNode {
                            Name = "Side", Value = "Rice"
                        }
                    }
                }
            };

            IRequest request = new InMemoryRequest
            {
                HttpMethod = "PUT",
                Uri        = new Uri("http://localhost/Config/tabouli")
            };

            request.Headers["Content-Type"] = "text/plain";

            var length = WriteConfigRootToStream(request.Entity.Stream, configRoot);

            request.Headers["Content-Length"] = length.ToString(CultureInfo.InvariantCulture);

            var response = _host.ProcessRequest(request);

            Assert.AreEqual(415, response.StatusCode);
        }
Esempio n. 18
0
        protected void when_executing_request(string uri)
        {
            _host = new InMemoryHost(_configuration, startup: new StartupProperties()
            {
                OpenRasta = { Errors = { HandleAllExceptions = false, HandleCatastrophicExceptions = false } }
            });
            _host.Resolver.AddDependencyInstance(typeof(caching), this, DependencyLifetime.Singleton);
            var request = new InMemoryRequest
            {
                HttpMethod = _method,
                Uri        = new Uri(new Uri("http://localhost"), new Uri(uri, UriKind.RelativeOrAbsolute))
            };

            foreach (var kv in _requestHeaders)
            {
                request.Headers.Add(kv);
            }
            response = _host.ProcessRequest(request);
        }
Esempio n. 19
0
        public async Task TestDeepHealthCheckQueryParam(string querystring, bool deepHealthChecksAttempted)
        {
            using (var host = new InMemoryHost(new TestConfig(), startup: new StartupProperties {
                OpenRasta = { Errors = { HandleAllExceptions = false, HandleCatastrophicExceptions = false } }
            }))
            {
                var request =
                    new InMemoryRequest
                {
                    HttpMethod = "GET",
                    Uri        = new Uri($"http://localhost/healthcheck/{querystring}")
                };
                var response = await host.ProcessRequestAsync(request);

                // response.Should().NotBeNull("whether deep checks are done or not the controller should respond");
                response.StatusCode.ShouldBe(200, "both deep and shallow checks return success");
                // DeepHealthChecks(deepHealthChecksAttempted);
            }
        }
Esempio n. 20
0
        static Task <IResponse> ExecuteMethod(InMemoryHost host, string uri, string method, string content = null,
                                              string contentType = null, Action <HttpHeaderDictionary> headers = null)
        {
            if (uri.StartsWith('/') == false)
            {
                uri = "/" + uri;
            }

            var request = new InMemoryRequest
            {
                HttpMethod = method,
                Uri        = new Uri($"http://localhost{uri}", UriKind.RelativeOrAbsolute)
            };

            headers?.Invoke(request.Headers);
            if (content != null)
            {
                request = request.WriteString(content, contentType);
            }
            return(host.ProcessRequestAsync(request));
        }
Esempio n. 21
0
        public void Put_returns_400_if_component_name_is_null()
        {
            var entity = _repository.Create();

            entity.Contents = new ConfigRoot
            {
                ComponentName = "taboUli",
                Data          = new ConfigNode {
                    Name = "tabouli", Value = "salad"
                }
            };
            _repository.Add(entity);
            _repository.Save();

            var configRoot = new ConfigRoot
            {
                ComponentName = null,
                Data          = new ConfigNode
                {
                    Name  = string.Empty,
                    Value = string.Empty
                }
            };

            IRequest request = new InMemoryRequest
            {
                HttpMethod = "PUT",
                Uri        = new Uri("http://localhost/Config/tabouli")
            };

            request.Headers["Content-Type"] = "application/json";

            var length = WriteConfigRootToStream(request.Entity.Stream, configRoot);

            request.Headers["Content-Length"] = length.ToString(CultureInfo.InvariantCulture);

            var response = _host.ProcessRequest(request);

            Assert.AreEqual(400, response.StatusCode);
        }
Esempio n. 22
0
        public void Delete_removes_resource_from_repo()
        {
            var entity = _repository.Create();

            entity.Contents = new ConfigRoot
            {
                ComponentName = "taboUli",
                Data          = new ConfigNode {
                    Name = "taboUli", Value = "salad"
                }
            };
            _repository.Add(entity);
            _repository.Save();

            IRequest request = new InMemoryRequest
            {
                HttpMethod = "DELETE",
                Uri        = new Uri("http://localhost/Config/tabouli")
            };
            var response = _host.ProcessRequest(request);

            Assert.AreEqual(204, response.StatusCode);
        }
Esempio n. 23
0
        public void Post_returns_415_for_invalid_content_type()
        {
            IRequest request = new InMemoryRequest
            {
                HttpMethod = "POST",
                Uri        = new Uri("http://localhost/Config")
            };

            request.Headers["Content-Type"] = "text/plain";

            using (var sw = new StreamWriter(request.Entity.Stream))
            {
                sw.Write("The cat ran down the road");
                sw.Flush();
            }
            request.Entity.Stream.Position = 0;

            request.Headers["Content-Length"] = request.Entity.Stream.Length.ToString(CultureInfo.InvariantCulture);

            var response = _host.ProcessRequest(request);

            Assert.AreEqual(415, response.StatusCode);
        }
 public in_memory_request_headers()
 {
     _request = new InMemoryRequest();
 }
 public void BeforeEachTest()
 {
     _mockAuthenticator = new Mock <IBasicAuthenticator>();
     _request           = new InMemoryRequest();
     _basicScheme       = new BasicAuthenticationScheme(_mockAuthenticator.Object);
 }