diff --git a/testkit-backend/src/context.js b/testkit-backend/src/context.js index cf5b0cf44..e57c8649b 100644 --- a/testkit-backend/src/context.js +++ b/testkit-backend/src/context.js @@ -4,6 +4,7 @@ export default class Context { this._drivers = {} this._sessions = {} this._txs = {} + this._resolverRequests = {} this._resultObservers = {} this._errors = {} } @@ -35,6 +36,14 @@ export default class Context { return this._add(this._resultObservers, observer) } + addResolverRequest (resolve, reject) { + const id = this._add(this._resolverRequests, { + resolve, + reject + }) + return id + } + getDriver (id) { return this._drivers[id] } @@ -55,6 +64,10 @@ export default class Context { return this._errors[id] } + getResolverRequest (id) { + return this._resolverRequests[id] + } + removeDriver (id) { delete this._drivers[id] } @@ -71,6 +84,10 @@ export default class Context { delete this._resultObservers[id] } + removeResolverRequest (id) { + delete this._resolverRequests[id] + } + getResultObserversBySessionId (sessionId) { return Object.values(this._resultObservers).filter( obs => obs.sessionId === sessionId diff --git a/testkit-backend/src/request-handlers.js b/testkit-backend/src/request-handlers.js index 27853899a..c694db031 100644 --- a/testkit-backend/src/request-handlers.js +++ b/testkit-backend/src/request-handlers.js @@ -6,9 +6,17 @@ export function NewDriver (context, data, { writeResponse }) { const { uri, authorizationToken: { data: authToken }, - userAgent + userAgent, + resolverRegistered } = data - const driver = neo4j.driver(uri, authToken, { userAgent, useBigInt: true }) + const resolver = resolverRegistered + ? address => + new Promise((resolve, reject) => { + const id = context.addResolverRequest(resolve, reject) + writeResponse('ResolverResolutionRequired', { id, address }) + }) + : undefined + const driver = neo4j.driver(uri, authToken, { userAgent, resolver, useBigInt: true }) const id = context.addDriver(driver) writeResponse('Driver', { id }) } @@ -255,3 +263,12 @@ export function CheckMultiDBSupport (context, { driverId }, wire) { ) .catch(error => wire.writeError(error)) } + +export function ResolverResolutionCompleted ( + context, + { requestId, addresses }, + wire +) { + const request = context.getResolverRequest(requestId) + request.resolve(addresses) +}