示例#1
0
        public void UserInfo_ToLowerCase_Sha256()
        {
            var fingerprint = FingerprintBuilder <User>
                              .Create(SHA256.Create().ComputeHash)
                              .For(p => p.Firstname, true, true)
                              .For(p => p.Lastname, true, true)
                              .Build();

            var user = new User
            {
                Firstname = "John",
                Lastname  = "Doe"
            };

            const string expectedHash = "d53e54efc3c01db03d6494f95880d53349951a3af3fd6b1fd9459605ad3baeb7";

            var hash = fingerprint(user).ToLowerHexString();

            Assert.Equal(expectedHash, hash);

            user.Firstname = user.Firstname.ToLowerInvariant();
            user.Lastname  = user.Lastname.ToLowerInvariant();

            var hash1 = fingerprint(user).ToLowerHexString();

            Assert.Equal(expectedHash, hash1);
        }
示例#2
0
        public void Fingerprints_are_equal_irrespective_of_property_order()
        {
            var calculateFingerprint1 =
                FingerprintBuilder
                .For <Person>()
                .Add(x => x.Name)
                .Add(x => x.Age)
                .Build(SHA256.ComputeHash);

            var calculateFingerprint2 =
                FingerprintBuilder
                .For <Person>()
                .Add(x => x.Age)
                .Add(x => x.Name)
                .Build(SHA256.ComputeHash);

            var fingerprint1 = calculateFingerprint1(new Person {
                Name = "John", Age = 40
            });
            var fingerprint2 = calculateFingerprint2(new Person {
                Name = "John", Age = 40
            });

            Assert.True(StructuralComparisons.StructuralEqualityComparer.Equals(fingerprint1, fingerprint2));
        }
示例#3
0
        public void UserInfo_ToLowerCase_Sha1()
        {
            var fingerprint = FingerprintBuilder <User>
                              .Create(SHA1.Create().ComputeHash)
                              .For(p => p.Firstname, true, true)
                              .For(p => p.Lastname, true, true)
                              .Build();

            var user = new User
            {
                Firstname = "John",
                Lastname  = "Doe"
            };

            const string expectedHash = "b40d1e3afbe61730fa1daae2a539ad730ea09b0a";

            var hash = fingerprint(user).ToLowerHexString();

            Assert.Equal(expectedHash, hash);

            user.Firstname = user.Firstname.ToLowerInvariant();
            user.Lastname  = user.Lastname.ToLowerInvariant();

            var hash1 = fingerprint(user).ToLowerHexString();

            Assert.Equal(expectedHash, hash1);
        }
示例#4
0
 public User()
 {
     _fingerprintBuilder = FingerprintBuilder <User>
                           .Create(SHA512.Create().ComputeHash)
                           .For(x => x.Id)
                           .For(x => x.Firstname)
                           .For(x => x.Lastname)
                           .Build();
 }
        public void Setup()
        {
            _user = new User
            {
                FirstName = "John",
                LastName  = "Doe"
            };

            _sha512 = FingerprintBuilder <User>
                      .Create(SHA512.Create().ComputeHash)
                      .For(p => p.FirstName)
                      .For(p => p.LastName)
                      .Build();
        }
示例#6
0
        public async Task FullSimulation()
        {
            // Prepare some test data

            var range_20550101_20550102 = new Range <DateTime>(min: (2055, 1, 1).ToDate().AtNoon(), max: (2055, 1, 2).ToDate().AtNoon());
            var range_20550102_20550103 = new Range <DateTime>(min: (2055, 1, 2).ToDate().AtNoon(), max: (2055, 1, 3).ToDate().AtNoon());
            var range_20550104_20550105 = new Range <DateTime>(min: (2055, 1, 4).ToDate().AtNoon(), max: (2055, 1, 5).ToDate().AtNoon());

            var _fingerprint =
                FingerprintBuilder <TestQueue1Item>
                .Create(SHA256.ComputeSHA256)
                .For(x => x.Name, x => x.Trim().ToUpper())
                .Build();

            var batch2 = new[] { new TestQueue1Item {
                                     Name = "Foo"
                                 }, new TestQueue1Item {
                                     Name = "Bar"
                                 } }.Select(x => new NewMessage
            {
                Body        = x.Serialize(),
                Fingerprint = _fingerprint(x)
            });

            #region Test1: Enqueue 2 + Peek 1 + Dequeue 1 + Enqueue 2

            // Enqueue the complete batch
            await _messages.EnqueueAsync(QueueNames.TestQueue1, range_20550101_20550102, batch2, TimeSpan.Zero);

            Assert.AreEqual(1, await _messages.GetTimeRangeCountAsync(QueueNames.TestQueue1));
            Assert.AreEqual(2, await _messages.GetPendingMessageCountAsync(QueueNames.TestQueue1));

            var peekTestQueue1 = await _messages.PeekAsync(QueueNames.TestQueue1, 1);

            Assert.AreEqual(1, peekTestQueue1.Count);

            var item = peekTestQueue1.Single().Body.Deserialize <TestQueue1Item>();

            Assert.AreEqual("Foo", item.Name);

            await _messages.DequeueAsync(QueueNames.TestQueue1, new[] { peekTestQueue1.Single().Id });

            // Enqueue again to make sure it's not repeated
            await _messages.EnqueueAsync(QueueNames.TestQueue1, range_20550101_20550102, batch2, TimeSpan.Zero);

            Assert.AreEqual(2, await _messages.GetTimeRangeCountAsync(QueueNames.TestQueue1));
            Assert.AreEqual(1, await _messages.GetPendingMessageCountAsync(QueueNames.TestQueue1));

            #endregion
        }
示例#7
0
        public void Fingerprints_are_not_equal_for_objects_with_different_values()
        {
            var calculateFingerprint =
                FingerprintBuilder
                .For <Person>()
                .Add(x => x.Name)
                .Add(x => x.Age)
                .Build(SHA256.ComputeHash);

            var fingerprint1 = calculateFingerprint(new Person {
                Name = "John", Age = 40
            });
            var fingerprint2 = calculateFingerprint(new Person {
                Name = "Johnny", Age = 41
            });

            Assert.False(StructuralComparisons.StructuralEqualityComparer.Equals(fingerprint1, fingerprint2));
        }
示例#8
0
        public void Fingerprints_are_equal_for_objects_with_similar_values()
        {
            var calculateFingerprint =
                FingerprintBuilder
                .For <Person>()
                .Add(x => x.Name, StringOptions.IgnoreCase | StringOptions.IgnoreWhitespace)
                .Add(x => x.Age)
                .Build(SHA256.ComputeHash);

            var fingerprint1 = calculateFingerprint(new Person {
                Name = "John", Age = 40
            });
            var fingerprint2 = calculateFingerprint(new Person {
                Name = " JOHN   ", Age = 40
            });

            Assert.True(StructuralComparisons.StructuralEqualityComparer.Equals(fingerprint1, fingerprint2));
        }
示例#9
0
        public void UserInfo_Sha1_Null()
        {
            var fingerprint = FingerprintBuilder <User>
                              .Create(SHA1.Create().ComputeHash)
                              .For(p => p.Firstname)
                              .For(p => p.Lastname)
                              .Build();

            var user = new User
            {
                Firstname = "John",
                Lastname  = null
            };

            var hash = fingerprint(user).ToLowerHexString();

            Assert.Equal("5ab5aeba11346413348fb7c9361058e016ecf3ca", hash);
        }
示例#10
0
        public void UserInfo_Sha1()
        {
            var fingerprint = FingerprintBuilder <User>
                              .Create(SHA1.Create().ComputeHash)
                              .For(p => p.Firstname)
                              .For(p => p.Lastname)
                              .Build();

            var user = new User
            {
                Firstname = "John",
                Lastname  = "Doe"
            };

            var hash = fingerprint(user).ToLowerHexString();

            Assert.Equal("a4aca7cce7e349205f08a25a38267ffcf05c60ed", hash);
        }
示例#11
0
        public void UserInfo_EmailsString_Sha1()
        {
            var fingerprint = FingerprintBuilder <ExtendedUser>
                              .Create(SHA1.Create().ComputeHash)
                              .For(p => p.Firstname)
                              .For(p => p.Lastname)
                              .For(p => p.Emails, emails => string.Join("|", emails))
                              .Build();

            var user = new ExtendedUser
            {
                Firstname = "John",
                Lastname  = "Doe",
                Emails    = new[] { "*****@*****.**", "*****@*****.**" }
            };

            var hash = fingerprint(user).ToLowerHexString();

            Assert.Equal("472ea61f0548a37904f0c95afa526e87061d8e49", hash);
        }
示例#12
0
        public void UserInfo_Sha1()
        {
            var fingerprint = FingerprintBuilder <ExtendedUser>
                              .Create(SHA1.Create().ComputeHash)
                              .For(p => p.Firstname)
                              .For(p => p.Lastname)
                              .For(p => p.Emails)
                              .Build();

            var user = new ExtendedUser
            {
                Firstname = "John",
                Lastname  = "Doe",
                Emails    = new[] { "*****@*****.**", "*****@*****.**" }
            };

            var hash = fingerprint(user).ToLowerHexString();

            Assert.Equal("46197041b3a64b3c71f3d1813a0b7a478a3a7a92", hash);
        }
示例#13
0
        public void UserInfo_Sha256()
        {
            var fingerprint = FingerprintBuilder <User>
                              .Create(SHA256.Create().ComputeHash)
                              .For(p => p.Firstname)
                              .For(p => p.Lastname)
                              .Build();

            var user = new User
            {
                Firstname = "John",
                Lastname  = "Doe"
            };

            var hashLower = fingerprint(user).ToLowerHexString();
            var hashUpper = fingerprint(user).ToUpperHexString();

            Assert.Equal("00b93d68198f13544cf71b96b7dcfc29a33014d20c0878cc434617482b65d2d2", hashLower);
            Assert.Equal("00b93d68198f13544cf71b96b7dcfc29a33014d20c0878cc434617482b65d2d2".ToUpperInvariant(), hashUpper);
        }
示例#14
0
        public void UserInfo_Sha512()
        {
            var fingerprint = FingerprintBuilder <User>
                              .Create(SHA512.Create().ComputeHash)
                              .For(p => p.Firstname)
                              .For(p => p.Lastname)
                              .Build();

            var user = new User
            {
                Firstname = "John",
                Lastname  = "Doe"
            };

            var hashLower = fingerprint(user).ToLowerHexString();
            var hashUpper = fingerprint(user).ToUpperHexString();

            Assert.Equal("bc09471d63bdb0604a30cb0de118ec2b48153a1b7fe813fcad0974c44094b0a480bc3d158b52a6842756994c437afb7742d973371be440a46c2b5cfeb5d7dcd6", hashLower);
            Assert.Equal("bc09471d63bdb0604a30cb0de118ec2b48153a1b7fe813fcad0974c44094b0a480bc3d158b52a6842756994c437afb7742d973371be440a46c2b5cfeb5d7dcd6".ToUpperInvariant(), hashUpper);
        }
示例#15
0
        public void Ignores_null_values()
        {
            var calculateFingerprint =
                FingerprintBuilder
                .For <Person>()
                .Add(x => x.Name)
                .Add(x => x.Age)
                .Build(SHA256.ComputeHash);

            var fingerprint1 = calculateFingerprint(new Person {
                Name = null, Age = 40
            });
            var fingerprint2 = calculateFingerprint(new Person {
                Name = null, Age = 40
            });
            var fingerprint3 = calculateFingerprint(new Person {
                Name = "John", Age = 40
            });

            Assert.True(StructuralComparisons.StructuralEqualityComparer.Equals(fingerprint1, fingerprint2));
            Assert.False(StructuralComparisons.StructuralEqualityComparer.Equals(fingerprint1, fingerprint3));
        }
示例#16
0
 public void Throws_when_builder_does_not_have_any_value_selectors()
 {
     Assert.ThrowsAny <DynamicException>(() => FingerprintBuilder.For <Person>().Build(SHA256.ComputeHash));
 }