コード例 #1
0
        public void ShouldRunTransactionWithoutRetries()
        {
            var work = new ConfigurableTransactionWork("CREATE (:WithoutRetry) RETURN 5");

            NewSession()
            .WriteTransaction(work.Work)
            .WaitForCompletion()
            .AssertEqual(
                OnNext(0, 5),
                OnCompleted <int>(0));

            work.Invocations.Should().Be(1);
            CountNodes("WithoutRetry").Should().Be(1);
        }
コード例 #2
0
        public void ShouldFailOnTransactionThatCannotBeRetried()
        {
            var work = new ConfigurableTransactionWork("UNWIND [10, 5, 0] AS x CREATE (:Hi) RETURN 10/x");

            NewSession()
            .WriteTransaction(work.Work)
            .WaitForCompletion()
            .AssertEqual(
                OnNext(0, 1),
                OnNext(0, 2),
                OnError <int>(0, MatchesException <ClientException>(e => e.Message.Contains("/ by zero"))));

            work.Invocations.Should().Be(1);
            CountNodes("Hi").Should().Be(0);
        }
コード例 #3
0
        public void ShouldFailEvenAfterATransientError()
        {
            var work = new ConfigurableTransactionWork("CREATE (:Person) RETURN 1")
            {
                SyncFailures     = new[] { new TransientException("code", "error") },
                ReactiveFailures = new[] { new DatabaseException("offline", "database is offline") }
            };

            NewSession()
            .WriteTransaction(work.Work)
            .WaitForCompletion()
            .AssertEqual(
                OnError <int>(0,
                              MatchesException <DatabaseException>(e => e.Message.Contains("database is offline"))));

            work.Invocations.Should().Be(2);
            CountNodes("Person").Should().Be(0);
        }
コード例 #4
0
        public void ShouldRunTransactionWithRetriesOnSynchronousFailures()
        {
            var work = new ConfigurableTransactionWork("CREATE (:WithSyncFailure) RETURN 7")
            {
                SyncFailures = new Exception[]
                {
                    new ServiceUnavailableException("service is unavailable"),
                    new SessionExpiredException("expired"),
                    new TransientException("transient", "transient error")
                }
            };

            NewSession()
            .WriteTransaction(work.Work)
            .WaitForCompletion()
            .AssertEqual(
                OnNext(0, 7),
                OnCompleted <int>(0));

            work.Invocations.Should().Be(4);
            CountNodes("WithSyncFailure").Should().Be(1);
        }