Exemplo n.º 1
0
        public void RequestBallotAndAnnounceBallotReceivedAndRevokedTest()
        {
            var vn  = new VoterNumber(250000);
            var cpr = new CPR(2312881234);

            Assert.That(Peer1.Database[vn, cpr] == BallotStatus.Unavailable);
            Assert.That(Peer2.Database[vn, cpr] == BallotStatus.Unavailable);
            Assert.That(Peer3.Database[vn, cpr] == BallotStatus.Unavailable);
            Assert.That(Manager.Database[vn, cpr] == BallotStatus.Unavailable);
            var data = new List <EncryptedVoterData> {
                new EncryptedVoterData(new CipherText(Peer1.Crypto.AsymmetricEncrypt(Bytes.From(vn.Value), Peer1.Crypto.VoterDataEncryptionKey)), new CipherText(Peer1.Crypto.AsymmetricEncrypt(Bytes.From(cpr.Value), Peer1.Crypto.VoterDataEncryptionKey)), new CipherText(Peer1.Crypto.AsymmetricEncrypt(Bytes.From(cpr.Value + (uint)BallotStatus.NotReceived), Peer1.Crypto.VoterDataEncryptionKey)))
            };

            Peer1.Database.Import(data);
            Peer2.Database.Import(data);
            Peer3.Database.Import(data);
            Manager.Database.Import(data);


            Assert.That(Peer1.Database[vn, cpr] == BallotStatus.NotReceived);
            Assert.That(Peer2.Database[vn, cpr] == BallotStatus.NotReceived);
            Assert.That(Peer3.Database[vn, cpr] == BallotStatus.NotReceived);
            Assert.That(Manager.Database[vn, cpr] == BallotStatus.NotReceived);
            var managerListenerResult = ManagerListener.BeginInvoke(null, null);

            AsyncManagerAnnounce(() => Peer1.RequestBallot(vn, cpr));
            ManagerListener.EndInvoke(managerListenerResult);
            Assert.That(Peer1.Database[vn, cpr] == BallotStatus.Received);
            Assert.That(Peer2.Database[vn, cpr] == BallotStatus.Received);
            Assert.That(Peer3.Database[vn, cpr] == BallotStatus.Received);
            Assert.That(Manager.Database[vn, cpr] == BallotStatus.Received);
            AsyncManagerAnnounce(() => Manager.AnnounceRevokeBallot(vn, cpr));
            Assert.That(Peer1.Database[vn, cpr] == BallotStatus.NotReceived);
            Assert.That(Peer2.Database[vn, cpr] == BallotStatus.NotReceived);
            Assert.That(Peer3.Database[vn, cpr] == BallotStatus.NotReceived);
            Assert.That(Manager.Database[vn, cpr] == BallotStatus.NotReceived);

            managerListenerResult = ManagerListener.BeginInvoke(null, null);
            AsyncManagerAnnounce(() => Peer1.RequestBallot(cpr, "yo boii"));
            ManagerListener.EndInvoke(managerListenerResult);
            Assert.That(Peer1.Database[vn, cpr] == BallotStatus.Received);
            Assert.That(Peer2.Database[vn, cpr] == BallotStatus.Received);
            Assert.That(Peer3.Database[vn, cpr] == BallotStatus.Received);
            Assert.That(Manager.Database[vn, cpr] == BallotStatus.Received);

            AsyncManagerAnnounce(() => Manager.AnnounceRevokeBallot(cpr, "yo boii"));
            Assert.That(Peer1.Database[vn, cpr] == BallotStatus.NotReceived);
            Assert.That(Peer2.Database[vn, cpr] == BallotStatus.NotReceived);
            Assert.That(Peer3.Database[vn, cpr] == BallotStatus.NotReceived);
            Assert.That(Manager.Database[vn, cpr] == BallotStatus.NotReceived);
        }