/// <summary>Tests that retry works with different kind of contents (String, Stream and ByteArray).</summary>
        private void SubtestSendAsyncRetryContent(ContentType type)
        {
            var content             = "test-content";
            var contentHandler      = new ContentMessageHandler();
            var configurableHanlder = new ConfigurableMessageHandler(contentHandler)
            {
                NumTries = 10
            };

            configurableHanlder.AddUnsuccessfulResponseHandler(new TrueUnsuccessfulResponseHandler());
            using (var client = new HttpClient(configurableHanlder))
            {
                var request = new HttpRequestMessage(HttpMethod.Put, "https://test-unsuccessful-handler");
                // set the right content
                switch (type)
                {
                case ContentType.String:
                    request.Content = new StringContent(content);
                    break;

                case ContentType.Stream:
                {
                    var stream = new MemoryStream();
                    var buffer = Encoding.UTF8.GetBytes(content);
                    stream.Write(buffer, 0, buffer.Length);
                    stream.Position = 0;
                    request.Content = new StreamContent(stream);
                }
                break;

                case ContentType.ByteArray:
                    request.Content = new ByteArrayContent(Encoding.UTF8.GetBytes(content));
                    break;
                }

                HttpResponseMessage response = client.SendAsync(request).Result;
                Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
                Assert.That(contentHandler.Calls, Is.EqualTo(ContentMessageHandler.NumFails));
                Assert.That(contentHandler.ReadContent, Is.EqualTo(content));
            }
        }
        /// <summary>Tests that retry works with different kind of contents (String, Stream and ByteArray).</summary>
        private void SubtestSendAsyncRetryContent(ContentType type)
        {
            var content = "test-content";
            var contentHandler = new ContentMessageHandler();
            var configurableHanlder = new ConfigurableMessageHandler(contentHandler)
                {
                    NumTries = 10
                };
            configurableHanlder.AddUnsuccessfulResponseHandler(new TrueUnsuccessfulResponseHandler());
            using (var client = new HttpClient(configurableHanlder))
            {
                var request = new HttpRequestMessage(HttpMethod.Put, "https://test-unsuccessful-handler");
                // set the right content
                switch (type)
                {
                    case ContentType.String:
                        request.Content = new StringContent(content);
                        break;
                    case ContentType.Stream:
                        {
                            var stream = new MemoryStream();
                            var buffer = Encoding.UTF8.GetBytes(content);
                            stream.Write(buffer, 0, buffer.Length);
                            stream.Position = 0;
                            request.Content = new StreamContent(stream);
                        }
                        break;
                    case ContentType.ByteArray:
                        request.Content = new ByteArrayContent(Encoding.UTF8.GetBytes(content));
                        break;
                }

                HttpResponseMessage response = client.SendAsync(request).Result;
                Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
                Assert.That(contentHandler.Calls, Is.EqualTo(ContentMessageHandler.NumFails));
                Assert.That(contentHandler.ReadContent, Is.EqualTo(content));
            }
        }