diff options
author | Michael Meeks <michael.meeks@collabora.com> | 2021-01-08 13:14:59 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2021-01-16 12:18:47 +0000 |
commit | 136f20b3869b6d9f72974e3ff09df0ae3d24d866 (patch) | |
tree | 0a211fd2c0c03df85c46fe69000934854cba2af4 | |
parent | Start of using NodeJS to do load simulation. (diff) | |
download | online-136f20b3869b6d9f72974e3ff09df0ae3d24d866.tar.gz online-136f20b3869b6d9f72974e3ff09df0ae3d24d866.zip |
Use jsdom to load and execute our CSS, HTML and JS.
Change-Id: Ia7414e1fd19bf7ebfa29274d1acac5cee4837341
Signed-off-by: Michael Meeks <michael.meeks@collabora.com>
-rw-r--r-- | configure.ac | 1 | ||||
-rwxr-xr-x | coolstress.in | 14 | ||||
-rw-r--r-- | loleaflet/Makefile.am | 7 | ||||
-rw-r--r-- | loleaflet/js/global.js | 2 | ||||
-rw-r--r-- | loleaflet/package.json | 1 | ||||
-rw-r--r-- | loleaflet/test/load.js | 119 |
6 files changed, 90 insertions, 54 deletions
diff --git a/configure.ac b/configure.ac index eebe661c59..724643cd7c 100644 --- a/configure.ac +++ b/configure.ac @@ -1194,6 +1194,7 @@ if test "$enable_androidapp" = "yes"; then fi AC_CONFIG_FILES([test/run_unit.sh],[chmod +x test/run_unit.sh]) +AC_CONFIG_FILES([coolstress],[chmod +x coolstress]) AC_OUTPUT diff --git a/coolstress.in b/coolstress.in new file mode 100755 index 0000000000..1fc3231967 --- /dev/null +++ b/coolstress.in @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# This is a wrapper - please edit coolstress.in + +prefix="@prefix@" +datadir="@datadir@" +datarootdir="@datarootdir@" +pkgdatadir="$(datadir)/@PACKAGE@" + +# to allow runnning when not installed +abs_top_builddir="@abs_top_builddir@" +abs_top_srcdir="@abs_top_srcdir@" + +node --inspect $abs_top_srcdir/loleaflet/test/load.js "$abs_top_srcdir" "$abs_top_builddir" $* diff --git a/loleaflet/Makefile.am b/loleaflet/Makefile.am index b7c438bcd5..ae993b6526 100644 --- a/loleaflet/Makefile.am +++ b/loleaflet/Makefile.am @@ -684,10 +684,3 @@ $(abs_srcdir)/admin/jsconfig.json: \"exclude\" : [\"node_modules\"]\n}" > $@ jsconfig: $(abs_srcdir)/jsconfig.json $(abs_srcdir)/admin/jsconfig.json - -load-test: $(LOLEAFLET_JS) - @(cd test ; node ./load.js \ - $(abspath $(srcdir)/js/global.js) \ - $(abspath $(NODE_MODULES_JS_SRC)) \ - $(abspath $(LOLEAFLET_LIBS_JS_SRC)) \ - $(abspath $(LOLEAFLET_JS))) diff --git a/loleaflet/js/global.js b/loleaflet/js/global.js index 0ef024f83a..e9a030dd29 100644 --- a/loleaflet/js/global.js +++ b/loleaflet/js/global.js @@ -170,7 +170,7 @@ if (global.mode.isChromebook()) return false; - if (L.Browser.mobile && L.Browser.cypressTest) { + if (global.L.Browser.mobile && L.Browser.cypressTest) { return true; } diff --git a/loleaflet/package.json b/loleaflet/package.json index 5a944c145f..85bc41d019 100644 --- a/loleaflet/package.json +++ b/loleaflet/package.json @@ -39,6 +39,7 @@ ], "license": "BSD-2-Clause", "dependencies": { + "canvas": "^2.6.1", "jsdom": "^16.4.0" } } diff --git a/loleaflet/test/load.js b/loleaflet/test/load.js index 7fca254055..38b115bbf4 100644 --- a/loleaflet/test/load.js +++ b/loleaflet/test/load.js @@ -1,55 +1,82 @@ -console.log('Startup') - var vm = require("vm"); var fs = require("fs"); -// stubs -/*navigator = { - userAgent: 'loadtest', - vendor: 'collabora', - platform: 'Linux' -}; */ +var top_srcdir = process.argv[2]; +var top_builddir = process.argv[3]; + +var to_load = top_srcdir + '/test/data/hello-world.ods'; +if (process.argv.length > 4) { + to_load = process.argv[4] +} // jsdom for browser emulation const jsdom = require('jsdom'); const { JSDOM } = jsdom; -window = new JSDOM(`...`).window; -window.host = 'localhost'; -window.location = 'https://localhost:9980'; - -// cf. loleaflet.hml - Window properties: -window.host = ''; -window.serviceRoot = ''; -window.versionPath = '6.4.3'; -window.accessToken = ''; -window.accessTokenTTL = ''; -window.accessHeader = ''; -window.loleafletLogging = 'true'; -window.enableWelcomeMessage = false; -window.enableWelcomeMessageButton = false; -window.outOfFocusTimeoutSecs = 1000000; -window.idleTimeoutSecs = 1000000; -window.reuseCookies = ''; -window.protocolDebug = false; -window.frameAncestors = ''; -window.socketProxy = false; -window.tileSize = 256; -window.uiDefaults = {}; - -// stub the DOM left and right: - -context = vm.createContext(window, {name: 'simulation' }) - -L = { Browser: {} }; - -for (var i = 2; i < process.argv.length; ++i) -{ - console.log('load "' + process.argv[i] + '"'); - - var data = fs.readFileSync(process.argv[i]); - const script = new vm.Script(data); - script.runInContext(context); -} -console.log('Bootstrapped mobile: ' + L.Browser.mobile + ' desktop ' + window.mode.isDesktop()); +var data = fs.readFileSync(top_builddir + '/loleaflet/dist/loleaflet.html', {encoding: 'utf8'}); + +data = data.replace(/%SERVICE_ROOT%\/loleaflet\/%VERSION%/g, top_builddir + '/loleaflet/dist'); +data = data.replace(/%SERVICE_ROOT%/g, ''); +data = data.replace(/%VERSION%/g, 'dist'); +data = data.replace(/%HOST%/g, 'wss://localhost:9980'); +data = data.replace(/%ACCESS_TOKEN%/g, ''); +data = data.replace(/%ACCESS_TOKEN_TTL%/g, '0'); +data = data.replace(/%ACCESS_HEADER%/g, ''); +data = data.replace(/%LOLEAFLET_LOGGING%/g, 'true'); +data = data.replace(/%ENABLE_WELCOME_MSG%/g, 'false'); +data = data.replace(/%ENABLE_WELCOME_MSG%/g, 'false'); +data = data.replace(/%ENABLE_WELCOME_MSG_BTN%/g, 'false'); +data = data.replace(/%USER_INTERFACE_MODE%/g, ''); +data = data.replace(/%OUT_OF_FOCUS_TIMEOUT_SECS%/g, '1000000'); +data = data.replace(/%IDLE_TIMEOUT_SECS%/g, '1000000'); +data = data.replace(/%REUSE_COOKIES%/g, 'false'); +data = data.replace(/%PROTOCOL_DEBUG%/g, 'true'); +data = data.replace(/%FRAME_ANCESTORS%/g, ''); +data = data.replace(/%SOCKET_PROXY%/g, 'false'); +data = data.replace(/%UI_DEFAULTS%/g, '{}'); + +window = new JSDOM(data, + { runScripts: 'dangerously', + pretendToBeVisual: true, + includeNodeLocations: true, + url: 'file:///tmp/notthere/loleaflet.html?file_path=file:///' + to_load, + resources: 'usable', + beforeParse(window) { + console.debug('Before script parsing'); + }, + done(errors, window) { + console.debug('Errors ' + errors); + } + }).window; + +// Make it possible to mock sizing properties +Object.defineProperty(window.HTMLElement.prototype, "clientWidth", { + get: function() { + return this.___clientWidth || 0; + } +}); +Object.defineProperty(window.HTMLElement.prototype, "clientHeight", { + get: function() { + return this.___clientHeight || 0; + } +}); + +console.log('Finished bootstrapping: ' + window.L.Browser.mobile + ' desktop ' + window.mode.isDesktop() + ' now running'); +console.debug('Window size ' + window.innerWidth + 'x' + window.innerHeight); + +window.HTMLElement.prototype.getBoundingClientRect = function() { + console.debug('getBoundingClientRect for ' + this.id); + return { + width: 0, height: 0, top: 0, left: 0 + }; +}; +window.onload = function() { + console.debug('socket ' + window.socket); + map = window.socket._map; + + console.debug('Initialize / size map pieces ' + map); + // Force some sizes onto key pieces: + map._container.___clientWidth = 1024; + map._container.___clientHeight = 768; +}; |