public void RoutingDriverStressTest(int queryCount)
        {
            const int taskCount = 5;
            var       startTime = DateTime.Now;

            Output.WriteLine($"[{startTime:HH:mm:ss.ffffff}] Started");

            var workItem = new SoakRunWorkItem(_driver, _metrics, Output);

            ConnectionTerminator();
            var tasks = new List <Task>();

            for (var i = 0; i < taskCount; i++)
            {
                tasks.Add(workItem.RunWithRetries(queryCount / taskCount));
            }

            Task.WaitAll(tasks.ToArray());
            _cancellationTokenSource.Cancel();

            var endTime = DateTime.Now;

            Output.WriteLine($"[{endTime:HH:mm:ss.ffffff}] Finished");
            Output.WriteLine($"Total time spent: {endTime - startTime}");

            PrintStatistics();

            _driver.Dispose();
        }
        public async Task RoutingDriverStressTestAsync(int queryCount)
        {
            const int taskCount = 5;
            var       startTime = DateTime.Now;

            Output.WriteLine($"[{startTime:HH:mm:ss.ffffff}] Started");

            var workItem = new SoakRunWorkItem(_driver, _metrics, Output);

            var terminationTask = ConnectionTerminatorAsync();
            var tasks           = new List <Task>();

            for (var i = 0; i < taskCount; i++)
            {
                tasks.Add(workItem.RunWithRetriesAsync(queryCount / taskCount));
            }

            await Task.WhenAll(tasks);

            _cancellationTokenSource.Cancel();
            await terminationTask;

            var endTime = DateTime.Now;

            Output.WriteLine($"[{endTime:HH:mm:ss.ffffff}] Finished");
            Output.WriteLine($"Total time spent: {endTime - startTime}");

            PrintStatistics();

            await _driver.CloseAsync();
        }
示例#3
0
        public async void SoakRunAsync(int threadCount)
        {
            var driver = GraphDatabase.Driver(RoutingServer, AuthToken, new Config
            {
                MetricsFactory               = new DefaultMetricsFactory(),
                ConnectionTimeout            = Config.InfiniteInterval,
                EncryptionLevel              = EncryptionLevel.Encrypted,
                MaxConnectionPoolSize        = 100,
                ConnectionAcquisitionTimeout = TimeSpan.FromMinutes(5)
            });

            try
            {
                var startTime = DateTime.Now;
                Output.WriteLine($"[{startTime:HH:mm:ss.ffffff}] Started");

                var metrics  = ((Internal.Driver)driver).GetMetrics();
                var workItem = new SoakRunWorkItem(driver, metrics, Output);

                var tasks = new List <Task>();
                for (var i = 0; i < threadCount; i++)
                {
                    tasks.Add(workItem.RunAsync());
                }

                await Task.WhenAll(tasks);

                var poolMetrics = metrics.ConnectionPoolMetrics;
                Output.WriteLine(poolMetrics.ToContentString());
                var endTime = DateTime.Now;
                Output.WriteLine($"[{endTime:HH:mm:ss.ffffff}] Finished");
                Output.WriteLine($"Total time spent: {endTime - startTime}");

                foreach (var value in poolMetrics)
                {
                    var st = value.Value;

                    st.Creating.Should().Be(0);
                    st.Closing.Should().Be(0);
                    st.InUse.Should().Be(0);
                    st.Idle.Should().Be((int)(st.Created - st.Closed + st.FailedToCreate));
                }
            }
            finally
            {
                await driver.CloseAsync();
            }
        }