Files
openstack-sdk-dotnet/Openstack/Openstack.Test/Storage/StorageServicePocoClientTests.cs
Wayne Foley 23fdb90c2b Adding the initial code base for this repo
Change-Id: Ie3c70c76e0a96978383d2524e8af9a0cc04bd6a2
2014-03-21 12:54:41 -07:00

981 lines
40 KiB
C#

// /* ============================================================================
// Copyright 2014 Hewlett Packard
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ============================================================================ */
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Openstack.Common;
using Openstack.Common.Http;
using Openstack.Common.ServiceLocation;
using Openstack.Identity;
using Openstack.Storage;
namespace Openstack.Test.Storage
{
[TestClass]
public class StorageServicePocoClientTests
{
internal TestOpenstackServiceEndpointResolver resolver;
internal TestStorageServiceRestClient StorageServiceRestClient;
internal string authId = "12345";
internal Uri endpoint = new Uri("http://teststorageendpoint.com/v1/1234567890");
[TestInitialize]
public void TestSetup()
{
this.StorageServiceRestClient = new TestStorageServiceRestClient();
this.resolver = new TestOpenstackServiceEndpointResolver() { Endpoint = endpoint };
ServiceLocator.Reset();
var manager = ServiceLocator.Instance.Locate<IServiceLocationOverrideManager>();
manager.RegisterServiceInstance(typeof(IStorageServiceRestClientFactory), new TestStorageServiceRestClientFactory(StorageServiceRestClient));
manager.RegisterServiceInstance(typeof(IOpenstackServiceEndpointResolver), this.resolver);
}
[TestCleanup]
public void TestCleanup()
{
this.resolver = new TestOpenstackServiceEndpointResolver() { Endpoint = endpoint };
this.StorageServiceRestClient = new TestStorageServiceRestClient();
ServiceLocator.Reset();
}
StorageServiceClientContext GetValidContext()
{
var creds = new OpenstackCredential(this.endpoint, "SomeUser", "Password".ConvertToSecureString(), "SomeTenant");
creds.SetAccessTokenId(this.authId);
return new StorageServiceClientContext(creds, CancellationToken.None, "Object Storage", "region-a.geo-1");
}
#region Get Storage Container Tests
[TestMethod]
public async Task CanGetStorageContainerWithOkResponse()
{
var containerName = "TestContainer";
var headers = new HttpHeadersAbstraction()
{
{"X-Container-Bytes-Used", "1234"},
{"X-Container-Object-Count", "1"}
};
var payload = @"[
{
""hash"": ""d41d8cd98f00b204e9800998ecf8427e"",
""last_modified"": ""2014-03-07T21:31:31.588170"",
""bytes"": 0,
""name"": ""BLAH"",
""content_type"": ""application/octet-stream""
}]";
var content = TestHelper.CreateStream(payload);
var restResp = new HttpResponseAbstraction(content, headers, HttpStatusCode.OK);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClientFactory().Create(GetValidContext()) as StorageServicePocoClient;
var result = await client.GetStorageContainer(containerName);
Assert.IsNotNull(result);
Assert.AreEqual(containerName, result.Name);
Assert.AreEqual(1234, result.TotalBytesUsed);
Assert.AreEqual(1, result.TotalObjectCount);
Assert.IsNotNull(result.Objects);
Assert.AreEqual(1, result.Objects.Count());
}
[TestMethod]
public async Task CanGetStorageContainerWithNoContent()
{
var containerName = "TestContainer";
var headers = new HttpHeadersAbstraction()
{
{"X-Container-Bytes-Used", "0"},
{"X-Container-Object-Count", "0"}
};
var restResp = new HttpResponseAbstraction(new MemoryStream(), headers, HttpStatusCode.NoContent);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
var result = await client.GetStorageContainer(containerName);
Assert.IsNotNull(result);
Assert.AreEqual(containerName, result.Name);
Assert.AreEqual(0, result.TotalBytesUsed);
Assert.AreEqual(0, result.TotalObjectCount);
Assert.IsNotNull(result.Objects);
Assert.AreEqual(0, result.Objects.Count());
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionthrownWhenGettingAStorageContainerThatDoesNotExist()
{
var containerName = "TestContainer";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.NotFound);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.GetStorageContainer(containerName);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionthrownWhenGettingAStorageContainerAndNotAuthed()
{
var containerName = "TestContainer";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.Unauthorized);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.GetStorageContainer(containerName);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionthrownWhenGettingAStorageContainerAndServerError()
{
var containerName = "TestContainer";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.InternalServerError);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.GetStorageContainer(containerName);
}
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public async Task CannotGetStorageContainerWithNullName()
{
var client = new StorageServicePocoClient(GetValidContext());
await client.GetStorageContainer(null);
}
#endregion
#region Get Storage Account Tests
[TestMethod]
public async Task CanGetStorageAccountWithOkResponse()
{
var accountName = "1234567890";
var headers = new HttpHeadersAbstraction()
{
{"X-Account-Bytes-Used", "1234"},
{"X-Account-Object-Count", "1"},
{"X-Account-Container-Count", "1"}
};
var payload = @"[
{
""count"": 1,
""bytes"": 7,
""name"": ""TestContainer""
}]";
var content = TestHelper.CreateStream(payload);
var restResp = new HttpResponseAbstraction(content, headers, HttpStatusCode.OK);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
var result = await client.GetStorageAccount();
Assert.IsNotNull(result);
Assert.AreEqual(accountName, result.Name);
Assert.AreEqual(1234, result.TotalBytesUsed);
Assert.AreEqual(1, result.TotalObjectCount);
Assert.AreEqual(1, result.TotalContainerCount);
Assert.IsNotNull(result.Containers);
Assert.AreEqual(1, result.Containers.Count());
}
[TestMethod]
public async Task CanGetStorageAccontWithNoContent()
{
var accountName = "1234567890";
var headers = new HttpHeadersAbstraction()
{
{"X-Account-Bytes-Used", "1234"},
{"X-Account-Object-Count", "1"},
{"X-Account-Container-Count", "1"}
};
var restResp = new HttpResponseAbstraction(new MemoryStream(), headers, HttpStatusCode.NoContent);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
var result = await client.GetStorageAccount();
Assert.IsNotNull(result);
Assert.AreEqual(accountName, result.Name);
Assert.AreEqual(1234, result.TotalBytesUsed);
Assert.AreEqual(1, result.TotalObjectCount);
Assert.AreEqual(1, result.TotalContainerCount);
Assert.IsNotNull(result.Containers);
Assert.AreEqual(0, result.Containers.Count());
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionthrownWhenGettingAStorageAccountAndNotAuthed()
{
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.Unauthorized);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.GetStorageAccount();
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionthrownWhenGettingAStorageAccountAndServerError()
{
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.InternalServerError);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.GetStorageAccount();
}
#endregion
#region Download Storage Object Tests
[TestMethod]
public async Task CanDownloadStorageObjectWithOkResponse()
{
var containerName = "TestContainer";
var objectName = "TestObject";
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 data = "some data";
var content = TestHelper.CreateStream(data);
var restResp = new HttpResponseAbstraction(content, headers, HttpStatusCode.OK);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
var respContent = new MemoryStream();
var result = await client.DownloadStorageObject(containerName, objectName, respContent);
Assert.IsNotNull(result);
Assert.AreEqual(objectName, result.Name);
Assert.AreEqual(containerName, result.ContainerName);
Assert.AreEqual(1234, result.Length);
Assert.AreEqual("application/octet-stream", result.ContentType);
Assert.AreEqual("d41d8cd98f00b204e9800998ecf8427e", result.ETag);
Assert.AreEqual(DateTime.Parse("Wed, 12 Mar 2014 23:42:23 GMT"), result.LastModified);
Assert.AreEqual(data,TestHelper.GetStringFromStream(respContent));
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionthrownWhenDownloadingAStorageObjectThatDoesNotExist()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.NotFound);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.DownloadStorageObject(containerName, objectName, new MemoryStream());
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionthrownWhenDownloadingAStorageObjectAndNotAuthed()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.Unauthorized);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.DownloadStorageObject(containerName, objectName, new MemoryStream());
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionthrownWhenDownloadingAStorageObjectAndServerError()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.InternalServerError);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.DownloadStorageObject(containerName, objectName, new MemoryStream());
}
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public async Task CannotDownloadStorageObjectWithNullContainerName()
{
var client = new StorageServicePocoClient(GetValidContext());
await client.DownloadStorageObject(null, "object", new MemoryStream());
}
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public async Task CannotDownloadStorageObjectWithNullObjectName()
{
var client = new StorageServicePocoClient(GetValidContext());
await client.DownloadStorageObject("container", null, new MemoryStream());
}
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public async Task CannotDownloadStorageObjectWithEmptyContainerName()
{
var client = new StorageServicePocoClient(GetValidContext());
await client.DownloadStorageObject(string.Empty, "object", new MemoryStream());
}
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public async Task CannotDownloadStorageObjectWithEmptyObjectName()
{
var client = new StorageServicePocoClient(GetValidContext());
await client.DownloadStorageObject("container", string.Empty, new MemoryStream());
}
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public async Task CannotDownloadStorageObjectWithnullOutputStream()
{
var client = new StorageServicePocoClient(GetValidContext());
await client.DownloadStorageObject("container", "object", null);
}
#endregion
#region Get Storage Object Tests
[TestMethod]
public async Task CanGetStorageObjectWithOkResponse()
{
var containerName = "TestContainer";
var objectName = "TestObject";
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 restResp = new HttpResponseAbstraction(new MemoryStream(), headers, HttpStatusCode.OK);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
var result = await client.GetStorageObject(containerName, objectName);
Assert.IsNotNull(result);
Assert.AreEqual(objectName, result.Name);
Assert.AreEqual(containerName, result.ContainerName);
Assert.AreEqual(1234, result.Length);
Assert.AreEqual("application/octet-stream", result.ContentType);
Assert.AreEqual("d41d8cd98f00b204e9800998ecf8427e", result.ETag);
Assert.AreEqual(DateTime.Parse("Wed, 12 Mar 2014 23:42:23 GMT"), result.LastModified);
}
[TestMethod]
public async Task CanGetStorageObjectWithNoContent()
{
var containerName = "TestContainer";
var objectName = "TestObject";
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 restResp = new HttpResponseAbstraction(new MemoryStream(), headers, HttpStatusCode.NoContent);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
var result = await client.GetStorageObject(containerName, objectName);
Assert.IsNotNull(result);
Assert.AreEqual(objectName, result.Name);
Assert.AreEqual(containerName, result.ContainerName);
Assert.AreEqual(1234, result.Length);
Assert.AreEqual("application/octet-stream", result.ContentType);
Assert.AreEqual("d41d8cd98f00b204e9800998ecf8427e", result.ETag);
Assert.AreEqual(DateTime.Parse("Wed, 12 Mar 2014 23:42:23 GMT"), result.LastModified);
}
[TestMethod]
public async Task CanGetStorageObjectWithHeaders()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var headers = new HttpHeadersAbstraction()
{
{"Content-Length", "1234"},
{"Content-Type", "application/octet-stream"},
{"Last-Modified", "Wed, 12 Mar 2014 23:42:23 GMT"},
{"ETag", "d41d8cd98f00b204e9800998ecf8427e"},
{"X-Object-Meta-Test1","Test1"}
};
var restResp = new HttpResponseAbstraction(new MemoryStream(), headers, HttpStatusCode.NoContent);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
var result = await client.GetStorageObject(containerName, objectName);
Assert.IsNotNull(result);
Assert.AreEqual(objectName, result.Name);
Assert.AreEqual(containerName, result.ContainerName);
Assert.AreEqual(1234, result.Length);
Assert.AreEqual("application/octet-stream", result.ContentType);
Assert.AreEqual("d41d8cd98f00b204e9800998ecf8427e", result.ETag);
Assert.AreEqual(DateTime.Parse("Wed, 12 Mar 2014 23:42:23 GMT"), result.LastModified);
Assert.AreEqual(1, result.Metadata.Count());
Assert.IsTrue(result.Metadata.ContainsKey("Test1"));
Assert.AreEqual("Test1", result.Metadata["Test1"]);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionthrownWhenGettingAStorageObjectThatDoesNotExist()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.NotFound);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.GetStorageObject(containerName, objectName);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionthrownWhenGettingAStorageObjectAndNotAuthed()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.Unauthorized);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.GetStorageObject(containerName, objectName);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionthrownWhenGettingAStorageObjectAndServerError()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.InternalServerError);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.GetStorageObject(containerName, objectName);
}
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public async Task CannotGetStorageObjectWithNullContainerName()
{
var client = new StorageServicePocoClient(GetValidContext());
await client.GetStorageObject(null,"object");
}
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public async Task CannotGetStorageObjectWithNullObjectName()
{
var client = new StorageServicePocoClient(GetValidContext());
await client.GetStorageObject("container", null);
}
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public async Task CannotGetStorageObjectWithEmptyContainerName()
{
var client = new StorageServicePocoClient(GetValidContext());
await client.GetStorageObject(string.Empty, "object");
}
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public async Task CannotGetStorageObjectWithEmptyObjectName()
{
var client = new StorageServicePocoClient(GetValidContext());
await client.GetStorageObject("container", string.Empty);
}
#endregion
#region Create Storage Object Tests
[TestMethod]
public async Task CanCreateStorageObjectWithCreatedResponse()
{
var containerName = "TestContainer";
var objectName = "TestObject";
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 objRequest = new StorageObject(objectName, containerName);
var content = TestHelper.CreateStream("Some Content");
var restResp = new HttpResponseAbstraction(new MemoryStream(), headers, HttpStatusCode.Created);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
var result = await client.CreateStorageObject(objRequest, content);
Assert.IsNotNull(result);
Assert.AreEqual(objectName, result.Name);
Assert.AreEqual(containerName, result.ContainerName);
Assert.AreEqual(1234, result.Length);
Assert.AreEqual("application/octet-stream", result.ContentType);
Assert.AreEqual("d41d8cd98f00b204e9800998ecf8427e", result.ETag);
Assert.AreEqual(DateTime.Parse("Wed, 12 Mar 2014 23:42:23 GMT"), result.LastModified);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenCreatingaStorageObjectMissingLength()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var objRequest = new StorageObject(objectName, containerName);
var content = TestHelper.CreateStream("Some Content");
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.LengthRequired);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.CreateStorageObject(objRequest, content);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenCreatingaStorageObjectWithBadETag()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var objRequest = new StorageObject(objectName, containerName);
var content = TestHelper.CreateStream("Some Content");
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), (HttpStatusCode)422);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.CreateStorageObject(objRequest, content);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenCreatingaStorageObjectWithBadAuth()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var objRequest = new StorageObject(objectName, containerName);
var content = TestHelper.CreateStream("Some Content");
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.Unauthorized);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.CreateStorageObject(objRequest, content);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenCreatingaStorageObjectHasInternalServerError()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var objRequest = new StorageObject(objectName, containerName);
var content = TestHelper.CreateStream("Some Content");
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.InternalServerError);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.CreateStorageObject(objRequest, content);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenCreatingaStorageObjectTimesOut()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var objRequest = new StorageObject(objectName, containerName);
var content = TestHelper.CreateStream("Some Content");
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.RequestTimeout);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.CreateStorageObject(objRequest, content);
}
#endregion
#region Create Storage Container Tests
[TestMethod]
public async Task CanCreateStorageContainerWithCreatedResponse()
{
var containerName = "TestContainer";
var headers = new HttpHeadersAbstraction
{
{"X-Container-Bytes-Used", "12345"},
{"X-Container-Object-Count", "1"}
};
var restResp = new HttpResponseAbstraction(new MemoryStream(), headers, HttpStatusCode.Created);
this.StorageServiceRestClient.Response = restResp;
var containerReq = new StorageContainer(containerName, new Dictionary<string, string>());
var client = new StorageServicePocoClient(GetValidContext());
await client.CreateStorageContainer(containerReq);
//Assert.IsNotNull(container);
//Assert.AreEqual(containerName, container.Name);
//Assert.AreEqual(12345, container.TotalBytesUsed);
}
[TestMethod]
public async Task CanCreateStorageContainerWithNoContentResponse()
{
var containerName = "TestContainer";
var headers = new HttpHeadersAbstraction
{
{"X-Container-Bytes-Used", "12345"},
{"X-Container-Object-Count", "1"}
};
var restResp = new HttpResponseAbstraction(new MemoryStream(), headers, HttpStatusCode.NoContent);
this.StorageServiceRestClient.Response = restResp;
var containerReq = new StorageContainer(containerName, new Dictionary<string, string>());
var client = new StorageServicePocoClient(GetValidContext());
await client.CreateStorageContainer(containerReq);
//Assert.IsNotNull(container);
//Assert.AreEqual(containerName, container.Name);
//Assert.AreEqual(12345, container.TotalBytesUsed);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenCreatingaStorageContainerWithBadAuth()
{
var containerName = "TestContainer";
var containerReq = new StorageContainer(containerName, new Dictionary<string, string>());
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.Unauthorized);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.CreateStorageContainer(containerReq);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenCreatingaStorageContainerHasInternalServerError()
{
var containerName = "TestContainer";
var containerReq = new StorageContainer(containerName, new Dictionary<string, string>());
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.InternalServerError);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.CreateStorageContainer(containerReq);
}
#endregion
#region Delete Storage Container Tests
[TestMethod]
public async Task CanDeleteStorageContainerWithNoContentResponse()
{
var containerName = "TestContainer";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.NoContent);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.DeleteStorageContainer(containerName);
}
[TestMethod]
public async Task CanDeleteStorageContainerWithOkResponse()
{
var containerName = "TestContainer";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.OK);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.DeleteStorageContainer(containerName);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenDeletingAStorageContainerWithObjects()
{
var containerName = "TestContainer";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.Conflict);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.DeleteStorageContainer(containerName);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenDeletingAStorageContainerWithBadAuth()
{
var containerName = "TestContainer";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.Unauthorized);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.DeleteStorageContainer(containerName);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenDeletingAStorageContainerWithInternalServerError()
{
var containerName = "TestContainer";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.InternalServerError);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.DeleteStorageContainer(containerName);
}
#endregion
#region Delete Storage Object Tests
[TestMethod]
public async Task CanDeleteStorageObjectWithNoContentResponse()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.NoContent);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.DeleteStorageObject(containerName, objectName);
}
[TestMethod]
public async Task CanDeleteStorageObjectWithOkResponse()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.OK);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.DeleteStorageObject(containerName, objectName);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenDeletingAStorageObjectWithBadAuth()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.Unauthorized);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.DeleteStorageObject(containerName, objectName);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenDeletingAStorageObjectWithInternalServerError()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.InternalServerError);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.DeleteStorageObject(containerName, objectName);
}
#endregion
#region Update Storage Container Tests
[TestMethod]
public async Task CanUpdateAStorageContainerWithNoContentResponse()
{
var containerName = "TestContainer";
var containerReq = new StorageContainer(containerName, new Dictionary<string, string>());
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.NoContent);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.UpdateStorageContainer(containerReq);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenUpdatingAStorageContainerWithBadAuth()
{
var containerName = "TestContainer";
var containerReq = new StorageContainer(containerName, new Dictionary<string, string>());
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.Unauthorized);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.UpdateStorageContainer(containerReq);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenUpdatingAStorageContainerWithInternalServerError()
{
var containerName = "TestContainer";
var containerReq = new StorageContainer(containerName, new Dictionary<string, string>());
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.InternalServerError);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.UpdateStorageContainer(containerReq);
}
#endregion
#region Update Storage Object Tests
[TestMethod]
public async Task CanUpdateAStorageObjectWithAcceptedResponse()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var objectReq = new StorageObject(containerName, objectName);
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.Accepted);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.UpdateStorageObject(objectReq);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenUpdatingAStorageObjectWithBadAuth()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var objectReq = new StorageObject(containerName, objectName);
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.Unauthorized);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.UpdateStorageObject(objectReq);
}
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))]
public async Task ExceptionThrownWhenUpdatingAStorageObjectWithInternalServerError()
{
var containerName = "TestContainer";
var objectName = "TestObject";
var objectReq = new StorageObject(containerName, objectName);
var restResp = new HttpResponseAbstraction(new MemoryStream(), new HttpHeadersAbstraction(), HttpStatusCode.InternalServerError);
this.StorageServiceRestClient.Response = restResp;
var client = new StorageServicePocoClient(GetValidContext());
await client.UpdateStorageObject(objectReq);
}
#endregion
}
}