Пример #1
0
        public void Step03_RecordBallots()
        {
            var castIds    = new List <string>();
            var spoiledIds = new List <string>();

            // randomly assign to cast or spoil lists
            foreach (var id in _ballotIds)
            {
                if (BallotGenerator.RandomBit())
                {
                    castIds.Add(id);
                }
                else
                {
                    spoiledIds.Add(id);
                }
            }

            var result = ElectionGuardApi.RecordBallots(
                _electionGuardConfig,
                castIds,
                spoiledIds,
                _ballotIds,
                _encryptedBallots,
                _exportFolder,
                _ballotsPrefix
                );

            Assert.AreEqual(castIds.Count, result.CastedBallotTrackers.Count);
            Assert.AreEqual(spoiledIds.Count, result.SpoiledBallotTrackers.Count);
            _ballotsFilename = result.EncryptedBallotsFilename;
            Assert.IsNotNull(_ballotsFilename);
        }
Пример #2
0
        public void Step02_VotingAndEncryption()
        {
            var deleteSuccess     = ElectionGuardApi.SoftDeleteEncryptedBallotsFile(_exportFolder, _encryptedBallotsPrefix);
            var currentNumBallots = 0;

            while (currentNumBallots < _numberOfBallots)
            {
                // generates new random ballot
                var randomBallot = BallotGenerator.FillRandomBallot(
                    _electionGuardConfig.NumberOfSelections, _expectedNumberOfSelected);

                var result = ElectionGuardApi.EncryptBallot(
                    randomBallot,
                    _expectedNumberOfSelected,
                    _electionGuardConfig,
                    $"{currentNumBallots}",
                    _exportFolder,
                    _encryptedBallotsPrefix
                    );

                Assert.IsNotEmpty(result.EncryptedBallotMessage);
                Assert.IsNotEmpty(result.Tracker);
                Assert.AreEqual($"{currentNumBallots}", result.ExternalIdentifier);
                Assert.IsNotEmpty(result.OutputFileName);

                _encryptedBallots.Add(result.EncryptedBallotMessage);
                _ballotIds.Add(result.ExternalIdentifier);

                currentNumBallots++;
            }
        }
        public void Build()
        {
            var logger              = resolver.Resolve <ILogger>();
            var applicationConfig   = resolver.Resolve <LeaseProviderServiceConfiguration>();
            var socketFactory       = new SocketFactory(resolver.Resolve <SocketConfiguration>());
            var synodConfigProvider = new SynodConfigurationProvider(applicationConfig.LeaseProvider.Synod);

#if NET47
            var instanceNameResolver      = resolver.Resolve <IInstanceNameResolver>() ?? new InstanceNameResolver();
            var performanceCounterManager = new PerformanceCounterManager <KinoPerformanceCounters>(instanceNameResolver, logger);
#else
            var performanceCounterManager = default(IPerformanceCounterManager <KinoPerformanceCounters>);
#endif
            var intercomMessageHub = new IntercomMessageHub(socketFactory,
                                                            synodConfigProvider,
                                                            performanceCounterManager,
                                                            logger);
            var ballotGenerator = new BallotGenerator(applicationConfig.LeaseProvider.Lease);
            kino          = new kino(resolver);
            messageHub    = kino.GetMessageHub();
            leaseProvider = new LeaseProvider(intercomMessageHub,
                                              ballotGenerator,
                                              synodConfigProvider,
                                              applicationConfig.LeaseProvider.Lease,
                                              applicationConfig.LeaseProvider,
                                              messageHub,
                                              logger);
            var serializer = new ProtobufMessageSerializer();
            kino.AssignActor(new LeaseProviderActor(leaseProvider, serializer, applicationConfig.LeaseProvider, logger));
            kino.AssignActor(new InstanceDiscoveryActor(leaseProvider, applicationConfig.LeaseProvider));
            kino.AssignActor(new InstanceBuilderActor(leaseProvider, applicationConfig.LeaseProvider));
            kino.AssignActor(new ExceptionHandlerActor(logger));
        }
Пример #4
0
        public void TwoBallotsGeneratedWithinSafetyPeriod_HaveDifferentMessageNumber()
        {
            var identity    = new byte[] { 0 };
            var leaseConfig = new LeaseConfiguration
            {
                ClockDrift = TimeSpan.FromMilliseconds(500)
            };
            var ballotGenerator = new BallotGenerator(leaseConfig);
            var ballot1         = ballotGenerator.New(identity);

            Thread.Sleep((int)leaseConfig.ClockDrift.TotalMilliseconds / 10);
            var ballot2 = ballotGenerator.New(identity);

            Assert.GreaterOrEqual(leaseConfig.ClockDrift, ballot2.Timestamp - ballot1.Timestamp);
            Assert.AreNotEqual(ballot1.MessageNumber, ballot2.MessageNumber);
        }
Пример #5
0
        internal static RoundBasedRegisterTestSetup CreateRoundBasedRegister(IEnumerable <string> synod, string localNodeUri)
        {
            var appConfig = new RendezvousServiceConfiguration
            {
                Synod = new SynodConfiguration
                {
                    Members           = synod,
                    LocalNode         = localNodeUri,
                    HeartBeatInterval = TimeSpan.FromSeconds(5),
                    IntercomEndpoint  = $"inproc://{Guid.NewGuid()}",
                    MissingHeartBeatsBeforeReconnect = 4
                },
                Lease = new LeaseConfiguration
                {
                    ClockDrift          = TimeSpan.FromMilliseconds(10),
                    MessageRoundtrip    = TimeSpan.FromMilliseconds(100),
                    NodeResponseTimeout = TimeSpan.FromMilliseconds(1000),
                    MaxLeaseTimeSpan    = TimeSpan.FromSeconds(3)
                }
            };

            var socketConfig = new SocketConfiguration
            {
                ReceivingHighWatermark = 1000,
                SendingHighWatermark   = 1000,
                Linger = TimeSpan.Zero
            };
            var logger = new Mock <ILogger>();
            var performanceCounterManager = new Mock <IPerformanceCounterManager <KinoPerformanceCounters> >();
            var synodConfigProvider       = new SynodConfigurationProvider(appConfig.Synod);
            var intercomMessageHub        = new IntercomMessageHub(new SocketFactory(socketConfig),
                                                                   synodConfigProvider,
                                                                   performanceCounterManager.Object,
                                                                   logger.Object);
            var ballotGenerator    = new BallotGenerator(appConfig.Lease);
            var roundBasedRegister = new RoundBasedRegister(intercomMessageHub,
                                                            ballotGenerator,
                                                            synodConfigProvider,
                                                            appConfig.Lease,
                                                            logger.Object);

            logger.Verify(m => m.Error(It.IsAny <object>()), Times.Never);

            return(new RoundBasedRegisterTestSetup(ballotGenerator,
                                                   synodConfigProvider.LocalNode,
                                                   roundBasedRegister));
        }
Пример #6
0
        private IRendezvousService Build()
        {
            var logger              = resolver.Resolve <ILogger>();
            var applicationConfig   = resolver.Resolve <RendezvousServiceConfiguration>();
            var socketFactory       = new SocketFactory(applicationConfig.Socket);
            var synodConfigProvider = new SynodConfigurationProvider(applicationConfig.Synod);

#if NET47
            var instanceNameResolver = resolver.Resolve <IInstanceNameResolver>() ?? new InstanceNameResolver();

            var performanceCounterManager = new PerformanceCounterManager <KinoPerformanceCounters>(instanceNameResolver,
                                                                                                    logger);
#else
            var performanceCounterManager = default(IPerformanceCounterManager <KinoPerformanceCounters>);
#endif
            var intercomMessageHub = new IntercomMessageHub(socketFactory,
                                                            synodConfigProvider,
                                                            performanceCounterManager,
                                                            logger);
            var ballotGenerator    = new BallotGenerator(applicationConfig.Lease);
            var roundBasedRegister = new RoundBasedRegister(intercomMessageHub,
                                                            ballotGenerator,
                                                            synodConfigProvider,
                                                            applicationConfig.Lease,
                                                            logger);
            var leaseProvider = new LeaseProvider(roundBasedRegister,
                                                  ballotGenerator,
                                                  applicationConfig.Lease,
                                                  synodConfigProvider,
                                                  logger);

            var serializer     = new ProtobufMessageSerializer();
            var configProvider = new RendezvousConfigurationProvider(applicationConfig.Rendezvous);
            var service        = new RendezvousService(leaseProvider,
                                                       synodConfigProvider,
                                                       socketFactory,
                                                       serializer,
                                                       configProvider,
                                                       performanceCounterManager,
                                                       logger);

            return(service);
        }
        internal static RoundBasedRegisterTestSetup CreateRoundBasedRegister(IEnumerable <string> synod, string localNodeUri)
        {
            var appConfig = new RendezvousServiceConfiguration
            {
                Synod = new SynodConfiguration
                {
                    Members   = synod,
                    LocalNode = localNodeUri
                },
                Lease = new LeaseConfiguration
                {
                    ClockDrift          = TimeSpan.FromMilliseconds(10),
                    MessageRoundtrip    = TimeSpan.FromMilliseconds(100),
                    NodeResponseTimeout = TimeSpan.FromMilliseconds(1000),
                    MaxLeaseTimeSpan    = TimeSpan.FromSeconds(3)
                }
            };

            var socketConfig = new SocketConfiguration
            {
                ReceivingHighWatermark = 1000,
                SendingHighWatermark   = 1000,
                Linger = TimeSpan.Zero
            };
            var synodConfig = new global::kino.Consensus.Configuration.SynodConfiguration(new SynodConfigurationProvider(appConfig.Synod));
            var logger      = new Mock <ILogger>();
            var performanceCounterManager = new Mock <IPerformanceCounterManager <KinoPerformanceCounters> >();
            var intercomMessageHub        = new IntercomMessageHub(new SocketFactory(socketConfig),
                                                                   synodConfig,
                                                                   performanceCounterManager.Object,
                                                                   logger.Object);
            var ballotGenerator    = new BallotGenerator(appConfig.Lease);
            var roundBasedRegister = new RoundBasedRegister(intercomMessageHub,
                                                            ballotGenerator,
                                                            synodConfig,
                                                            appConfig.Lease,
                                                            logger.Object);

            return(new RoundBasedRegisterTestSetup(ballotGenerator, synodConfig.LocalNode, roundBasedRegister, appConfig.Lease.MaxLeaseTimeSpan));
        }