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