public void TestMaximumPoolSizeIsEnsured()
        {
            var builder = new MongoConnectionStringBuilder {
                MaximumPoolSize = 2
            };

            using (var pool = new PooledConnectionFactory(builder.ToString()))
            {
                var connection1 = pool.Open();
                Assert.IsNotNull(connection1);
                Assert.IsNotNull(pool.Open());

                RawConnection connection3 = null;
                var           thread      = new Thread(o =>
                {
                    connection3 = pool.Open();
                });
                thread.Start();

                Thread.Sleep(300);

                Assert.IsNull(connection3);

                pool.Close(connection1);

                Thread.Sleep(300);

                Assert.IsNotNull(connection3);

                thread.Abort();
            }
        }
        public void TestMinimalPoolSizeIsEnsuredAtStartup()
        {
            var builder = new MongoConnectionStringBuilder {
                MinimumPoolSize = 3
            };

            using (var pool = new PooledConnectionFactory(builder.ToString()))
                Assert.AreEqual(3, pool.PoolSize);
        }
 public void TestDisconnectedConnectionsArentReturndToPool()
 {
     using (var pool = new PooledConnectionFactory(string.Empty))
     {
         var connection = pool.Open();
         connection.Dispose();
         pool.Close(connection);
         Assert.AreEqual(0, pool.PoolSize);
     }
 }
        private IDriver SetupWithCustomResolver(Uri overridenUri, Config config)
        {
            var connectionSettings = new ConnectionSettings(AuthToken, config);

            connectionSettings.SocketSettings.HostResolver =
                new CustomHostResolver(Server.BoltUri, connectionSettings.SocketSettings.HostResolver);
            var bufferSettings    = new BufferSettings(config);
            var connectionFactory = new PooledConnectionFactory(connectionSettings, bufferSettings, config.Logger);

            return(GraphDatabase.CreateDriver(overridenUri, config, connectionFactory));
        }
 public void TestClose()
 {
     using (var pool = new PooledConnectionFactory(string.Empty))
     {
         var connection1 = pool.Open();
         pool.Close(connection1);
         var connection2 = pool.Open();
         Assert.AreEqual(connection1, connection2);
         Assert.AreEqual(1, pool.PoolSize);
     }
 }
        public void TestBorrowOneConnection()
        {
            var builder = new MongoConnectionStringBuilder();

            using (var pool = new PooledConnectionFactory(builder.ToString()))
            {
                var connection = pool.Open();
                Assert.IsNotNull(connection);
                Assert.AreEqual(1, pool.PoolSize);
            }
        }
        public void TestExceptionIfMaximumPoolSizeAndConnectionTimeoutAreReached()
        {
            var builder = new MongoConnectionStringBuilder {
                MaximumPoolSize = 1, ConnectionTimeout = TimeSpan.FromMilliseconds(500)
            };

            using (var pool = new PooledConnectionFactory(builder.ToString()))
            {
                pool.Open();
                pool.Open();
            }
        }
예제 #8
0
        /// <summary>
        ///     Returns a driver for a Neo4j instance with custom configuration.
        /// </summary>
        /// <param name="uri">
        ///     The URI to the Neo4j instance. Should be in the form
        ///     <c>bolt://&lt;server location&gt;:&lt;port&gt;</c>. If <c>port</c> is not supplied the default of <c>7687</c> will
        ///     be used.</param>
        /// <param name="authToken">Authentication to use, <see cref="AuthTokens" />.</param>
        /// <param name="config">
        ///     Configuration for the driver instance to use, if <c>null</c> <see cref="Config.DefaultConfig" />
        ///     is used.
        /// </param>
        /// <returns>A new driver to the database instance specified by the <paramref name="uri"/>.</returns>
        public static IDriver Driver(Uri uri, IAuthToken authToken, Config config)
        {
            Throw.ArgumentNullException.IfNull(uri, nameof(uri));
            Throw.ArgumentNullException.IfNull(authToken, nameof(authToken));
            config = config ?? Config.DefaultConfig;

            var connectionSettings = new ConnectionSettings(authToken, config);
            var bufferSettings     = new BufferSettings(config);
            var connectionFactory  = new PooledConnectionFactory(connectionSettings, bufferSettings, config.Logger);

            return(CreateDriver(uri, config, connectionFactory));
        }
        /// <summary>
        /// Returns a driver for a Neo4j instance with custom configuration.
        /// </summary>
        /// <param name="uri">
        /// The URI to the Neo4j instance. Should be in the form
        /// <c>neo4j://&lt;server location&gt;:&lt;port&gt;</c>.
        /// If <c>port</c> is not supplied the default of <c>7687</c> will be used.</param>
        /// <param name="authToken">Authentication to use, <see cref="AuthTokens" />.</param>
        /// <param name="action">
        /// Defines how to build a driver configuration <see cref="Config"/> using <see cref="ConfigBuilder"/>.
        /// If set to <c>null</c>, then no modification will be carried out on the build.
        /// As a result, a default config with default settings will be used <see cref="Config" /> when creating the new driver.
        /// </param>
        /// <returns>A new driver to the database instance specified by the <paramref name="uri"/>.</returns>
        public static IDriver Driver(Uri uri, IAuthToken authToken, Action <ConfigBuilder> action)
        {
            Throw.ArgumentNullException.IfNull(uri, nameof(uri));
            Throw.ArgumentNullException.IfNull(authToken, nameof(authToken));
            var config = ConfigBuilders.BuildConfig(action);

            var connectionSettings = new ConnectionSettings(uri, authToken, config);
            var bufferSettings     = new BufferSettings(config);
            var connectionFactory  =
                new PooledConnectionFactory(connectionSettings, bufferSettings, config.Logger);

            return(CreateDriver(uri, config, connectionFactory));
        }
        public void TestIfConnectionLifetimeIsReachedItDoesNotReturndToPool()
        {
            var builder = new MongoConnectionStringBuilder
            {
                ConnectionLifetime = TimeSpan.FromMilliseconds(100)
            };

            using (var pool = new PooledConnectionFactory(builder.ToString()))
            {
                var connection = pool.Open();
                Thread.Sleep(200); // wait for lifetime reached
                pool.Close(connection);
                Assert.AreEqual(0, pool.PoolSize);
            }
        }
        public void TestMinimalPoolSizeIsEnsuredAtRuntime()
        {
            var builder = new MongoConnectionStringBuilder {
                MinimumPoolSize = 3, ConnectionLifetime = TimeSpan.FromMilliseconds(200)
            };

            using (var pool = new PooledConnectionFactory(builder.ToString()))
            {
                Assert.AreEqual(3, pool.PoolSize);

                Thread.Sleep(500); // ensure connection lifetime reached

                pool.Cleanup();

                Assert.AreEqual(3, pool.PoolSize);
            }
        }
예제 #12
0
        public void TestServerCirculationWorks()
        {
            var builder = new MongoConnectionStringBuilder();

            builder.AddServer("localhost", 27017);
            builder.AddServer("localhost", 27018);
            using (var pool = new PooledConnectionFactory(builder.ToString()))
            {
                var connection1 = pool.Open();
                var connection2 = pool.Open();
                var connection3 = pool.Open();
                var connection4 = pool.Open();
                var connection5 = pool.Open();
                Assert.AreEqual(27017, connection1.EndPoint.Port);
                Assert.AreEqual(27018, connection2.EndPoint.Port);
                Assert.AreEqual(27017, connection3.EndPoint.Port);
                Assert.AreEqual(27018, connection4.EndPoint.Port);
                Assert.AreEqual(27017, connection5.EndPoint.Port);
            }
        }
        public void TestCleanup()
        {
            var builder = new MongoConnectionStringBuilder
            {
                MinimumPoolSize    = 0,
                ConnectionLifetime = TimeSpan.FromMilliseconds(100)
            };

            using (var pool = new PooledConnectionFactory(builder.ToString()))
            {
                var connection1 = pool.Open();
                var connection2 = pool.Open();
                var connection3 = pool.Open();
                pool.Close(connection1);
                pool.Close(connection2);
                pool.Close(connection3);

                Thread.Sleep(300); // ensure lifetime reached

                pool.Cleanup();

                Assert.AreEqual(0, pool.PoolSize);
            }
        }
 public void TestDefaultPoolSizeIsEmpty()
 {
     using (var pool = new PooledConnectionFactory(string.Empty))
         Assert.AreEqual(0, pool.PoolSize);
 }