Skip to content

Commit

Permalink
Merge pull request #235 from ali-ince/1.5-wait-for-success-after-runa…
Browse files Browse the repository at this point in the history
…sync

Fix for Keys availability upon Session.RunAsync and Transaction.RunAsync
  • Loading branch information
zhenlineo committed Sep 15, 2017
2 parents 16131fe + e39d96c commit e8f44de
Show file tree
Hide file tree
Showing 14 changed files with 446 additions and 44 deletions.
175 changes: 175 additions & 0 deletions Neo4j.Driver/Neo4j.Driver.IntegrationTests/DirectDriver/SessionIT.cs
Original file line number Diff line number Diff line change
Expand Up @@ -198,5 +198,180 @@ public void ShouldNotThrowExceptionWhenDisposeSessionAfterDriver()
driver.Dispose();
session.Dispose();
}

[RequireServerFact]
public void KeysShouldBeAvailableAfterRun()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
var result = session.Run("RETURN 1 As X");
result.Keys.Should().HaveCount(1);
result.Keys.Should().Contain("X");
}
}
}

[RequireServerFact]
public void KeysShouldBeAvailableAfterRunAndResultConsumption()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
var result = session.Run("RETURN 1 As X");
result.Keys.Should().HaveCount(1);
result.Keys.Should().Contain("X");
result.Consume();
result.Keys.Should().HaveCount(1);
result.Keys.Should().Contain("X");
}
}
}

[RequireServerFact]
public void KeysShouldBeAvailableAfterConsecutiveRun()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
var result1 = session.Run("RETURN 1 As X");
var result2 = session.Run("RETURN 1 As Y");

result1.Keys.Should().HaveCount(1);
result1.Keys.Should().Contain("X");
result2.Keys.Should().HaveCount(1);
result2.Keys.Should().Contain("Y");
}
}
}

[RequireServerFact]
public void KeysShouldBeAvailableAfterConsecutiveRunAndResultConsumption()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
var result1 = session.Run("RETURN 1 As X");
var result2 = session.Run("RETURN 1 As Y");

result1.Keys.Should().HaveCount(1);
result1.Keys.Should().Contain("X");
result2.Keys.Should().HaveCount(1);
result2.Keys.Should().Contain("Y");

result1.Consume();
result2.Consume();

result1.Keys.Should().HaveCount(1);
result1.Keys.Should().Contain("X");
result2.Keys.Should().HaveCount(1);
result2.Keys.Should().Contain("Y");
}
}
}

[RequireServerFact]
public void KeysShouldBeAvailableAfterConsecutiveRunNoOrder()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
var result1 = session.Run("RETURN 1 As X");
var result2 = session.Run("RETURN 1 As Y");

result2.Keys.Should().HaveCount(1);
result2.Keys.Should().Contain("Y");
result1.Keys.Should().HaveCount(1);
result1.Keys.Should().Contain("X");
}
}
}

[RequireServerFact]
public void KeysShouldBeAvailableAfterConsecutiveRunAndResultConsumptionNoOrder()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
var result1 = session.Run("RETURN 1 As X");
var result2 = session.Run("RETURN 1 As Y");

result2.Keys.Should().HaveCount(1);
result2.Keys.Should().Contain("Y");
result1.Keys.Should().HaveCount(1);
result1.Keys.Should().Contain("X");

result2.Consume();
result1.Consume();

result2.Keys.Should().HaveCount(1);
result2.Keys.Should().Contain("Y");
result1.Keys.Should().HaveCount(1);
result1.Keys.Should().Contain("X");
}
}
}


[RequireServerFact]
public async void KeysShouldBeAvailableJustAfterRunAsync()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
var cursor = await session.RunAsync("RETURN 1 As X");
cursor.Keys.Should().HaveCount(1);
cursor.Keys.Should().Contain("X");
}
}
}

[RequireServerFact]
public async void KeysShouldBeAvailableJustAfterConsecutiveRunAsync()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
var cursor1 = await session.RunAsync("RETURN 1 As X");
var cursor2 = await session.RunAsync("RETURN 1 As Y");

cursor1.Keys.Should().HaveCount(1);
cursor1.Keys.Should().Contain("X");

cursor2.Keys.Should().HaveCount(1);
cursor2.Keys.Should().Contain("Y");
}
}
}

[RequireServerFact]
public async void KeysShouldBeAvailableJustAfterConsecutiveRunAsyncWithConsumptionInBetween()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
var cursor1 = await session.RunAsync("RETURN 1 As X");
var cursor2 = await session.RunAsync("RETURN 1 As Y");

await cursor1.ConsumeAsync();

cursor1.Keys.Should().HaveCount(1);
cursor1.Keys.Should().Contain("X");

cursor2.Keys.Should().HaveCount(1);
cursor2.Keys.Should().Contain("Y");
}
}
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -126,5 +126,207 @@ public void ShouldNotCommitIfError()
matchResult.Should().Be(0);
}
}

[RequireServerFact]
public void KeysShouldBeAvailableAfterRun()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
using (var txc = session.BeginTransaction())
{
var result = txc.Run("RETURN 1 As X");
result.Keys.Should().HaveCount(1);
result.Keys.Should().Contain("X");
}
}
}
}

[RequireServerFact]
public void KeysShouldBeAvailableAfterRunAndResultConsumption()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
using (var txc = session.BeginTransaction())
{
var result = txc.Run("RETURN 1 As X");
result.Keys.Should().HaveCount(1);
result.Keys.Should().Contain("X");
result.Consume();
result.Keys.Should().HaveCount(1);
result.Keys.Should().Contain("X");
}
}
}
}

[RequireServerFact]
public void KeysShouldBeAvailableAfterConsecutiveRun()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
using (var txc = session.BeginTransaction())
{
var result1 = txc.Run("RETURN 1 As X");
var result2 = txc.Run("RETURN 1 As Y");

result1.Keys.Should().HaveCount(1);
result1.Keys.Should().Contain("X");
result2.Keys.Should().HaveCount(1);
result2.Keys.Should().Contain("Y");
}
}
}
}

[RequireServerFact]
public void KeysShouldBeAvailableAfterConsecutiveRunAndResultConsumption()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
using (var txc = session.BeginTransaction())
{
var result1 = txc.Run("RETURN 1 As X");
var result2 = txc.Run("RETURN 1 As Y");

result1.Keys.Should().HaveCount(1);
result1.Keys.Should().Contain("X");
result2.Keys.Should().HaveCount(1);
result2.Keys.Should().Contain("Y");

result1.Consume();
result2.Consume();

result1.Keys.Should().HaveCount(1);
result1.Keys.Should().Contain("X");
result2.Keys.Should().HaveCount(1);
result2.Keys.Should().Contain("Y");
}
}
}
}

[RequireServerFact]
public void KeysShouldBeAvailableAfterConsecutiveRunNoOrder()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
using (var txc = session.BeginTransaction())
{
var result1 = txc.Run("RETURN 1 As X");
var result2 = txc.Run("RETURN 1 As Y");

result2.Keys.Should().HaveCount(1);
result2.Keys.Should().Contain("Y");
result1.Keys.Should().HaveCount(1);
result1.Keys.Should().Contain("X");
}
}
}
}

[RequireServerFact]
public void KeysShouldBeAvailableAfterConsecutiveRunAndResultConsumptionNoOrder()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
using (var txc = session.BeginTransaction())
{
var result1 = txc.Run("RETURN 1 As X");
var result2 = txc.Run("RETURN 1 As Y");

result2.Keys.Should().HaveCount(1);
result2.Keys.Should().Contain("Y");
result1.Keys.Should().HaveCount(1);
result1.Keys.Should().Contain("X");

result2.Consume();
result1.Consume();

result2.Keys.Should().HaveCount(1);
result2.Keys.Should().Contain("Y");
result1.Keys.Should().HaveCount(1);
result1.Keys.Should().Contain("X");
}
}
}
}

[RequireServerFact]
public async void KeysShouldBeAvailableJustAfterRunAsync()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
using (var txc = await session.BeginTransactionAsync())
{
var cursor = await txc.RunAsync("RETURN 1 As X");
cursor.Keys.Should().HaveCount(1);
cursor.Keys.Should().Contain("X");
}
}
}
}

[RequireServerFact]
public async void KeysShouldBeAvailableJustAfterConsecutiveRunAsync()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
using (var txc = await session.BeginTransactionAsync())
{
var cursor1 = await txc.RunAsync("RETURN 1 As X");
var cursor2 = await txc.RunAsync("RETURN 1 As Y");

cursor1.Keys.Should().HaveCount(1);
cursor1.Keys.Should().Contain("X");

cursor2.Keys.Should().HaveCount(1);
cursor2.Keys.Should().Contain("Y");
}
}
}
}

[RequireServerFact]
public async void KeysShouldBeAvailableJustAfterConsecutiveRunAsyncWithConsumptionInBetween()
{
using (var driver = GraphDatabase.Driver(ServerEndPoint, AuthToken))
{
using (var session = driver.Session())
{
using (var txc = await session.BeginTransactionAsync())
{
var cursor1 = await txc.RunAsync("RETURN 1 As X");
var cursor2 = await txc.RunAsync("RETURN 1 As Y");

await cursor1.ConsumeAsync();

cursor1.Keys.Should().HaveCount(1);
cursor1.Keys.Should().Contain("X");

cursor2.Keys.Should().HaveCount(1);
cursor2.Keys.Should().Contain("Y");
}
}
}
}


}
}
Loading

0 comments on commit e8f44de

Please sign in to comment.