Statistics
| Branch: | Revision:

root / trunk / Pithos.Network.Test / SignatureTest.cs @ a27aa447

History | View | Annotate | Download (4.1 kB)

1
using System;
2
using System.Collections.Generic;
3
using System.IO;
4
using System.Linq;
5
using System.Security.Cryptography;
6
using System.Text;
7
using System.Threading;
8
using System.Threading.Tasks;
9
using NUnit.Framework;
10
using Newtonsoft.Json;
11
using Pithos.Network;
12

    
13
namespace Pithos.Core.Test
14
{
15
    [TestFixture]
16
    public class SignatureTest
17
    {
18

    
19
        [Test]
20
        public void TestCreate()
21
        {
22
            var hasher = HashAlgorithm.Create("sha256");
23
            Assert.IsNotNull(hasher);
24
        }
25

    
26
        [Test]
27
        public void TestHashmapCreation()
28
        {
29
            var file = "e:\\pithos\\vlc-1.1.11-win32.exe";
30

    
31
            decimal blockSize = 4*1024*1024;
32

    
33
            var fileSize = new FileInfo(file).Length;
34
            var numBlocks = decimal.Ceiling(fileSize/blockSize);
35

    
36
            var md5 = Signature.CalculateMD5(file);            
37

    
38
            var hash1 = Signature.CalculateTreeHashAsync(file, (int) blockSize,"sha256").Result;
39
            Assert.IsNotNull(hash1.Hashes);
40
            Assert.AreEqual(numBlocks, hash1.Hashes.Count());
41

    
42
            var topHash = hash1.TopHash;
43
            var hashString = BytesToStr(topHash);
44

    
45
            var stringHashes = (from hash in hash1.Hashes
46
                               select BytesToStr(hash)).ToList();
47
            var hashes = JsonConvert.SerializeObject(stringHashes);
48
            Assert.IsNotNull(topHash);
49
        }
50
        
51
        [Test]
52
        public void TestHashmapStorage()
53
        {
54
            var file = "e:\\pithos\\vlc-1.1.11-win32.exe";
55

    
56
            decimal blockSize = 4*1024*1024;
57

    
58
            var fileSize = new FileInfo(file).Length;
59
            var numBlocks = decimal.Ceiling(fileSize/blockSize);
60

    
61
            var md5 = Signature.CalculateMD5(file);
62

    
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 =>
68
            {                
69
                var hash = t.Result;
70
                Assert.AreEqual(hash1.Hashes, hash.Hashes.ToArray());
71
                int i = 0;
72
            }).Wait();
73
        }
74

    
75
        public static string BytesToStr(byte[] bytes)
76
        {
77
            var str = new StringBuilder();
78

    
79
            foreach (byte t in bytes)
80
                str.AppendFormat("{0:X2}", t);
81
            
82
            return str.ToString();
83
        }
84

    
85

    
86
        [Test]
87
        public void TestTopHashEmpty()
88
        {
89
            using (var hasher = HashAlgorithm.Create("sha256"))
90
            {
91
                var hashEmpty = hasher.ComputeHash(new byte[] {});                
92

    
93
                var empty = new List<byte[]>();
94
                var hash = Signature.CalculateTopHash(empty,"sha256");
95
                Assert.IsNull(hash);
96
            }
97
        }
98

    
99
        [Test]
100
        public void TestHashMapsEqual()
101
        {
102

    
103
            CloudFilesClient client = new CloudFilesClient();
104
            client.AuthenticationUrl = @"https://pithos.dev.grnet.gr";
105
            client.UsePithos = true;
106
            client.Authenticate("890329@vho.grnet.gr", "24989dce4e0fcb072f8cb60c8922be19");
107
            var fileName = @"vlc-1.1.11-win32.exe";
108
            var localHash= Signature.CalculateTreeHashAsync(Path.Combine(@"e:\pithos\", fileName), 4 * 1024 * 1024, "sha256").Result;
109
            var upHash= client.GetHashMap("pithos", fileName).Result;
110

    
111
            Assert.AreEqual(upHash.TopHash, localHash.TopHash);
112

    
113
            Assert.AreEqual(upHash.Hashes,localHash.Hashes);
114
        }
115
        
116
        [Test]
117
        public void TestAsyncEquivalence()
118
        {
119

    
120
            var fileName = @"vlc-1.1.11-win32.exe";
121
            var syncHash= Signature.CalculateTreeHash(Path.Combine(@"e:\pithos\", fileName), 4 * 1024 * 1024, "sha256");
122
            var asyncHash = Signature.CalculateTreeHashAsync(Path.Combine(@"e:\pithos\", fileName), 4 * 1024 * 1024, "sha256")
123
                .Result;
124

    
125
            Assert.AreEqual(syncHash.TopHash, asyncHash.TopHash);
126

    
127
            Assert.AreEqual(syncHash.Hashes,asyncHash.Hashes);
128
        }
129
    }
130

    
131
}