コード例 #1
0
ファイル: Tests.cs プロジェクト: MZhoume/PaxosExercise
        public async Task SeenHashShouldReturnStoredMessage()
        {
            var hash = "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae";
            var dto  = new HashDto()
            {
                Hash  = hash,
                Value = "foo"
            };

            var repo = new Mock <IServiceRepository>();

            repo.Setup(r => r.HashExistsAsync(hash)).ReturnsAsync(true);
            repo.Setup(r => r.FindHashAsync(hash)).ReturnsAsync(dto);
            var mapper = this.GetConfiguredMapper();
            var logger = Mock.Of <ILogger <MessageController> >();

            var controller = new MessageController(repo.Object, mapper, logger);

            var response = await controller.GetMessage(hash);

            var objectResult = Assert.IsType <OkObjectResult>(response.Result);
            var result       = Assert.IsType <MessageResponseModel>(objectResult.Value);

            Assert.Equal("foo", result.Message);
        }
        public override void SetRangeInHash(string key, IEnumerable <KeyValuePair <string, string> > keyValuePairs)
        {
            Guard.ArgumentNotNull(key, "key");
            Guard.ArgumentNotNull(keyValuePairs, "keyValuePairs");

            foreach (var kvp in keyValuePairs)
            {
                var local = kvp;
                QueueCommand(() =>
                {
                    var hash = _data.GetEnumeration <HashDto>().SingleOrDefault(h => h.Key == key && h.Field == local.Key);
                    if (hash == null)
                    {
                        hash = new HashDto
                        {
                            Id    = AutoIncrementIdGenerator.GenerateId(typeof(HashDto)),
                            Key   = key,
                            Field = local.Key
                        };

                        _data.Create(hash);
                    }

                    hash.Value = local.Value;
                });
            }
        }
コード例 #3
0
        public void ExpireHash_SetsHashExpirationData()
        {
            var hash1 = new HashDto {
                Key = "Hash1"
            };

            _database.JobGraph.InsertOne(hash1);

            var hash2 = new HashDto {
                Key = "Hash2"
            };

            _database.JobGraph.InsertOne(hash2);

            Commit(x => x.ExpireHash(hash1.Key, TimeSpan.FromDays(1)));

            var testHash1 = GetTestHash(_database, hash1.Key);

            Assert.True(DateTime.UtcNow.AddMinutes(-1) < testHash1.ExpireAt &&
                        testHash1.ExpireAt <= DateTime.UtcNow.AddDays(1));

            var testHash2 = GetTestHash(_database, hash2.Key);

            Assert.Null(testHash2.ExpireAt);
        }
コード例 #4
0
        public void PersistHash_OfGivenKey_ClearsTheHashExpirationData()
        {
            // ARRANGE
            var hash1 = new HashDto {
                Key = "Hash1", ExpireAt = DateTimeOffset.UtcNow
            };
            var hash2 = new HashDto {
                Key = "Hash2", ExpireAt = DateTimeOffset.UtcNow
            };

            _realm.Write(() =>
            {
                _realm.Add(hash1);
                _realm.Add(hash2);
            });


            // ACT
            _transaction.PersistHash(hash1.Key);
            _transaction.Commit();

            // ASSERT
            var testSet1 = _realm.Find <HashDto>(hash1.Key);

            Assert.Null(testSet1.ExpireAt);

            var testSet2 = _realm.Find <HashDto>(hash2.Key);

            Assert.NotNull(testSet2.ExpireAt);
        }
コード例 #5
0
        public void GetAllEntriesFromHash_ReturnsAllKeysAndTheirValues()
        {
            var hash1 = new HashDto("some-hash");

            hash1.Fields.Add(new FieldDto("Key1", "Value1"));
            hash1.Fields.Add(new FieldDto("Key2", "Value2"));

            var hash2 = new HashDto("another-hash");

            hash2.Fields.Add(new FieldDto("Key3", "Value3"));
            var realm = _storage.GetRealm();

            realm.Write(() =>
            {
                realm.Add(hash1);
                realm.Add(hash2);
            });


            // Act
            var result = _connection.GetAllEntriesFromHash("some-hash");

            // Assert
            Assert.NotNull(result);
            Assert.AreEqual(2, result.Count);
            Assert.AreEqual("Value1", result["Key1"]);
            Assert.AreEqual("Value2", result["Key2"]);
        }
コード例 #6
0
        public void GetValueFromHash_ReturnsValue_OfAGivenField()
        {
            var realm = _storage.GetRealm();
            var hash1 = new HashDto("hash-1");

            hash1.Fields.Add(new FieldDto("field-1", "1"));

            var hash2 = new HashDto("hash-2");

            hash2.Fields.Add(new FieldDto("field-2", "2"));

            var hash3 = new HashDto("hash-3");

            hash3.Fields.Add(new FieldDto("field-1", "3"));

            realm.Write(() =>
            {
                realm.Add(hash1);
                realm.Add(hash2);
                realm.Add(hash3);
            });

            // Act
            var result = _connection.GetValueFromHash("hash-1", "field-1");

            // Assert
            Assert.AreEqual("1", result);
        }
コード例 #7
0
        public Task AddHashAsync(HashDto dto)
        {
            this._logger.LogInformation(
                "Adding a new hash entry for message {0} with value {1}.",
                dto.Value,
                dto.Hash);

            this._context.Hashes.Add(dto);
            return(Task.CompletedTask);
        }
コード例 #8
0
        public override string GetValueFromHash(string key, string name)
        {
            if (key == null)
            {
                throw new ArgumentNullException("key");
            }

            if (name == null)
            {
                throw new ArgumentNullException("name");
            }

            HashDto result = AsyncHelper.RunSync(() => _database.Hash
                                                 .Find(Builders <HashDto> .Filter.Eq(_ => _.Key, key) & Builders <HashDto> .Filter.Eq(_ => _.Field, name))
                                                 .FirstOrDefaultAsync());

            return(result != null ? result.Value : null);
        }
コード例 #9
0
        public JsonResult Login([FromBody] HashDto dto)
        {
            object      ret    = null;
            HeaderModel header = null;

            string[] roles = null;

            if (!String.IsNullOrEmpty(dto?.hash))
            {
                header = SQLData.GetHeaderByNonce(dto.hash);

                roles = header.SelfProfile?.Roles.Split(',') ?? new string[] { "User" };

                ret = new { id = header?.HeaderId, roles = roles };
            }

            if (header != null)
            {
                var cookieOptions = new CookieOptions()
                {
                    Path     = "/",
                    HttpOnly = false,
                    Expires  = DateTimeOffset.UtcNow.AddDays(int.Parse(_configuration["JwtExpireDays"]))
                               //SameSite = SameSiteMode.None,
                               //Domain = "localhost",
                               //Secure = false
                };

                Response.Cookies.Append("authtoken",
                                        GenerateJwtToken(header.HeaderId, roles),
                                        cookieOptions);
                //else
                //throw new ApplicationException("INVALID_LOGIN_ATTEMPT");
                //TODO: implement errorhandling middleware, concerning 500s and nginx route errors as well
                ViewBag.User  = header.HeaderId;
                ViewBag.Roles = header.SelfProfile.Roles;
            }

            return(new JsonResult(ret));
        }
コード例 #10
0
        public async Task <HeaderViewModel> Validate([FromBody] HashDto dto)
        {
            if (_user.IsAuthenticated)
            {
                ViewBag.User = _user.User; ViewBag.Roles = _user.Roles;
            }

            HeaderModel header = SQLData.GetHeaderById(dto.hash);

            UserProfileModel validatorProfile = SQLData.GetProfileById(_user.User);

            header.ValidatorUuid = validatorProfile.Id;
            header.ValidatorName = validatorProfile.Name;

            if (String.IsNullOrEmpty(header.ValidatorLegitimationId) || String.IsNullOrEmpty(header.IssuerUuid))
            {
                header.IssuerUuid = validatorProfile.Id;
                header.IssuerName = validatorProfile.Name;
            }

            header.ValidationCounter = "1";

            string contractAddress  = _configuration["ethContractAddress"];
            string abi              = _configuration["ethAbi"];
            string senderAddress    = _configuration["ethSenderAddress"];
            string senderPrimaryKey = _configuration["ethSenderPK"];

            string ethNode = _configuration["ethNode"];

            Ethereum eth = new Ethereum(contractAddress, abi, senderAddress, senderPrimaryKey, ethNode);

            header = await eth.SendToNetwork(header);

            SQLData.UpdateHeader(header);

            header = SQLData.GetHeaderWithImageById(header.HeaderId);

            return(new HeaderViewModel(header, _configuration));
        }
コード例 #11
0
        public void PersistHash_ClearsTheHashExpirationData()
        {
            ConnectionUtils.UseConnection(database =>
            {
                var hash1 = new HashDto {
                    Key = "Hash1", Value = "value1", ExpireAt = DateTime.UtcNow
                };
                database.StateData.InsertOne(hash1);

                var hash2 = new HashDto {
                    Key = "Hash2", Value = "value2", ExpireAt = DateTime.UtcNow
                };
                database.StateData.InsertOne(hash2);

                Commit(database, x => x.PersistHash(hash1.Key));

                var testHash1 = GetTestHash(database, hash1.Key);
                Assert.Null(testHash1.ExpireAt);

                var testHash2 = GetTestHash(database, hash2.Key);
                Assert.NotNull(testHash2.ExpireAt);
            });
        }
コード例 #12
0
        public void ExpireHash_SetsHashExpirationData()
        {
            ConnectionUtils.UseConnection(database =>
            {
                var hash1 = new HashDto {
                    Key = "Hash1", Value = "value1"
                };
                database.StateData.InsertOne(hash1);

                var hash2 = new HashDto {
                    Key = "Hash2", Value = "value2"
                };
                database.StateData.InsertOne(hash2);

                Commit(database, x => x.ExpireHash(hash1.Key, TimeSpan.FromDays(1)));

                var testHash1 = GetTestHash(database, hash1.Key);
                Assert.True(DateTime.UtcNow.AddMinutes(-1) < testHash1.ExpireAt && testHash1.ExpireAt <= DateTime.UtcNow.AddDays(1));

                var testHash2 = GetTestHash(database, hash2.Key);
                Assert.Null(testHash2.ExpireAt);
            });
        }
コード例 #13
0
        public void PersistHash_ClearsTheHashExpirationData()
        {
            UseConnection(database =>
            {
                var hash1 = new HashDto {
                    Key = "Hash1", Value = "value1", ExpireAt = database.GetServerTimeUtc()
                };
                database.Hash.InsertOne(hash1);

                var hash2 = new HashDto {
                    Key = "Hash2", Value = "value2", ExpireAt = database.GetServerTimeUtc()
                };
                database.Hash.InsertOne(hash2);

                Commit(database, x => x.PersistHash(hash1.Key));

                var testHash1 = GetTestHash(database, hash1.Key);
                Assert.Null(testHash1.ExpireAt);

                var testHash2 = GetTestHash(database, hash2.Key);
                Assert.NotNull(testHash2.ExpireAt);
            });
        }
コード例 #14
0
        public async Task <HashDto> Remove(string arg,
                                           bool force = false)
        {
            var cid = await DfsService.BlockApi.RemoveAsync(arg, true, Cancel);

            var dto = new HashDto();

            if (cid == null && !force)
            {
                dto.Hash  = arg;
                dto.Error = "block not found";
            }
            else if (cid == null)
            {
                return(null);
            }
            else
            {
                dto.Hash = cid;
            }

            return(dto);
        }
コード例 #15
0
        public void PersistHash_ClearsTheHashExpirationData()
        {
            var hash1 = new HashDto {
                Key = "Hash1", ExpireAt = DateTime.UtcNow
            };

            _database.JobGraph.InsertOne(hash1);

            var hash2 = new HashDto {
                Key = "Hash2", ExpireAt = DateTime.UtcNow
            };

            _database.JobGraph.InsertOne(hash2);

            Commit(x => x.PersistHash(hash1.Key));

            var testHash1 = GetTestHash(_database, hash1.Key);

            Assert.Null(testHash1.ExpireAt);

            var testHash2 = GetTestHash(_database, hash2.Key);

            Assert.NotNull(testHash2.ExpireAt);
        }