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"]);
        }
        /// <summary>
        /// BlockBlob Type
        /// </summary>
        public PutBlockListRequest(StorageAccountSettings settings, string containerName, string blobName, BlockListBlockIdList data,
                                   string cacheControl    = null, string contentType           = null,
                                   string contentEncoding = null, string contentLanguage       = null, string blobContentMD5 = null,
                                   Dictionary <string, string> metadata = null, string leaseId = null)
            : base(settings)
        {
            if (!string.IsNullOrEmpty(leaseId))
            {
                Guard.ArgumentIsAGuid("leaseId", leaseId);
            }
            if (metadata != null)
            {
                IdentifierValidation.EnsureNamesAreValidIdentifiers(metadata.Keys);
            }

            var dataAndHash = data.AsXmlByteArrayWithMd5Hash();

            _data = dataAndHash.XmlBytes;
            _requestContentMD5 = dataAndHash.MD5Hash;

            _containerName   = containerName;
            _blobName        = blobName;
            _contentType     = contentType;
            _contentEncoding = contentEncoding;
            _contentLanguage = contentLanguage;
            _blobContentMD5  = blobContentMD5;
            _cacheControl    = cacheControl;
            _metadata        = metadata;
            _leaseId         = leaseId;
        }
        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"]);
        }