diff --git a/src/console/console.csproj b/src/console/console.csproj index c04b66d53..52a814b1b 100644 --- a/src/console/console.csproj +++ b/src/console/console.csproj @@ -35,12 +35,13 @@ 4 - + + False ..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll - + False - ..\packages\SimpleRESTServices.1.0.6.3\lib\net40\SimpleRESTServices.dll + ..\packages\SimpleRESTServices.1.0.6.6\lib\net40\SimpleRESTServices.dll diff --git a/src/console/packages.config b/src/console/packages.config index 06f77f62c..6566c6481 100644 --- a/src/console/packages.config +++ b/src/console/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/src/corelib/Core/Domain/Volume.cs b/src/corelib/Core/Domain/Volume.cs index 58abcbfce..7ceedafe3 100644 --- a/src/corelib/Core/Domain/Volume.cs +++ b/src/corelib/Core/Domain/Volume.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Runtime.Serialization; namespace net.openstack.Core.Domain @@ -25,7 +26,7 @@ public class Volume public string SnapshotId { get; set; } [DataMember] - public string[] Attachments { get; set; } + public Dictionary[] Attachments { get; set; } [DataMember] public string Status { get; set; } diff --git a/src/corelib/Core/Providers/IObjectStorageProvider.cs b/src/corelib/Core/Providers/IObjectStorageProvider.cs index 1246e2066..830fd30aa 100644 --- a/src/corelib/Core/Providers/IObjectStorageProvider.cs +++ b/src/corelib/Core/Providers/IObjectStorageProvider.cs @@ -331,24 +331,39 @@ public interface IObjectStorageProvider /// Name of the source object.Example image_name.jpeg /// The destination container name. /// Name of the destination object.Example image_name.jpeg - /// The headers. + /// A list of HTTP headers to send to the service. /// The region in which to execute this action.If not specified, the user’s default region will be used. ///If set to true uses ServiceNet URL. /// The users Cloud Identity. If not specified, the default identity given in the constructor will be used. /// ObjectStore CopyObject(string sourceContainer, string sourceObjectName, string destinationContainer, string destinationObjectName, Dictionary headers = null, string region = null, bool useInternalUrl = false, CloudIdentity identity = null); + /// + /// Moves an object. The original source object will be deleted only if the move is successful. + /// + /// The source container name. + /// Name of the source object.Example image_name.jpeg + /// The destination container name. + /// Name of the destination object.Example image_name.jpeg + /// A list of HTTP headers to send to the service. + /// The region in which to execute this action.If not specified, the user’s default region will be used. + ///If set to true uses ServiceNet URL. + /// The users Cloud Identity. If not specified, the default identity given in the constructor will be used. + /// + ObjectStore MoveObject(string sourceContainer, string sourceObjectName, string destinationContainer, string destinationObjectName, Dictionary headers = null, string region = null, bool useInternalUrl = false, CloudIdentity identity = null); + /// /// Deletes the object. /// /// The container name. /// Name of the object.Example image_name.jpeg - /// The headers. + /// A list of HTTP headers to send to the service. + /// Indicates whether the file's segments should be deleted if any exist. /// The region in which to execute this action.If not specified, the user’s default region will be used. /// If set to true uses ServiceNet URL. /// The users Cloud Identity. If not specified, the default identity given in the constructor will be used. /// - ObjectStore DeleteObject(string container, string objectName, Dictionary headers = null, string region = null, bool useInternalUrl = false, CloudIdentity identity = null); + ObjectStore DeleteObject(string container, string objectName, Dictionary headers = null, bool deleteSegments = true, string region = null, bool useInternalUrl = false, CloudIdentity identity = null); /// /// Purges the object from CDN. diff --git a/src/corelib/Providers/Rackspace/CloudFilesProvider.cs b/src/corelib/Providers/Rackspace/CloudFilesProvider.cs index 36dfe1f27..a9f9879dd 100644 --- a/src/corelib/Providers/Rackspace/CloudFilesProvider.cs +++ b/src/corelib/Providers/Rackspace/CloudFilesProvider.cs @@ -572,7 +572,7 @@ public void CreateObject(string container, Stream stream, string objectName, int } var urlPath = new Uri(string.Format("{0}/{1}/{2}", GetServiceEndpointCloudFiles(identity, region, useInternalUrl), _encodeDecodeProvider.UrlEncode(container), _encodeDecodeProvider.UrlEncode(objectName))); - StreamRESTRequest(identity, urlPath, HttpMethod.PUT, stream, chunkSize, headers: headers, isRetry: true, progressUpdated: progressUpdated, requestSettings: new RequestSettings {ChunkRequest = true}); + StreamRESTRequest(identity, urlPath, HttpMethod.PUT, stream, chunkSize, headers: headers, progressUpdated: progressUpdated, requestSettings: new RequestSettings {ChunkRequest = true}); } /// @@ -659,53 +659,57 @@ public ObjectStore CopyObject(string sourceContainer, string sourceObjectName, s _cloudFilesValidator.ValidateContainerName(destinationContainer); _cloudFilesValidator.ValidateObjectName(destinationObjectName); - if (headers != null) - { - if (string.IsNullOrWhiteSpace(headers.FirstOrDefault(x => x.Key.Equals(ContentLength, StringComparison.OrdinalIgnoreCase)).Value)) - { - var contentLength = GetObjectContentLength(identity, sourceContainer, sourceObjectName, region, useInternalUrl); - headers.Add(ContentLength, contentLength); - } - } - else - { + var urlPath = new Uri(string.Format("{0}/{1}/{2}", GetServiceEndpointCloudFiles(identity, region, useInternalUrl), _encodeDecodeProvider.UrlEncode(sourceContainer), _encodeDecodeProvider.UrlEncode(sourceObjectName))); + + if(headers == null) headers = new Dictionary(); - var contentLength = GetObjectContentLength(identity, sourceContainer, sourceObjectName, region, useInternalUrl); - headers.Add(ContentLength, contentLength); - - } - - headers.Add(CopyFrom, string.Format("{0}/{1}", sourceContainer, sourceObjectName)); - - var urlPath = new Uri(string.Format("{0}/{1}/{2}", GetServiceEndpointCloudFiles(identity, region, useInternalUrl), _encodeDecodeProvider.UrlEncode(destinationContainer), _encodeDecodeProvider.UrlEncode(destinationObjectName))); - var response = ExecuteRESTRequest(identity, urlPath, HttpMethod.PUT, headers); + headers.Add(DestinationMetadataKey, string.Format("{0}/{1}", destinationContainer, destinationObjectName)); + ExecuteRESTRequest(identity, urlPath, HttpMethod.COPY, headers: headers); - if (response.StatusCode == 201) - return ObjectStore.ObjectCreated; - if (response.StatusCode == 404) - return ObjectStore.ContainerNotFound; - - return ObjectStore.Unknown; + return ObjectStore.ObjectCreated; } /// - public ObjectStore DeleteObject(string container, string objectName, Dictionary headers = null, string region = null, bool useInternalUrl = false, CloudIdentity identity = null) + public ObjectStore DeleteObject(string container, string objectName, Dictionary headers = null, bool deleteSegments = true, string region = null, bool useInternalUrl = false, CloudIdentity identity = null) { _cloudFilesValidator.ValidateContainerName(container); _cloudFilesValidator.ValidateObjectName(objectName); + Dictionary objectHeader = null; + if(deleteSegments) + objectHeader = GetObjectHeaders(container, objectName, region, useInternalUrl, identity); + var urlPath = new Uri(string.Format("{0}/{1}/{2}", GetServiceEndpointCloudFiles(identity, region, useInternalUrl), _encodeDecodeProvider.UrlEncode(container), _encodeDecodeProvider.UrlEncode(objectName))); - var response = ExecuteRESTRequest(identity, urlPath, HttpMethod.DELETE, headers); + ExecuteRESTRequest(identity, urlPath, HttpMethod.DELETE, headers: headers); - if (response.StatusCode == 204) - return ObjectStore.ObjectDeleted; - if (response.StatusCode == 404) - return ObjectStore.ContainerNotFound; + if (deleteSegments && objectHeader != null && objectHeader.Any(h => h.Key.Equals(ObjectManifestMetadataKey, StringComparison.OrdinalIgnoreCase))) + { + var objects = this.ListObjects(container, region: region, useInternalUrl: useInternalUrl, identity: identity); - return ObjectStore.Unknown; + if (objects != null && objects.Any()) + { + var segments = objects.Where(f => f.Name.StartsWith(string.Format("{0}.seg", objectName))); + foreach (var segment in segments) + { + DeleteObject(container, segment.Name, headers, false, region, useInternalUrl, identity); + } + } + } + + return ObjectStore.ObjectDeleted; + } + /// + public ObjectStore MoveObject(string sourceContainer, string sourceObjectName, string destinationContainer, string destinationObjectName, Dictionary headers = null, string region = null, bool useInternalUrl = false, CloudIdentity identity = null) + { + var result = CopyObject(sourceContainer, sourceObjectName, destinationContainer, destinationObjectName, headers, region, useInternalUrl, identity); + + if (result != ObjectStore.ObjectCreated) + return result; + + return DeleteObject(sourceContainer, sourceObjectName, headers, true, region, useInternalUrl, identity); } /// @@ -828,13 +832,6 @@ public void UpdateAccountHeaders(Dictionary headers, string regi #region Private methods - private string GetObjectContentLength(CloudIdentity identity, string sourceContainer, string sourceObjectName, string region, bool useInternalUrl) - { - var sourceHeaders = GetObjectHeaders(sourceContainer, sourceObjectName, region,useInternalUrl, identity); - var contentLength = sourceHeaders.FirstOrDefault(x => x.Key.Equals(ContentLength, StringComparison.OrdinalIgnoreCase)).Value; - return contentLength; - } - protected string GetServiceEndpointCloudFiles(CloudIdentity identity, string region = null, bool useInternalUrl = false) { return useInternalUrl ? base.GetInternalServiceEndpoint(identity, "cloudFiles", region) : base.GetPublicServiceEndpoint(identity, "cloudFiles", region); @@ -886,7 +883,7 @@ private void CreateObjectInSegments(string container, Stream stream, string obje var urlPath = new Uri(string.Format("{0}/{1}/{2}.seg{3}", GetServiceEndpointCloudFiles(identity, region, useInternalUrl), container, objectName, i)); long segmentBytesWritten = 0; - StreamRESTRequest(identity, urlPath, HttpMethod.PUT, stream, chunkSize, length, headers: headers, isRetry: true, requestSettings: new RequestSettings {ChunkRequest = true}, progressUpdated: + StreamRESTRequest(identity, urlPath, HttpMethod.PUT, stream, chunkSize, length, headers: headers, requestSettings: new RequestSettings {ChunkRequest = true}, progressUpdated: bytesWritten => { if (progressUpdated != null) @@ -906,7 +903,7 @@ private void CreateObjectInSegments(string container, Stream stream, string obje headers = new Dictionary(); headers.Add(ObjectManifestMetadataKey, string.Format("{0}/{1}", container, objectName)); - StreamRESTRequest(identity, segmentUrlPath, HttpMethod.PUT, new MemoryStream(new Byte[0]), chunkSize, headers: headers, isRetry: true, requestSettings: new RequestSettings {ChunkRequest = true}, progressUpdated: + StreamRESTRequest(identity, segmentUrlPath, HttpMethod.PUT, new MemoryStream(new Byte[0]), chunkSize, headers: headers, requestSettings: new RequestSettings {ChunkRequest = true}, progressUpdated: (bytesWritten) => { if (progressUpdated != null) @@ -957,10 +954,9 @@ protected override IObjectStorageProvider BuildProvider(CloudIdentity identity) public const string ObjectDeleteAfter = "x-delete-after"; public const string ObjectDeleteAt = "x-delete-at"; public const string Etag = "etag"; - public const string ContentType = "content-type"; - public const string ContentLength = "content-length"; - public const string CopyFrom = "x-copy-from"; - public const string ObjectManifestMetadataKey = "X-Object-Manifest"; + public const string DestinationMetadataKey = "destination"; + public const string ObjectManifestMetadataKey = "x-object-manifest"; + //Cdn Object Constants public const string CdnPurgeEmail = "x-purge-email"; diff --git a/src/corelib/Providers/Rackspace/CloudIdentityProviderFactory.cs b/src/corelib/Providers/Rackspace/CloudIdentityProviderFactory.cs index ddb424e18..d45efafd5 100644 --- a/src/corelib/Providers/Rackspace/CloudIdentityProviderFactory.cs +++ b/src/corelib/Providers/Rackspace/CloudIdentityProviderFactory.cs @@ -4,6 +4,7 @@ using net.openstack.Core.Caching; using net.openstack.Core.Domain; using net.openstack.Providers.Rackspace.Exceptions; +using net.openstack.Providers.Rackspace.Objects; using net.openstack.Providers.Rackspace.Validators; namespace net.openstack.Providers.Rackspace diff --git a/src/corelib/Providers/Rackspace/GeographicalCloudIdentityProvider.cs b/src/corelib/Providers/Rackspace/GeographicalCloudIdentityProvider.cs index 297151785..f589617f7 100644 --- a/src/corelib/Providers/Rackspace/GeographicalCloudIdentityProvider.cs +++ b/src/corelib/Providers/Rackspace/GeographicalCloudIdentityProvider.cs @@ -9,6 +9,7 @@ using net.openstack.Core.Caching; using net.openstack.Core.Domain; using net.openstack.Core.Validators; +using net.openstack.Providers.Rackspace.Objects; using net.openstack.Providers.Rackspace.Objects.Request; using net.openstack.Providers.Rackspace.Objects.Response; diff --git a/src/corelib/Providers/Rackspace/Objects/AuthDetails.cs b/src/corelib/Providers/Rackspace/Objects/AuthDetails.cs index 46a351537..a72054c13 100644 --- a/src/corelib/Providers/Rackspace/Objects/AuthDetails.cs +++ b/src/corelib/Providers/Rackspace/Objects/AuthDetails.cs @@ -10,5 +10,8 @@ internal class AuthDetails [DataMember(Name = "RAX-KSKEY:apiKeyCredentials", EmitDefaultValue = true)] public Credentials APIKeyCredentials { get; set; } + + [DataMember(Name = "RAX-AUTH:domain", EmitDefaultValue = true)] + public Domain Domain { get; set; } } } \ No newline at end of file diff --git a/src/corelib/Providers/Rackspace/Objects/Domain.cs b/src/corelib/Providers/Rackspace/Objects/Domain.cs new file mode 100644 index 000000000..8af9b0aff --- /dev/null +++ b/src/corelib/Providers/Rackspace/Objects/Domain.cs @@ -0,0 +1,11 @@ +using System.Runtime.Serialization; + +namespace net.openstack.Providers.Rackspace.Objects +{ + [DataContract] + public class Domain + { + [DataMember(Name = "name")] + public string Name { get; set; } + } +} \ No newline at end of file diff --git a/src/corelib/Providers/Rackspace/RackspaceCloudIdentity.cs b/src/corelib/Providers/Rackspace/Objects/RackspaceCloudIdentity.cs similarity index 86% rename from src/corelib/Providers/Rackspace/RackspaceCloudIdentity.cs rename to src/corelib/Providers/Rackspace/Objects/RackspaceCloudIdentity.cs index b41539f13..c8bb1ee26 100644 --- a/src/corelib/Providers/Rackspace/RackspaceCloudIdentity.cs +++ b/src/corelib/Providers/Rackspace/Objects/RackspaceCloudIdentity.cs @@ -1,6 +1,6 @@ using net.openstack.Core.Domain; -namespace net.openstack.Providers.Rackspace +namespace net.openstack.Providers.Rackspace.Objects { public class RackspaceCloudIdentity : CloudIdentity { @@ -17,6 +17,8 @@ public RackspaceCloudIdentity(CloudIdentity cloudIdentity) : this() } public CloudInstance CloudInstance { get; set; } + + public Domain Domain { get; set; } } public enum CloudInstance diff --git a/src/corelib/Providers/Rackspace/Objects/Request/AuthRequest.cs b/src/corelib/Providers/Rackspace/Objects/Request/AuthRequest.cs index 336e3a2b9..34c12ddcd 100644 --- a/src/corelib/Providers/Rackspace/Objects/Request/AuthRequest.cs +++ b/src/corelib/Providers/Rackspace/Objects/Request/AuthRequest.cs @@ -16,6 +16,13 @@ public static AuthRequest FromCloudIdentity(CloudIdentity identity) creds.APIKeyCredentials = new Credentials() { Username = identity.Username, APIKey = identity.APIKey}; else creds.PasswordCredentials = new Credentials(){Username = identity.Username, Password = identity.Password}; + + var raxIdentity = identity as RackspaceCloudIdentity; + if (raxIdentity != null) + { + creds.Domain = raxIdentity.Domain; + } + return new AuthRequest { Credencials = creds }; } } diff --git a/src/corelib/Providers/Rackspace/ProviderBase.cs b/src/corelib/Providers/Rackspace/ProviderBase.cs index 9c104ceff..bde212626 100644 --- a/src/corelib/Providers/Rackspace/ProviderBase.cs +++ b/src/corelib/Providers/Rackspace/ProviderBase.cs @@ -12,6 +12,7 @@ using net.openstack.Core.Exceptions; using net.openstack.Core.Providers; using net.openstack.Core.Validators; +using net.openstack.Providers.Rackspace.Objects; using net.openstack.Providers.Rackspace.Validators; namespace net.openstack.Providers.Rackspace diff --git a/src/corelib/Providers/Rackspace/RackspaceImpersonationIdentity.cs b/src/corelib/Providers/Rackspace/RackspaceImpersonationIdentity.cs index 6265bf449..ec7174476 100644 --- a/src/corelib/Providers/Rackspace/RackspaceImpersonationIdentity.cs +++ b/src/corelib/Providers/Rackspace/RackspaceImpersonationIdentity.cs @@ -1,4 +1,6 @@ -namespace net.openstack.Providers.Rackspace +using net.openstack.Providers.Rackspace.Objects; + +namespace net.openstack.Providers.Rackspace { public class RackspaceImpersonationIdentity : RackspaceCloudIdentity { diff --git a/src/corelib/corelib.csproj b/src/corelib/corelib.csproj index a4b3a10bd..7fe97253b 100644 --- a/src/corelib/corelib.csproj +++ b/src/corelib/corelib.csproj @@ -35,11 +35,12 @@ + False ..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll - + False - ..\packages\SimpleRESTServices.1.0.6.3\lib\net40\SimpleRESTServices.dll + ..\packages\SimpleRESTServices.1.0.6.6\lib\net40\SimpleRESTServices.dll @@ -104,6 +105,7 @@ + @@ -174,7 +176,7 @@ - + @@ -215,7 +217,6 @@ - Always diff --git a/src/corelib/packages.config b/src/corelib/packages.config index 06f77f62c..6566c6481 100644 --- a/src/corelib/packages.config +++ b/src/corelib/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/src/openstack.net_Integration_Tests.sln b/src/openstack.net_Integration_Tests.sln index f7bb56571..0c3501c47 100644 --- a/src/openstack.net_Integration_Tests.sln +++ b/src/openstack.net_Integration_Tests.sln @@ -13,6 +13,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testing", "testing", "{62B45D81-B643-4E2B-B612-F479B9570F3A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "unit", "testing\unit\unit.csproj", "{FDFD92C2-75CF-4437-87B8-841EC3624CE4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "console", "console\console.csproj", "{1C279666-B88A-4765-8A51-B352C85EFC28}" +EndProject Global GlobalSection(TestCaseManagementSettings) = postSolution CategoryFile = openstack.net.vsmdi @@ -46,11 +50,32 @@ Global {C1D0D0D8-9EF2-4557-B85F-34FDB0F466C4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {C1D0D0D8-9EF2-4557-B85F-34FDB0F466C4}.Release|Mixed Platforms.Build.0 = Release|Any CPU {C1D0D0D8-9EF2-4557-B85F-34FDB0F466C4}.Release|x86.ActiveCfg = Release|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Debug|x86.ActiveCfg = Debug|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Release|Any CPU.Build.0 = Release|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Release|x86.ActiveCfg = Release|Any CPU + {1C279666-B88A-4765-8A51-B352C85EFC28}.Debug|Any CPU.ActiveCfg = Debug|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Debug|x86.ActiveCfg = Debug|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Debug|x86.Build.0 = Debug|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Release|Any CPU.ActiveCfg = Release|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Release|Mixed Platforms.Build.0 = Release|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Release|x86.ActiveCfg = Release|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {C1D0D0D8-9EF2-4557-B85F-34FDB0F466C4} = {62B45D81-B643-4E2B-B612-F479B9570F3A} + {FDFD92C2-75CF-4437-87B8-841EC3624CE4} = {62B45D81-B643-4E2B-B612-F479B9570F3A} EndGlobalSection EndGlobal diff --git a/src/openstack.net_Integration_Tests_2012.sln b/src/openstack.net_Integration_Tests_2012.sln index f7bb56571..a22db86e7 100644 --- a/src/openstack.net_Integration_Tests_2012.sln +++ b/src/openstack.net_Integration_Tests_2012.sln @@ -1,6 +1,6 @@  -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "corelib", "corelib\corelib.csproj", "{7DBA11EB-DBA7-4D3A-8D42-B5312E74B9C0}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "integration", "testing\integration\integration.csproj", "{C1D0D0D8-9EF2-4557-B85F-34FDB0F466C4}" @@ -13,6 +13,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testing", "testing", "{62B45D81-B643-4E2B-B612-F479B9570F3A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "unit", "testing\unit\unit.csproj", "{FDFD92C2-75CF-4437-87B8-841EC3624CE4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "console", "console\console.csproj", "{1C279666-B88A-4765-8A51-B352C85EFC28}" +EndProject Global GlobalSection(TestCaseManagementSettings) = postSolution CategoryFile = openstack.net.vsmdi @@ -46,11 +50,32 @@ Global {C1D0D0D8-9EF2-4557-B85F-34FDB0F466C4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {C1D0D0D8-9EF2-4557-B85F-34FDB0F466C4}.Release|Mixed Platforms.Build.0 = Release|Any CPU {C1D0D0D8-9EF2-4557-B85F-34FDB0F466C4}.Release|x86.ActiveCfg = Release|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Debug|x86.ActiveCfg = Debug|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Release|Any CPU.Build.0 = Release|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {FDFD92C2-75CF-4437-87B8-841EC3624CE4}.Release|x86.ActiveCfg = Release|Any CPU + {1C279666-B88A-4765-8A51-B352C85EFC28}.Debug|Any CPU.ActiveCfg = Debug|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Debug|x86.ActiveCfg = Debug|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Debug|x86.Build.0 = Debug|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Release|Any CPU.ActiveCfg = Release|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Release|Mixed Platforms.Build.0 = Release|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Release|x86.ActiveCfg = Release|x86 + {1C279666-B88A-4765-8A51-B352C85EFC28}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {C1D0D0D8-9EF2-4557-B85F-34FDB0F466C4} = {62B45D81-B643-4E2B-B612-F479B9570F3A} + {FDFD92C2-75CF-4437-87B8-841EC3624CE4} = {62B45D81-B643-4E2B-B612-F479B9570F3A} EndGlobalSection EndGlobal diff --git a/src/packages/Newtonsoft.Json.4.5.11/Newtonsoft.Json.4.5.11.nuspec b/src/packages/Newtonsoft.Json.4.5.11/Newtonsoft.Json.4.5.11.nuspec index 5236069c1..bded369b6 100644 --- a/src/packages/Newtonsoft.Json.4.5.11/Newtonsoft.Json.4.5.11.nuspec +++ b/src/packages/Newtonsoft.Json.4.5.11/Newtonsoft.Json.4.5.11.nuspec @@ -1,5 +1,5 @@ - + Newtonsoft.Json 4.5.11 @@ -12,8 +12,5 @@ Json.NET is a popular high-performance JSON framework for .NET en-US json - - - \ No newline at end of file diff --git a/src/packages/SimpleRESTServices.1.0.6.3/lib/net40/SimpleRESTServices.dll b/src/packages/SimpleRESTServices.1.0.6.3/lib/net40/SimpleRESTServices.dll deleted file mode 100644 index ae84fc479..000000000 Binary files a/src/packages/SimpleRESTServices.1.0.6.3/lib/net40/SimpleRESTServices.dll and /dev/null differ diff --git a/src/packages/SimpleRESTServices.1.0.6.3/SimpleRESTServices.1.0.6.3.nuspec b/src/packages/SimpleRESTServices.1.0.6.6/SimpleRESTServices.1.0.6.6.nuspec similarity index 91% rename from src/packages/SimpleRESTServices.1.0.6.3/SimpleRESTServices.1.0.6.3.nuspec rename to src/packages/SimpleRESTServices.1.0.6.6/SimpleRESTServices.1.0.6.6.nuspec index ff7a7a9f8..56d3b1109 100644 --- a/src/packages/SimpleRESTServices.1.0.6.3/SimpleRESTServices.1.0.6.3.nuspec +++ b/src/packages/SimpleRESTServices.1.0.6.6/SimpleRESTServices.1.0.6.6.nuspec @@ -2,7 +2,7 @@ SimpleRESTServices - 1.0.6.3 + 1.0.6.6 SimpleRESTServices alanquillin alanquillin @@ -10,8 +10,9 @@ https://github.com/JSIStudios/SimpleRestServices true A simple set of client side and server side REST helpers - https://github.com/JSIStudios/SimpleRestServices/wiki/v1.0.6.3 + https://github.com/JSIStudios/SimpleRestServices/wiki/v1.0.6.6 Copyright 2013 + REST REST_client diff --git a/src/packages/SimpleRESTServices.1.0.6.6/lib/net40/SimpleRESTServices.dll b/src/packages/SimpleRESTServices.1.0.6.6/lib/net40/SimpleRESTServices.dll new file mode 100644 index 000000000..6069cdb7d Binary files /dev/null and b/src/packages/SimpleRESTServices.1.0.6.6/lib/net40/SimpleRESTServices.dll differ diff --git a/src/testing/integration/Bootstrapper.cs b/src/testing/integration/Bootstrapper.cs index ee43553f2..ab74e656d 100644 --- a/src/testing/integration/Bootstrapper.cs +++ b/src/testing/integration/Bootstrapper.cs @@ -2,7 +2,7 @@ using System.IO; using System.Text; using net.openstack.Core.Domain; -using net.openstack.Providers.Rackspace; +using net.openstack.Providers.Rackspace.Objects; namespace Net.OpenStack.Testing.Integration { @@ -53,6 +53,8 @@ public class OpenstackNetSetings public ExtendedCloudIdentity TestAdminIdentity { get; set; } + public ExtendedCloudIdentity TestDomainIdentity { get; set; } + public string RackspaceExtendedIdentityUSUrl { get; set; } public string RackspaceExtendedIdentityUKUrl { get; set; } } @@ -60,6 +62,8 @@ public class OpenstackNetSetings public class ExtendedCloudIdentity : CloudIdentity { public string TenantId { get; set; } + + public string Domain { get; set; } } public class ExtendedRackspaceCloudIdentity : RackspaceCloudIdentity @@ -72,6 +76,7 @@ public ExtendedRackspaceCloudIdentity(ExtendedCloudIdentity cloudIdentity) this.Password = cloudIdentity.Password; this.Username = cloudIdentity.Username; this.TenantId = cloudIdentity.TenantId; + this.Domain = string.IsNullOrWhiteSpace(cloudIdentity.Domain) ? null : new Domain {Name = cloudIdentity.Domain}; } } } diff --git a/src/testing/integration/Providers/Rackspace/CloudBlockStorageTests.cs b/src/testing/integration/Providers/Rackspace/CloudBlockStorageTests.cs index 03fa82b54..b0b1f335e 100644 --- a/src/testing/integration/Providers/Rackspace/CloudBlockStorageTests.cs +++ b/src/testing/integration/Providers/Rackspace/CloudBlockStorageTests.cs @@ -3,6 +3,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using net.openstack.Core.Domain; using net.openstack.Providers.Rackspace; +using net.openstack.Providers.Rackspace.Objects; namespace Net.OpenStack.Testing.Integration.Providers.Rackspace { diff --git a/src/testing/integration/Providers/Rackspace/CloudFilesTests.cs b/src/testing/integration/Providers/Rackspace/CloudFilesTests.cs index eb9f4d5e5..87a8ce640 100644 --- a/src/testing/integration/Providers/Rackspace/CloudFilesTests.cs +++ b/src/testing/integration/Providers/Rackspace/CloudFilesTests.cs @@ -9,6 +9,7 @@ using net.openstack.Core.Domain; using net.openstack.Core.Exceptions.Response; using net.openstack.Providers.Rackspace; +using net.openstack.Providers.Rackspace.Objects; namespace Net.OpenStack.Testing.Integration.Providers.Rackspace { @@ -24,7 +25,8 @@ public class CloudFilesTests const string webListingsCSS = "index.css"; const bool webListing = true; const string objectName = "DarkKnightRises.jpg"; - const string saveDirectory = @"C:\"; + const string saveFileNane1 = "DarkKnightRises_SAVE1.jpg"; + const string saveFileNane2 = "DarkKnightRises_SAVE2.jpg"; private static readonly string sourceContainerName = containerName; private const string sourceObjectName = objectName; @@ -65,6 +67,14 @@ public TestContext TestContext public static void Init(TestContext context) { _testIdentity = new RackspaceCloudIdentity(Bootstrapper.Settings.TestIdentity); + + var file = Path.Combine(Directory.GetCurrentDirectory(), saveFileNane1); + if(File.Exists(file)) + File.Delete(file); + + file = Path.Combine(Directory.GetCurrentDirectory(), saveFileNane2); + if (File.Exists(file)) + File.Delete(file); } #region Container Tests @@ -621,22 +631,16 @@ public void Should_Create_Object_From_File_Without_Headers() [DeploymentItem("DarkKnightRises.jpg")] public void Should_Get_Object_And_Save_To_File_Without_Headers() { - string filePath = Path.Combine(Directory.GetCurrentDirectory(), objectName); - string fileName = Path.GetFileName(filePath); - var headers = new Dictionary(); - var provider = new CloudFilesProvider(); - provider.GetObjectSaveToFile(containerName, saveDirectory, fileName, null, 65536, null, null, false, identity: _testIdentity); + var provider = new CloudFilesProvider(_testIdentity); + provider.GetObjectSaveToFile(containerName, Directory.GetCurrentDirectory(), objectName, saveFileNane1); } [TestMethod] [DeploymentItem("DarkKnightRises.jpg")] public void Should_Get_Object_And_Save_To_File_Without_Headers_And_Verify_Etag() { - string filePath = Path.Combine(Directory.GetCurrentDirectory(), objectName); - string fileName = Path.GetFileName(filePath); - var headers = new Dictionary(); - var provider = new CloudFilesProvider(); - provider.GetObjectSaveToFile(containerName, saveDirectory, fileName, null, 65536, null, null, true, identity: _testIdentity); + var provider = new CloudFilesProvider(_testIdentity); + provider.GetObjectSaveToFile(containerName, Directory.GetCurrentDirectory(), objectName, saveFileNane2, verifyEtag: true); } [TestMethod] @@ -684,30 +688,39 @@ public void Should_Copy_Object_When_Not_Passing_Content_Length() [TestMethod] public void Should_Copy_Object_When_Passing_Content_Length() { - Dictionary header = new Dictionary(); - header.Add(CloudFilesProvider.ContentLength, "62504"); - - var provider = new CloudFilesProvider(); - var copyResponse = provider.CopyObject(sourceContainerName, sourceObjectName, destinationContainerName, destinationObjectName, header, identity: _testIdentity); + var provider = new CloudFilesProvider(_testIdentity); + var copyResponse = provider.CopyObject(sourceContainerName, sourceObjectName, destinationContainerName, destinationObjectName); Assert.AreEqual(ObjectStore.ObjectCreated, copyResponse); + + var sourceheader = provider.GetObjectHeaders(sourceContainerName, sourceObjectName); + var destinationHeader = provider.GetObjectHeaders(destinationContainerName, destinationObjectName); + + Assert.AreEqual(sourceheader.First(h => h.Key.Equals("ETag", StringComparison.OrdinalIgnoreCase)).Value, destinationHeader.First(h => h.Key.Equals("ETag", StringComparison.OrdinalIgnoreCase)).Value); + Assert.AreEqual(sourceheader.First(h => h.Key.Equals("Content-Length", StringComparison.OrdinalIgnoreCase)).Value, destinationHeader.First(h => h.Key.Equals("Content-Length", StringComparison.OrdinalIgnoreCase)).Value); } [TestMethod] public void Should_Copy_Object_When_Not_Passing_Content_Length_And_Passing_Expiring_Header() { // Object will expire 2 days from now. - int epoch = (int)(DateTime.UtcNow.AddDays(2) - new DateTime(1970, 1, 1)).TotalSeconds; + var epoch = (int)(DateTime.UtcNow.AddDays(2) - new DateTime(1970, 1, 1)).TotalSeconds; - Dictionary header = new Dictionary(); - header.Add(CloudFilesProvider.ObjectDeleteAt, epoch.ToString()); + var header = new Dictionary { { CloudFilesProvider.ObjectDeleteAt, epoch.ToString() } }; - var provider = new CloudFilesProvider(); - var copyResponse = provider.CopyObject(sourceContainerName, sourceObjectName, destinationContainerName, destinationObjectName, header, identity: _testIdentity); + var provider = new CloudFilesProvider(_testIdentity); + var copyResponse = provider.CopyObject(sourceContainerName, sourceObjectName, destinationContainerName, destinationObjectName, header); Assert.AreEqual(ObjectStore.ObjectCreated, copyResponse); + var sourceheader = provider.GetObjectHeaders(sourceContainerName, sourceObjectName); + var destinationHeader = provider.GetObjectHeaders(destinationContainerName, destinationObjectName); + + Assert.AreEqual(sourceheader.First(h => h.Key.Equals("ETag", StringComparison.OrdinalIgnoreCase)).Value, destinationHeader.First(h => h.Key.Equals("ETag", StringComparison.OrdinalIgnoreCase)).Value); + Assert.AreEqual(sourceheader.First(h => h.Key.Equals("Content-Length", StringComparison.OrdinalIgnoreCase)).Value, destinationHeader.First(h => h.Key.Equals("Content-Length", StringComparison.OrdinalIgnoreCase)).Value); + } + [TestMethod] public void Should_Get_MetaData_For_Object1() { diff --git a/src/testing/integration/Providers/Rackspace/CloudNetworksTests.cs b/src/testing/integration/Providers/Rackspace/CloudNetworksTests.cs index 19f8b2cd1..a1f197218 100644 --- a/src/testing/integration/Providers/Rackspace/CloudNetworksTests.cs +++ b/src/testing/integration/Providers/Rackspace/CloudNetworksTests.cs @@ -5,6 +5,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using net.openstack.Core.Domain; using net.openstack.Providers.Rackspace; +using net.openstack.Providers.Rackspace.Objects; namespace Net.OpenStack.Testing.Integration.Providers.Rackspace { diff --git a/src/testing/integration/Providers/Rackspace/CloudServersTests.cs b/src/testing/integration/Providers/Rackspace/CloudServersTests.cs index 6c8375a94..0e521b34a 100644 --- a/src/testing/integration/Providers/Rackspace/CloudServersTests.cs +++ b/src/testing/integration/Providers/Rackspace/CloudServersTests.cs @@ -5,8 +5,9 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using net.openstack.Core.Domain; using net.openstack.Providers.Rackspace; +using net.openstack.Providers.Rackspace.Objects; - namespace Net.OpenStack.Testing.Integration.Providers.Rackspace +namespace Net.OpenStack.Testing.Integration.Providers.Rackspace { /// /// Summary description for CloudServersTests diff --git a/src/testing/integration/Providers/Rackspace/ExtendedIdentityFull.orderedtest b/src/testing/integration/Providers/Rackspace/ExtendedIdentityFull.orderedtest index f9929f37d..a62023de6 100644 --- a/src/testing/integration/Providers/Rackspace/ExtendedIdentityFull.orderedtest +++ b/src/testing/integration/Providers/Rackspace/ExtendedIdentityFull.orderedtest @@ -1,6 +1,6 @@  - + @@ -12,5 +12,6 @@ + \ No newline at end of file diff --git a/src/testing/integration/Providers/Rackspace/ExtendedIdentityTests.cs b/src/testing/integration/Providers/Rackspace/ExtendedIdentityTests.cs index 2c9f3af4c..f04205a6e 100644 --- a/src/testing/integration/Providers/Rackspace/ExtendedIdentityTests.cs +++ b/src/testing/integration/Providers/Rackspace/ExtendedIdentityTests.cs @@ -1,11 +1,12 @@ using System; using JSIStudios.SimpleRESTServices.Client; using Microsoft.VisualStudio.TestTools.UnitTesting; -using net.openstack; using net.openstack.Core.Caching; using net.openstack.Core.Domain; using net.openstack.Core.Exceptions.Response; +using net.openstack.Core.Providers; using net.openstack.Providers.Rackspace; +using net.openstack.Providers.Rackspace.Objects; namespace Net.OpenStack.Testing.Integration.Providers.Rackspace { @@ -15,13 +16,11 @@ public class ExtendedIdentityTests private TestContext testContextInstance; private static RackspaceCloudIdentity _testIdentity; private static RackspaceCloudIdentity _testAdminIdentity; + private static ExtendedRackspaceCloudIdentity _testDomainIdentity; private static User _userDetails; private static User _adminUserDetails; private const string NewPassword = "My_n3w_p@$$w0rd"; - private const string AdminNewPassword = "My_n3w_@dmin_p@$$w0rd"; - private static string _newAPIKey; - private static string _adminNewAPIKey; - + private const string AdminNewPassword = "My_n3w_@dmin_p@$$w0rd"; /// ///Gets or sets the test context which provides ///information about and functionality for the current test run. @@ -43,9 +42,7 @@ public static void Init(TestContext context) { _testIdentity = new RackspaceCloudIdentity(Bootstrapper.Settings.TestIdentity); _testAdminIdentity = new RackspaceCloudIdentity(Bootstrapper.Settings.TestAdminIdentity); - - _newAPIKey = Guid.NewGuid().ToString(); - _adminNewAPIKey = Guid.NewGuid().ToString(); + _testDomainIdentity = new ExtendedRackspaceCloudIdentity(Bootstrapper.Settings.TestDomainIdentity); var provider = BuildProvider(); @@ -65,7 +62,7 @@ public void Test001_Should_Throw_Exception_When_Trying_To_Change_Password_For_Se try { - var result = provider.SetUserPassword(_userDetails, NewPassword, _testIdentity); + provider.SetUserPassword(_userDetails, NewPassword, _testIdentity); throw new Exception("This code path is invalid, exception was expected."); } @@ -82,7 +79,7 @@ public void Test002_Should_Throw_Exception_When_Trying_To_Change_Password_For_Ot try { - var result = provider.SetUserPassword(_adminUserDetails, AdminNewPassword, _testIdentity); + provider.SetUserPassword(_adminUserDetails, AdminNewPassword, _testIdentity); throw new Exception("This code path is invalid, exception was expected."); } @@ -185,5 +182,18 @@ public void Test010_Should_Successfully_Authenticate_With_Old_Password_For_Non_A Assert.IsNotNull(userAcess); } + + [TestMethod] + public void Test011_Should_Successfully_Authenticate_Using_Domain_Credencials() + { + var provider = BuildProvider(); + + var creds = provider.Authenticate(_testDomainIdentity); + + Assert.IsNotNull(creds); + Assert.IsNotNull(creds.Token); + Assert.IsNotNull(creds.User); + Assert.AreEqual(_testDomainIdentity.Username, creds.User.Id); + } } } diff --git a/src/testing/integration/Providers/Rackspace/IdentityTests.cs b/src/testing/integration/Providers/Rackspace/IdentityTests.cs index efdf2ddc2..71e47a581 100644 --- a/src/testing/integration/Providers/Rackspace/IdentityTests.cs +++ b/src/testing/integration/Providers/Rackspace/IdentityTests.cs @@ -1,10 +1,10 @@ using System; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; -using net.openstack.Core; using net.openstack.Core.Domain; using net.openstack.Core.Providers; using net.openstack.Providers.Rackspace; +using net.openstack.Providers.Rackspace.Objects; namespace Net.OpenStack.Testing.Integration.Providers.Rackspace { @@ -41,6 +41,7 @@ public static void Init(TestContext context) { _testIdentity = new ExtendedRackspaceCloudIdentity(Bootstrapper.Settings.TestIdentity); _testAdminIdentity = new ExtendedRackspaceCloudIdentity(Bootstrapper.Settings.TestAdminIdentity); + } [TestMethod] diff --git a/src/testing/integration/integration.csproj b/src/testing/integration/integration.csproj index 7eb5f2ea5..5252715b2 100644 --- a/src/testing/integration/integration.csproj +++ b/src/testing/integration/integration.csproj @@ -37,16 +37,17 @@ ..\..\packages\Moq.4.0.10827\lib\NET40\Moq.dll - + + False ..\..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll False ..\..\packages\SSH.NET.2013.4.7\lib\net40\Renci.SshNet.dll - + False - ..\..\packages\SimpleRESTServices.1.0.6.3\lib\net40\SimpleRESTServices.dll + ..\..\packages\SimpleRESTServices.1.0.6.6\lib\net40\SimpleRESTServices.dll diff --git a/src/testing/integration/packages.config b/src/testing/integration/packages.config index 680b2a0b0..54a2997eb 100644 --- a/src/testing/integration/packages.config +++ b/src/testing/integration/packages.config @@ -2,6 +2,6 @@ - + \ No newline at end of file diff --git a/src/testing/unit/Providers/Rackspace/IdentityProviderCacheTests.cs b/src/testing/unit/Providers/Rackspace/IdentityProviderCacheTests.cs index 7d6c0da26..35ccb137a 100644 --- a/src/testing/unit/Providers/Rackspace/IdentityProviderCacheTests.cs +++ b/src/testing/unit/Providers/Rackspace/IdentityProviderCacheTests.cs @@ -1,14 +1,12 @@ using System; -using System.Text; using System.Collections.Generic; -using System.Linq; using JSIStudios.SimpleRESTServices.Client; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; -using net.openstack; using net.openstack.Core.Caching; using net.openstack.Core.Domain; using net.openstack.Providers.Rackspace; +using net.openstack.Providers.Rackspace.Objects; using net.openstack.Providers.Rackspace.Objects.Response; namespace OpenStackNet.Testing.Unit.Providers.Rackspace diff --git a/src/testing/unit/Providers/Rackspace/ProviderBaseTests.cs b/src/testing/unit/Providers/Rackspace/ProviderBaseTests.cs index 76186e8e8..3b136e0bb 100644 --- a/src/testing/unit/Providers/Rackspace/ProviderBaseTests.cs +++ b/src/testing/unit/Providers/Rackspace/ProviderBaseTests.cs @@ -10,6 +10,7 @@ using net.openstack.Core.Domain; using net.openstack.Core.Providers; using net.openstack.Providers.Rackspace; +using net.openstack.Providers.Rackspace.Objects; namespace OpenStackNet.Testing.Unit.Providers.Rackspace { diff --git a/src/testing/unit/packages.config b/src/testing/unit/packages.config index 6933c1c5f..8183be47e 100644 --- a/src/testing/unit/packages.config +++ b/src/testing/unit/packages.config @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/src/testing/unit/unit.csproj b/src/testing/unit/unit.csproj index 74f81bacf..fa20f8d3f 100644 --- a/src/testing/unit/unit.csproj +++ b/src/testing/unit/unit.csproj @@ -37,12 +37,13 @@ ..\..\packages\Moq.4.0.10827\lib\NET40\Moq.dll - + + False ..\..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll - + False - ..\..\packages\SimpleRESTServices.1.0.6.3\lib\net40\SimpleRESTServices.dll + ..\..\packages\SimpleRESTServices.1.0.6.6\lib\net40\SimpleRESTServices.dll