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));
        }
示例#2
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));
        }