2 using System.Collections.Generic;
5 using System.Security.Cryptography;
7 using System.Threading;
8 using System.Threading.Tasks;
10 using Newtonsoft.Json;
13 namespace Pithos.Core.Test
16 public class SignatureTest
20 public void TestCreate()
22 var hasher = HashAlgorithm.Create("sha256");
23 Assert.IsNotNull(hasher);
27 public void TestHashmapCreation()
29 var file = "e:\\pithos\\vlc-1.1.11-win32.exe";
31 decimal blockSize = 4*1024*1024;
33 var fileSize = new FileInfo(file).Length;
34 var numBlocks = decimal.Ceiling(fileSize/blockSize);
36 var md5 = Signature.CalculateMD5(file);
38 var hash1 = Signature.CalculateTreeHashAsync(file, (int) blockSize,"sha256").Result;
39 Assert.IsNotNull(hash1.Hashes);
40 Assert.AreEqual(numBlocks, hash1.Hashes.Count());
42 var topHash = hash1.TopHash;
43 var hashString = BytesToStr(topHash);
45 var stringHashes = (from hash in hash1.Hashes
46 select BytesToStr(hash)).ToList();
47 var hashes = JsonConvert.SerializeObject(stringHashes);
48 Assert.IsNotNull(topHash);
52 public void TestHashmapStorage()
54 var file = "e:\\pithos\\vlc-1.1.11-win32.exe";
56 decimal blockSize = 4*1024*1024;
58 var fileSize = new FileInfo(file).Length;
59 var numBlocks = decimal.Ceiling(fileSize/blockSize);
61 var md5 = Signature.CalculateMD5(file);
63 var hash1 = Signature.CalculateTreeHashAsync(file, (int) blockSize, "sha256").Result;
64 hash1.FileId = Guid.NewGuid();
65 var task = hash1.Save(@"e:\")
66 .ContinueWith(_ => TreeHash.LoadTreeHash(@"e:\", hash1.FileId)).Unwrap();
67 task.ContinueWith(t =>
70 Assert.AreEqual(hash1.Hashes, hash.Hashes.ToArray());
75 public static string BytesToStr(byte[] bytes)
77 var str = new StringBuilder();
79 foreach (byte t in bytes)
80 str.AppendFormat("{0:X2}", t);
82 return str.ToString();
87 public void TestTopHashEmpty()
89 using (var hasher = HashAlgorithm.Create("sha256"))
91 var hashEmpty = hasher.ComputeHash(new byte[] {});
93 var empty = new List<byte[]>();
94 var hash = Signature.CalculateTopHash(empty,"sha256");