Added folder tests
[pithos-ms-client] / trunk / Pithos.Network.Test / NetworkOpsTest.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Diagnostics;
4 using System.Diagnostics.Contracts;
5 using System.Linq;
6 using System.Text;
7 using NUnit.Framework;
8 using Pithos.Interfaces;
9 using System.IO;
10
11 namespace Pithos.Network.Test
12 {
13     [TestFixture]
14     class NetworkOpsTest
15     {
16         private string _apiKey = "9d3cb7b231e96f72ebe96af1c6cd5112";
17         private string _userName = "pkanavos";
18         
19             
20
21         [Test]
22         public void TestAuthenticate([Values(true,false)]bool usePithos)
23         {
24             ICloudClient client = new CloudFilesClient{UsePithos=usePithos};
25             client.Authenticate(_userName, _apiKey);
26             Uri storageUrl=client.StorageUrl;
27             string token = client.Token;
28
29             Assert.IsNotNull(storageUrl, "Storage Url was empty");
30             Assert.IsNotEmpty(token, "Token was empty");
31         }
32
33         [Test]
34         public void TestListContainers([Values(true, false)]bool usePithos)
35         {
36             ICloudClient client = new CloudFilesClient { UsePithos = usePithos };
37             client.Authenticate(_userName, _apiKey);
38             client.CreateContainer("PITHOS");
39
40             IList<ContainerInfo> containers=client.ListContainers();
41             Assert.IsTrue(containers.Count()>1);
42         }
43
44         [Test]
45         public void TestListObjects([Values(true, false)]bool usePithos)
46         {
47             ICloudClient client = new CloudFilesClient { UsePithos = usePithos };
48             client.Authenticate(_userName, _apiKey);
49             client.CreateContainer("PITHOS");
50             var info = new FileInfo("devguide.pdf");
51             client.PutObject("PITHOS","devguide.pdf","devguide.pdf",info.Length);
52
53             IList<ObjectInfo> objects=client.ListObjects("PITHOS");
54             Assert.IsTrue(objects.Count()>=1);
55         }
56
57         [Test]
58         public void TestContainerExists([Values(true, false)]bool usePithos)
59         {
60             ICloudClient client = new CloudFilesClient { UsePithos = usePithos };
61             client.Authenticate(_userName, _apiKey);
62             client.CreateContainer("TestContainer");
63             bool dnzExists=client.ContainerExists("TestContainer");
64             
65             bool mooExists = client.ContainerExists("Moo");
66             Assert.IsTrue(dnzExists);
67             
68             Assert.IsFalse(mooExists);
69         }
70
71         [Test]
72         public void TestGetContainerInfo([Values(true, false)]bool usePithos)
73         {
74             ICloudClient client = new CloudFilesClient { UsePithos = usePithos };
75             client.Authenticate(_userName, _apiKey);
76
77             client.CreateContainer("PITHOS");
78             client.CreateContainer("DotNetZone");
79
80             var dnzInfo =client.GetContainerInfo("DotNetZone");
81             Assert.AreNotEqual(ContainerInfo.Empty, dnzInfo,"Expected DotNetZone container not found");
82
83             var pithosInfo = client.GetContainerInfo("PITHOS");
84             Assert.AreNotEqual(ContainerInfo.Empty, pithosInfo,"Expected PITHOS container not found");
85
86             var mooInfo = client.GetContainerInfo("moo");
87             Assert.AreEqual(ContainerInfo.Empty, mooInfo);
88         }
89
90         [Test]
91         public void TestCreateContainer([Values(true, false)]bool usePithos)
92         {
93             Assert.DoesNotThrow(() =>
94                                     {
95                                         ICloudClient client = new CloudFilesClient{UsePithos=usePithos};
96                                         client.Authenticate(_userName, _apiKey);
97
98                                         client.CreateContainer("Shares2");
99                                         Assert.IsTrue(client.ContainerExists("Shares2"));
100                                         client.DeleteContainer("Shares2");
101
102                                         client.CreateContainer("Shares");
103                                         Assert.IsTrue(client.ContainerExists("Shares"));
104                                         client.CreateContainer("DotNetZone");
105                                         Assert.IsTrue(client.ContainerExists("DotNetZone"));
106                                     });
107         }
108
109         [Test]
110         public void TestGetObject([Values(true, false)]bool usePithos)
111         {
112             Assert.DoesNotThrow(() =>
113             {
114                 ICloudClient client = new CloudFilesClient { UsePithos = usePithos };
115                 client.Authenticate(_userName, _apiKey);
116                 //Prepare test file
117                 client.CreateContainer("Shares");                
118                 string testFileName = "test.txt";                
119                 var info = new FileInfo(testFileName);
120                 client.PutObject("Shares",testFileName,testFileName,info.Length);
121                 
122
123                 string downloadFile = "test2.txt";
124                 using (var stream = client.GetObject("Shares", testFileName))
125                 using (var file = File.Create(downloadFile, 4096, FileOptions.DeleteOnClose))
126                 {
127                     stream.CopyTo(file);
128                     Assert.IsTrue(File.Exists(downloadFile));
129                 }
130                 
131             });
132             
133         }
134
135         [Test]
136         public void TestPutObject([Values(true, false)]bool usePithos)
137         {
138             Assert.DoesNotThrow(() =>
139                                     {
140                                         ICloudClient client = new CloudFilesClient {UsePithos = usePithos};
141                                         client.Authenticate(_userName, _apiKey);
142
143                                         client.CreateContainer("Shares");
144                                         Assert.IsTrue(client.ContainerExists("Shares"));
145
146                                         var filePath = "devguide.pdf";
147                                         FileInfo info = new FileInfo(filePath);
148
149
150                                         client.PutObject("Shares", info.Name, filePath, info.Length);
151
152
153                                     });
154
155         }
156
157         [Test]
158         public void TestGetObjectMetadata([Values(true, false)]bool usePithos)
159         {
160             Assert.DoesNotThrow(() =>
161             {
162                 ICloudClient client = new CloudFilesClient { UsePithos = usePithos };
163                 client.Authenticate(_userName, _apiKey);
164
165                 client.CreateContainer("Shares");
166                 Assert.IsTrue(client.ContainerExists("Shares"));
167
168                 var filePath = "devguide.pdf";
169                 FileInfo info = new FileInfo(filePath);
170
171                
172                     client.PutObject("Shares", info.Name, filePath, info.Length);
173                 
174
175
176                 
177                 var meta=client.GetObjectInfo("Shares", filePath);
178                 Assert.IsNotEmpty(meta.Hash);
179                 Assert.AreEqual(meta.Name,filePath);
180
181             });
182
183         }
184
185         [Test]
186         public void TestDeleteObject([Values(true, false)]bool usePithos)
187         {
188             Assert.DoesNotThrow(() =>
189             {
190                 ICloudClient client = new CloudFilesClient { UsePithos = usePithos };
191                 client.Authenticate(_userName, _apiKey);
192
193                 client.CreateContainer("Shares");
194                 Assert.IsTrue(client.ContainerExists("Shares"),"Container Exists");                
195
196                 var filePath = "devguide.pdf";
197                 FileInfo info=new FileInfo(filePath);
198                 
199                
200                     client.PutObject("Shares",info.Name, filePath,info.Length );
201                 
202
203                 Assert.IsTrue(client.ObjectExists("Shares",info.Name),"File Created");
204
205                 client.DeleteObject("Shares/devguide.pdf",info.Name);
206                 
207             });
208
209         }
210         
211         [Test]
212         public void TestDeleteContainer([Values(true, false)]bool usePithos)
213         {
214             Assert.DoesNotThrow(() =>
215             {
216                 ICloudClient client = new CloudFilesClient { UsePithos = usePithos };
217                 client.Authenticate(_userName, _apiKey);
218
219                 client.CreateContainer("Shares");
220                 Assert.IsTrue(client.ContainerExists("Shares"),"Container Exists");                
221
222                 var filePath = "devguide.pdf";
223                 FileInfo info=new FileInfo(filePath);
224                 
225                
226                     client.PutObject("Shares",info.Name, filePath,info.Length );
227                 
228
229                 Assert.IsTrue(client.ObjectExists("Shares",info.Name),"File Created");
230
231                 client.DeleteObject("Shares",info.Name);
232                 Assert.IsFalse(client.ObjectExists("Shares", info.Name),"Container Deleted");
233                 
234                 client.DeleteObject("Moo",info.Name);
235                 Assert.IsFalse(client.ObjectExists("Moo", info.Name),"Container Deleted");
236                 
237             });
238
239         }
240
241        /* [Test]
242         public void TestFilesWithSpaces([Values(true, false)]bool usePithos)
243         {
244             ICloudClient client = new CloudFilesClient { UsePithos = usePithos };
245             client.Authenticate(_userName, _apiKey);
246             
247             var testName = "Name with spaces.txt";
248             
249             using(var stream=new MemoryStream())
250             using (var writer = new File.(stream))
251             {
252                 
253                 writer.WriteLine("This is a test line");
254                 stream.Seek(0, 0);
255                 
256                 client.PutObject("PITHOS",testName,stream,stream.Length);                
257             }
258
259             Assert.DoesNotThrow(() =>
260                                     {
261                                         var info = client.GetObjectInfo("PITHOS", testName);
262                                         Assert.AreEqual(testName, info.Name);
263                                     });
264             Assert.DoesNotThrow(() =>
265                                     {
266                                         client.DeleteObject("PITHOS", testName);                                        
267                                     });
268         }*/
269
270         [Test]
271         public void TestMoveObject([Values(true, false)]bool usePithos)
272         {
273             Assert.DoesNotThrow(() =>
274             {
275                 ICloudClient client = new CloudFilesClient { UsePithos = usePithos };
276                 client.Authenticate(_userName, _apiKey);
277
278                 client.CreateContainer("Shares");
279                 Assert.IsTrue(client.ContainerExists("Shares"),"Container Exists");                
280
281                 var filePath = "devguide.pdf";
282                 FileInfo info=new FileInfo(filePath);
283                 
284                
285                     client.PutObject("Shares",info.Name, filePath,info.Length );
286                 
287
288                 Assert.IsTrue(client.ObjectExists("Shares",info.Name),"File Created");
289
290                 client.MoveObject("Shares",info.Name,"smoo.pdf");
291                 Assert.IsFalse(client.ObjectExists("Shares", info.Name),"Original File Deleted");
292                 Assert.IsTrue(client.ObjectExists("Shares", "smoo.pdf"), "Target File Created");
293
294             });
295
296         }
297
298         [Test]
299         public void TestGetObjectMissing()
300         {
301
302         }
303
304
305         [Test]
306         public void TestAuthenticateMissingArguments([Values(true, false)]bool usePithos)
307         {
308             Assert.Catch<ArgumentNullException>(() =>
309             {
310                 ICloudClient client = new CloudFilesClient { UsePithos = usePithos };                
311                 client.Authenticate("someUser",null);
312             });
313
314             Assert.Catch<ArgumentNullException>(() =>
315             {
316                 ICloudClient client = new CloudFilesClient { UsePithos = usePithos };
317                 client.Authenticate(null,"someKey");
318             });
319
320         }
321
322
323     }
324
325     
326 }