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 NetworkOpsTest { private string _apiKey = "9d3cb7b231e96f72ebe96af1c6cd5112"; private string _userName = "pkanavos"; [Test] public void TestAuthenticate([Values(true,false)]bool usePithos) { ICloudClient client = new CloudFilesClient{UsePithos=usePithos}; client.Authenticate(_userName, _apiKey); Uri storageUrl=client.StorageUrl; string token = client.Token; Assert.IsNotNull(storageUrl, "Storage Url was empty"); Assert.IsNotEmpty(token, "Token was empty"); } [Test] public void TestListContainers([Values(true, false)]bool usePithos) { ICloudClient client = new CloudFilesClient { UsePithos = usePithos }; client.Authenticate(_userName, _apiKey); client.CreateContainer("PITHOS"); IList containers=client.ListContainers(); Assert.IsTrue(containers.Count()>1); } [Test] public void TestListObjects([Values(true, false)]bool usePithos) { ICloudClient client = new CloudFilesClient { UsePithos = usePithos }; client.Authenticate(_userName, _apiKey); client.CreateContainer("PITHOS"); client.PutObject("PITHOS","devguide.pdf","devguide.pdf"); IList objects=client.ListObjects("PITHOS"); Assert.IsTrue(objects.Count()>=1); } [Test] public void TestContainerExists([Values(true, false)]bool usePithos) { ICloudClient client = new CloudFilesClient { UsePithos = usePithos }; client.Authenticate(_userName, _apiKey); client.CreateContainer("TestContainer"); bool dnzExists=client.ContainerExists("TestContainer"); bool mooExists = client.ContainerExists("Moo"); Assert.IsTrue(dnzExists); Assert.IsFalse(mooExists); } [Test] public void TestGetContainerInfo([Values(true, false)]bool usePithos) { ICloudClient client = new CloudFilesClient { UsePithos = usePithos }; client.Authenticate(_userName, _apiKey); client.CreateContainer("PITHOS"); client.CreateContainer("DotNetZone"); var dnzInfo =client.GetContainerInfo("DotNetZone"); Assert.AreNotEqual(ContainerInfo.Empty, dnzInfo,"Expected DotNetZone container not found"); var pithosInfo = client.GetContainerInfo("PITHOS"); Assert.AreNotEqual(ContainerInfo.Empty, pithosInfo,"Expected PITHOS container not found"); var mooInfo = client.GetContainerInfo("moo"); Assert.AreEqual(ContainerInfo.Empty, mooInfo); } [Test] public void TestCreateContainer([Values(true, false)]bool usePithos) { Assert.DoesNotThrow(() => { ICloudClient client = new CloudFilesClient{UsePithos=usePithos}; client.Authenticate(_userName, _apiKey); client.CreateContainer("Shares2"); Assert.IsTrue(client.ContainerExists("Shares2")); client.DeleteContainer("Shares2"); client.CreateContainer("Shares"); Assert.IsTrue(client.ContainerExists("Shares")); client.CreateContainer("DotNetZone"); Assert.IsTrue(client.ContainerExists("DotNetZone")); }); } [Test] public void TestGetObject([Values(true, false)]bool usePithos) { Assert.DoesNotThrow(() => { ICloudClient client = new CloudFilesClient { UsePithos = usePithos }; client.Authenticate(_userName, _apiKey); //Prepare test file client.CreateContainer("Shares"); string testFileName = "test.txt"; var info = new FileInfo(testFileName); client.PutObject("Shares",testFileName,testFileName); string downloadFile = "test2.txt"; client.GetObject("Shares", testFileName, downloadFile) .Wait(); Assert.IsTrue(File.Exists(downloadFile)); }); } [Test] public void TestPutObject([Values(true, false)]bool usePithos) { Assert.DoesNotThrow(() => { ICloudClient client = new CloudFilesClient {UsePithos = usePithos}; client.Authenticate(_userName, _apiKey); client.CreateContainer("Shares"); Assert.IsTrue(client.ContainerExists("Shares")); var filePath = "devguide.pdf"; FileInfo info = new FileInfo(filePath); client.PutObject("Shares", info.Name, filePath); }); } [Test] public void TestGetObjectMetadata([Values(true, false)]bool usePithos) { Assert.DoesNotThrow(() => { ICloudClient client = new CloudFilesClient { UsePithos = usePithos }; client.Authenticate(_userName, _apiKey); client.CreateContainer("Shares"); Assert.IsTrue(client.ContainerExists("Shares")); var filePath = "devguide.pdf"; FileInfo info = new FileInfo(filePath); client.PutObject("Shares", info.Name, filePath); var meta=client.GetObjectInfo("Shares", filePath); Assert.IsNotEmpty(meta.Hash); Assert.AreEqual(meta.Name,filePath); }); } [Test] public void TestDeleteObject([Values(true, false)]bool usePithos) { Assert.DoesNotThrow(() => { ICloudClient client = new CloudFilesClient { UsePithos = usePithos }; client.Authenticate(_userName, _apiKey); client.CreateContainer("Shares"); Assert.IsTrue(client.ContainerExists("Shares"),"Container Exists"); var filePath = "devguide.pdf"; FileInfo info=new FileInfo(filePath); client.PutObject("Shares",info.Name, filePath); Assert.IsTrue(client.ObjectExists("Shares",info.Name),"File Created"); client.DeleteObject("Shares/devguide.pdf",info.Name); }); } [Test] public void TestDeleteContainer([Values(true, false)]bool usePithos) { Assert.DoesNotThrow(() => { ICloudClient client = new CloudFilesClient { UsePithos = usePithos }; client.Authenticate(_userName, _apiKey); client.CreateContainer("Shares"); Assert.IsTrue(client.ContainerExists("Shares"),"Container Exists"); var filePath = "devguide.pdf"; FileInfo info=new FileInfo(filePath); client.PutObject("Shares",info.Name, filePath ); Assert.IsTrue(client.ObjectExists("Shares",info.Name),"File Created"); client.DeleteObject("Shares",info.Name); Assert.IsFalse(client.ObjectExists("Shares", info.Name),"Container Deleted"); client.DeleteObject("Moo",info.Name); Assert.IsFalse(client.ObjectExists("Moo", info.Name),"Container Deleted"); }); } /* [Test] public void TestFilesWithSpaces([Values(true, false)]bool usePithos) { ICloudClient client = new CloudFilesClient { UsePithos = usePithos }; client.Authenticate(_userName, _apiKey); var testName = "Name with spaces.txt"; using(var stream=new MemoryStream()) using (var writer = new File.(stream)) { writer.WriteLine("This is a test line"); stream.Seek(0, 0); client.PutObject("PITHOS",testName,stream,stream.Length); } Assert.DoesNotThrow(() => { var info = client.GetObjectInfo("PITHOS", testName); Assert.AreEqual(testName, info.Name); }); Assert.DoesNotThrow(() => { client.DeleteObject("PITHOS", testName); }); }*/ [Test] public void TestMoveObject([Values(true, false)]bool usePithos) { Assert.DoesNotThrow(() => { ICloudClient client = new CloudFilesClient { UsePithos = usePithos }; client.Authenticate(_userName, _apiKey); client.CreateContainer("Shares"); Assert.IsTrue(client.ContainerExists("Shares"),"Container Exists"); var filePath = "devguide.pdf"; FileInfo info=new FileInfo(filePath); client.PutObject("Shares",info.Name, filePath); Assert.IsTrue(client.ObjectExists("Shares",info.Name),"File Created"); client.MoveObject("Shares",info.Name,"Shares","smoo.pdf"); Assert.IsFalse(client.ObjectExists("Shares", info.Name),"Original File Deleted"); Assert.IsTrue(client.ObjectExists("Shares", "smoo.pdf"), "Target File Created"); }); } [Test] public void TestGetObjectMissing() { } [Test] public void TestAuthenticateMissingArguments([Values(true, false)]bool usePithos) { Assert.Catch(() => { ICloudClient client = new CloudFilesClient { UsePithos = usePithos }; client.Authenticate("someUser",null); }); Assert.Catch(() => { ICloudClient client = new CloudFilesClient { UsePithos = usePithos }; client.Authenticate(null,"someKey"); }); } } }