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); }
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); } }
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]); }
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); }
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); } } }
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); }
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); }
private IRequest BuildRequest() { var request = new InMemoryRequest { HttpMethod = Method, Uri = new Uri(Uri) }; request.Entity.Headers["Accept"] = Accept.ToString(); return(request); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); } }
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)); }
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); }
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); }
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); }