public void RetryRunISingleObjectQuery()
        {
            var errorConnection = Substitute.For <IConnection>();

            errorConnection
            .RunAsync(Arg.Any <IDatumConverterFactory>(), (ISingleObjectQuery <int>)null, Arg.Any <CancellationToken>())
            .Returns(x => { throw new RethinkDbNetworkException("!"); });

            var successConnection = Substitute.For <IConnection>();

            successConnection
            .RunAsync(Arg.Any <IDatumConverterFactory>(), (ISingleObjectQuery <int>)null, Arg.Any <CancellationToken>())
            .Returns(y => { var x = new TaskCompletionSource <int>(); x.SetResult(1); return(x.Task); });

            var rootConnectionFactory = CreateRootConnectionFactory(errorConnection, successConnection);
            var cf = new ReliableConnectionFactory(rootConnectionFactory);

            var conn = cf.Get();

            Assert.That(conn, Is.Not.Null);
            Assert.That(conn.Run((ISingleObjectQuery <int>)null), Is.EqualTo(1));
            conn.Dispose();

            // Error connection was attempted...
            errorConnection.Received().RunAsync(Arg.Any <IDatumConverterFactory>(), (ISingleObjectQuery <int>)null, Arg.Any <CancellationToken>());
            // Then another connection was attempted after the error failed.
            successConnection.Received().RunAsync(Arg.Any <IDatumConverterFactory>(), (ISingleObjectQuery <int>)null, Arg.Any <CancellationToken>());
        }
        public static IConnectionFactory CreateConnectionFactory(string clusterName)
        {
            if (DefaultSettings.Value == null)
                throw new ConfigurationErrorsException("No rethinkdb client configuration section located");

            foreach (ClusterElement cluster in DefaultSettings.Value.Clusters)
            {
                if (cluster.Name == clusterName)
                {
                    IConnectionFactory connectionFactory = CreateDefaultConnectionFactory(cluster);

                    if (cluster.NetworkErrorHandling != null && cluster.NetworkErrorHandling.Enabled)
                        connectionFactory = new ReliableConnectionFactory(connectionFactory);

                    if (cluster.ConnectionPool != null && cluster.ConnectionPool.Enabled)
                        connectionFactory = new ConnectionPoolingConnectionFactory(connectionFactory);
                    else if (cluster.ConnectionPool != null && cluster.ConnectionPool.Enabled && cluster.ConnectionPool.QueryTimeout != 0)
                        connectionFactory = new ConnectionPoolingConnectionFactory(connectionFactory,
                                new TimeSpan(0, 0, cluster.ConnectionPool.QueryTimeout));

                    return connectionFactory;
                }
            }

            throw new ArgumentException("Cluster name could not be found in configuration", "clusterName");
        }
        public void RetryRunISingleObjectQuery()
        {
            var errorConnection = Substitute.For<IConnection>();
            errorConnection
                .RunAsync(Arg.Any<IQueryConverter>(), (ISingleObjectQuery<int>)null, Arg.Any<CancellationToken>())
                .Returns(x => { throw new RethinkDbNetworkException("!"); });

            var successConnection = Substitute.For<IConnection>();
            successConnection
                .RunAsync(Arg.Any<IQueryConverter>(), (ISingleObjectQuery<int>)null, Arg.Any<CancellationToken>())
                .Returns(y => { var x = new TaskCompletionSource<int>(); x.SetResult(1); return x.Task; });

            var rootConnectionFactory = CreateRootConnectionFactory(errorConnection, successConnection);
            var cf = new ReliableConnectionFactory(rootConnectionFactory);

            var conn = cf.Get();
            Assert.That(conn, Is.Not.Null);
            Assert.That(conn.Run((ISingleObjectQuery<int>)null), Is.EqualTo(1));
            conn.Dispose();

            // Error connection was attempted...
            errorConnection.Received().RunAsync(Arg.Any<IQueryConverter>(), (ISingleObjectQuery<int>)null, Arg.Any<CancellationToken>());
            // Then another connection was attempted after the error failed.
            successConnection.Received().RunAsync(Arg.Any<IQueryConverter>(), (ISingleObjectQuery<int>)null, Arg.Any<CancellationToken>());
        }
Exemplo n.º 4
0
        public static IConnectionFactory CreateConnectionFactory(string clusterName)
        {
            if (DefaultSettings.Value == null)
            {
                throw new ConfigurationErrorsException("No rethinkdb client configuration section located");
            }

            foreach (ClusterElement cluster in DefaultSettings.Value.Clusters)
            {
                if (cluster.Name == clusterName)
                {
                    IConnectionFactory connectionFactory = CreateDefaultConnectionFactory(cluster);

                    if (cluster.NetworkErrorHandling != null && cluster.NetworkErrorHandling.Enabled)
                    {
                        connectionFactory = new ReliableConnectionFactory(connectionFactory);
                    }

                    if (cluster.ConnectionPool != null && cluster.ConnectionPool.Enabled)
                    {
                        connectionFactory = new ConnectionPoolingConnectionFactory(connectionFactory);
                    }

                    return(connectionFactory);
                }
            }

            throw new ArgumentException("Cluster name could not be found in configuration", "clusterName");
        }
        public void GetCallsUnderlyingFactory()
        {
            var rootConnectionFactory = Substitute.For <IConnectionFactory>();
            var cf = new ReliableConnectionFactory(rootConnectionFactory);

            cf.Get();

            rootConnectionFactory.Received().GetAsync();
        }
        public void GetCallsUnderlyingFactory()
        {
            var rootConnectionFactory = Substitute.For<IConnectionFactory>();
            var cf = new ReliableConnectionFactory(rootConnectionFactory);

            cf.Get();

            rootConnectionFactory.Received().GetAsync();
        }
        public void DelegateRunISingleObjectQuery()
        {
            var mockConnection = Substitute.For<IConnection>();
            mockConnection.RunAsync(Arg.Any<IQueryConverter>(), (ISingleObjectQuery<int>)null, Arg.Any<CancellationToken>()).Returns(
                y => { var x = new TaskCompletionSource<int>(); x.SetResult(1); return x.Task; }
            );

            var rootConnectionFactory = CreateRootConnectionFactory(mockConnection);
            var cf = new ReliableConnectionFactory(rootConnectionFactory);

            var conn = cf.Get();
            Assert.That(conn, Is.Not.Null);
            Assert.That(conn.Run((ISingleObjectQuery<int>)null), Is.EqualTo(1));
            conn.Dispose();
        }
        public void DelegateRunISingleObjectQuery()
        {
            var mockConnection = Substitute.For <IConnection>();

            mockConnection.RunAsync(Arg.Any <IDatumConverterFactory>(), (ISingleObjectQuery <int>)null, Arg.Any <CancellationToken>()).Returns(
                y => { var x = new TaskCompletionSource <int>(); x.SetResult(1); return(x.Task); }
                );

            var rootConnectionFactory = CreateRootConnectionFactory(mockConnection);
            var cf = new ReliableConnectionFactory(rootConnectionFactory);

            var conn = cf.Get();

            Assert.That(conn, Is.Not.Null);
            Assert.That(conn.Run((ISingleObjectQuery <int>)null), Is.EqualTo(1));
            conn.Dispose();
        }