Exemple #1
0
        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);
                }
            };
        }
Exemple #2
0
        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);
                }
            }
        }
Exemple #3
0
        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);
                }
            };
        }
Exemple #4
0
        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);
                }
            };
        }
Exemple #5
0
        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);
                }
            };
        }
Exemple #6
0
        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);
                }
            };
        }