From 315ad87ec86862869d030901b13bc99afca5af0e Mon Sep 17 00:00:00 2001 From: Alan Quillin Date: Wed, 8 May 2013 16:24:34 -0500 Subject: [PATCH 1/2] Fixed an issue with the Cloud Files Provider's Copy object --- src/console/console.csproj | 7 ++- src/console/packages.config | 2 +- .../Core/Providers/IObjectStorageProvider.cs | 18 +++++- .../Providers/Rackspace/CloudFilesProvider.cs | 42 +++++++------- src/corelib/corelib.csproj | 6 +- src/corelib/packages.config | 2 +- src/openstack.net_Integration_Tests.sln | 25 +++++++++ src/openstack.net_Integration_Tests_2012.sln | 29 +++++++++- .../Newtonsoft.Json.4.5.11.nuspec | 5 +- .../lib/net40/SimpleRESTServices.dll | Bin 34816 -> 0 bytes .../SimpleRESTServices.1.0.6.6.nuspec} | 5 +- .../lib/net40/SimpleRESTServices.dll | Bin 0 -> 35840 bytes .../Providers/Rackspace/CloudFilesTests.cs | 53 +++++++++++------- src/testing/integration/integration.csproj | 7 ++- src/testing/integration/packages.config | 2 +- src/testing/unit/packages.config | 2 +- src/testing/unit/unit.csproj | 7 ++- 17 files changed, 145 insertions(+), 67 deletions(-) delete mode 100644 src/packages/SimpleRESTServices.1.0.6.3/lib/net40/SimpleRESTServices.dll rename src/packages/{SimpleRESTServices.1.0.6.3/SimpleRESTServices.1.0.6.3.nuspec => SimpleRESTServices.1.0.6.6/SimpleRESTServices.1.0.6.6.nuspec} (91%) create mode 100644 src/packages/SimpleRESTServices.1.0.6.6/lib/net40/SimpleRESTServices.dll 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/Providers/IObjectStorageProvider.cs b/src/corelib/Core/Providers/IObjectStorageProvider.cs index 1246e2066..9d984d673 100644 --- a/src/corelib/Core/Providers/IObjectStorageProvider.cs +++ b/src/corelib/Core/Providers/IObjectStorageProvider.cs @@ -331,19 +331,33 @@ 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. /// 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. diff --git a/src/corelib/Providers/Rackspace/CloudFilesProvider.cs b/src/corelib/Providers/Rackspace/CloudFilesProvider.cs index 26085f492..75caac7c9 100644 --- a/src/corelib/Providers/Rackspace/CloudFilesProvider.cs +++ b/src/corelib/Providers/Rackspace/CloudFilesProvider.cs @@ -659,27 +659,13 @@ 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 - { - 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(sourceContainer), _encodeDecodeProvider.UrlEncode(sourceObjectName))); - var urlPath = new Uri(string.Format("{0}/{1}/{2}", GetServiceEndpointCloudFiles(identity, region, useInternalUrl), _encodeDecodeProvider.UrlEncode(destinationContainer), _encodeDecodeProvider.UrlEncode(destinationObjectName))); + if(headers == null) + headers = new Dictionary(); - var response = ExecuteRESTRequest(identity, urlPath, HttpMethod.PUT, headers); + headers.Add(Destination, string.Format("{0}/{1}", destinationContainer, destinationObjectName)); + var response = ExecuteRESTRequest(identity, urlPath, HttpMethod.COPY, headers: headers); if (response.StatusCode == 201) return ObjectStore.ObjectCreated; @@ -697,7 +683,7 @@ public ObjectStore DeleteObject(string container, string objectName, Dictionary< 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); + var response = ExecuteRESTRequest(identity, urlPath, HttpMethod.DELETE, headers: headers); if (response.StatusCode == 204) return ObjectStore.ObjectDeleted; @@ -708,6 +694,17 @@ public ObjectStore DeleteObject(string container, string objectName, Dictionary< } + /// + 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, region, useInternalUrl, identity); + } + /// public ObjectStore PurgeObjectFromCDN(string container, string objectName, string region = null, CloudIdentity identity = null) { @@ -959,8 +956,13 @@ protected override IObjectStorageProvider BuildProvider(CloudIdentity identity) public const string Etag = "etag"; public const string ContentType = "content-type"; public const string ContentLength = "content-length"; +<<<<<<< HEAD public const string CopyFrom = "x-copy-from"; public const string ObjectManifestMetadataKey = "x-object-manifest"; +======= + public const string Destination = "Destination"; + public const string ObjectManifestMetadataKey = "X-Object-Manifest"; +>>>>>>> Fixed an issue with the Cloud Files Provider's Copy object //Cdn Object Constants public const string CdnPurgeEmail = "x-purge-email"; diff --git a/src/corelib/corelib.csproj b/src/corelib/corelib.csproj index a4b3a10bd..216bb4b78 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 @@ -215,7 +216,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 ae84fc4799f314805c75d33e955f8fc0c6e747f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34816 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 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 0000000000000000000000000000000000000000..6069cdb7de16fc0dbe89cb98aa1a40cdb2317588 GIT binary patch literal 35840 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 yXy!bv=s}88Iw>85$6^>+GQOPNJ2M|U(); - 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,29 +687,37 @@ 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/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/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 From aa37bd8b1fb01b790f1382352831db483a0ad052 Mon Sep 17 00:00:00 2001 From: Alan Quillin Date: Thu, 9 May 2013 09:47:29 -0500 Subject: [PATCH 2/2] Fixed merge conflicts --- src/corelib/Providers/Rackspace/CloudFilesProvider.cs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/corelib/Providers/Rackspace/CloudFilesProvider.cs b/src/corelib/Providers/Rackspace/CloudFilesProvider.cs index 75caac7c9..cae34ace0 100644 --- a/src/corelib/Providers/Rackspace/CloudFilesProvider.cs +++ b/src/corelib/Providers/Rackspace/CloudFilesProvider.cs @@ -956,13 +956,9 @@ protected override IObjectStorageProvider BuildProvider(CloudIdentity identity) public const string Etag = "etag"; public const string ContentType = "content-type"; public const string ContentLength = "content-length"; -<<<<<<< HEAD - public const string CopyFrom = "x-copy-from"; - public const string ObjectManifestMetadataKey = "x-object-manifest"; -======= public const string Destination = "Destination"; - public const string ObjectManifestMetadataKey = "X-Object-Manifest"; ->>>>>>> Fixed an issue with the Cloud Files Provider's Copy object + public const string ObjectManifestMetadataKey = "x-object-manifest"; + //Cdn Object Constants public const string CdnPurgeEmail = "x-purge-email";