From c1d0629c7d0d3d984405c8c41f7a3d8dbee36bdd Mon Sep 17 00:00:00 2001 From: Antonio Barcelos Date: Thu, 2 Dec 2021 19:35:44 +0100 Subject: [PATCH 1/7] testkit-backend: Enabling skip different tests for browser and node --- packages/testkit-backend/src/context.js | 7 ++++- .../testkit-backend/src/controller/local.js | 5 ++-- packages/testkit-backend/src/index.js | 6 +++++ .../testkit-backend/src/request-handlers.js | 4 +-- .../src/skipped-tests/browser.js | 9 +++++++ .../common.js} | 26 ++----------------- .../src/skipped-tests/index.js | 19 ++++++++++++++ .../testkit-backend/src/skipped-tests/skip.js | 21 +++++++++++++++ testkit/common.py | 12 +++++++-- 9 files changed, 78 insertions(+), 31 deletions(-) create mode 100644 packages/testkit-backend/src/skipped-tests/browser.js rename packages/testkit-backend/src/{skipped-tests.js => skipped-tests/common.js} (83%) create mode 100644 packages/testkit-backend/src/skipped-tests/index.js create mode 100644 packages/testkit-backend/src/skipped-tests/skip.js diff --git a/packages/testkit-backend/src/context.js b/packages/testkit-backend/src/context.js index e57c8649b..c13bff92e 100644 --- a/packages/testkit-backend/src/context.js +++ b/packages/testkit-backend/src/context.js @@ -1,5 +1,5 @@ export default class Context { - constructor () { + constructor (shouldRunTest) { this._id = 0 this._drivers = {} this._sessions = {} @@ -7,6 +7,7 @@ export default class Context { this._resolverRequests = {} this._resultObservers = {} this._errors = {} + this._shouldRunTest = shouldRunTest } addDriver (driver) { @@ -98,6 +99,10 @@ export default class Context { return Object.values(this._txs).filter(tx => tx.sessionId === sessionId) } + getShouldRunTestFunction() { + return this._shouldRunTest + } + _add (map, object) { this._id++ map[this._id] = object diff --git a/packages/testkit-backend/src/controller/local.js b/packages/testkit-backend/src/controller/local.js index aed4a4a80..e32be11fd 100644 --- a/packages/testkit-backend/src/controller/local.js +++ b/packages/testkit-backend/src/controller/local.js @@ -9,14 +9,15 @@ import Controller from './interface' */ export default class LocalController extends Controller { - constructor(requestHandlers = {}) { + constructor(requestHandlers = {}, shouldRunTest = () => {}) { super() this._requestHandlers = requestHandlers + this._shouldRunTest = shouldRunTest this._contexts = new Map() } openContext (contextId) { - this._contexts.set(contextId, new Context()) + this._contexts.set(contextId, new Context(shouldRunTest)) } closeContext (contextId) { diff --git a/packages/testkit-backend/src/index.js b/packages/testkit-backend/src/index.js index e4f3928f7..b0b6dd78d 100644 --- a/packages/testkit-backend/src/index.js +++ b/packages/testkit-backend/src/index.js @@ -1,6 +1,7 @@ import Backend from './backend' import { SocketChannel, WebSocketChannel } from './channel' import { LocalController, RemoteController } from './controller' +import { getShouldRunTest } from './skipped-tests' import * as REQUEST_HANDLERS from './request-handlers' /** @@ -11,6 +12,11 @@ function main( ) { const channelType = process.env.CHANNEL_TYPE || 'SOCKET' const backendPort = process.env.BACKEND_PORT || 9876 const webserverPort = process.env.WEB_SERVER_PORT || 8000 + const driverDescriptor = process.env.DRIVER_DESCRIPTOR || '' + const driverDescriptorList = driverDescriptor + .split(',').map(s => s.trim().toLowerCase()) + + const shouldRunTest = getShouldRunTest(driverDescriptorList) const newChannel = () => { if ( channelType.toUpperCase() === 'WEBSOCKET' ) { diff --git a/packages/testkit-backend/src/request-handlers.js b/packages/testkit-backend/src/request-handlers.js index 5587eb5b5..1d1fd43d5 100644 --- a/packages/testkit-backend/src/request-handlers.js +++ b/packages/testkit-backend/src/request-handlers.js @@ -1,7 +1,6 @@ import neo4j from './neo4j' import ResultObserver from './result-observer.js' import { cypherToNative, nativeToCypher } from './cypher-native-binders.js' -import { shouldRunTest } from './skipped-tests' import tls from 'tls' const SUPPORTED_TLS = (() => { @@ -302,7 +301,8 @@ export function SessionWriteTransaction (context, data, wire) { .catch(error => wire.writeError(error)) } -export function StartTest (_, { testName }, wire) { +export function StartTest (context, { testName }, wire) { + const shouldRunTest = context.getShouldRunTestFunction() shouldRunTest(testName, { onRun: () => wire.writeResponse('RunTest', null), onSkip: reason => wire.writeResponse('SkipTest', { reason }) diff --git a/packages/testkit-backend/src/skipped-tests/browser.js b/packages/testkit-backend/src/skipped-tests/browser.js new file mode 100644 index 000000000..ef0b4ea88 --- /dev/null +++ b/packages/testkit-backend/src/skipped-tests/browser.js @@ -0,0 +1,9 @@ +import skip, { ifStartsWith } from './skip' +const skippedTests = [ + skip( + 'Stub Tests not implemented for browser', + ifStartsWith('stub') + ) +] + +export default skippedTests diff --git a/packages/testkit-backend/src/skipped-tests.js b/packages/testkit-backend/src/skipped-tests/common.js similarity index 83% rename from packages/testkit-backend/src/skipped-tests.js rename to packages/testkit-backend/src/skipped-tests/common.js index 778acf6c3..2e888e054 100644 --- a/packages/testkit-backend/src/skipped-tests.js +++ b/packages/testkit-backend/src/skipped-tests/common.js @@ -1,22 +1,4 @@ -function ifEndsWith (suffix) { - return testName => testName.endsWith(suffix) -} - -function ifStartsWith (prefix) { - return testName => testName.startsWith(prefix) -} - -function ifEquals (expectedName) { - return testName => testName === expectedName -} - -function or () { - return testName => [...arguments].find(predicate => predicate(testName)) -} - -function skip (reason, ...predicate) { - return { reason, predicate: or(...predicate) } -} +import skip, { ifEquals, ifEndsWith } from './skip' const skippedTests = [ skip( @@ -109,8 +91,4 @@ const skippedTests = [ ) ] -export function shouldRunTest (testName, { onRun, onSkip }) { - const { reason } = - skippedTests.find(({ predicate }) => predicate(testName)) || {} - !reason ? onRun() : onSkip(reason) -} +export default skippedTests diff --git a/packages/testkit-backend/src/skipped-tests/index.js b/packages/testkit-backend/src/skipped-tests/index.js new file mode 100644 index 000000000..33fefc9a1 --- /dev/null +++ b/packages/testkit-backend/src/skipped-tests/index.js @@ -0,0 +1,19 @@ +import commonSkippedTests from './common' +import browserSkippedTests from './browser' + +const skippedTestsByContext = new Map({ + 'browser': browserSkippedTests +}) + +export function getShouldRunTest (contexts) { + const skippedTests = contexts + .filter(context => skippedTestsByContext.has(context)) + .map(context => skippedTestsByContext.get(context)) + .reduce((previous, current) => [ ...previous, current ], commonSkippedTests) + + return (testName, { onRun, onSkip }) => { + const { reason } = + skippedTests.find(({ predicate }) => predicate(testName)) || {} + !reason ? onRun() : onSkip(reason) + } +} diff --git a/packages/testkit-backend/src/skipped-tests/skip.js b/packages/testkit-backend/src/skipped-tests/skip.js new file mode 100644 index 000000000..adb997a97 --- /dev/null +++ b/packages/testkit-backend/src/skipped-tests/skip.js @@ -0,0 +1,21 @@ +export function ifEndsWith (suffix) { + return testName => testName.endsWith(suffix) +} + +export function ifStartsWith (prefix) { + return testName => testName.startsWith(prefix) +} + +export function ifEquals (expectedName) { + return testName => testName === expectedName +} + +export function or () { + return testName => [...arguments].find(predicate => predicate(testName)) +} + +export function skip (reason, ...predicate) { + return { reason, predicate: or(...predicate) } +} + +export default skip diff --git a/testkit/common.py b/testkit/common.py index a6e58adff..88f66a69c 100644 --- a/testkit/common.py +++ b/testkit/common.py @@ -27,11 +27,13 @@ def _runIn(args, env=None): return _runIn -def run_in_driver_repo(args, env=None, check=True): +def run_in_driver_repo(args, env={}, check=True): + env = {**env, "DRIVER_DESCRIPTOR": get_driver_descriptor()} return run(args, env, DRIVER_REPO, check=check) -def open_proccess_in_driver_repo(args, env=None): +def open_proccess_in_driver_repo(args, env={}): + env = {**env, "DRIVER_DESCRIPTOR": get_driver_descriptor()} return subprocess.Popen(args, cwd=DRIVER_REPO, env=env, stderr=sys.stderr, stdout=sys.stdout) @@ -42,3 +44,9 @@ def is_lite(): def is_browser(): return is_enabled(os.environ.get("TEST_DRIVER_BROWSER", "false")) + + +def get_driver_descriptor(): + descriptor = "lite" if is_lite() else "full" + descriptor += ",browser" if is_browser() else ",node" + return descriptor From 0fa96ae427dbde304a5da3e914f3c763f9c6e9da Mon Sep 17 00:00:00 2001 From: Antonio Barcelos Date: Fri, 3 Dec 2021 10:24:36 +0100 Subject: [PATCH 2/7] Fix env variable --- testkit/common.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/testkit/common.py b/testkit/common.py index 88f66a69c..d757fe504 100644 --- a/testkit/common.py +++ b/testkit/common.py @@ -27,12 +27,12 @@ def _runIn(args, env=None): return _runIn -def run_in_driver_repo(args, env={}, check=True): +def run_in_driver_repo(args, env=os.environ, check=True): env = {**env, "DRIVER_DESCRIPTOR": get_driver_descriptor()} return run(args, env, DRIVER_REPO, check=check) -def open_proccess_in_driver_repo(args, env={}): +def open_proccess_in_driver_repo(args, env=os.environ): env = {**env, "DRIVER_DESCRIPTOR": get_driver_descriptor()} return subprocess.Popen(args, cwd=DRIVER_REPO, env=env, stderr=sys.stderr, stdout=sys.stdout) From b33b7f6efdeb7540f592c6d2e2f410bf43b94d1d Mon Sep 17 00:00:00 2001 From: Antonio Barcelos Date: Fri, 3 Dec 2021 11:38:59 +0100 Subject: [PATCH 3/7] Fix spread --- packages/testkit-backend/src/skipped-tests/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/testkit-backend/src/skipped-tests/index.js b/packages/testkit-backend/src/skipped-tests/index.js index 33fefc9a1..b7554e437 100644 --- a/packages/testkit-backend/src/skipped-tests/index.js +++ b/packages/testkit-backend/src/skipped-tests/index.js @@ -9,7 +9,7 @@ export function getShouldRunTest (contexts) { const skippedTests = contexts .filter(context => skippedTestsByContext.has(context)) .map(context => skippedTestsByContext.get(context)) - .reduce((previous, current) => [ ...previous, current ], commonSkippedTests) + .reduce((previous, current) => [ ...previous, ...current ], commonSkippedTests) return (testName, { onRun, onSkip }) => { const { reason } = From c24025fd411dff9d57597bae9c19de225eead790 Mon Sep 17 00:00:00 2001 From: Antonio Barcelos Date: Fri, 3 Dec 2021 11:52:54 +0100 Subject: [PATCH 4/7] Fix map creation --- packages/testkit-backend/src/skipped-tests/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/testkit-backend/src/skipped-tests/index.js b/packages/testkit-backend/src/skipped-tests/index.js index b7554e437..946f114ba 100644 --- a/packages/testkit-backend/src/skipped-tests/index.js +++ b/packages/testkit-backend/src/skipped-tests/index.js @@ -1,9 +1,9 @@ import commonSkippedTests from './common' import browserSkippedTests from './browser' -const skippedTestsByContext = new Map({ - 'browser': browserSkippedTests -}) +const skippedTestsByContext = new Map([ + ['browser', browserSkippedTests] +]) export function getShouldRunTest (contexts) { const skippedTests = contexts From 83b7c9bea30ca7d0e9eab808fd7bbdf3a66e34a0 Mon Sep 17 00:00:00 2001 From: Antonio Barcelos Date: Fri, 3 Dec 2021 13:38:49 +0100 Subject: [PATCH 5/7] Treating correctly the uncaughtException --- packages/testkit-backend/src/controller/local.js | 2 +- packages/testkit-backend/src/index.js | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/testkit-backend/src/controller/local.js b/packages/testkit-backend/src/controller/local.js index e32be11fd..1c59ede1b 100644 --- a/packages/testkit-backend/src/controller/local.js +++ b/packages/testkit-backend/src/controller/local.js @@ -17,7 +17,7 @@ export default class LocalController extends Controller { } openContext (contextId) { - this._contexts.set(contextId, new Context(shouldRunTest)) + this._contexts.set(contextId, new Context(this._shouldRunTest)) } closeContext (contextId) { diff --git a/packages/testkit-backend/src/index.js b/packages/testkit-backend/src/index.js index b0b6dd78d..0f2db7c53 100644 --- a/packages/testkit-backend/src/index.js +++ b/packages/testkit-backend/src/index.js @@ -30,7 +30,7 @@ function main( ) { if ( testEnviroment.toUpperCase() === 'REMOTE' ) { return new RemoteController(webserverPort) } - return new LocalController(REQUEST_HANDLERS) + return new LocalController(REQUEST_HANDLERS, shouldRunTest) } const backend = new Backend(newController, newChannel) @@ -45,7 +45,10 @@ function main( ) { process.on('SIGINT', process.exit.bind(process)); process.on('SIGUSR1', process.exit.bind(process)); process.on('SIGUSR2', process.exit.bind(process)); - process.on('uncaughtException', process.exit.bind(process)); + process.on('uncaughtException', exception => { + console.error('UncaughtException', exception) + process.exit() + }); } } From 777e3b76eb56eae5ef2c4fe9a124af9ec3ddfd90 Mon Sep 17 00:00:00 2001 From: Antonio Barcelos Date: Fri, 3 Dec 2021 14:58:13 +0100 Subject: [PATCH 6/7] Move configuration to rollup for making it easier to use --- packages/testkit-backend/rollup.config.js | 6 ++++++ testkit/common.py | 12 ++---------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/testkit-backend/rollup.config.js b/packages/testkit-backend/rollup.config.js index ae5295236..6b9337997 100644 --- a/packages/testkit-backend/rollup.config.js +++ b/packages/testkit-backend/rollup.config.js @@ -3,6 +3,11 @@ import commonjs from '@rollup/plugin-commonjs' import polyfillNode from 'rollup-plugin-polyfill-node' import injectProcessEnv from 'rollup-plugin-inject-process-env' +function getDescriptor () { + const currentDescriptor = process.env.DRIVER_DESCRIPTOR || '' + return currentDescriptor + ',browser' +} + export default { input: 'src/index.js', output: { @@ -22,6 +27,7 @@ export default { ...process.env, TEST_ENVIRONMENT: 'LOCAL', CHANNEL_TYPE: 'WEBSOCKET', + DRIVER_DESCRIPTOR: getDescriptor(), BACKEND_PORT: process.env.WEB_SERVER_PORT || 8000 }) ] diff --git a/testkit/common.py b/testkit/common.py index d757fe504..a6e58adff 100644 --- a/testkit/common.py +++ b/testkit/common.py @@ -27,13 +27,11 @@ def _runIn(args, env=None): return _runIn -def run_in_driver_repo(args, env=os.environ, check=True): - env = {**env, "DRIVER_DESCRIPTOR": get_driver_descriptor()} +def run_in_driver_repo(args, env=None, check=True): return run(args, env, DRIVER_REPO, check=check) -def open_proccess_in_driver_repo(args, env=os.environ): - env = {**env, "DRIVER_DESCRIPTOR": get_driver_descriptor()} +def open_proccess_in_driver_repo(args, env=None): return subprocess.Popen(args, cwd=DRIVER_REPO, env=env, stderr=sys.stderr, stdout=sys.stdout) @@ -44,9 +42,3 @@ def is_lite(): def is_browser(): return is_enabled(os.environ.get("TEST_DRIVER_BROWSER", "false")) - - -def get_driver_descriptor(): - descriptor = "lite" if is_lite() else "full" - descriptor += ",browser" if is_browser() else ",node" - return descriptor From 1764290494457d7f8611ff51290db5e35f8a979f Mon Sep 17 00:00:00 2001 From: Antonio Barcelos Date: Fri, 3 Dec 2021 14:59:56 +0100 Subject: [PATCH 7/7] Remove also tls --- packages/testkit-backend/src/skipped-tests/browser.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/testkit-backend/src/skipped-tests/browser.js b/packages/testkit-backend/src/skipped-tests/browser.js index ef0b4ea88..036029007 100644 --- a/packages/testkit-backend/src/skipped-tests/browser.js +++ b/packages/testkit-backend/src/skipped-tests/browser.js @@ -3,6 +3,10 @@ const skippedTests = [ skip( 'Stub Tests not implemented for browser', ifStartsWith('stub') + ), + skip( + 'TLS Tests not implemented for browwer', + ifStartsWith('tls') ) ]