Fixed uploads of shared files. Added check for unauthorized additions to "others...
[pithos-ms-client] / trunk / Pithos.Core.Test / NetworkAgentTest.cs
1 using System;
2 using System.Collections.Generic;
3 using System.IO;
4 using System.Linq;
5 using System.Text;
6 using System.Threading.Tasks;
7 using NUnit.Framework;
8 using Pithos.Core.Agents;
9 using Pithos.Interfaces;
10 using Pithos.Network;
11
12 namespace Pithos.Core.Test
13 {
14     [TestFixture]
15     class NetworkAgentTest
16     {
17         [Test]
18         public void TestUpload()
19         {
20             var agent = new NetworkAgent();
21
22             var account = "890329@vho.grnet.gr";
23             var apiKey = "24989dce4e0fcb072f8cb60c8922be19";
24
25             var client = new CloudFilesClient(account,apiKey)
26                              {
27                                  AuthenticationUrl = @"https://pithos.dev.grnet.gr",
28                                  UsePithos = true
29                              };
30
31             
32             var accountInfo=client.Authenticate();
33
34             var fileName = "012345.dump";
35             var filePath = Path.Combine(@"e:\pithos\", fileName);
36
37             var random = new Random();
38             var buffer = new byte[4096];
39             random.NextBytes(buffer);
40
41             if (File.Exists(filePath))
42                 File.Delete(filePath);
43
44             using (var stream = File.OpenWrite(filePath))
45             {
46                 for (var i = 0; i < 2* 1024;i++ )
47                     stream.Write(buffer, 0, buffer.Length);
48             }
49
50
51             client.DeleteObject(null, FolderConstants.PithosContainer, fileName);
52
53             var task = Signature.CalculateTreeHashAsync(filePath, accountInfo.BlockSize, accountInfo.BlockHash);
54             var cloudFile = new ObjectInfo {Account = account, Container = "pithos"};
55             var fileInfo = new FileInfo(filePath);
56
57             var tasks=agent.UploadWithHashMap(accountInfo,cloudFile,fileInfo,fileName,task);
58             Task.Factory.Iterate(tasks).Wait();
59
60             var newHash = client.GetHashMap(null, FolderConstants.PithosContainer, fileName).Result;
61
62
63             var treeHash = task.Result;
64             Assert.AreEqual(treeHash.TopHash, newHash.TopHash);
65
66             Assert.AreEqual(treeHash.Hashes, newHash.Hashes);
67
68         }
69
70         [Test]
71         public void TestDownload()
72         {
73             var fileAgent = new FileAgent {FragmentsPath = @"e:\pithos\Fragments"};
74
75             var agent = new NetworkAgent();
76
77             var account = "890329@vho.grnet.gr";
78             var apiKey = "24989dce4e0fcb072f8cb60c8922be19";
79             var client = new CloudFilesClient(account,apiKey)
80             {
81                 AuthenticationUrl = @"https://pithos.dev.grnet.gr",
82                 UsePithos = true
83             };
84
85             var accountInfo=client.Authenticate();
86
87             var fileName = @"AccessDatabaseEngine_x64.exe";
88
89             var filePath = Path.Combine(@"e:\pithos\", fileName);
90             if (File.Exists(filePath))
91                 File.Delete(filePath);
92
93             var cloudFile = new ObjectInfo {Account = account, Container = FolderConstants.PithosContainer};
94
95             var newHash = client.GetHashMap(null, FolderConstants.PithosContainer, fileName).Result;
96             agent.DownloadWithBlocks(accountInfo, client, cloudFile, new Uri(fileName, UriKind.Relative), filePath, newHash)
97                 .Wait();
98
99             Assert.IsTrue(File.Exists(filePath));
100             var treeHash = Signature.CalculateTreeHashAsync(filePath, accountInfo.BlockSize, accountInfo.BlockHash).Result;
101
102             Assert.AreEqual(treeHash.TopHash, newHash.TopHash);
103
104             Assert.AreEqual(treeHash.Hashes, newHash.Hashes);
105
106         }
107
108     }
109 }