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-08 21:59:28 +0000 |
commit | 125bc22117189aefe85dc7707b140c602b171e93 (patch) | |
tree | da94b554644ca0e8cb7c64544aa77a4aa1d0aa3c | |
parent | Start of using NodeJS to do load simulation. (diff) | |
download | online-private/mmeeks/loadtest.tar.gz online-private/mmeeks/loadtest.zip |
Use jsdom to load and execute our CSS, HTML and JS.
private/mmeeks/loadtest
Change-Id: Ia7414e1fd19bf7ebfa29274d1acac5cee4837341
-rw-r--r-- | loleaflet/Makefile.am | 6 | ||||
-rw-r--r-- | loleaflet/js/global.js | 5 | ||||
-rw-r--r-- | loleaflet/package.json | 1 | ||||
-rw-r--r-- | loleaflet/test/load.js | 117 |
4 files changed, 75 insertions, 54 deletions
diff --git a/loleaflet/Makefile.am b/loleaflet/Makefile.am index 5001b8fec9..50e1cfa0c3 100644 --- a/loleaflet/Makefile.am +++ b/loleaflet/Makefile.am @@ -686,8 +686,4 @@ $(abs_srcdir)/admin/jsconfig.json: 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))) + @(cd test ; node --inspect ./load.js $(abspath $(top_srcdir)) $(abspath $(top_builddir))) diff --git a/loleaflet/js/global.js b/loleaflet/js/global.js index 0ef024f83a..bc379d67be 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; } @@ -653,10 +653,11 @@ // If not debug, don't print anything on the console // except in tile debug mode (Ctrl-Shift-Alt-d) console.log2 = console.log; + console.log('skip foo? ' + global.loleafletLogging); if (global.loleafletLogging !== 'true') { var methods = ['warn', 'info', 'debug', 'trace', 'log', 'assert', 'time', 'timeEnd']; for (var i = 0; i < methods.length; i++) { - console[methods[i]] = function() {}; +// console[methods[i]] = function() {}; } } else { window.onerror = function (msg, src, row, col, err) { 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..8c47823329 100644 --- a/loleaflet/test/load.js +++ b/loleaflet/test/load.js @@ -1,55 +1,78 @@ -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]; // 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('../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:///' + + top_srcdir + '/test/data/hello-world.ods', + 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; +}; |