/// <inheritdoc/>
        public async Task <StorageManifest> CreateStorageManifest(string containerName, string manifestName, IDictionary <string, string> metadata, string segmentsPath)
        {
            containerName.AssertIsNotNullOrEmpty("containerName", "Cannot create a storage manifest with a container name that is null or empty.");
            manifestName.AssertIsNotNullOrEmpty("manifestNamee", "Cannot create a storage manifest with a name that is null or empty.");
            metadata.AssertIsNotNull("metadata", "Cannot create a storage manifest with null metadata.");
            segmentsPath.AssertIsNotNullOrEmpty("segmentsPath", "Cannot create storage manifest with a null or empty segments path.");

            var client = this.GetPocoClient();

            var manifest = new  DynamicLargeObjectManifest(containerName, manifestName, metadata, segmentsPath);

            return(await client.CreateStorageManifest(manifest));
        }
        /// <inheritdoc/>
        public async Task<StorageManifest> CreateStorageManifest(string containerName, string manifestName, IDictionary<string, string> metadata, string segmentsPath)
        {
            containerName.AssertIsNotNullOrEmpty("containerName", "Cannot create a storage manifest with a container name that is null or empty.");
            manifestName.AssertIsNotNullOrEmpty("manifestNamee", "Cannot create a storage manifest with a name that is null or empty.");
            metadata.AssertIsNotNull("metadata", "Cannot create a storage manifest with null metadata.");
            segmentsPath.AssertIsNotNullOrEmpty("segmentsPath", "Cannot create storage manifest with a null or empty segments path.");

            var client = this.GetPocoClient();

            var manifest = new  DynamicLargeObjectManifest(containerName, manifestName, metadata, segmentsPath);

            return await client.CreateStorageManifest(manifest);
        }
        public async Task ExceptionThrownWhenCreatingaStorageManifestHasInternalServerError()
        {
            var containerName = "TestContainer";
            var manifestName = "a/b/c/manifest";
            var segPath = "TestContainer/a/b/c";

            var manifest = new DynamicLargeObjectManifest(containerName, manifestName, segPath);

            var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.InternalServerError);
            this.StorageServiceRestClient.Responses.Enqueue(restResp);

            var client = new StorageServicePocoClient(GetValidContext(), this.ServiceLocator);
            await client.CreateStorageManifest(manifest);
        }
        public async Task CanCreateDynamicManifestWithCreatedResponse()
        {
            var containerName = "TestContainer";
            var manifestName = "a/b/c/manifest";
            var segPath = "TestContainer/a/b/c";

            var headers = new HttpHeadersAbstraction()
            {
                {"Content-Length", "1234"},
                {"Content-Type", "application/octet-stream"},
                {"Last-Modified", "Wed, 12 Mar 2014 23:42:23 GMT"},
                {"ETag", "d41d8cd98f00b204e9800998ecf8427e"}
            };

            var headers2 = new HttpHeadersAbstraction()
            {
                {"Content-Length", "1234"},
                {"Content-Type", "application/octet-stream"},
                {"Last-Modified", "Wed, 12 Mar 2014 23:42:23 GMT"},
                {"ETag", "d41d8cd98f00b204e9800998ecf8427e"},
                {"X-Object-Manifest",segPath}
            };

            var restResp1 = new HttpResponseAbstraction(new MemoryStream(), headers, HttpStatusCode.Created);
            var restResp2 = new HttpResponseAbstraction(new MemoryStream(), headers2, HttpStatusCode.OK);
            this.StorageServiceRestClient.Responses.Enqueue(restResp1);
            this.StorageServiceRestClient.Responses.Enqueue(restResp2);

            var client = new StorageServicePocoClientFactory().Create(GetValidContext(), this.ServiceLocator) as StorageServicePocoClient;

            var manifest = new DynamicLargeObjectManifest(containerName, manifestName, segPath);
                
            var result = await client.CreateStorageManifest(manifest);

            Assert.IsTrue(this.StorageServiceRestClient.CreatedDynamicManifestCalled);
            Assert.IsInstanceOfType(result, typeof(DynamicLargeObjectManifest));
            Assert.AreEqual(manifestName, result.FullName);
            Assert.AreEqual(containerName, result.ContainerName);
            Assert.AreEqual(segPath, ((DynamicLargeObjectManifest)result).SegmentsPath);
        }