diff --git a/Dockerfile b/Dockerfile index 41a05a1f4..8e0598c4b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,8 +30,8 @@ ARG TOMCAT_JRE=jdk8 # Use official maven image for the build FROM maven:3-jdk-8 AS builder -# Install chromium browser for sake of JavaScript unit tests -RUN apt-get update && apt-get install -y chromium +# Install firefox browser for sake of JavaScript unit tests +RUN apt-get update && apt-get install -y firefox-esr # Use args to build radius auth extension such as # `--build-arg BUILD_PROFILE=lgpl-extensions` diff --git a/guacamole-common-js/.gitignore b/guacamole-common-js/.gitignore index 9bbff7b8c..876bf8396 100644 --- a/guacamole-common-js/.gitignore +++ b/guacamole-common-js/.gitignore @@ -1,4 +1,5 @@ -node/* -node_modules/* +node/ +node_modules/ target/ +.tmp/ *~ diff --git a/guacamole-common-js/karma-ci.conf.js b/guacamole-common-js/karma-ci.conf.js index 13815ecb0..859335ba1 100644 --- a/guacamole-common-js/karma-ci.conf.js +++ b/guacamole-common-js/karma-ci.conf.js @@ -17,6 +17,10 @@ * under the License. */ +/** + * A karma configuration intended for use in builds or CI. Runs all discovered + * unit tests under a headless firefox browser and immediately exits. + */ module.exports = function(config) { config.set({ @@ -34,17 +38,17 @@ module.exports = function(config) { // Disable automatic test running on changed files autoWatch: false, - // Use a headless chromium browser to run the tests - // --no-sandbox required when running in docker build - for more, see - // https://github.com/karma-runner/karma-chrome-launcher/issues/158 - // TODON'T: THIS - browsers: ['ChromiumHeadlessNoSandbox'], + // Use a headless firefox browser to run the tests + browsers: ['FirefoxHeadless'], customLaunchers: { - ChromiumHeadlessNoSandbox: { - base: 'ChromiumHeadless', - flags: ['--no-sandbox'] + 'FirefoxHeadless': { + base: 'Firefox', + flags: [ + '--headless' + ] } } - }) -} + }); + +}; diff --git a/guacamole-common-js/package-lock.json b/guacamole-common-js/package-lock.json index a370f49bd..5c08e1727 100644 --- a/guacamole-common-js/package-lock.json +++ b/guacamole-common-js/package-lock.json @@ -6,7 +6,7 @@ "": { "devDependencies": { "karma": "^6.4.1", - "karma-chrome-launcher": "^3.1.1", + "karma-firefox-launcher": "^2.1.2", "karma-jasmine": "^5.1.0" } }, @@ -552,20 +552,6 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -736,6 +722,21 @@ "node": ">=8" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -775,6 +776,18 @@ "node": ">=0.12.0" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isbinaryfile": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", @@ -846,13 +859,14 @@ "node": ">= 10" } }, - "node_modules/karma-chrome-launcher": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", - "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", + "node_modules/karma-firefox-launcher": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", + "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", "dev": true, "dependencies": { - "which": "^1.2.1" + "is-wsl": "^2.2.0", + "which": "^2.0.1" } }, "node_modules/karma-jasmine": { @@ -1482,15 +1496,18 @@ } }, "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { - "which": "bin/which" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/wrap-ansi": { @@ -2002,13 +2019,6 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -2142,6 +2152,12 @@ "binary-extensions": "^2.0.0" } }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2169,6 +2185,15 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, "isbinaryfile": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", @@ -2228,13 +2253,14 @@ "yargs": "^16.1.1" } }, - "karma-chrome-launcher": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", - "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", + "karma-firefox-launcher": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.2.tgz", + "integrity": "sha512-VV9xDQU1QIboTrjtGVD4NCfzIH7n01ZXqy/qpBhnOeGVOkG5JYPEm8kuSd7psHE6WouZaQ9Ool92g8LFweSNMA==", "dev": true, "requires": { - "which": "^1.2.1" + "is-wsl": "^2.2.0", + "which": "^2.0.1" } }, "karma-jasmine": { @@ -2689,9 +2715,9 @@ "dev": true }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" diff --git a/guacamole-common-js/package.json b/guacamole-common-js/package.json index 9c9d03fc1..f986f8038 100644 --- a/guacamole-common-js/package.json +++ b/guacamole-common-js/package.json @@ -2,7 +2,7 @@ "description": "Dependencies to be installed by maven for running JS tests", "devDependencies": { "karma": "^6.4.1", - "karma-chrome-launcher": "^3.1.1", + "karma-firefox-launcher": "^2.1.2", "karma-jasmine": "^5.1.0" } } diff --git a/guacamole-common-js/pom.xml b/guacamole-common-js/pom.xml index 8cb4f3d88..ee969b183 100644 --- a/guacamole-common-js/pom.xml +++ b/guacamole-common-js/pom.xml @@ -37,6 +37,17 @@ ../ + + + + ${project.basedir}/.tmp + + + The base JavaScript API of the Guacamole project, providing JavaScript support for the Guacamole stack, including a full client @@ -114,7 +125,27 @@ - + + + org.apache.maven.plugins + maven-antrun-plugin + + + createFirefoxTempdir + test-compile + + + + + + + run + + + + + + com.github.eirslett frontend-maven-plugin @@ -130,6 +161,11 @@ karma-ci.conf.js + + + + ${firefox.temp.dir} + @@ -138,6 +174,7 @@ install node and npm + test-compile install-node-and-npm @@ -146,6 +183,7 @@ npm install + test-compile npm @@ -154,6 +192,7 @@ run tests + test karma