Esempio n. 1
0
        public async Task GetCandidateList_Success()
        {
            //no candidate
            {
                var candidates = await Starter.GetCandidatesListAsync();

                candidates.Values.Count.ShouldBe(0);
            }

            //with candidate
            {
                var candidateInformation = TestUserHelper.GenerateNewUser();
                await Starter.TransferTokenAsync(candidateInformation, DPoSContractConsts.LockTokenForElection);

                var balance = await Starter.GetBalanceAsync(candidateInformation);

                Assert.Equal(DPoSContractConsts.LockTokenForElection, balance);

                // The candidate announce election.
                var candidate = Starter.CreateNewContractTester(candidateInformation);
                await candidate.AnnounceElectionAsync("AElfin");

                //Assert
                var candidatesList = await candidate.GetCandidatesListAsync();

                candidatesList.Values.Count.ShouldBe(1);
            }
        }
Esempio n. 2
0
        public async Task IsCandidate_Success()
        {
            var candidateLists = await Starter.GenerateCandidatesAsync(2);

            var nonCandidateInfo = TestUserHelper.GenerateNewUser();
            var candidate        = Starter.CreateNewContractTester(nonCandidateInfo.KeyPair);
            var candidateResult  = BoolValue.Parser.ParseFrom(
                await candidate.CallContractMethodAsync(
                    candidate.GetConsensusContractAddress(),
                    nameof(ConsensusContract.IsCandidate),
                    new PublicKey()
            {
                Hex = nonCandidateInfo.PublicKey
            }));

            candidateResult.Value.ShouldBeFalse();

            var candidateResult1 = BoolValue.Parser.ParseFrom(
                await candidate.CallContractMethodAsync(candidate.GetConsensusContractAddress(),
                                                        nameof(ConsensusContract.IsCandidate),
                                                        new PublicKey()
            {
                Hex = candidateLists[0].PublicKey
            })).Value;

            candidateResult1.ShouldBeTrue();
        }
Esempio n. 3
0
        public async Task Quit_Election_Success()
        {
            // The starter transfer a specific amount of tokens to candidate for further testing.
            var candidateInfo = TestUserHelper.GenerateNewUser();
            await Starter.TransferTokenAsync(candidateInfo, DPoSContractConsts.LockTokenForElection);

            // Check balance.
            {
                var balance = await Starter.GetBalanceAsync(candidateInfo);

                Assert.Equal(DPoSContractConsts.LockTokenForElection, balance);
            }

            // The candidate announce election.
            var candidate = Starter.CreateNewContractTester(candidateInfo);

            await candidate.AnnounceElectionAsync("AElfin");

            // Check balance.
            {
                var balance = await candidate.GetBalanceAsync(candidateInfo);

                balance.ShouldBe(0L);
            }

            // Check candidates list.
            {
                var candidatesList = await candidate.GetCandidatesListAsync();

                candidatesList.Values.ToList().Contains(candidateInfo).ShouldBeTrue();
            }

            // Quit election
            var result = await candidate.QuitElectionAsync();

            result.Status.ShouldBe(TransactionResultStatus.Mined);

            // Check candidates list.
            {
                var candidatesList = await candidate.GetCandidatesListAsync();

                candidatesList.Values.Contains(candidateInfo).ShouldBeFalse();
            }

            // Check balance.
            {
                var balance = await candidate.GetBalanceAsync(candidateInfo);

                balance.ShouldBe(DPoSContractConsts.LockTokenForElection);
            }
        }
Esempio n. 4
0
        public async Task Announce_Election_Twice()
        {
            // The starter transfer 200_000L
            var candidateInfo = TestUserHelper.GenerateNewUser();
            await Starter.TransferTokenAsync(candidateInfo, DPoSContractConsts.LockTokenForElection * 2);

            // Check balance.
            {
                var balance = await Starter.GetBalanceAsync(candidateInfo);

                balance.ShouldBe(DPoSContractConsts.LockTokenForElection * 2);
            }

            var candidate = Starter.CreateNewContractTester(candidateInfo);

            // Announce election.
            {
                var result = await candidate.AnnounceElectionAsync("AElfin");

                result.Status.ShouldBe(TransactionResultStatus.Mined);
            }

            // Check candidates list.
            {
                var candidatesList = await candidate.GetCandidatesListAsync();

                candidatesList.Values.ToList().Contains(candidateInfo).ShouldBeTrue();
            }

            // Check balance.
            {
                var balance = await Starter.GetBalanceAsync(candidateInfo);

                balance.ShouldBe(DPoSContractConsts.LockTokenForElection);
            }

            // Announce election again.
            {
                var result = await candidate.AnnounceElectionAsync("AElfinAgain");

                result.Status.ShouldBe(TransactionResultStatus.Failed);
            }

            // Check candidate list again.
            {
                var candidatesList = await candidate.GetCandidatesListAsync();

                candidatesList.Values.ToList().Contains(candidateInfo).ShouldBeTrue();
            }
        }
Esempio n. 5
0
        public async Task Vote_Not_Candidate()
        {
            const long pocketMoney = 10000;
            const long amount      = 10000;
            await Starter.GenerateCandidatesAsync(1);

            var voter = (await Starter.GenerateVotersAsync(1, pocketMoney)).AnyOne();

            var notCandidate = TestUserHelper.GenerateNewUser();
            var result       = await voter.Vote(notCandidate, amount, 100);

            result.Status.ShouldBe(TransactionResultStatus.Failed);
            result.Error.Contains(ContractErrorCode.Message[ContractErrorCode.InvalidOperation]).ShouldBeTrue();

            var balance = await Starter.GetBalanceAsync(voter.GetCallOwnerAddress());

            balance.ShouldBe(amount);
        }
Esempio n. 6
0
        public async Task Announce_Election_Success()
        {
            // The starter transfer a specific amount of tokens to candidate for further testing.
            var candidateInformation = TestUserHelper.GenerateNewUser();
            await Starter.TransferTokenAsync(candidateInformation, DPoSContractConsts.LockTokenForElection);

            var balance = await Starter.GetBalanceAsync(candidateInformation);

            Assert.Equal(DPoSContractConsts.LockTokenForElection, balance);

            // The candidate announce election.
            var candidate = Starter.CreateNewContractTester(candidateInformation);
            var result    = await candidate.AnnounceElectionAsync("AElfin");

            var candidatesList = await candidate.GetCandidatesListAsync();

            // Check the candidates list.
            Assert.Contains(candidate.KeyPair.PublicKey.ToHex(), candidatesList.Values.ToList());
        }
Esempio n. 7
0
        public async Task Announce_Election_WithoutEnough_Token()
        {
            // The starter transfer not enough token
            var candidateInformation = TestUserHelper.GenerateNewUser();
            await Starter.TransferTokenAsync(candidateInformation, 50_000L);

            var balance = await Starter.GetBalanceAsync(candidateInformation);

            balance.ShouldBe(50_000L);

            // The candidate announce election.
            var candidate = Starter.CreateNewContractTester(candidateInformation);
            var result    = await candidate.AnnounceElectionAsync("AElfin");

            result.Status.ShouldBe(TransactionResultStatus.Failed);
            result.Error.Contains("Insufficient balance").ShouldBeTrue();
            var candidatesList = await candidate.GetCandidatesListAsync();

            candidatesList.Values.ToList().Contains(candidateInformation).ShouldBeFalse();
        }
Esempio n. 8
0
        public async Task Quit_Election_NoOneAnnounce()
        {
            var candidateInfo = TestUserHelper.GenerateNewUser();
            await Starter.TransferTokenAsync(candidateInfo, DPoSContractConsts.LockTokenForElection);

            var balance = await Starter.GetBalanceAsync(candidateInfo);

            balance.ShouldBe(DPoSContractConsts.LockTokenForElection);

            // Didn't announce election, but call quit announce.
            candidateInfo = TestUserHelper.GenerateNewUser();
            var notCandidate = Starter.CreateNewContractTester(candidateInfo);
            var result       = await notCandidate.QuitElectionAsync();

            result.Status.ShouldBe(TransactionResultStatus.Failed);
            result.Error.Contains(ContractErrorCode.Message[ContractErrorCode.InvalidField]).ShouldBeTrue();

            balance = await Starter.GetBalanceAsync(candidateInfo);

            balance.ShouldBe(0L);
        }