public async Task ShouldPassBookmarkAndTxConfigToRunWithMetadataMessage(AccessMode mode)
            {
                var mockConn        = NewConnectionWithMode(mode);
                var query           = new Query("A cypher query");
                var bookmarkTracker = new Mock <IBookmarkTracker>();
                var resourceHandler = new Mock <IResultResourceHandler>();
                var V3 = new BoltProtocolV3();

                mockConn.Setup(x => x.EnqueueAsync(It.IsAny <IRequestMessage>(), It.IsAny <IResponseHandler>(),
                                                   It.IsAny <IRequestMessage>(), It.IsAny <IResponseHandler>()))
                .Returns(Task.CompletedTask)
                .Callback <IRequestMessage, IResponseHandler, IRequestMessage, IResponseHandler>(
                    (m1, h1, m2, h2) =>
                {
                    h1.OnSuccess(new Dictionary <string, object>());
                    VerifyMetadata(m1.CastOrThrow <RunWithMetadataMessage>().Metadata, mode);
                });

                await V3.RunInAutoCommitTransactionAsync(mockConn.Object, query, true, bookmarkTracker.Object,
                                                         resourceHandler.Object, null, Bookmark, TxConfig);

                mockConn.Verify(
                    x => x.EnqueueAsync(It.IsAny <RunWithMetadataMessage>(), It.IsAny <V3.RunResponseHandler>(),
                                        PullAllMessage.PullAll,
                                        It.IsAny <V3.PullResponseHandler>()),
                    Times.Once);
            }
示例#2
0
            public void ShouldUseGetRoutingTableProcedure(string version)
            {
                var V3 = new BoltProtocolV3();

                // Given
                var context = new Dictionary <string, string> {
                    { "context", string.Empty }
                };
                var mockConnection = new Mock <IConnection>();
                var serverInfoMock = new Mock <IServerInfo>();

                serverInfoMock.Setup(m => m.Agent).Returns(version);
                mockConnection.Setup(m => m.Server).Returns(serverInfoMock.Object);
                mockConnection.Setup(m => m.BoltProtocol).Returns(V3);
                mockConnection.Setup(m => m.RoutingContext).Returns(context);

                // When
                string procedure;
                var    parameters = new Dictionary <string, object>();

                V3.GetProcedureAndParameters(mockConnection.Object, "database", out procedure, out parameters);

                // Then
                procedure.Should().Be("CALL dbms.cluster.routing.getRoutingTable($context)");
                parameters["context"].Should().Be(context);
            }
            public void ShouldThrowWhenADatabaseIsGiven(string database)
            {
                var V3 = new BoltProtocolV3();

                V3.Awaiting(p => p.BeginTransactionAsync(Mock.Of <IConnection>(), database, Bookmark.From("123"),
                                                         TransactionConfig.Default))
                .Should().Throw <ClientException>().WithMessage("*that does not support multiple databases*");
            }
示例#4
0
            public void ShouldThrowWhenADatabaseIsGiven(string database)
            {
                var V3       = new BoltProtocolV3();
                var mockConn = NewConnectionWithMode(AccessMode.Read);

                V3.Awaiting(p => p.BeginTransactionAsync(mockConn.Object, database, Bookmark.From("123"),
                                                         TransactionConfig.Default, null))
                .Should().Throw <ClientException>().WithMessage("*that does not support multiple databases*");
            }
            public void ShouldThrowWhenADatabaseIsGiven(string database)
            {
                var V3 = new BoltProtocolV3();

                V3.Awaiting(p => p.RunInAutoCommitTransactionAsync(Mock.Of <IConnection>(), new Query("text"),
                                                                   false, Mock.Of <IBookmarkTracker>(), Mock.Of <IResultResourceHandler>(), database,
                                                                   Bookmark.From("123"),
                                                                   TransactionConfig.Default))
                .Should().Throw <ClientException>().WithMessage("*that does not support multiple databases*");
            }
            public async Task ResultBuilderShouldObtainServerInfoFromConnection()
            {
                var mockConn = AsyncSessionTests.MockedConnectionWithSuccessResponse();
                var query    = new Query("lalala");
                var V3       = new BoltProtocolV3();

                await V3.RunInExplicitTransactionAsync(mockConn.Object, query, true);

                mockConn.Verify(x => x.Server, Times.Once);
            }
示例#7
0
            public async Task ShouldThrowOnImpersonatedUser()
            {
                var connection     = SetupMockedConnection();
                var boltProtocolV3 = new BoltProtocolV3();

                //When
                var ex = await Assert.ThrowsAsync <ArgumentException>(() => boltProtocolV3.GetRoutingTable(connection, "myTestDatabase", string.Empty, null));

                ex.Message.Should().Contain("3.0");
            }
示例#8
0
            public async Task GetRoutingTableShouldThrowOnNullConnectionObject()
            {
                var v3 = new BoltProtocolV3();

                var ex = await Xunit.Record.ExceptionAsync(async() => await v3.GetRoutingTable(null, "adb", null, null));

                ex.Should().BeOfType <ProtocolException>().Which
                .Message.Should()
                .Contain("Attempting to get a routing table on a null connection");
            }
示例#9
0
            public async Task RoutingTableShouldContainDatabase()
            {
                var connection     = SetupMockedConnection();
                var boltProtocolV3 = new BoltProtocolV3();

                //When
                var routingTableDictionary = await boltProtocolV3.GetRoutingTable(connection, "myTestDatabase", null, null);

                //Then
                routingTableDictionary.ToDictionary().Should().ContainKey("db").WhichValue.Should().Be("myTestDatabase");
            }
            public async Task ShouldEnqueueGoodbyeAndSend()
            {
                var mockConn = new Mock <IConnection>();
                var V3       = new BoltProtocolV3();

                await V3.LogoutAsync(mockConn.Object);

                mockConn.Verify(
                    x => x.EnqueueAsync(It.IsAny <GoodbyeMessage>(), It.IsNotNull <IResponseHandler>(), null, null),
                    Times.Once);
                mockConn.Verify(x => x.SendAsync());
            }
            public async Task ShouldEnqueueRollbackAndSync()
            {
                var mockConn = NewConnectionWithMode();
                var V3       = new BoltProtocolV3();

                await V3.RollbackTransactionAsync(mockConn.Object);

                mockConn.Verify(
                    x => x.EnqueueAsync(RollbackMessage.Rollback, It.IsAny <V3.RollbackResponseHandler>(), null, null),
                    Times.Once);
                mockConn.Verify(x => x.SyncAsync(), Times.Once);
            }
            public async Task ShouldNotSyncIfBookmarkIsNull()
            {
                var mockConn = NewConnectionWithMode();
                var V3       = new BoltProtocolV3();

                await V3.BeginTransactionAsync(mockConn.Object, null, null, null);

                mockConn.Verify(
                    x => x.EnqueueAsync(It.IsAny <BeginMessage>(), It.IsAny <V3.BeginResponseHandler>(), null, null),
                    Times.Once);
                mockConn.Verify(x => x.SyncAsync(), Times.Never);
            }
            public async Task ShouldEnqueueHelloAndSync()
            {
                var mockConn = new Mock <IConnection>();
                var V3       = new BoltProtocolV3();

                mockConn.Setup(x => x.Server).Returns(new ServerInfo(new Uri("http://neo4j.com")));
                await V3.LoginAsync(mockConn.Object, "user-zhen", AuthTokens.None);

                mockConn.Verify(
                    x => x.EnqueueAsync(It.IsAny <HelloMessage>(), It.IsAny <V3.HelloResponseHandler>(), null, null),
                    Times.Once);
                mockConn.Verify(x => x.SyncAsync());
            }
            public async Task EnqueueCommitAndSync()
            {
                var mockConn        = NewConnectionWithMode();
                var bookmarkTracker = new Mock <IBookmarkTracker>();
                var V3 = new BoltProtocolV3();

                await V3.CommitTransactionAsync(mockConn.Object, bookmarkTracker.Object);

                mockConn.Verify(
                    x => x.EnqueueAsync(CommitMessage.Commit, It.IsAny <V3.CommitResponseHandler>(), null, null),
                    Times.Once);
                mockConn.Verify(x => x.SyncAsync(), Times.Once);
            }
示例#15
0
            public async Task ShouldThrowOnImpersonatedUserAsync()
            {
                var protocol = new BoltProtocolV3();
                var mockConn = NewConnectionWithMode(AccessMode.Read);

                var ex = await Assert.ThrowsAsync <ArgumentException>(() => protocol.BeginTransactionAsync(mockConn.Object,
                                                                                                           string.Empty,
                                                                                                           Bookmark.From("123"),
                                                                                                           TransactionConfig.Default,
                                                                                                           "ImpersonatedUser"));

                ex.Message.Should().Contain("3.0");
            }
            public async Task ShouldSyncIfValidBookmarkGiven()
            {
                var mockConn = NewConnectionWithMode();
                var bookmark = Bookmark.From(AsyncSessionTests.FakeABookmark(234));
                var V3       = new BoltProtocolV3();

                await V3.BeginTransactionAsync(mockConn.Object, null, bookmark, null);

                mockConn.Verify(
                    x => x.EnqueueAsync(It.IsAny <BeginMessage>(), It.IsAny <V3.BeginResponseHandler>(), null, null),
                    Times.Once);
                mockConn.Verify(x => x.SyncAsync(), Times.Once);
            }
            public async Task ShouldRunPullAllSync()
            {
                var mockConn = AsyncSessionTests.MockedConnectionWithSuccessResponse();
                var query    = new Query("lalala");
                var V3       = new BoltProtocolV3();

                await V3.RunInExplicitTransactionAsync(mockConn.Object, query, true);

                mockConn.Verify(
                    x => x.EnqueueAsync(It.IsAny <RunWithMetadataMessage>(), It.IsAny <V3.RunResponseHandler>(),
                                        PullAllMessage.PullAll,
                                        It.IsAny <V3.PullResponseHandler>()),
                    Times.Once);
                mockConn.Verify(x => x.SendAsync(), Times.Once);
            }
            public async Task ResultBuilderShouldObtainServerInfoFromConnection()
            {
                var mockConn        = NewConnectionWithMode();
                var query           = new Query("A cypher query");
                var bookmarkTracker = new Mock <IBookmarkTracker>();
                var resourceHandler = new Mock <IResultResourceHandler>();
                var V3 = new BoltProtocolV3();

                mockConn.Setup(x => x.EnqueueAsync(It.IsAny <IRequestMessage>(), It.IsAny <IResponseHandler>(),
                                                   It.IsAny <IRequestMessage>(), It.IsAny <IResponseHandler>()))
                .Returns(Task.CompletedTask)
                .Callback <IRequestMessage, IResponseHandler, IRequestMessage, IResponseHandler>(
                    (msg1, h1, msg2, h2) => { h1.OnSuccess(new Dictionary <string, object>()); });

                await V3.RunInAutoCommitTransactionAsync(mockConn.Object, query, true, bookmarkTracker.Object,
                                                         resourceHandler.Object, null, null, null);

                mockConn.Verify(x => x.Server, Times.Once);
            }
            public async Task ShouldPassBookmarkTxConfigAndModeToRunWithMetadataMessage(AccessMode mode)
            {
                var mockConn = NewConnectionWithMode(mode);
                var V3       = new BoltProtocolV3();

                mockConn.Setup(x => x.EnqueueAsync(It.IsAny <IRequestMessage>(), It.IsAny <IResponseHandler>(),
                                                   It.IsAny <IRequestMessage>(), It.IsAny <IResponseHandler>()))
                .Returns(Task.CompletedTask)
                .Callback <IRequestMessage, IResponseHandler, IRequestMessage, IResponseHandler>(
                    (m1, h1, m2, h2) =>
                {
                    var msg = m1.CastOrThrow <BeginMessage>();
                    VerifyMetadata(msg.Metadata, mode);
                });

                await V3.BeginTransactionAsync(mockConn.Object, null, Bookmark, TxConfig);

                mockConn.Verify(
                    x => x.EnqueueAsync(It.IsAny <BeginMessage>(), It.IsAny <V3.BeginResponseHandler>(), null, null),
                    Times.Once);
            }