Skip to content

Commit 412662a

Browse files
committed
work in progress
1 parent 7b8e061 commit 412662a

File tree

7 files changed

+77
-11
lines changed

7 files changed

+77
-11
lines changed

src/Bolt/BoltConnection.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,9 @@ private function prepareForBegin(): void
223223
*/
224224
public function begin(?string $database, ?float $timeout, BookmarkHolder $holder, ?array $txMetaData): void
225225
{
226-
$extra = $this->buildRunExtra($database, $timeout, $holder, null, $txMetaData, true);
226+
$this->consumeResults();
227+
228+
$extra = $this->buildRunExtra($database, $timeout, $holder, $this->getAccessMode(), $txMetaData);
227229
$message = $this->messageFactory->createBeginMessage($extra);
228230
$response = $message->send()->getResponse();
229231
$this->assertNoFailure($response);
@@ -372,6 +374,7 @@ private function buildRunExtra(?string $database, ?float $timeout, BookmarkHolde
372374
$extra['tx_metadata'] = $metadataArray;
373375
}
374376
}
377+
375378
}
376379

377380
return $extra;

src/Databags/TransactionConfiguration.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,15 @@ public function getTimeout(): ?float
6767
{
6868
return $this->timeout;
6969
}
70+
/**
71+
* Get the configured bookmarks for causal consistency.
72+
*
73+
* @return array<string>|null
74+
*/
75+
public function getBookmarks(): ?array
76+
{
77+
return $this->bookmarks;
78+
}
7079

7180
/**
7281
* Creates a new transaction object with the provided timeout.

testkit-backend/src/Handlers/SessionReadTransaction.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ public function handle($request): TestkitResponseInterface
5252
$config = $config->withMetaData($request->getTxMeta());
5353
}
5454

55+
if ($request->getBookmarks()) {
56+
$config = $config->withBookmarks($request->getBookmarks());
57+
}
58+
5559
$id = Uuid::v4();
5660
try {
5761
// TODO - Create beginReadTransaction and beginWriteTransaction

testkit-backend/src/Requests/SessionBeginTransactionRequest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public function getTxMeta(): iterable
4848
return $this->txMeta ?? [];
4949
}
5050

51-
public function getTimeout(): ?int
51+
public function getTimeout(): int|null
5252
{
5353
return $this->timeout;
5454
}

testkit-backend/src/Requests/SessionReadTransactionRequest.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ final class SessionReadTransactionRequest
2121
/** @var iterable<string, array|scalar|null> */
2222
private iterable $txMeta;
2323
private ?int $timeout;
24+
private array $bookmarks; // ADD THIS
25+
2426

2527
/**
2628
* @param iterable<string, array|scalar|null>|null $txMeta
@@ -29,10 +31,14 @@ public function __construct(
2931
Uuid $sessionId,
3032
?iterable $txMeta = null,
3133
?int $timeout = null,
34+
array $bookmarks = [] // ADD THIS
35+
3236
) {
3337
$this->sessionId = $sessionId;
3438
$this->txMeta = $txMeta ?? [];
3539
$this->timeout = $timeout;
40+
$this->bookmarks = $bookmarks; // ADD THIS
41+
3642
}
3743

3844
public function getSessionId(): Uuid
@@ -52,4 +58,9 @@ public function getTimeout(): ?int
5258
{
5359
return $this->timeout;
5460
}
61+
62+
public function getBookmarks(): array // ADD THIS
63+
{
64+
return $this->bookmarks;
65+
}
5566
}

testkit-backend/testkit.sh

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,22 @@ EXIT_CODE=0
8181
#python3 -m unittest tests.stub.basic_query.test_basic_query.TestBasicQuery.test_4x4_populates_path_element_ids_with_long
8282

8383

84+
#bookmarks
85+
#TestBookmarksV4
86+
#python3 -m unittest tests.stub.bookmarks.test_bookmarks_v4.TestBookmarksV4.test_bookmarks_on_unused_sessions_are_returned #fixed
87+
#python3 -m unittest tests.stub.bookmarks.test_bookmarks_v4.TestBookmarksV4.test_bookmarks_session_run #fixed
88+
#python3 -m unittest tests.stub.bookmarks.test_bookmarks_v4.TestBookmarksV4.test_bookmarks_tx_run #fixed
89+
#python3 -m unittest tests.stub.bookmarks.test_bookmarks_v4.TestBookmarksV4.test_sequence_of_writing_and_reading_tx
90+
91+
#TestBookmarksV5
92+
##
93+
#python3 -m unittest tests.stub.bookmarks.test_bookmarks_v5.TestBookmarksV5.test_bookmarks_can_be_set # fixed
94+
#python3 -m unittest tests.stub.bookmarks.test_bookmarks_v5.TestBookmarksV5.test_last_bookmark #fixed
95+
python3 -m unittest tests.stub.bookmarks.test_bookmarks_v5.TestBookmarksV5.test_send_and_receive_bookmarks_read_tx #fixed
96+
#python3 -m unittest tests.stub.bookmarks.test_bookmarks_v5.TestBookmarksV5.test_send_and_receive_bookmarks_write_tx
97+
#python3 -m unittest tests.stub.bookmarks.test_bookmarks_v5.TestBookmarksV5.test_sequence_of_writing_and_reading_tx
98+
#python3 -m unittest tests.stub.bookmarks.test_bookmarks_v5.TestBookmarksV5.test_send_and_receive_multiple_bookmarks_write_tx
99+
84100
#test-session-run
85101
#python3 -m unittest tests.stub.session_run.test_session_run.TestSessionRun.test_discard_on_session_close_untouched_result
86102
#python3 -m unittest tests.stub.session_run.test_session_run.TestSessionRun.test_discard_on_session_close_unfinished_result
@@ -89,10 +105,10 @@ EXIT_CODE=0
89105

90106
#bookmarks
91107
#TestBookmarksV4
92-
python3 -m unittest tests.stub.bookmarks.test_bookmarks_v4.TestBookmarksV4.test_bookmarks_on_unused_sessions_are_returned
93-
python3 -m unittest tests.stub.bookmarks.test_bookmarks_v4.TestBookmarksV4.test_bookmarks_session_run
94-
python3 -m unittest tests.stub.bookmarks.test_bookmarks_v4.TestBookmarksV4.test_bookmarks_tx_run
95-
python3 -m unittest tests.stub.bookmarks.test_bookmarks_v4.TestBookmarksV4.test_sequence_of_writing_and_reading_tx
108+
#python3 -m unittest tests.stub.bookmarks.test_bookmarks_v4.TestBookmarksV4.test_bookmarks_on_unused_sessions_are_returned
109+
#python3 -m unittest tests.stub.bookmarks.test_bookmarks_v4.TestBookmarksV4.test_bookmarks_session_run
110+
#python3 -m unittest tests.stub.bookmarks.test_bookmarks_v4.TestBookmarksV4.test_bookmarks_tx_run
111+
#python3 -m unittest tests.stub.bookmarks.test_bookmarks_v4.TestBookmarksV4.test_sequence_of_writing_and_reading_tx
96112

97113
exit $EXIT_CODE
98114

tests/Integration/ComplexQueryTest.php

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
namespace Laudis\Neo4j\Tests\Integration;
1515

16+
use Bolt\error\ConnectionTimeoutException;
17+
use Exception;
1618
use Generator;
1719

1820
use function getenv;
@@ -266,16 +268,37 @@ public function testDiscardAfterTimeout(): void
266268
$this->markTestSkipped('Memory bug in CI');
267269
}
268270

271+
// First, let's debug what timeout value is actually being sent
272+
$config = TransactionConfiguration::default()->withTimeout(2);
273+
echo "Config timeout: " . $config->getTimeout() . " seconds\n";
274+
269275
try {
270-
$this->getSession(['bolt', 'neo4j'])
271-
->run('CALL apoc.util.sleep(3000) RETURN 5 as x', [], TransactionConfiguration::default()->withTimeout(2))
272-
->first()
273-
->get('x');
276+
$result = $this->getSession(['bolt', 'neo4j'])
277+
->run('CALL apoc.util.sleep(5000) RETURN 5 as x', [], $config);
278+
279+
echo "Query started, attempting to get first result...\n";
280+
$firstResult = $result->first();
281+
echo "Got first result, attempting to get 'x' value...\n";
282+
$value = $firstResult->get('x');
283+
echo "Successfully got value: " . $value . "\n";
284+
285+
// If we reach here, no timeout occurred
286+
$this->fail('Query completed successfully - no timeout occurred. This suggests the timeout is not being applied correctly.');
287+
274288
} catch (Neo4jException $e) {
289+
echo "Neo4jException caught: " . $e->getMessage() . "\n";
290+
echo "Neo4j Code: " . $e->getNeo4jCode() . "\n";
275291
self::assertStringContainsString('Neo.ClientError.Transaction.TransactionTimedOut', $e->getNeo4jCode());
292+
293+
} catch (ConnectionTimeoutException $e) {
294+
echo "ConnectionTimeoutException: " . $e->getMessage() . "\n";
295+
$this->fail('Connection timeout occurred instead of transaction timeout');
296+
297+
} catch (Exception $e) {
298+
echo "Other exception: " . get_class($e) . " - " . $e->getMessage() . "\n";
299+
throw $e; // Re-throw for debugging
276300
}
277301
}
278-
279302
public function testTimeoutNoReturn(): void
280303
{
281304
$result = $this->getSession(['bolt', 'neo4j'])

0 commit comments

Comments
 (0)