public Server Build( NodeConnectionInfo myConnectionInfo, KnownNodeStore knownNodeStore, NodeClientFactory nodeClientFactory, NodeClientStore nodeClientStore, VoteMemoryPool voteMemoryPool, Blockchain blockchain, Miner miner, VoteValidator voteValidator, BlockValidator blockValidator, BlockchainAdder blockchainAdder, IConsole console) { var handshakeService = new NodeService( knownNodeStore, nodeClientFactory, nodeClientStore, voteMemoryPool, blockchain, miner, voteValidator, blockValidator, blockchainAdder, console); var server = new Server { Services = { Node.BindService(handshakeService) }, Ports = { new ServerPort(myConnectionInfo.Ip, myConnectionInfo.Port, ServerCredentials.Insecure) } }; return(server); }
public void UpdatesExistingBooking() { Vote Vote = new Vote { VoteId = 1, EndDate = new DateTime(2017, 10, 10), YesNoQuestion = "Questions?", Deleted = false, Yes = 1, No = 2 }; //Arrange var mockUnitOfWork = new Mock <IUnitOfWork>(); mockUnitOfWork .Setup(un => un.VoteRepository.GetByID(It.IsAny <int>())) .Returns(Vote); //Además, seteamos las expectativas para los métodos que deben llamarse luego mockUnitOfWork.Setup(un => un.VoteRepository.Update(It.IsAny <Vote>())); mockUnitOfWork.Setup(un => un.Save()); VoteValidator VoteValidator = new VoteValidator(mockUnitOfWork.Object); //act VoteValidator.PutVote(1, Vote); //Assert mockUnitOfWork.Verify(un => un.VoteRepository.Update(It.IsAny <Vote>()), Times.Exactly(1)); mockUnitOfWork.Verify(un => un.Save(), Times.Exactly(1)); }
public async Task <ActionResult> Vote(FormVote formVote) { Logger.Init(); try { var vote = formVote.ToVote(UserName); if (!VoteValidator.VoteIsValid(vote, out var messages)) { var poll = PollDbManager.GetPollWithId(vote.PollId.ToString()); ViewBag.Poll = poll; ViewBag.UserVoted = poll.HasVoted(UserName); ViewBag.Errors = messages; return(View(formVote)); } await BcClient.SendVoteToBlockChain(vote); PollDbManager.AddVotedUser(formVote.PollGuid, Cryptography.Sha256(UserName)); return(Redirect("/")); } catch (Exception e) { Logger.Log.Error(e); return(Redirect("/ControlPanel")); } }
public static VoteValidator GetVoteValidatorInstance() { if (voteValidator == null) { voteValidator = new VoteValidator(GetUnitOfWofkInstance()); } return(voteValidator); }
public void GetVoteById() { //Arrange var mockUnitOfWork = new Mock <IUnitOfWork>(); //Esperamos que se llame al metodo Get del VoteRepository con un int mockUnitOfWork.Setup(un => un.VoteRepository.GetByID(It.IsAny <int>())); VoteValidator VoteValidator = new VoteValidator(mockUnitOfWork.Object); //Act Vote returnedVote = VoteValidator.GetVotesById(5); //Assert //mockUnitOfWork.VerifyAll(); }
public void CreateVoteTest() { //Arrange //Creo el mock object del unitOfWork var mockUnitOfWork = new Mock <IUnitOfWork>(); //Esperamos que se llame al método Insert del Repository con un Vote y luego al Save(); mockUnitOfWork.Setup(un => un.VoteRepository.Insert(It.IsAny <Vote>())); mockUnitOfWork.Setup(un => un.Save()); VoteValidator VoteValidator = new VoteValidator(mockUnitOfWork.Object); //Act VoteValidator.PostVote(new Vote()); //Assert mockUnitOfWork.VerifyAll(); }
public NodeService( KnownNodeStore knownNodeStore, NodeClientFactory nodeClientFactory, NodeClientStore nodeClientStore, VoteMemoryPool voteMemoryPool, Blockchain blockchain, Miner miner, VoteValidator voteValidator, BlockValidator blockValidator, BlockchainAdder blockchainAdder) { this.knownNodeStore = knownNodeStore; this.nodeClientFactory = nodeClientFactory; this.nodeClientStore = nodeClientStore; this.voteMemoryPool = voteMemoryPool; this.blockchain = blockchain; this.miner = miner; this.voteValidator = voteValidator; this.blockValidator = blockValidator; this.blockchainAdder = blockchainAdder; }
public void DoesntUpdateNonExistingVote() { //Arrange var mockUnitOfWork = new Mock <IUnitOfWork>(); mockUnitOfWork .Setup(un => un.VoteRepository.GetByID(It.IsAny <int>())).Returns(() => null); mockUnitOfWork.Setup(un => un.VoteRepository.Update(It.IsAny <Vote>())); //mockUnitOfWork.Setup(un => un.Save()); IVoteValidator VoteValidator = new VoteValidator(mockUnitOfWork.Object); //act VoteValidator.PutVote(0, new Vote() { }); //Assert //Retorna exception }
public static void Main(string[] args) { var password = args[0]; var dbFilepath = args[1]; var port = int.Parse(args[2]); var voterDb = new VoterDatabaseFacade(dbFilepath); var foundMiner = voterDb.TryGetVoterEncryptedKeyPair(password, out var encryptedKeyPair); if (!foundMiner) { Console.WriteLine("incorrect password: you may not mine!"); return; } var blockchain = new Blockchain(); // networking var registrarClientFactory = new RegistrarClientFactory(); var registrarClient = registrarClientFactory.Build(Localhost, RegistrarPort); var registrationRequestFactory = new RegistrationRequestFactory(); var myConnectionInfo = new NodeConnectionInfo(Localhost, port); var knownNodeStore = new KnownNodeStore(); var nodeClientFactory = new NodeClientFactory(); var handshakeRequestFactory = new HandshakeRequestFactory(blockchain); var nodeClientStore = new NodeClientStore(); var nodeServerFactory = new NodeServerFactory(); // votes var protoVoteFactory = new ProtoVoteFactory(); var voteForwarder = new VoteForwarder(nodeClientStore, protoVoteFactory); var voteMemoryPool = new VoteMemoryPool(voteForwarder); // blocks var merkleNodeFactory = new MerkleNodeFactory(); var merkleTreeFactory = new MerkleTreeFactory(merkleNodeFactory); var minerId = encryptedKeyPair.PublicKey.GetBase64String(); var blockFactory = new BlockFactory(merkleTreeFactory, minerId); var protoBlockFactory = new ProtoBlockFactory(protoVoteFactory); var blockForwarder = new BlockForwarder(nodeClientStore, protoBlockFactory); var voteValidator = new VoteValidator(blockchain, voterDb); var blockValidator = new BlockValidator(blockFactory, voteValidator); var blockchainAdder = new BlockchainAdder(blockchain, voteMemoryPool, blockForwarder); // mining var difficultyTarget = TargetFactory.Build(BlockHeader.DefaultBits); var miner = new Miner( blockchain, voteMemoryPool, difficultyTarget, blockFactory, blockchainAdder); // startup var nodeServer = nodeServerFactory.Build( myConnectionInfo, knownNodeStore, nodeClientFactory, nodeClientStore, voteMemoryPool, blockchain, miner, voteValidator, blockValidator, blockchainAdder); var boostrapper = new Bootstrapper( MinNetworkSize, knownNodeStore, nodeClientFactory, handshakeRequestFactory, nodeClientStore, registrarClient, registrationRequestFactory, nodeServer); Console.WriteLine("bootstrapping node network..."); boostrapper.Bootstrap(myConnectionInfo); Console.WriteLine($"{MinNetworkSize} nodes in network! bootstrapping complete"); Console.WriteLine("starting miner..."); miner.Start(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Press any key to quit"); Console.ReadKey(); }
public BlockValidator(BlockFactory blockFactory, VoteValidator voteValidator) { this.blockFactory = blockFactory; this.voteValidator = voteValidator; }
public static void Main(string[] args) { var configFilepath = args[0]; var password = args[1]; // config var nodeConfig = ConfigDeserializer.Deserialize <NodeConfig>(configFilepath); var console = ConsoleFactory.Build(nodeConfig.IsMiningNode); var ipAddress = IpAddressProvider.GetLocalIpAddress(); var electionEndTime = nodeConfig.IsClassDemo ? DateTime.Now.AddSeconds(120) : nodeConfig.ElectionEndTime; // password check var voterDb = new VoterDatabaseFacade(nodeConfig.VoterDbFilepath); var foundMiner = voterDb.TryGetVoterEncryptedKeyPair(password, out var encryptedKeyPair); if (!foundMiner) { Console.WriteLine("incorrect password: you may not mine!"); return; } // blockchain var blockchain = new Blockchain(); // networking var registrarClientFactory = new RegistrarClientFactory(); var registrarClient = registrarClientFactory.Build(ipAddress, RegistrarPort); var registrationRequestFactory = new RegistrationRequestFactory(); var myConnectionInfo = new NodeConnectionInfo(ipAddress, nodeConfig.Port); var knownNodeStore = new KnownNodeStore(); var nodeClientFactory = new NodeClientFactory(); var handshakeRequestFactory = new HandshakeRequestFactory(blockchain); var nodeClientStore = new NodeClientStore(); var nodeServerFactory = new NodeServerFactory(); // votes var protoVoteFactory = new ProtoVoteFactory(); var voteForwarder = new VoteForwarder(nodeClientStore, protoVoteFactory); var voteMemoryPool = new VoteMemoryPool(voteForwarder, console); // blocks var merkleNodeFactory = new MerkleNodeFactory(); var merkleTreeFactory = new MerkleTreeFactory(merkleNodeFactory); var minerId = encryptedKeyPair.PublicKey.GetBase64String(); var blockFactory = new BlockFactory(merkleTreeFactory, minerId); var protoBlockFactory = new ProtoBlockFactory(protoVoteFactory); var blockForwarder = new BlockForwarder(nodeClientStore, protoBlockFactory); var voteValidator = new VoteValidator(blockchain, voterDb, electionEndTime); var blockValidator = new BlockValidator(blockFactory, voteValidator); var blockchainAdder = new BlockchainAdder(blockchain, voteMemoryPool, blockForwarder, console); // mining var difficultyTarget = TargetFactory.Build(BlockHeader.DefaultBits); var miner = new Miner( blockchain, voteMemoryPool, difficultyTarget, blockFactory, blockchainAdder, console); // interaction var voteSerializer = new VoteSerializer(); var electionAlgorithmFactory = new ElectionAlgorithmFactory(voteSerializer); var electionAlgorithm = electionAlgorithmFactory.Build(nodeConfig.ElectionType); var electionResultProvider = new ElectionResultProvider( electionAlgorithm, electionEndTime, voteMemoryPool, blockchain); var voterTerminal = new VoterTerminal.VoterTerminal( voterDb, nodeConfig.Candidates.ToArray(), voteSerializer, voteMemoryPool, electionResultProvider, blockchain); var votingBooth = new VoterTerminal.VoterBooth(voterTerminal, nodeConfig.ElectionType); // startup var nodeServer = nodeServerFactory.Build( myConnectionInfo, knownNodeStore, nodeClientFactory, nodeClientStore, voteMemoryPool, blockchain, miner, voteValidator, blockValidator, blockchainAdder, console); var boostrapper = new Bootstrapper( MinNetworkSize, knownNodeStore, nodeClientFactory, handshakeRequestFactory, nodeClientStore, registrarClient, registrationRequestFactory, nodeServer); Console.WriteLine("bootstrapping node network..."); boostrapper.Bootstrap(myConnectionInfo); Console.WriteLine($"{MinNetworkSize} nodes in network! bootstrapping complete"); if (nodeConfig.IsMiningNode) { Console.WriteLine("starting miner..."); miner.Start(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Press any key to quit"); Console.ReadKey(); } else { votingBooth.LaunchBooth(); } }