Ejemplo n.º 1
0
        public void Execute_CopyBlob_ResponseParsesHeadersCorrectly()
        {
            const string expectedContainer  = "test-container";
            const string expectedBlob       = "test-blob";
            const string copySource         = "http://foo.foo.foo/testContainer/testBlob";
            var          expectedUri        = String.Format("{0}/{1}/{2}", _settings.BlobEndpoint, expectedContainer, expectedBlob);
            var          expectedDate       = DateTime.UtcNow.AddDays(-2345);
            var          expectedRawRequest = new TestableWebRequest(new Uri(expectedUri))
                                              .EnqueueResponse(new HttpResponseSettings((HttpStatusCode)201, "Success", "", false, new Dictionary <string, string>()
            {
                { "ETag", "\"123\"" },
                { "Date", expectedDate.ToString() },
                { "Last-Modified", expectedDate.ToString() },
                { "x-ms-copy-id", "123-copy-id" },
                { "x-ms-copy-status", "success" }
            }));

            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var request = new CopyBlobRequest(_settings, expectedContainer, expectedBlob, copySource);

            var response = request.Execute();

            Assert.AreEqual("123", response.Payload.ETag);
            Assert.IsTrue(Math.Abs(expectedDate.Subtract(response.Payload.Date).TotalMinutes) < 1);
            Assert.IsTrue(Math.Abs(expectedDate.Subtract(response.Payload.LastModified).TotalMinutes) < 1);
            Assert.AreEqual("123-copy-id", response.Payload.CopyId);
            Assert.AreEqual(CopyStatus.Success, response.Payload.CopyStatus);
        }
        public void Execute_PageBlobWithAllHeaders_AllHeadersSetProperly()
        {
            var expectedContainer  = "test-container";
            var expectedBlob       = "test-blob";
            var expectedUri        = String.Format("{0}/{1}/{2}", _settings.BlobEndpoint, expectedContainer, expectedBlob);
            var expectedRawRequest = new TestableWebRequest(new Uri(expectedUri))
                                     .EnqueueResponse(new HttpResponseSettings((HttpStatusCode)201, "Created", "", false, new Dictionary <string, string>()
            {
                { "ETag", "\"123\"" },
                { "Date", DateTime.UtcNow.ToString() },
                { "Last-Modified", DateTime.UtcNow.ToString() },
                { "Content-MD5", "123-MD5" }
            }));

            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var request = new PutBlobRequest(_settings, expectedContainer, expectedBlob, 12345,
                                             "content/type", "content/encoding", "content/language",
                                             "content/md5", "cache/control", null, 321);

            var response = request.Execute();

            Assert.AreEqual(0, expectedRawRequest.ContentLength);
            Assert.AreEqual("12345", expectedRawRequest.Headers["x-ms-blob-content-length"]);
            Assert.AreEqual("content/type", expectedRawRequest.ContentType);
            Assert.AreEqual("content/encoding", expectedRawRequest.Headers["Content-Encoding"]);
            Assert.AreEqual("content/language", expectedRawRequest.Headers["Content-Language"]);
            Assert.AreEqual("content/md5", expectedRawRequest.Headers["Content-MD5"]);
            Assert.AreEqual("cache/control", expectedRawRequest.Headers["Cache-Control"]);
            Assert.AreEqual("321", expectedRawRequest.Headers["x-ms-blob-sequence-number"]);
        }
        public void Execute_BlockList_ResponseParsesHeadersCorrectly()
        {
            var expectedContainer  = "test-container";
            var expectedBlob       = "test-blob";
            var expectedUri        = String.Format("{0}/{1}/{2}?comp=blocklist", _settings.BlobEndpoint, expectedContainer, expectedBlob);
            var expectedDate       = DateTime.UtcNow.AddDays(-2345);
            var expectedRawRequest = new TestableWebRequest(new Uri(expectedUri))
                                     .EnqueueResponse(new HttpResponseSettings((HttpStatusCode)201, "Created", "", false, new Dictionary <string, string>()
            {
                { "ETag", "\"123\"" },
                { "Date", expectedDate.ToString() },
                { "Last-Modified", expectedDate.ToString() },
                { "Content-MD5", "123-MD5" }
            }));

            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var expectedData = new BlockListBlockIdList();

            var request = new PutBlockListRequest(_settings, expectedContainer, expectedBlob, expectedData);

            var response = request.Execute();

            Assert.AreEqual("123", response.Payload.ETag);
            Assert.IsTrue(Math.Abs(expectedDate.Subtract(response.Payload.Date).TotalMinutes) < 1);
            Assert.IsTrue(Math.Abs(expectedDate.Subtract(response.Payload.LastModified).TotalMinutes) < 1);
            Assert.AreEqual("123-MD5", response.Payload.ContentMD5);
        }
        public void Execute_BlockListWithAllHeaders_AllHeadersSetProperly()
        {
            var expectedContainer  = "test-container";
            var expectedBlob       = "test-blob";
            var expectedUri        = String.Format("{0}/{1}/{2}?comp=blocklist", _settings.BlobEndpoint, expectedContainer, expectedBlob);
            var expectedRawRequest = new TestableWebRequest(new Uri(expectedUri))
                                     .EnqueueResponse(new HttpResponseSettings((HttpStatusCode)201, "Created", "", false, new Dictionary <string, string>()
            {
                { "ETag", "\"123\"" },
                { "Date", DateTime.UtcNow.ToString() },
                { "Last-Modified", DateTime.UtcNow.ToString() },
                { "Content-MD5", "123-MD5" }
            }));

            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var expectedData       = new BlockListBlockIdList();
            var expectedContentMD5 = expectedData.AsXmlByteArrayWithMd5Hash().MD5Hash;

            var request = new PutBlockListRequest(_settings, expectedContainer, expectedBlob, expectedData,
                                                  "cache/control", "content/type", "content/encoding", "content/language", "blobContent/md5");

            request.Execute();

            Assert.AreEqual(expectedContentMD5, expectedRawRequest.Headers["Content-MD5"]);
            Assert.AreEqual("cache/control", expectedRawRequest.Headers["x-ms-blob-cache-control"]);
            Assert.AreEqual("content/type", expectedRawRequest.Headers["x-ms-blob-content-type"]);
            Assert.AreEqual("content/encoding", expectedRawRequest.Headers["x-ms-blob-content-encoding"]);
            Assert.AreEqual("content/language", expectedRawRequest.Headers["x-ms-blob-content-language"]);
            Assert.AreEqual("blobContent/md5", expectedRawRequest.Headers["x-ms-blob-content-md5"]);
        }
        public void Execute_FailsUntilRetryCountExceeded_ThrowsExceptionWithProperRetryStack()
        {
            var          expectedUri        = "test://queue.abc/whatever/";
            const string message            = "message";
            var          expectedRawRequest = new TestableWebRequest(new Uri(expectedUri))
                                              .EnqueueResponse(new TimeoutException(message + "1"))
                                              .EnqueueResponse(new TimeoutException(message + "2"))
                                              .EnqueueResponse(new TimeoutException(message + "3"));

            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var request = new RequestWithEmptyPayload(new SettingsFake(), expectedUri, "GET");

            request.RetryPolicy = new RetryPolicy <ExceptionRetryStrategy>(2, TimeSpan.FromMilliseconds(1));
            try
            {
                // Act
                request.Execute();

                //Assert, starting with catching the specific exception type
            }
            catch (RetriedException exc)
            {
                Assert.AreEqual(3, exc.Count);
                Assert.AreEqual(exc.Count, exc.ExceptionRetryStack.Count);
                var currentExceptionIndex = 3;
                foreach (var exception in exc.ExceptionRetryStack)
                {
                    Assert.IsInstanceOf <GeneralExceptionDuringAzureOperationException>(exception);
                    Assert.IsInstanceOf <TimeoutException>(exception.InnerException);
                    Assert.AreEqual(exception.InnerException.Message, message + currentExceptionIndex);
                    currentExceptionIndex--; // stack is LIFO
                }
            }
        }
        public async Task Execute_PutBlockAsync_ResponseParsesHeadersCorrectly()
        {
            var expectedContainer       = "test-container";
            var expectedBlob            = "test-blob";
            var expectedBlock           = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes("test-block-id"));
            var urlEncodedExpectedBlock = WebUtility.UrlEncode(expectedBlock);
            var expectedDate            = DateTime.UtcNow;
            var expectedMD5             = "test-MD5";
            var expectedData            = new byte[] { };

            var expectedUri        = String.Format("{0}/{1}/{2}?comp=block&blockid={3}", _settings.BlobEndpoint, expectedContainer, expectedBlob, urlEncodedExpectedBlock);
            var expectedRawRequest = new TestableWebRequest(new Uri(expectedUri))
                                     .EnqueueResponse(new HttpResponseSettings((HttpStatusCode)201, "Created", "", false, new Dictionary <string, string>()
            {
                { "Content-MD5", expectedMD5 },
                { "Date", expectedDate.ToString() }
            }));

            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);

            var request = new PutBlockRequest(_settings, expectedContainer, expectedBlob, expectedBlock, expectedData);

            var response = await request.ExecuteAsync();

            Assert.AreEqual(response.HttpStatus, HttpStatusCode.Created);
            Assert.AreEqual(response.Payload.ContentMD5, expectedMD5);
            Assert.IsTrue(Math.Abs(expectedDate.Subtract(response.Payload.Date).TotalMinutes) < 1);
        }
        public void ListRemoteStuffAsyncAwait_403NoneShallPass_ThrowsExampleOfAnotherUsefulException()
        {
            var operation = "ListOfStuff";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(HttpStatusCode.Forbidden, "None shall pass", "Somethign else amusing", true);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.ListRemoteStuffAsyncAwait(operation);

            // expect exception
        }
        public void BonusMethod_WithAuthentication_UsesPreAuthentication()
        {
            var operation = "ListOfStuff";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(HttpStatusCode.OK, "Success", "Even More Success", false);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.BonusMethod(operation, "AwesomeUser", "1234");

            Assert.IsTrue(expectedRequest.PreAuthenticate);
        }
        public void ListRemoteStuffAsyncAwait_404DohickeyNotFound_ThrowsDohickeyNotFoundException()
        {
            var operation = "ListOfStuff";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(HttpStatusCode.NotFound, "Dohicky not found", "I couldn't find your dohicky because I don't like you", true);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.ListRemoteStuffAsyncAwait(operation);

            // expect exception
        }
        public void Execute_SuccessfulOperation_MarksResponseAsSuccessfull()
        {
            var expectedUri        = "test://queue.abc/whatever/";
            var expectedRawRequest = new TestableWebRequest(new Uri(expectedUri));

            expectedRawRequest.EnqueueResponse(HttpStatusCode.OK, "Success", "Response content", false);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var request = new RequestWithEmptyPayload(new SettingsFake(), expectedUri, "GET");

            var response = request.Execute();

            Assert.AreEqual(HttpStatusCode.OK, response.HttpStatus);
        }
        public void Execute_ReceiveFailureException_AttemptsToRetry()
        {
            var expectedUri        = "test://queue.abc/whatever/";
            var expectedRawRequest = new TestableWebRequest(new Uri(expectedUri))
                                     .EnqueueResponse(new WebException("Azure hung up after the initial request", new SocketException(1), WebExceptionStatus.ReceiveFailure, null))
                                     .EnqueueResponse(HttpStatusCode.OK, "Success", "Even More Success", false);

            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var request = new RequestWithEmptyPayload(new SettingsFake(), expectedUri, "GET");

            var response = request.Execute();

            Assert.AreEqual(2, response.NumberOfAttempts);
        }
        public void Execute_ReceiveTransientExceptionThenNonTransient_ThrowsNonTransient()
        {
            var expectedUri        = "test://queue.abc/whatever/";
            var expectedRawRequest = new TestableWebRequest(new Uri(expectedUri))
                                     .EnqueueResponse(new WebException("Azure hung up after the initial request", new SocketException(1), WebExceptionStatus.ReceiveFailure, null))
                                     .EnqueueResponse(HttpStatusCode.Conflict, "QueueAlreadyExists", queueAlreadyExistsExceptionText, true);

            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var request = new RequestWithEmptyPayload(new SettingsFake(), expectedUri, "GET");

            request.Execute();

            // expected non transient exception
        }
        public void Execute_TimeoutException_AttemptsToRetry()
        {
            var expectedUri        = "test://queue.abc/whatever/";
            var expectedRawRequest = new TestableWebRequest(new Uri(expectedUri))
                                     .EnqueueResponse(new TimeoutException("message"))
                                     .EnqueueResponse(HttpStatusCode.OK, "Success", "Even More Success", false);

            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var request = new RequestWithEmptyPayload(new SettingsFake(), expectedUri, "GET");

            var response = request.Execute();

            Assert.AreEqual(2, response.NumberOfAttempts);
        }
        public void Execute_ReceivesStatusError_AttemptsToRetry(string errorCode, int httpStatus, string errorMessage)
        {
            var expectedUri        = "test://queue.abc/whatever/";
            var azureErrorMessage  = String.Format("<?xml version=\"1.0\" encoding=\"utf-8\"?><Error><Code>{0}</Code><Message>{1}</Message></Error>", errorCode, errorMessage);
            var expectedRawRequest = new TestableWebRequest(new Uri(expectedUri))
                                     .EnqueueResponse((HttpStatusCode)httpStatus, errorCode, azureErrorMessage, true)
                                     .EnqueueResponse(HttpStatusCode.OK, "Success", "Response content", false);

            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var request = new RequestWithEmptyPayload(new SettingsFake(), expectedUri, "GET");

            var response = request.Execute();

            Assert.AreEqual(2, response.NumberOfAttempts);
        }
        public void Execute_ExpectingEmptyPayload_ConsumesResponseStream()
        {
            var expectedUri         = "test://queue.abc/whatever/";
            var expectedRawRequest  = new TestableWebRequest(new Uri(expectedUri));
            var expectedRawResponse = new HttpResponseSettings(HttpStatusCode.OK, "Success", "Response content", false);

            expectedRawRequest.EnqueueResponse(expectedRawResponse);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var request = new RequestWithEmptyPayload(new SettingsFake(), expectedUri, "GET");

            var response = request.Execute();

            // expect the response stream to be closed now
            long x;

            Assert.Throws <ObjectDisposedException>(() => x = expectedRawResponse.ResponseStream.Position);
        }
        public void Execute_FailsUntilRetryCountExceeded_ThenGivesUp()
        {
            var expectedUri        = "test://queue.abc/whatever/";
            var expectedRawRequest = new TestableWebRequest(new Uri(expectedUri))
                                     .EnqueueResponse(new TimeoutException("message 1"))
                                     .EnqueueResponse(new TimeoutException("message 2"))
                                     .EnqueueResponse(new TimeoutException("message 3"))
                                     .EnqueueResponse(HttpStatusCode.OK, "Success", "Should give up before it gets this one", false);

            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var request = new RequestWithEmptyPayload(new SettingsFake(), expectedUri, "GET");

            request.RetryPolicy = new RetryPolicy <ExceptionRetryStrategy>(2, TimeSpan.FromMilliseconds(1));

            request.Execute();

            // expecting an exception
        }
Ejemplo n.º 17
0
        public async Task Execute_DeleteBlobAsync_ResponseParsesHeadersCorrectly()
        {
            var expectedContainer  = "test-container";
            var expectedBlob       = "test-blob";
            var expectedUri        = String.Format("{0}/{1}/{2}", _settings.BlobEndpoint, expectedContainer, expectedBlob);
            var expectedRawRequest = new TestableWebRequest(new Uri(expectedUri))
                                     .EnqueueResponse(new HttpResponseSettings((HttpStatusCode)202, "Accepted", "", false, new Dictionary <string, string>()
            {
                { "Date", DateTime.UtcNow.ToString() }
            }));

            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var expectedDate = DateTime.UtcNow;
            var request      = new DeleteBlobRequest(_settings, expectedContainer, expectedBlob);

            var response = await request.ExecuteAsync();

            Assert.AreEqual(response.HttpStatus, HttpStatusCode.Accepted);
            Assert.IsTrue(Math.Abs(expectedDate.Subtract(response.Payload.Date).TotalMinutes) < 1);
        }
        public void Execute_BlockListWithContent_ContentSetProperly()
        {
            var expectedContainer  = "test-container";
            var expectedBlob       = "test-blob";
            var expectedUri        = String.Format("{0}/{1}/{2}?comp=blocklist", _settings.BlobEndpoint, expectedContainer, expectedBlob);
            var expectedRawRequest = new TestableWebRequest(new Uri(expectedUri))
                                     .EnqueueResponse(new HttpResponseSettings((HttpStatusCode)201, "Created", "", false, new Dictionary <string, string>()
            {
                { "ETag", "\"123\"" },
                { "Date", DateTime.UtcNow.ToString() },
                { "Last-Modified", DateTime.UtcNow.ToString() },
                { "Content-MD5", "123-MD5" }
            }));

            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var id1          = Base64Converter.ConvertToBase64("id1");
            var id2          = Base64Converter.ConvertToBase64("id2");
            var id3          = Base64Converter.ConvertToBase64("id3");
            var expectedData = string.Format(
                @"<?xml version=""1.0"" encoding=""utf-8""?><BlockList><Committed>{0}</Committed><Uncommitted>{1}</Uncommitted><Latest>{2}</Latest></BlockList>",
                id1, id2, id3);
            var givenData = new BlockListBlockIdList
            {
                new BlockListBlockId {
                    Id = id1, ListType = PutBlockListListType.Committed
                },
                new BlockListBlockId {
                    Id = id2, ListType = PutBlockListListType.Uncommitted
                },
                new BlockListBlockId {
                    Id = id3, ListType = PutBlockListListType.Latest
                }
            };

            var request = new PutBlockListRequest(_settings, expectedContainer, expectedBlob, givenData);

            request.Execute();

            Assert.AreEqual(expectedData, Encoding.UTF8.GetString(givenData.AsXMLByteArray()));
        }
Ejemplo n.º 19
0
        public void Execute_CopyBlobWithAllHeaders_AllHeadersSetProperly()
        {
            const string expectedContainer  = "test-container";
            const string expectedBlob       = "test-blob";
            const string copySource         = "http://foo.foo.foo/testContainer/testBlob";
            var          expectedUri        = String.Format("{0}/{1}/{2}", _settings.BlobEndpoint, expectedContainer, expectedBlob);
            var          expectedRawRequest = new TestableWebRequest(new Uri(expectedUri))
                                              .EnqueueResponse(new HttpResponseSettings((HttpStatusCode)202, "Accepted", "", false, new Dictionary <string, string>()
            {
                { "ETag", "\"123\"" },
                { "Date", DateTime.UtcNow.ToString() },
                { "Last-Modified", DateTime.UtcNow.ToString() },
                { "x-ms-copy-id", "123-copy-id" },
                { "x-ms-copy-status", "success" }
            }));

            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var request = new CopyBlobRequest(_settings, expectedContainer, expectedBlob, copySource);

            request.Execute();

            Assert.AreEqual(copySource, expectedRawRequest.Headers["x-ms-copy-source"]);
        }
Ejemplo n.º 20
0
        public void Execute_CommonApiException_MapsToProperAzureException(string exceptionName, string errorCode, int httpStatus, string errorMessage)
        {
            //arrange
            string expectedExceptionName = exceptionName + "AzureException";
            var    expectedUri           = "test://common-api-errors.abc/whatever/";
            var    expectedRawRequest    = new TestableWebRequest(new Uri(expectedUri));

            expectedRawRequest.EnqueueResponse((HttpStatusCode)httpStatus, errorCode, ErrorContentFor(errorCode, errorMessage), true);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var request = new RequestWithErrorPayload(new SettingsFake(), expectedUri, "GET", StorageServiceType.QueueService);

            request.RetryPolicy = new RetryPolicy <ExceptionRetryStrategy>(0);
            try
            {
                //act
                var response = request.Execute();
            }
            catch (AzureException ae)
            {
                //assert
                Assert.AreEqual(expectedExceptionName, ae.GetType().Name);
            }
        }
        public void Execute_ReceiveTransientExceptionThenNonTransient_ThrowsExceptionWithProperRetryStack()
        {
            var expectedUri        = "test://queue.abc/whatever/";
            var expectedRawRequest = new TestableWebRequest(new Uri(expectedUri))
                                     .EnqueueResponse(new WebException("Azure hung up after the initial request", new SocketException(1), WebExceptionStatus.ReceiveFailure, null))
                                     .EnqueueResponse(HttpStatusCode.Conflict, "QueueAlreadyExists", queueAlreadyExistsExceptionText, true);

            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRawRequest);
            var request = new RequestWithEmptyPayload(new SettingsFake(), expectedUri, "GET");

            try
            {
                request.Execute();
            }
            catch (QueueAlreadyExistsAzureException exc)
            {
                Assert.AreEqual(2, exc.RetryCount);
                Assert.AreEqual(exc.RetryCount, exc.ExceptionRetryStack.Count);
                Assert.IsInstanceOf <QueueAlreadyExistsAzureException>(exc.ExceptionRetryStack.First());
                Assert.IsInstanceOf <UnidentifiedAzureException>(exc.ExceptionRetryStack.Last());
                Assert.IsInstanceOf <WebException>(exc.ExceptionRetryStack.Last().InnerException);
            }
        }
        public void ListRemoteStuffAsyncAwait_404SomeOtherObjectNotFound_ThrowsGenericNotFoundException()
        {
            var operation = "ListOfStuff";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(HttpStatusCode.NotFound, "OtherObjectType not found", "I couldn't find yuor other object because the name was unimaginative", true);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.ListRemoteStuffAsyncAwait(operation);

            // expect exception
        }
        public void ListRemoteStuff_SixTimeoutsOccur_FinallyThrowsTheException()
        {
            var operation = "ListOfStuff";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(new TimeoutException("took too long, so sorry"))
                           .EnqueueResponse(new TimeoutException("took too long, so sorry"))
                           .EnqueueResponse(new TimeoutException("took too long, so sorry"))
                           .EnqueueResponse(new TimeoutException("took too long, so sorry"))
                           .EnqueueResponse(new TimeoutException("took too long, so sorry"))
                           .EnqueueResponse(new TimeoutException("took too long, so sorry"));
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.ListRemoteStuff(operation);

            // expect exception
        }
        public void ListRemoteStuff_TimeoutOccurs_TruesASecondTime()
        {
            var operation = "ListOfStuff";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(new TimeoutException("took too long, so sorry"))
                           .EnqueueResponse(HttpStatusCode.OK, "All Good", "Nothing to see, please move along", false);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.ListRemoteStuff(operation);

            Assert.AreEqual("Nothing to see, please move along", response.Message);
        }
        public void ListRemoteStuff_ValidRequest_ReturnsSuccessfulResponse()
        {
            var operation = "ListOfStuff";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(HttpStatusCode.OK, "Success", "Even More Success", false);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.ListRemoteStuff(operation);

            Assert.IsTrue(response.IsSuccess);
        }
        public void ListRemoteStuff_ValidRequest_SetsVersionHeader()
        {
            var operation = "ListOfStuff";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(HttpStatusCode.OK, "Success", "Even More Success", false);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.ListRemoteStuff(operation);

            Assert.AreEqual("123-awesome", expectedRequest.Headers["version"]);
        }
        public void UploadSomething_403NoneShallPass_ThrowsExampleOfAnotherUsefulException()
        {
            var operation = "UploadSomething";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(HttpStatusCode.Forbidden, "None shall pass", "Somethign else amusing", true);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.UploadSomething(operation, System.Text.Encoding.UTF8.GetBytes("My awesome data payload!"));

            // expect exception
        }
        public void UploadSomething_404DohickeyNotFound_ThrowsDohickeyNotFoundException()
        {
            var operation = "UploadSomething";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(HttpStatusCode.NotFound, "Dohicky not found", "I couldn't find your dohicky because I don't like you", true);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.UploadSomething(operation, System.Text.Encoding.UTF8.GetBytes("My awesome data payload!"));

            // expect exception
        }
        public void UploadSomething_404SomeOtherObjectNotFound_ThrowsGenericNotFoundException()
        {
            var operation = "UploadSomething";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(HttpStatusCode.NotFound, "OtherObjectType not found", "I couldn't find yuor other object because the name was unimaginative", true);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.UploadSomething(operation, System.Text.Encoding.UTF8.GetBytes("My awesome data payload!"));

            // expect exception
        }
        public void UploadSomething_ServiceOutage_ThrowsSampleServiceOutage()
        {
            var operation = "UploadSomething";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(new WebException("I'm broke!", WebExceptionStatus.ConnectFailure));
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.UploadSomething(operation, System.Text.Encoding.UTF8.GetBytes("My awesome data payload!"));

            // expect exception
        }
        public void UploadSomething_TimeoutOccurs_ThrowsRawTimeoutException()
        {
            var operation = "UploadSomething";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(new TimeoutException("took too long, so sorry"))
                           .EnqueueResponse(HttpStatusCode.OK, "All Good", "Nothing to see, please move along", false);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.UploadSomething(operation, System.Text.Encoding.UTF8.GetBytes("My awesome data payload!"));

            Assert.AreEqual("Nothing to see, please move along", response.Message);
        }
        public void UploadSomething_ValidRequest_ReturnsSuccessfulResponse()
        {
            var operation = "UploadSomething";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(HttpStatusCode.OK, "Success", "Even More Success", false);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.UploadSomething(operation, System.Text.Encoding.UTF8.GetBytes("My awesome data payload!"));

            Assert.IsTrue(response.IsSuccess);
        }
        public void UploadSomething_ValidRequest_SetsVersionHeader()
        {
            var operation = "UploadSomething";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(HttpStatusCode.OK, "Success", "Even More Success", false);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.UploadSomething(operation, System.Text.Encoding.UTF8.GetBytes("My awesome data payload!"));

            Assert.AreEqual("123-awesome", expectedRequest.Headers["version"]);
        }
        public void ListRemoteStuff_ServiceOutage_ThrowsSampleServiceOutage()
        {
            var operation = "ListOfStuff";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(new WebException("I'm broke!", WebExceptionStatus.ConnectFailure));
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.ListRemoteStuff(operation);

            // expect exception
        }
        public void UploadSomething_ValidRequest_UploadsMyAwesomeDataCorrectly()
        {
            var operation = "UploadSomething";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(HttpStatusCode.OK, "Success", "Even More Success", false);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.UploadSomething(operation, System.Text.Encoding.UTF8.GetBytes("My awesome data payload!"));

            var uploadedData = ((TestableWebRequest)expectedRequest).GetContent();
            Assert.AreEqual("My awesome data payload!", System.Text.Encoding.UTF8.GetString(uploadedData));
        }
        public void ListRemoteStuffAsyncTPL_ValidRequest_ReturnsResponseContent()
        {
            var operation = "ListOfStuff";
            var expectedRequest = new TestableWebRequest(new Uri(BaseUri, operation));
            expectedRequest.EnqueueResponse(HttpStatusCode.OK, "Success", "Even More Success", false);
            TestableWebRequestCreateFactory.GetFactory().AddRequest(expectedRequest);
            var service = new SampleService(BaseUri);

            var response = service.ListRemoteStuffAsyncTPL(operation);

            Assert.AreEqual("Even More Success", response.Message);
        }