root / trunk / Pithos.Network.Test / SignatureTest.cs @ 70c12416
History | View | Annotate | Download (5.6 kB)
1 | 9c4346c9 | Panagiotis Kanavos | using System; |
---|---|---|---|
2 | 422c9598 | Panagiotis Kanavos | using System.Collections.Concurrent; |
3 | 9c4346c9 | Panagiotis Kanavos | using System.Collections.Generic; |
4 | 422c9598 | Panagiotis Kanavos | using System.Diagnostics; |
5 | 9c4346c9 | Panagiotis Kanavos | using System.IO; |
6 | 9c4346c9 | Panagiotis Kanavos | using System.Linq; |
7 | 9c4346c9 | Panagiotis Kanavos | using System.Security.Cryptography; |
8 | 9c4346c9 | Panagiotis Kanavos | using System.Text; |
9 | 9c4346c9 | Panagiotis Kanavos | using System.Threading; |
10 | 9c4346c9 | Panagiotis Kanavos | using System.Threading.Tasks; |
11 | 9c4346c9 | Panagiotis Kanavos | using NUnit.Framework; |
12 | 9c4346c9 | Panagiotis Kanavos | using Newtonsoft.Json; |
13 | 1caef52e | Panagiotis Kanavos | using Pithos.Network; |
14 | 9c4346c9 | Panagiotis Kanavos | |
15 | 9c4346c9 | Panagiotis Kanavos | namespace Pithos.Core.Test |
16 | 9c4346c9 | Panagiotis Kanavos | { |
17 | 9c4346c9 | Panagiotis Kanavos | [TestFixture] |
18 | 9c4346c9 | Panagiotis Kanavos | public class SignatureTest |
19 | 9c4346c9 | Panagiotis Kanavos | { |
20 | 9c4346c9 | Panagiotis Kanavos | |
21 | 9c4346c9 | Panagiotis Kanavos | [Test] |
22 | 9c4346c9 | Panagiotis Kanavos | public void TestCreate() |
23 | 9c4346c9 | Panagiotis Kanavos | { |
24 | 9c4346c9 | Panagiotis Kanavos | var hasher = HashAlgorithm.Create("sha256"); |
25 | 9c4346c9 | Panagiotis Kanavos | Assert.IsNotNull(hasher); |
26 | 9c4346c9 | Panagiotis Kanavos | } |
27 | 9c4346c9 | Panagiotis Kanavos | |
28 | 9c4346c9 | Panagiotis Kanavos | [Test] |
29 | 9c4346c9 | Panagiotis Kanavos | public void TestHashmapCreation() |
30 | 9c4346c9 | Panagiotis Kanavos | { |
31 | 9c4346c9 | Panagiotis Kanavos | var file = "e:\\pithos\\vlc-1.1.11-win32.exe"; |
32 | 9c4346c9 | Panagiotis Kanavos | |
33 | 9c4346c9 | Panagiotis Kanavos | decimal blockSize = 4*1024*1024; |
34 | 9c4346c9 | Panagiotis Kanavos | |
35 | 9c4346c9 | Panagiotis Kanavos | var fileSize = new FileInfo(file).Length; |
36 | 9c4346c9 | Panagiotis Kanavos | var numBlocks = decimal.Ceiling(fileSize/blockSize); |
37 | 9c4346c9 | Panagiotis Kanavos | |
38 | 9c4346c9 | Panagiotis Kanavos | var md5 = Signature.CalculateMD5(file); |
39 | 9c4346c9 | Panagiotis Kanavos | |
40 | 422c9598 | Panagiotis Kanavos | var hash1 = Signature.CalculateTreeHashAsync(file, (int) blockSize,"sha256", 2).Result; |
41 | 9c4346c9 | Panagiotis Kanavos | Assert.IsNotNull(hash1.Hashes); |
42 | 9c4346c9 | Panagiotis Kanavos | Assert.AreEqual(numBlocks, hash1.Hashes.Count()); |
43 | 9c4346c9 | Panagiotis Kanavos | |
44 | 9c4346c9 | Panagiotis Kanavos | var topHash = hash1.TopHash; |
45 | 9c4346c9 | Panagiotis Kanavos | var hashString = BytesToStr(topHash); |
46 | 9c4346c9 | Panagiotis Kanavos | |
47 | 9c4346c9 | Panagiotis Kanavos | var stringHashes = (from hash in hash1.Hashes |
48 | 9c4346c9 | Panagiotis Kanavos | select BytesToStr(hash)).ToList(); |
49 | 9c4346c9 | Panagiotis Kanavos | var hashes = JsonConvert.SerializeObject(stringHashes); |
50 | 9c4346c9 | Panagiotis Kanavos | Assert.IsNotNull(topHash); |
51 | 9c4346c9 | Panagiotis Kanavos | } |
52 | 9c4346c9 | Panagiotis Kanavos | |
53 | 9c4346c9 | Panagiotis Kanavos | [Test] |
54 | 9c4346c9 | Panagiotis Kanavos | public void TestHashmapStorage() |
55 | 9c4346c9 | Panagiotis Kanavos | { |
56 | 9c4346c9 | Panagiotis Kanavos | var file = "e:\\pithos\\vlc-1.1.11-win32.exe"; |
57 | 9c4346c9 | Panagiotis Kanavos | |
58 | 9c4346c9 | Panagiotis Kanavos | decimal blockSize = 4*1024*1024; |
59 | 9c4346c9 | Panagiotis Kanavos | |
60 | 9c4346c9 | Panagiotis Kanavos | var fileSize = new FileInfo(file).Length; |
61 | 9c4346c9 | Panagiotis Kanavos | var numBlocks = decimal.Ceiling(fileSize/blockSize); |
62 | 9c4346c9 | Panagiotis Kanavos | |
63 | 9c4346c9 | Panagiotis Kanavos | var md5 = Signature.CalculateMD5(file); |
64 | 9c4346c9 | Panagiotis Kanavos | |
65 | 422c9598 | Panagiotis Kanavos | var hash1 = Signature.CalculateTreeHashAsync(file, (int) blockSize, "sha256", 2).Result; |
66 | 9c4346c9 | Panagiotis Kanavos | hash1.FileId = Guid.NewGuid(); |
67 | 9c4346c9 | Panagiotis Kanavos | var task = hash1.Save(@"e:\") |
68 | 9c4346c9 | Panagiotis Kanavos | .ContinueWith(_ => TreeHash.LoadTreeHash(@"e:\", hash1.FileId)).Unwrap(); |
69 | 9c4346c9 | Panagiotis Kanavos | task.ContinueWith(t => |
70 | 9c4346c9 | Panagiotis Kanavos | { |
71 | 9c4346c9 | Panagiotis Kanavos | var hash = t.Result; |
72 | 9c4346c9 | Panagiotis Kanavos | Assert.AreEqual(hash1.Hashes, hash.Hashes.ToArray()); |
73 | 9c4346c9 | Panagiotis Kanavos | }).Wait(); |
74 | 9c4346c9 | Panagiotis Kanavos | } |
75 | 9c4346c9 | Panagiotis Kanavos | |
76 | 422c9598 | Panagiotis Kanavos | [Test] |
77 | 422c9598 | Panagiotis Kanavos | public void TestLargeHashCalculation() |
78 | 422c9598 | Panagiotis Kanavos | { |
79 | 422c9598 | Panagiotis Kanavos | |
80 | 422c9598 | Panagiotis Kanavos | var file = "e:\\testFile.tmp"; |
81 | 422c9598 | Panagiotis Kanavos | if (!File.Exists(file)) |
82 | 422c9598 | Panagiotis Kanavos | { |
83 | 422c9598 | Panagiotis Kanavos | byte[] buffer= new byte[300 * 1048576]; |
84 | 422c9598 | Panagiotis Kanavos | Random rnd=new Random(); |
85 | 422c9598 | Panagiotis Kanavos | rnd.NextBytes(buffer); |
86 | 422c9598 | Panagiotis Kanavos | //Create a 100MB buffer |
87 | 422c9598 | Panagiotis Kanavos | File.WriteAllBytes(file,buffer); |
88 | 422c9598 | Panagiotis Kanavos | } |
89 | 422c9598 | Panagiotis Kanavos | |
90 | 422c9598 | Panagiotis Kanavos | decimal blockSize = 4 * 1048576; |
91 | 422c9598 | Panagiotis Kanavos | |
92 | 422c9598 | Panagiotis Kanavos | Trace.WriteLine("1"); |
93 | 422c9598 | Panagiotis Kanavos | var stopwatch = Stopwatch.StartNew(); |
94 | 422c9598 | Panagiotis Kanavos | var hash1 = Signature.CalculateTreeHashAsync(file, (int)blockSize, "sha256", 1).Result; |
95 | 422c9598 | Panagiotis Kanavos | stopwatch.Stop(); |
96 | 422c9598 | Panagiotis Kanavos | Trace.WriteLine(stopwatch.Elapsed); |
97 | 422c9598 | Panagiotis Kanavos | |
98 | 422c9598 | Panagiotis Kanavos | Trace.WriteLine("2"); |
99 | 422c9598 | Panagiotis Kanavos | stopwatch.Restart(); |
100 | 422c9598 | Panagiotis Kanavos | var hash2 = Signature.CalculateTreeHashAsync(file, (int)blockSize, "sha256", 2).Result; |
101 | 422c9598 | Panagiotis Kanavos | stopwatch.Stop(); |
102 | 422c9598 | Panagiotis Kanavos | Trace.WriteLine(stopwatch.Elapsed); |
103 | 422c9598 | Panagiotis Kanavos | |
104 | 422c9598 | Panagiotis Kanavos | Trace.WriteLine("3"); |
105 | 422c9598 | Panagiotis Kanavos | stopwatch.Restart(); |
106 | 422c9598 | Panagiotis Kanavos | var hash3 = Signature.CalculateTreeHashAsync(file, (int)blockSize, "sha256", 3).Result; |
107 | 422c9598 | Panagiotis Kanavos | stopwatch.Stop(); |
108 | 422c9598 | Panagiotis Kanavos | Trace.WriteLine(stopwatch.Elapsed); |
109 | 422c9598 | Panagiotis Kanavos | |
110 | 422c9598 | Panagiotis Kanavos | Assert.That(hash3.TopHash,Is.EquivalentTo(hash2.TopHash)); |
111 | 422c9598 | Panagiotis Kanavos | |
112 | 422c9598 | Panagiotis Kanavos | |
113 | 422c9598 | Panagiotis Kanavos | |
114 | 422c9598 | Panagiotis Kanavos | } |
115 | 422c9598 | Panagiotis Kanavos | |
116 | 9c4346c9 | Panagiotis Kanavos | public static string BytesToStr(byte[] bytes) |
117 | 9c4346c9 | Panagiotis Kanavos | { |
118 | 9c4346c9 | Panagiotis Kanavos | var str = new StringBuilder(); |
119 | 9c4346c9 | Panagiotis Kanavos | |
120 | 9c4346c9 | Panagiotis Kanavos | foreach (byte t in bytes) |
121 | 9c4346c9 | Panagiotis Kanavos | str.AppendFormat("{0:X2}", t); |
122 | 9c4346c9 | Panagiotis Kanavos | |
123 | 9c4346c9 | Panagiotis Kanavos | return str.ToString(); |
124 | 9c4346c9 | Panagiotis Kanavos | } |
125 | 9c4346c9 | Panagiotis Kanavos | |
126 | 9c4346c9 | Panagiotis Kanavos | |
127 | 9c4346c9 | Panagiotis Kanavos | [Test] |
128 | 9c4346c9 | Panagiotis Kanavos | public void TestTopHashEmpty() |
129 | 9c4346c9 | Panagiotis Kanavos | { |
130 | 9c4346c9 | Panagiotis Kanavos | using (var hasher = HashAlgorithm.Create("sha256")) |
131 | 9c4346c9 | Panagiotis Kanavos | { |
132 | 9c4346c9 | Panagiotis Kanavos | var hashEmpty = hasher.ComputeHash(new byte[] {}); |
133 | 9c4346c9 | Panagiotis Kanavos | |
134 | 9c4346c9 | Panagiotis Kanavos | var empty = new List<byte[]>(); |
135 | 9c4346c9 | Panagiotis Kanavos | var hash = Signature.CalculateTopHash(empty,"sha256"); |
136 | 9c4346c9 | Panagiotis Kanavos | Assert.IsNull(hash); |
137 | 9c4346c9 | Panagiotis Kanavos | } |
138 | 9c4346c9 | Panagiotis Kanavos | } |
139 | a27aa447 | Panagiotis Kanavos | |
140 | a27aa447 | Panagiotis Kanavos | [Test] |
141 | a27aa447 | Panagiotis Kanavos | public void TestHashMapsEqual() |
142 | a27aa447 | Panagiotis Kanavos | { |
143 | a27aa447 | Panagiotis Kanavos | |
144 | cfed7823 | Panagiotis Kanavos | var account = "890329@vho.grnet.gr"; |
145 | c53aa229 | Panagiotis Kanavos | var apiKey = "24989dce4e0fcb072f8cb60c8922be19"; |
146 | c53aa229 | Panagiotis Kanavos | var client = new CloudFilesClient(account, apiKey); |
147 | c53aa229 | Panagiotis Kanavos | client.AuthenticationUrl = @"https://pithos.dev.grnet.gr"; |
148 | c53aa229 | Panagiotis Kanavos | client.UsePithos = true; |
149 | c53aa229 | Panagiotis Kanavos | client.Authenticate(); |
150 | a27aa447 | Panagiotis Kanavos | var fileName = @"vlc-1.1.11-win32.exe"; |
151 | 422c9598 | Panagiotis Kanavos | var localHash= Signature.CalculateTreeHashAsync(Path.Combine(@"e:\pithos\", fileName), 4 * 1024 * 1024, "sha256", 2).Result; |
152 | cfed7823 | Panagiotis Kanavos | var upHash= client.GetHashMap(fileName, account, "pithos").Result; |
153 | a27aa447 | Panagiotis Kanavos | |
154 | a27aa447 | Panagiotis Kanavos | Assert.AreEqual(upHash.TopHash, localHash.TopHash); |
155 | a27aa447 | Panagiotis Kanavos | |
156 | a27aa447 | Panagiotis Kanavos | Assert.AreEqual(upHash.Hashes,localHash.Hashes); |
157 | a27aa447 | Panagiotis Kanavos | } |
158 | a27aa447 | Panagiotis Kanavos | |
159 | a27aa447 | Panagiotis Kanavos | [Test] |
160 | a27aa447 | Panagiotis Kanavos | public void TestAsyncEquivalence() |
161 | a27aa447 | Panagiotis Kanavos | { |
162 | a27aa447 | Panagiotis Kanavos | |
163 | a27aa447 | Panagiotis Kanavos | var fileName = @"vlc-1.1.11-win32.exe"; |
164 | a27aa447 | Panagiotis Kanavos | var syncHash= Signature.CalculateTreeHash(Path.Combine(@"e:\pithos\", fileName), 4 * 1024 * 1024, "sha256"); |
165 | 422c9598 | Panagiotis Kanavos | var asyncHash = Signature.CalculateTreeHashAsync(Path.Combine(@"e:\pithos\", fileName), 4 * 1024 * 1024, "sha256", 2) |
166 | a27aa447 | Panagiotis Kanavos | .Result; |
167 | a27aa447 | Panagiotis Kanavos | |
168 | a27aa447 | Panagiotis Kanavos | Assert.AreEqual(syncHash.TopHash, asyncHash.TopHash); |
169 | a27aa447 | Panagiotis Kanavos | |
170 | a27aa447 | Panagiotis Kanavos | Assert.AreEqual(syncHash.Hashes,asyncHash.Hashes); |
171 | a27aa447 | Panagiotis Kanavos | } |
172 | 9c4346c9 | Panagiotis Kanavos | } |
173 | 9c4346c9 | Panagiotis Kanavos | |
174 | 9c4346c9 | Panagiotis Kanavos | } |