summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2021-01-08 13:14:59 +0000
committerMichael Meeks <michael.meeks@collabora.com>2021-01-08 21:59:28 +0000
commit125bc22117189aefe85dc7707b140c602b171e93 (patch)
treeda94b554644ca0e8cb7c64544aa77a4aa1d0aa3c
parentStart of using NodeJS to do load simulation. (diff)
downloadonline-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.am6
-rw-r--r--loleaflet/js/global.js5
-rw-r--r--loleaflet/package.json1
-rw-r--r--loleaflet/test/load.js117
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;
+};