public async Task PatchUnsafeAsync() { // Ensure that PATCH returning an explict type works. RequestDoc requestDoc = null; using (new MockHttpServer(baseUri, async context => { var request = context.Request; var response = context.Response; if (request.Method != "PATCH") { response.StatusCode = (int)HttpStatusCode.MethodNotAllowed; return; } if (request.Path.ToString() != "/info") { response.StatusCode = (int)HttpStatusCode.NotFound; return; } requestDoc = NeonHelper.JsonDeserialize <RequestDoc>(request.GetBodyText()); var output = new ReplyDoc() { Value1 = "Hello World!" }; response.ContentType = "application/json"; await response.WriteAsync(NeonHelper.JsonSerialize(output)); })) { using (var jsonClient = new JsonClient()) { var doc = new RequestDoc() { Operation = "FOO", Arg0 = "Hello", Arg1 = "World" }; var reply = (await jsonClient.PatchUnsafeAsync(baseUri + "info", doc)).As <ReplyDoc>(); Assert.Equal("Hello World!", reply.Value1); Assert.Equal("FOO", requestDoc.Operation); Assert.Equal("Hello", requestDoc.Arg0); Assert.Equal("World", requestDoc.Arg1); } }; }
public async Task PutAsync_Dynamic_NotJson() { // Ensure that PUT returning non-JSON returns a NULL dynamic document. RequestDoc requestDoc = null; using (new MockHttpServer(baseUri, async context => { var request = context.Request; var response = context.Response; if (request.Method != "PUT") { response.StatusCode = (int)HttpStatusCode.MethodNotAllowed; return; } if (request.Path.ToString() != "/info") { response.StatusCode = (int)HttpStatusCode.NotFound; return; } requestDoc = NeonHelper.JsonDeserialize <RequestDoc>(request.GetBodyText()); var output = new ReplyDoc() { Value1 = "Hello World!" }; response.ContentType = "application/not-json"; await response.WriteAsync(NeonHelper.JsonSerialize(output)); })) { using (var jsonClient = new JsonClient()) { var doc = new RequestDoc() { Operation = "FOO", Arg0 = "Hello", Arg1 = "World" }; var reply = (await jsonClient.PutAsync(baseUri + "info", doc)).AsDynamic(); Assert.Equal("FOO", requestDoc.Operation); Assert.Equal("Hello", requestDoc.Arg0); Assert.Equal("World", requestDoc.Arg1); Assert.Null(reply); } } }
public async Task PutUnsafeAsync_Dynamic() { // Ensure that PUT returning a dynamic works. RequestDoc requestDoc = null; using (new MockHttpServer(baseUri, context => { var request = context.Request; var response = context.Response; if (request.Method != "PUT") { response.StatusCode = (int)HttpStatusCode.MethodNotAllowed; return; } if (request.Path.ToString() != "/info") { response.StatusCode = (int)HttpStatusCode.NotFound; return; } requestDoc = NeonHelper.JsonDeserialize <RequestDoc>(request.GetBodyText()); var output = new ReplyDoc() { Value1 = "Hello World!" }; response.ContentType = "application/json"; response.Write(NeonHelper.JsonSerialize(output)); })) { using (var jsonClient = new JsonClient()) { dynamic doc = new ExpandoObject(); doc.Operation = "FOO"; doc.Arg0 = "Hello"; doc.Arg1 = "World"; var reply = (await jsonClient.PutUnsafeAsync(baseUri + "info", doc)).AsDynamic(); Assert.Equal("Hello World!", (string)reply.Value1); Assert.Equal("FOO", requestDoc.Operation); Assert.Equal("Hello", requestDoc.Arg0); Assert.Equal("World", requestDoc.Arg1); } }; }
public async Task PostAsync_Retry() { // Ensure that POST will retry after soft errors. RequestDoc requestDoc = null; var attemptCount = 0; using (new MockHttpServer(baseUri, async context => { var request = context.Request; var response = context.Response; if (attemptCount++ == 0) { response.StatusCode = (int)HttpStatusCode.ServiceUnavailable; return; } requestDoc = NeonHelper.JsonDeserialize <RequestDoc>(request.GetBodyText()); var output = new ReplyDoc() { Value1 = "Hello World!" }; response.ContentType = "application/json"; await response.WriteAsync(NeonHelper.JsonSerialize(output)); })) { using (var jsonClient = new JsonClient()) { var doc = new RequestDoc() { Operation = "FOO", Arg0 = "Hello", Arg1 = "World" }; var reply = (await jsonClient.PostAsync(baseUri + "info", doc)).AsDynamic(); Assert.Equal("FOO", requestDoc.Operation); Assert.Equal("Hello", requestDoc.Arg0); Assert.Equal("World", requestDoc.Arg1); Assert.Equal(2, attemptCount); Assert.Equal("Hello World!", (string)reply.Value1); } }; }
public async Task PostAsync_NoRetryExplicit() { // Ensure that POST won't retry if [retryPolicy=NoRetryPolicy] var attemptCount = 0; using (new MockHttpServer(baseUri, async context => { var request = context.Request; var response = context.Response; if (attemptCount++ == 0) { response.StatusCode = (int)HttpStatusCode.ServiceUnavailable; return; } var output = new ReplyDoc() { Value1 = "Hello World!" }; response.ContentType = "application/json"; await response.WriteAsync(NeonHelper.JsonSerialize(output)); })) { using (var jsonClient = new JsonClient()) { var doc = new RequestDoc() { Operation = "FOO", Arg0 = "Hello", Arg1 = "World" }; await Assert.ThrowsAsync <HttpException>(async() => await jsonClient.PostAsync(NoRetryPolicy.Instance, baseUri + "info", doc)); Assert.Equal(1, attemptCount); } }; }
public async Task PostUnsafeAsync_Headers() { // Ensure that POST with query arguments work. RequestDoc requestDoc = null; using (new MockHttpServer(baseUri, async context => { var request = context.Request; var response = context.Response; if (request.Method != "POST") { response.StatusCode = (int)HttpStatusCode.MethodNotAllowed; return; } if (request.Path.ToString() != "/info") { response.StatusCode = (int)HttpStatusCode.NotFound; return; } requestDoc = NeonHelper.JsonDeserialize <RequestDoc>(request.GetBodyText()); var output = new ReplyDoc() { Value1 = request.Headers["arg1"], Value2 = request.Headers["arg2"] }; response.ContentType = "application/json"; await response.WriteAsync(NeonHelper.JsonSerialize(output)); })) { using (var jsonClient = new JsonClient()) { var headers = new ArgDictionary() { { "arg1", "test1" }, { "arg2", "test2" } }; var doc = new RequestDoc() { Operation = "FOO", Arg0 = "Hello", Arg1 = "World" }; var reply = (await jsonClient.PostUnsafeAsync(baseUri + "info", doc, headers: headers)).As <ReplyDoc>(); Assert.Equal("test1", reply.Value1); Assert.Equal("test2", reply.Value2); Assert.Equal("FOO", requestDoc.Operation); Assert.Equal("Hello", requestDoc.Arg0); Assert.Equal("World", requestDoc.Arg1); } }; }