Skip to content

Commit 0ec7130

Browse files
committed
Testkit: bookmark manager in the session
1 parent 391592d commit 0ec7130

File tree

5 files changed

+90
-10
lines changed

5 files changed

+90
-10
lines changed

packages/core/src/internal/connection-holder.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ class ConnectionHolder implements ConnectionHolderInterface {
122122
this._referenceCount = 0
123123
this._connectionPromise = Promise.resolve(null)
124124
this._onDatabaseNameResolved = onDatabaseNameResolved
125-
this._getConnectionAcquistionBookmarks = getConnectionAcquistionBookmarks ?? (async () => Bookmarks.empty())
125+
this._getConnectionAcquistionBookmarks = getConnectionAcquistionBookmarks ?? (() => Promise.resolve(Bookmarks.empty()))
126126
}
127127

128128
mode (): string | undefined {

packages/testkit-backend/src/context.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export default class Context {
1111
this._results = {}
1212
this._bookmarkSupplierRequests = {}
1313
this._notifyBookmarksRequests = {}
14+
this._bookmarksManagers = {}
1415
}
1516

1617
addDriver (driver) {
@@ -136,6 +137,20 @@ export default class Context {
136137
return this._notifyBookmarksRequests[id]
137138
}
138139

140+
addBookmarkManager (bookmarkManagerFactory) {
141+
this._id++
142+
this._bookmarksManagers[this._id] = bookmarkManagerFactory(this._id)
143+
return this._id
144+
}
145+
146+
getBookmarkManager (id) {
147+
return this._bookmarksManagers[id]
148+
}
149+
150+
removeBookmarkManager (id) {
151+
delete this._bookmarksManagers[id]
152+
}
153+
139154
_add (map, object) {
140155
this._id++
141156
map[this._id] = object

packages/testkit-backend/src/request-handlers-rx.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,14 @@ export {
2020
ForcedRoutingTableUpdate,
2121
ResultNext,
2222
RetryablePositive,
23-
RetryableNegative
23+
RetryableNegative,
24+
NewBookmarkManager,
25+
BookmarksSupplierCompleted,
26+
BookmarksConsumerCompleted
2427
} from './request-handlers.js'
2528

2629
export function NewSession (context, data, wire) {
27-
let { driverId, accessMode, bookmarks, database, fetchSize, impersonatedUser, ignoreBookmarkManager } = data
30+
let { driverId, accessMode, bookmarks, database, fetchSize, impersonatedUser, bookmarkManagerId } = data
2831
switch (accessMode) {
2932
case 'r':
3033
accessMode = neo4j.session.READ
@@ -36,14 +39,22 @@ export function NewSession (context, data, wire) {
3639
wire.writeBackendError('Unknown accessmode: ' + accessMode)
3740
return
3841
}
42+
let bookmarkManager
43+
if (bookmarkManagerId != null) {
44+
bookmarkManager = context.getBookmarkManager(bookmarkManagerId)
45+
if (bookmarkManager == null) {
46+
wire.writeBackendError(`Bookmark manager ${bookmarkManagerId} not found`)
47+
return
48+
}
49+
}
3950
const driver = context.getDriver(driverId)
4051
const session = driver.rxSession({
4152
defaultAccessMode: accessMode,
4253
bookmarks,
4354
database,
4455
fetchSize,
4556
impersonatedUser,
46-
ignoreBookmarkManager
57+
bookmarkManager
4758
})
4859
const id = context.addSession(session)
4960
wire.writeResponse(responses.Session({ id }))

packages/testkit-backend/src/request-handlers.js

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export function DriverClose (context, data, wire) {
107107
}
108108

109109
export function NewSession (context, data, wire) {
110-
let { driverId, accessMode, bookmarks, database, fetchSize, impersonatedUser, ignoreBookmarkManager } = data
110+
let { driverId, accessMode, bookmarks, database, fetchSize, impersonatedUser, bookmarkManagerId } = data
111111
switch (accessMode) {
112112
case 'r':
113113
accessMode = neo4j.session.READ
@@ -119,14 +119,22 @@ export function NewSession (context, data, wire) {
119119
wire.writeBackendError('Unknown accessmode: ' + accessMode)
120120
return
121121
}
122+
let bookmarkManager
123+
if (bookmarkManagerId != null) {
124+
bookmarkManager = context.getBookmarkManager(bookmarkManagerId)
125+
if (bookmarkManager == null) {
126+
wire.writeBackendError(`Bookmark manager ${bookmarkManagerId} not found`)
127+
return
128+
}
129+
}
122130
const driver = context.getDriver(driverId)
123131
const session = driver.session({
124132
defaultAccessMode: accessMode,
125133
bookmarks,
126134
database,
127135
fetchSize,
128136
impersonatedUser,
129-
ignoreBookmarkManager
137+
bookmarkManager
130138
})
131139
const id = context.addSession(session)
132140
wire.writeResponse(responses.Session({ id }))
@@ -407,6 +415,48 @@ export function ResolverResolutionCompleted (
407415
request.resolve(addresses)
408416
}
409417

418+
export function NewBookmarkManager (
419+
context,
420+
{
421+
initialBookmarks,
422+
bookmarksSupplierRegistered,
423+
bookmarksConsumerRegistered
424+
},
425+
wire
426+
) {
427+
let bookmarkManager
428+
const id = context.addBookmarkManager((bookmarkManagerId) => {
429+
let bookmarksSupplier
430+
let bookmarksConsumer
431+
if (initialBookmarks != null) {
432+
initialBookmarks = new Map(Object.entries(initialBookmarks))
433+
}
434+
if (bookmarksSupplierRegistered === true) {
435+
bookmarksSupplier = (database) =>
436+
new Promise((resolve, reject) => {
437+
const id = context.addBookmarkSupplierRequest(resolve, reject)
438+
wire.writeResponse(responses.BookmarksSupplierRequest({ id, bookmarkManagerId, database }))
439+
})
440+
}
441+
if (bookmarksConsumerRegistered === true) {
442+
bookmarksConsumer = (database, bookmarks) =>
443+
new Promise((resolve, reject) => {
444+
const id = context.addNotifyBookmarksRequest(resolve, reject)
445+
wire.writeResponse(responses.BookmarksConsumerRequest({ id, bookmarkManagerId, database, bookmarks }))
446+
})
447+
}
448+
bookmarkManager = neo4j.bookmarkManager({
449+
initialBookmarks,
450+
bookmarksConsumer,
451+
bookmarksSupplier
452+
})
453+
454+
return bookmarkManager
455+
})
456+
457+
wire.writeResponse(responses.BookmarkManager({ id }))
458+
}
459+
410460
export function BookmarksSupplierCompleted (
411461
context,
412462
{

packages/testkit-backend/src/responses.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,16 @@ export function ResolverResolutionRequired ({ id, address }) {
1414
return response('ResolverResolutionRequired', { id, address })
1515
}
1616

17-
export function BookmarksSupplierRequest ({ id, database }) {
18-
return response('BookmarksSupplierRequest', { id, database })
17+
export function BookmarkManager ({ id }) {
18+
return response('BookmarkManager', { id })
1919
}
2020

21-
export function BookmarksConsumerRequest ({ id, database, bookmarks }) {
22-
return response('BookmarksConsumerRequest', { id, database, bookmarks })
21+
export function BookmarksSupplierRequest ({ id, bookmarkManagerId, database }) {
22+
return response('BookmarksSupplierRequest', { id, bookmarkManagerId, database })
23+
}
24+
25+
export function BookmarksConsumerRequest ({ id, bookmarkManagerId, database, bookmarks }) {
26+
return response('BookmarksConsumerRequest', { id, bookmarkManagerId, database, bookmarks })
2327
}
2428

2529
export function Session ({ id }) {

0 commit comments

Comments
 (0)