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); }