--- /dev/null
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Diagnostics.Contracts;
+using System.Linq;
+using System.Text;
+using NUnit.Framework;
+using Pithos.Interfaces;
+using System.IO;
+
+
+namespace Pithos.Network.Test
+{
+ [TestFixture]
+ class FolderTests
+ {
+ private string _apiKey = "9d3cb7b231e96f72ebe96af1c6cd5112";
+ private string _userName = "pkanavos";
+
+ [SetUp]
+ public void Setup()
+ {
+ Directory.CreateDirectory("RootFolder");
+ File.WriteAllText(@"RootFolder\TestFile1.txt", "This is a test file");
+ Directory.CreateDirectory(@"RootFolder\Folder1");
+ File.WriteAllText(@"RootFolder\Folder1\TestFile1.txt", "This is a test file");
+ Directory.CreateDirectory(@"RootFolder\Folder1\Subfolder1");
+ File.WriteAllText(@"RootFolder\Folder1\Subfolder1\TestFile1.txt", "This is a test file");
+ Directory.CreateDirectory(@"RootFolder\Folder2");
+ File.WriteAllText(@"RootFolder\Folder2\TestFile1.txt", "This is a test file");
+
+ }
+
+ [TearDown]
+ public void TearDown()
+ {
+ Directory.Delete("RootFolder",true);
+ }
+
+ [Test]
+ public void TestCreateSingleFolder([Values(true, false)]bool usePithos)
+ {
+ ICloudClient client = new CloudFilesClient { UsePithos = usePithos };
+ client.Authenticate(_userName, _apiKey);
+
+ client.CreateContainer("Pithos");
+
+ client.CreateFolder("Pithos", "RootFolder");
+
+ Assert.IsTrue(client.ObjectExists("Pithos","RootFolder"));
+ var info = client.GetObjectInfo("Pithos", "RootFolder");
+ Assert.AreEqual(@"application/directory",info.Content_Type);
+
+ }
+
+ [Test]
+ public void TestCreateSubFolders([Values(true, false)]bool usePithos)
+ {
+ ICloudClient client = new CloudFilesClient { UsePithos = usePithos };
+ client.Authenticate(_userName, _apiKey);
+
+ client.CreateContainer("Pithos");
+
+ client.CreateFolder("Pithos", "RootFolder");
+ client.CreateFolder("Pithos", "RootFolder/Folder1");
+ var localInfo = new FileInfo("test.txt");
+ client.PutObject("Pithos","RootFolder/Folder1/test.txt","test.txt",localInfo.Length);
+
+
+ Assert.IsTrue(client.ObjectExists("Pithos", "RootFolder/Folder1"));
+ var folderInfo = client.GetObjectInfo("Pithos", "RootFolder/Folder1");
+ Assert.AreEqual(@"application/directory",folderInfo.Content_Type);
+
+
+ Assert.IsTrue(client.ObjectExists("Pithos", "RootFolder/Folder1/test.txt"));
+ var fileInfo = client.GetObjectInfo("Pithos", "RootFolder/Folder1/test.txt");
+ Assert.AreEqual(@"application/octet-stream", fileInfo.Content_Type);
+
+ }
+
+ [Test]
+ public void TestDeleteSubFolders([Values(true, false)]bool usePithos)
+ {
+ throw new NotImplementedException();
+ ICloudClient client = new CloudFilesClient { UsePithos = usePithos };
+ client.Authenticate(_userName, _apiKey);
+
+ client.CreateContainer("Pithos");
+
+ client.CreateFolder("Pithos", "RootFolder");
+ client.CreateFolder("Pithos", "RootFolder/Folder1");
+ var localInfo = new FileInfo("test.txt");
+ client.PutObject("Pithos","RootFolder/Folder1/test.txt","test.txt",localInfo.Length);
+
+ client.DeleteObject("Pithos", "RootFolder/Folder1");
+
+ Assert.IsTrue(client.ObjectExists("Pithos", "RootFolder/Folder1"));
+ var folderInfo = client.GetObjectInfo("Pithos", "RootFolder/Folder1");
+ Assert.AreEqual(@"application/directory",folderInfo.Content_Type);
+
+
+ Assert.IsTrue(client.ObjectExists("Pithos", "RootFolder/Folder1/test.txt"));
+ var fileInfo = client.GetObjectInfo("Pithos", "RootFolder/Folder1/test.txt");
+ Assert.AreEqual(@"application/octet-stream", fileInfo.Content_Type);
+
+ }
+
+ [Test]
+ public void TestCreateSubFoldersInOneStep([Values(true, false)]bool usePithos)
+ {
+ ICloudClient client = new CloudFilesClient { UsePithos = usePithos };
+ client.Authenticate(_userName, _apiKey);
+
+ client.CreateContainer("Pithos");
+
+ client.CreateFolder("Pithos", "RootFolder2/Folder1");
+
+ Assert.IsTrue(client.ObjectExists("Pithos", "RootFolder2/Folder1"));
+ var folderInfo = client.GetObjectInfo("Pithos", "RootFolder2/Folder1");
+ Assert.AreEqual(@"application/directory",folderInfo.Content_Type);
+
+ Assert.IsTrue(client.ObjectExists("Pithos", "RootFolder2"));
+ folderInfo = client.GetObjectInfo("Pithos", "RootFolder2");
+ Assert.AreEqual(@"application/directory", folderInfo.Content_Type);
+
+
+ Assert.IsTrue(client.ObjectExists("Pithos", "RootFolder2/Folder1/test.txt"));
+ var fileInfo = client.GetObjectInfo("Pithos", "RootFolder2/Folder1/test.txt");
+ Assert.AreEqual(@"application/octet-stream", fileInfo.Content_Type);
+
+ }
+ }
+}
}
}
+ public void CreateFolder(string container, string folder)
+ {
+ if (String.IsNullOrWhiteSpace(container))
+ throw new ArgumentNullException("container", "The container property can't be empty");
+ if (String.IsNullOrWhiteSpace(folder))
+ throw new ArgumentNullException("folder", "The folder property can't be empty");
+
+ var folderUrl=String.Format("{0}/{1}",container,folder);
+ var request = new RestRequest { Path = folderUrl, Method = WebMethod.Put };
+ request.AddHeader("Content-Type", @"application/directory");
+ request.AddHeader("Content-Length", "0");
+
+ var response = _client.Request(request);
+
+ if (response.StatusCode != HttpStatusCode.Created && response.StatusCode != HttpStatusCode.Accepted)
+ throw new WebException(String.Format("CreateFolder failed with unexpected status code {0}", response.StatusCode));
+
+ }
+
public ContainerInfo GetContainerInfo(string container)
{
if (String.IsNullOrWhiteSpace(container))