libreoffice-online/cypress_test/Makefile.am
Tamás Zolnai f8f6509745 cypress: put wsd related logs into cypress folder.
Workdir folder is for the build system, and for copies
of data files. cypress folder it for output of tests, like
videos, screenshots, cypress logs. So let's put wsd related
logs here too.

Signed-off-by: Tamás Zolnai <tamas.zolnai@collabora.com>
Change-Id: Icdb757d50d3c2bfef6013b92055b49ba222193e2
2021-02-17 13:37:31 +01:00

619 lines
22 KiB
Makefile

if ENABLE_CYPRESS
export NODE_PATH=$(abs_builddir)/node_modules
abs_dir = $(if $(filter $(abs_builddir),$(abs_srcdir)),.,$(abs_srcdir))
CYPRESS_BINARY = $(abs_builddir)/node_modules/cypress/bin/cypress
ESLINT_BINARY = $(abs_builddir)/node_modules/eslint/bin/eslint.js
WAIT_ON_BINARY = $(abs_builddir)/node_modules/wait-on/bin/wait-on
GET_PORT_BINARY = $(abs_builddir)/node_modules/get-port-cli/cli.js
NPM_INSTALLED = $(abs_builddir)/workdir/npm_installed
PARALLEL_SCRIPT = $(abs_srcdir)/run_parallel.sh
PID_FILE=$(abs_builddir)/workdir/loolwsd.pid
ERROR_LOG=$(abs_builddir)/workdir/error.log
LOOLWSD_LOG=$(abs_builddir)/cypress/wsd_logs/loolwsd.log
LOOLWSD_OUTPUT=$(abs_builddir)/cypress/wsd_logs/loolwsd_output.log
SUPPORT_FILE_ABS = $(abs_srcdir)/support/index.js
SUPPORT_FILE = $(if $(findstring $(abs_srcdir),$(abs_builddir)),support/index.js,$(SUPPORT_FILE_ABS))
DESKTOP_USER_AGENT = "cypress"
DESKTOP_TEST_FOLDER = $(abs_srcdir)/integration_tests/desktop
DESKTOP_DATA_FOLDER = $(abs_srcdir)/data/desktop/
DESKTOP_DATA_WORKDIR = $(abs_builddir)/workdir/data/desktop/
DESKTOP_TRACK_FOLDER=$(abs_builddir)/workdir/track/desktop
MOBILE_USER_AGENT = "cypress-mobile"
MOBILE_TEST_FOLDER = $(abs_srcdir)/integration_tests/mobile
MOBILE_DATA_FOLDER = $(abs_srcdir)/data/mobile/
MOBILE_DATA_WORKDIR = $(abs_builddir)/workdir/data/mobile/
MOBILE_TRACK_FOLDER=$(abs_builddir)/workdir/track/mobile
MULTIUSER_TEST_FOLDER = $(abs_srcdir)/integration_tests/multiuser
MULTIUSER_DATA_FOLDER = $(abs_srcdir)/data/multiuser/
MULTIUSER_DATA_WORKDIR = $(abs_builddir)/workdir/data/multiuser/
MULTIUSER_TRACK_FOLDER=$(abs_builddir)/workdir/track/multiuser
ALLOWED_PORTS = $(shell seq 9900 1 9980)
KILL_COMMAND=pkill -F $(PID_FILE) || pkill --signal SIGKILL -F $(PID_FILE)
PARALLEL_BUILD = $(findstring -j,$(MAKEFLAGS))
DISPLAY_NUMBER = 100
HEADLESS_BUILD := $(findstring Command failed,$(shell xhost > /dev/null 2>&1 || echo "Command failed, so we are in a headless environment."))
export DISPLAY=$(if $(HEADLESS_BUILD),:$(DISPLAY_NUMBER),$(shell echo $$DISPLAY))
COMMA :=,
EMPTY :=
SPACE :=$(EMPTY) $(EMPTY)
CORE_VERSION := $(subst $(SPACE),_,$(shell "@LO_PATH@"/program/soffice.bin --version 2> /dev/null))
BROWSER:=$(if $(CYPRESS_BROWSER),$(CYPRESS_BROWSER),$(CHROME))
if ENABLE_DEBUG
FILTER_DEBUG=cypress:electron,cypress:launcher
export DEBUG=$(if $(ENABLE_LOGGING),$(FILTER_DEBUG),)
endif
if HAVE_LO_PATH
MOBILE_TEST_FILES=$(subst $(MOBILE_TEST_FOLDER)/,,$(wildcard $(MOBILE_TEST_FOLDER)/*_spec.js) $(wildcard $(MOBILE_TEST_FOLDER)/*/*_spec.js))
DESKTOP_TEST_FILES=$(subst $(DESKTOP_TEST_FOLDER)/,,$(wildcard $(DESKTOP_TEST_FOLDER)/*_spec.js) $(wildcard $(DESKTOP_TEST_FOLDER)/*/*_spec.js))
MULTIUSER_TESTS= \
writer/paragraph_prop \
writer/sidebar_visibility \
writer/simultaneous_typing \
calc/sheet_operations \
impress/slide_operations
MOBILE_TEST_FILES_DONE= \
$(foreach test_file,$(MOBILE_TEST_FILES),$(MOBILE_TRACK_FOLDER)/$(test_file).done)
DESKTOP_TEST_FILES_DONE= \
$(foreach test_file,$(DESKTOP_TEST_FILES),$(DESKTOP_TRACK_FOLDER)/$(test_file).done)
MULTIUSER_TESTS_DONE= \
$(MULTIUSER_TRACK_FOLDER)/multiuser_tests.done
check-local: do-check
$(if $(wildcard $(ERROR_LOG)),$(error CypressError: some tests failed!))
do-check: $(DESKTOP_TEST_FILES_DONE) $(MOBILE_TEST_FILES_DONE) $(MULTIUSER_TESTS_DONE)
@$(KILL_COMMAND) || true
$(if $(HEADLESS_BUILD),@pkill Xvfb,)
$(if $(wildcard $(ERROR_LOG)),@cat $(ERROR_LOG))
$(PID_FILE): @JAILS_PATH@ $(NODE_BINS)
$(call cleanup_before_run)
$(call run_JS_error_check)
$(if $(HEADLESS_BUILD),$(call start_Xvfb),)
$(call start_loolwsd)
$(MOBILE_TEST_FILES_DONE): $(PID_FILE) $(DESKTOP_TEST_FILES_DONE)
$(if $(PARALLEL_BUILD),\
$(call run_mobile_tests,$(subst $(MOBILE_TRACK_FOLDER)/,,$(basename $@)),$(basename $@).log),\
$(call run_mobile_tests))
$(if $(PARALLEL_BUILD),\
@mkdir -p $(dir $@) && touch $@\
,\
@$(foreach done_file,$(MOBILE_TEST_FILES_DONE),mkdir -p $(dir $(done_file)) && touch $(done_file) &&) true\
)
$(DESKTOP_TEST_FILES_DONE): $(PID_FILE)
$(if $(PARALLEL_BUILD),\
$(call run_desktop_tests,$(subst $(DESKTOP_TRACK_FOLDER)/,,$(basename $@)),$(basename $@).log),\
$(call run_desktop_tests))
$(if $(PARALLEL_BUILD),\
@mkdir -p $(dir $@) && touch $@\
,\
@$(foreach done_file,$(DESKTOP_TEST_FILES_DONE),mkdir -p $(dir $(done_file)) && touch $(done_file) &&) true\
)
$(MULTIUSER_TESTS_DONE): $(PID_FILE) $(MOBILE_TEST_FILES_DONE)
$(foreach test,$(MULTIUSER_TESTS),$(call run_multiuser_test,$(test),$(1)))
@mkdir -p $(dir $@) && touch $@
@JAILS_PATH@:
mkdir -p $@
define run_JS_error_check
@echo "Checking for JS errors in test code..."
@echo
@$(NODE) $(ESLINT_BINARY) $(abs_srcdir) \
--ignore-path $(abs_srcdir)/.eslintignore --config $(abs_srcdir)/.eslintrc
@echo
endef
define start_loolwsd
$(if $(findstring nextcloud, $(CYPRESS_INTEGRATION)),\
$(eval FREE_PORT:=9980),\
$(if $(findstring php-proxy, $(CYPRESS_INTEGRATION)),
$(eval FREE_PORT:=9982),\
$(eval FREE_PORT:=$(shell $(GET_PORT_BINARY) --host=127.0.0.1 $(ALLOWED_PORTS)))))
@echo "Found available port for testing: $(FREE_PORT)"
@echo
@echo "Launching loolwsd..."
@fc-cache "@LO_PATH@"/share/fonts/truetype
@echo
@mkdir -p $(dir $(LOOLWSD_OUTPUT))
../loolwsd --o:sys_template_path="@SYSTEMPLATE_PATH@" \
--o:child_root_path="@JAILS_PATH@" --o:storage.filesystem[@allow]=true \
--disable-ssl \
--o:admin_console.username=admin --o:admin_console.password=admin \
--o:logging.file[@enable]=true --o:logging.level=trace \
--o:welcome.enable=false \
--port=$(FREE_PORT) \
--pidfile=$(PID_FILE) \
--o:logging.file.property[0]=$(LOOLWSD_LOG) \
$(if $(findstring php-proxy, $(CYPRESS_INTEGRATION)),--o:net.proxy_prefix=true) \
> $(LOOLWSD_OUTPUT) 2>&1 &
@$(WAIT_ON_BINARY) http://localhost:$(FREE_PORT) --timeout 60000
@echo
endef
#https://docs.cypress.io/guides/guides/continuous-integration.html#Xvfb
define start_Xvfb
@echo "Launching Xvfb..."
Xvfb :$(DISPLAY_NUMBER) -screen 0 1280x800x24 &
while [ ! -f /tmp/.X$(DISPLAY_NUMBER)-lock ] ; do sleep 1; done
@echo
endef
define cleanup_before_run
@rm -f $(ERROR_LOG)
@rm -f $(PID_FILE)
@rm -rf cypress
endef
NODE_BINS = \
$(CYPRESS_BINARY) \
$(ESLINT_BINARY) \
$(WAIT_ON_BINARY) \
$(GET_PORT_BINARY)
$(NODE_BINS): $(NPM_INSTALLED);
$(NPM_INSTALLED): package.json eslint_plugin/index.js eslint_plugin/package.json
@npm install
@mkdir -p $(dir $(NPM_INSTALLED))
@touch $(NPM_INSTALLED)
clean-local:
rm -rf node_modules
rm -rf workdir
rm -rf cypress
rm -rf package-lock.json
rm -rf .nyc_output
rm -rf coverage
###############
# Mobile tests.
###############
check-mobile: @JAILS_PATH@ $(NODE_BINS)
$(call cleanup_before_run)
$(call run_JS_error_check)
$(call start_loolwsd)
$(call run_mobile_tests,$(spec))
@$(KILL_COMMAND) || true
run-mobile: @JAILS_PATH@ $(NODE_BINS)
$(call cleanup_before_run)
$(call run_JS_error_check)
$(call start_loolwsd)
$(call run_interactive_mobile,$(spec)) || true
@$(KILL_COMMAND) || true
MOBILE_CONFIG = \
integrationFolder=$(MOBILE_TEST_FOLDER),supportFile=$(SUPPORT_FILE),userAgent=$(MOBILE_USER_AGENT)
MOBILE_ENV = \
DATA_FOLDER=$(MOBILE_DATA_FOLDER),DATA_WORKDIR=$(MOBILE_DATA_WORKDIR),WSD_VERSION_HASH=$(LOOLWSD_VERSION_HASH),SERVER_PORT=$(FREE_PORT),LO_CORE_VERSION="$(CORE_VERSION)",INTEGRATION=$(CYPRESS_INTEGRATION)
# Run one mobile test / all mobile tests in interactive test runner.
# Parameters:
# 1 - spec (optional): test file to run, if not specified all mobile tests are run.
define run_interactive_mobile
@echo "Open cypress with mobile tests..."
@echo
$(if $(1),\
$(eval SPEC_FILE=$(MOBILE_TEST_FOLDER)/$(1))\
$(call run_interactive_single,$(MOBILE_CONFIG),$(MOBILE_ENV),$(SPEC_FILE))\
,\
$(call run_interactive_all,$(MOBILE_CONFIG),$(MOBILE_ENV))\
)
endef
# Run one mobile test / all mobile tests in headless mode.
# Parameters:
# 1 - spec (optional): test file to run, if not specified all mobile tests are run.
# 2 - log (optional): log file for cypress run, needed for parallel build only.
# 3 - +env (optional): additional env variables (will be appended to $(MOBILE_ENV).
define run_mobile_tests
@echo $(if $(1),"Running cypress mobile test: $(1)","Running cypress mobile tests...")
@echo
$(eval ENV_EXTENDED=$(MOBILE_ENV)$(if $(3),$(COMMA)$(3)))
$(if $(and $(PARALLEL_BUILD), $(1)),\
@$(call run_test_parallel,\
$(MOBILE_CONFIG),$(ENV_EXTENDED),$(1),mobile,$(2))\
,\
$(eval SPEC_FILE=$(if $(1),$(MOBILE_TEST_FOLDER)/$(1)))\
$(call run_test_headless,\
$(MOBILE_CONFIG),$(ENV_EXTENDED),$(SPEC_FILE))\
)
endef
################
# Desktop tests.
################
check-desktop: @JAILS_PATH@ $(NODE_BINS)
$(call cleanup_before_run)
$(call run_JS_error_check)
$(call start_loolwsd)
$(call run_desktop_tests,$(spec))
@$(KILL_COMMAND) || true
run-desktop: @JAILS_PATH@ $(NODE_BINS)
$(call cleanup_before_run)
$(call run_JS_error_check)
$(call start_loolwsd)
$(call run_interactive_desktop,$(spec)) || true
@$(KILL_COMMAND) || true
DESKTOP_CONFIG = \
integrationFolder=$(DESKTOP_TEST_FOLDER),supportFile=$(SUPPORT_FILE),userAgent=$(DESKTOP_USER_AGENT)
DESKTOP_ENV = \
DATA_FOLDER=$(DESKTOP_DATA_FOLDER),DATA_WORKDIR=$(DESKTOP_DATA_WORKDIR),WSD_VERSION_HASH=$(LOOLWSD_VERSION_HASH),SERVER_PORT=$(FREE_PORT),LO_CORE_VERSION="$(CORE_VERSION)",INTEGRATION=$(CYPRESS_INTEGRATION)
# Run one desktop test / all desktop tests in interactive test runner.
# Parameters:
# 1 - spec (optional): test file to run, if not specified all desktop tests are run.
define run_interactive_desktop
@echo "Open cypress with desktop tests..."
@echo
$(eval SPEC_FILE=$(DESKTOP_TEST_FOLDER)/$(1))
$(if $(1),\
$(call run_interactive_single,$(DESKTOP_CONFIG),$(DESKTOP_ENV),$(SPEC_FILE))\
,\
$(call run_interactive_all,$(DESKTOP_CONFIG),$(DESKTOP_ENV))\
)
endef
# Run one desktop test / all desktop tests in headless mode.
# Parameters:
# 1 - spec (optional): test file to run, if not specified all desktop tests are run.
# 2 - log (optional): log file for cypress run, needed for parallel build only.
# 3 - +env (optional): additional env variables (will be appended to $(DESKTOP_ENV).
define run_desktop_tests
@echo $(if $(1),"Running cypress desktop test: $(1)","Running cypress desktop tests...")
@echo
$(eval ENV_EXTENDED=$(DESKTOP_ENV)$(if $(3),$(COMMA)$(3)))
$(if $(and $(PARALLEL_BUILD), $(1)),\
@$(call run_test_parallel,\
$(DESKTOP_CONFIG),$(ENV_EXTENDED),$(1),desktop,$(2))\
,\
$(eval SPEC_FILE=$(if $(1),$(DESKTOP_TEST_FOLDER)/$(1)))\
$(call run_test_headless,\
$(DESKTOP_CONFIG),$(ENV_EXTENDED),$(SPEC_FILE))\
)
endef
###################
# Multi-user tests.
###################
check-multi: do-multi-check-log
$(if $(wildcard $(ERROR_LOG)),$(error CypressError: some tests failed!))
do-multi-check-log: do-multi-check
$(if $(wildcard $(ERROR_LOG)),@cat $(ERROR_LOG))
do-multi-check: @JAILS_PATH@ $(NODE_BINS)
$(call cleanup_before_run)
$(call run_JS_error_check)
$(call start_loolwsd)
$(if $(spec), \
$(call run_multiuser_test,$(spec)), \
$(call run_all_multiuser_tests))
@$(KILL_COMMAND) || true
run-multi: @JAILS_PATH@ $(NODE_BINS)
$(call cleanup_before_run)
$(call run_JS_error_check)
$(call start_loolwsd)
@echo
@echo "Running multi-user test in interactive test runner..."
@echo
$(if $(filter 1,$(user)), \
$(eval BACKGROUND_USER_SPEC=$(spec)_user2_spec.js), \
$(eval BACKGROUND_USER_SPEC=$(spec)_user1_spec.js))
$(if $(filter 1,$(user)), \
$(eval INTERACTIVE_USER_SPEC=$(spec)_user1_spec.js), \
$(eval INTERACTIVE_USER_SPEC=$(spec)_user2_spec.js))
$(eval BACKGROUND_USER_LOG=$(MULTIUSER_TRACK_FOLDER)/$(BACKGROUND_USER_SPEC).log)
$(eval INTERACTIVE_USER_SPEC=$(MULTIUSER_TEST_FOLDER)/$(INTERACTIVE_USER_SPEC))
@$(call run_test_parallel,\
$(MULTIUSER_CONFIG),$(MULTIUSER_ENV),$(BACKGROUND_USER_SPEC),multi-user,$(BACKGROUND_USER_LOG)) &
@sleep 5
$(call run_interactive_single,\
$(MULTIUSER_CONFIG),$(MULTIUSER_ENV),$(INTERACTIVE_USER_SPEC)) || true
@$(KILL_COMMAND) || true
MULTIUSER_CONFIG = \
integrationFolder=$(MULTIUSER_TEST_FOLDER),supportFile=$(SUPPORT_FILE),userAgent=$(DESKTOP_USER_AGENT),defaultCommandTimeout=30000,retries=0
MULTIUSER_ENV = \
DATA_FOLDER=$(MULTIUSER_DATA_FOLDER),DATA_WORKDIR=$(MULTIUSER_DATA_WORKDIR),WSD_VERSION_HASH=$(LOOLWSD_VERSION_HASH),SERVER_PORT=$(FREE_PORT),LO_CORE_VERSION="$(CORE_VERSION)",INTEGRATION=$(CYPRESS_INTEGRATION)
# Run all multi-user tests in headless mode.
# Parameters:
# 1 - +env (optional): additional env variables (will be appended to $(MULTIUSER_ENV).
define run_all_multiuser_tests
$(foreach test,$(MULTIUSER_TESTS),$(call run_multiuser_test,$(test),$(1)))
endef
# Run one multi-user test in headless mode.
# Parameters:
# 1 - test name: test name to run. This test name means to test files (user1, user2).
# 2 - +env (optional): additional env variables (will be appended to $(MULTIUSER_ENV).
define run_multiuser_test
$(eval USER1_SPEC=$(strip $(1))_user1_spec.js)
$(eval USER2_SPEC=$(strip $(1))_user2_spec.js)
$(eval USER1_LOG=$(MULTIUSER_TRACK_FOLDER)/$(USER1_SPEC).log)
$(eval USER2_LOG=$(MULTIUSER_TRACK_FOLDER)/$(USER2_SPEC).log)
@echo "Running cypress multi-user test: $(1)"
@echo
$(eval ENV_EXTENDED=$(MULTIUSER_ENV)$(if $(2),$(COMMA)$(2)))
@$(call run_test_parallel,\
$(MULTIUSER_CONFIG),$(ENV_EXTENDED),$(USER1_SPEC),multi-user,$(USER1_LOG)) & \
sleep 5 && \
$(call run_test_parallel,\
$(MULTIUSER_CONFIG),$(ENV_EXTENDED),$(USER2_SPEC),multi-user,$(USER2_LOG)) && \
wait # waits the background process to be finished
endef
############################
# Mobile interference tests.
############################
check-interfer-mobile: do-interfer-mobile-check-log
$(if $(wildcard $(ERROR_LOG)),$(error CypressError: some tests failed!))
do-interfer-mobile-check-log: do-interfer-mobile-check
$(if $(wildcard $(ERROR_LOG)),@cat $(ERROR_LOG))
do-interfer-mobile-check: @JAILS_PATH@ $(NODE_BINS)
$(call cleanup_before_run)
$(call run_JS_error_check)
$(call start_loolwsd)
$(if $(spec), \
$(call run_mobile_interference_test,$(spec)), \
$(call run_mobile_interference_tests))
@$(KILL_COMMAND) || true
run-interfer-mobile: @JAILS_PATH@ $(NODE_BINS)
$(call cleanup_before_run)
$(call run_JS_error_check)
$(call start_loolwsd)
@echo
@echo "Running interfer mobile test in interactive test runner..."
@echo
$(eval USER1_SPEC=$(MOBILE_TEST_FOLDER)/$(spec))
$(eval USER2_SPEC=interference_user_spec.js)
$(eval USER2_LOG=$(MULTIUSER_TRACK_FOLDER)/$(USER2_SPEC).log)
$(call run_interactive_single,\
$(INTERFER_MOBILE_CONFIG1),$(INTERFER_MOBILE_ENV1),$(USER1_SPEC)) &
@sleep 5
@$(call run_test_parallel,\
$(INTERFER_MOBILE_CONFIG2),$(INTERFER_MOBILE_ENV2),$(USER2_SPEC),interfer,$(USER2_LOG)) || true
@$(KILL_COMMAND) || true
INTERFER_MOBILE_CONFIG1 = \
integrationFolder=$(MOBILE_TEST_FOLDER),supportFile=$(SUPPORT_FILE),userAgent=$(MOBILE_USER_AGENT),defaultCommandTimeout=30000
INTERFER_MOBILE_ENV1 = \
DATA_FOLDER=$(MOBILE_DATA_FOLDER),DATA_WORKDIR=$(MULTIUSER_DATA_WORKDIR),WSD_VERSION_HASH=$(LOOLWSD_VERSION_HASH),SERVER_PORT=$(FREE_PORT),LO_CORE_VERSION="$(CORE_VERSION)",INTEGRATION=$(CYPRESS_INTEGRATION),INTERFERENCE_TEST=true
INTERFER_MOBILE_CONFIG2 = \
integrationFolder=$(MULTIUSER_TEST_FOLDER),supportFile=$(SUPPORT_FILE),userAgent=$(MOBILE_USER_AGENT),defaultCommandTimeout=30000,retries=0
INTERFER_MOBILE_ENV2 = \
DATA_FOLDER=$(MOBILE_DATA_FOLDER),DATA_WORKDIR=$(MULTIUSER_DATA_WORKDIR),WSD_VERSION_HASH=$(LOOLWSD_VERSION_HASH),SERVER_PORT=$(FREE_PORT),LO_CORE_VERSION="$(CORE_VERSION)",INTEGRATION=$(CYPRESS_INTEGRATION)
# Run all mobile interference tests in headless mode.
define run_mobile_interference_tests
$(foreach test,$(MOBILE_TEST_FILES),$(call run_mobile_interference_test,$(test)))
endef
# Run one mobile interference test in headless mode.
# Parameters:
# 1 - mobile test file: test file to run parallel with the interference user spec file.
define run_mobile_interference_test
@echo "Running cypress mobile interference test: $(1)"
@echo
$(eval USER1_SPEC=$(1))
$(eval USER2_SPEC=interference_user_spec.js)
$(eval USER1_LOG=$(MULTIUSER_TRACK_FOLDER)/$(USER1_SPEC).log)
$(eval USER2_LOG=$(MULTIUSER_TRACK_FOLDER)/$(USER2_SPEC).log)
@$(call run_test_parallel,\
$(INTERFER_MOBILE_CONFIG1),$(INTERFER_MOBILE_ENV1),$(USER1_SPEC),interfer-mobile,$(USER1_LOG)) & \
sleep 5 && \
$(call run_test_parallel,\
$(INTERFER_MOBILE_CONFIG2),$(INTERFER_MOBILE_ENV2),$(USER2_SPEC),interfer,$(USER2_LOG)) && \
wait # waits the background process to be finished
endef
#############################
# Desktop interference tests.
#############################
check-interfer-desktop: do-interfer-desktop-check-log
$(if $(wildcard $(ERROR_LOG)),$(error CypressError: some tests failed!))
do-interfer-desktop-check-log: do-interfer-desktop-check
$(if $(wildcard $(ERROR_LOG)),@cat $(ERROR_LOG))
do-interfer-desktop-check: @JAILS_PATH@ $(NODE_BINS)
$(call cleanup_before_run)
$(call run_JS_error_check)
$(call start_loolwsd)
$(if $(spec), \
$(call run_desktop_interference_test,$(spec)), \
$(call run_desktop_interference_tests))
@$(KILL_COMMAND) || true
run-interfer-desktop: @JAILS_PATH@ $(NODE_BINS)
$(call cleanup_before_run)
$(call run_JS_error_check)
$(call start_loolwsd)
@echo
@echo "Running interfer desktop test in interactive test runner..."
@echo
$(eval USER1_SPEC=$(DESKTOP_TEST_FOLDER)/$(spec))
$(eval USER2_SPEC=interference_user_spec.js)
$(eval USER2_LOG=$(MULTIUSER_TRACK_FOLDER)/$(USER2_SPEC).log)
$(call run_interactive_single,\
$(INTERFER_DESKTOP_CONFIG1),$(INTERFER_DESKTOP_ENV1),$(USER1_SPEC)) &
@sleep 5
@$(call run_test_parallel,\
$(INTERFER_DESKTOP_CONFIG2),$(INTERFER_DESKTOP_ENV2),$(USER2_SPEC),interfer,$(USER2_LOG)) || true
@$(KILL_COMMAND) || true
INTERFER_DESKTOP_CONFIG1 = \
integrationFolder=$(DESKTOP_TEST_FOLDER),supportFile=$(SUPPORT_FILE),userAgent=$(DESKTOP_USER_AGENT),defaultCommandTimeout=30000
INTERFER_DESKTOP_ENV1 = \
DATA_FOLDER=$(DESKTOP_DATA_FOLDER),DATA_WORKDIR=$(MULTIUSER_DATA_WORKDIR),WSD_VERSION_HASH=$(LOOLWSD_VERSION_HASH),SERVER_PORT=$(FREE_PORT),LO_CORE_VERSION="$(CORE_VERSION)",INTEGRATION=$(CYPRESS_INTEGRATION),INTERFERENCE_TEST=true
INTERFER_DESKTOP_CONFIG2 = \
integrationFolder=$(MULTIUSER_TEST_FOLDER),supportFile=$(SUPPORT_FILE),userAgent=$(DESKTOP_USER_AGENT),defaultCommandTimeout=30000,retries=0
INTERFER_DESKTOP_ENV2 = \
DATA_FOLDER=$(DESKTOP_DATA_FOLDER),DATA_WORKDIR=$(MULTIUSER_DATA_WORKDIR),WSD_VERSION_HASH=$(LOOLWSD_VERSION_HASH),SERVER_PORT=$(FREE_PORT),LO_CORE_VERSION="$(CORE_VERSION)",INTEGRATION=$(CYPRESS_INTEGRATION)
# Run all desktop interference test in headless mode.
define run_desktop_interference_tests
$(foreach test,$(DESKTOP_TEST_FILES),$(call run_desktop_interference_test,$(test)))
endef
# Run one desktop interference test in headless mode.
# Parameters:
# 1 - desktop test file: test file to run parallel with the interference user spec file.
define run_desktop_interference_test
@echo "Running cypress desktop interference test: $(1)"
@echo
$(eval USER1_SPEC=$(1))
$(eval USER2_SPEC=interference_user_spec.js)
$(eval USER1_LOG=$(MULTIUSER_TRACK_FOLDER)/$(USER1_SPEC).log)
$(eval USER2_LOG=$(MULTIUSER_TRACK_FOLDER)/$(USER2_SPEC).log)
@$(call run_test_parallel,\
$(INTERFER_DESKTOP_CONFIG1),$(INTERFER_DESKTOP_ENV1),$(USER1_SPEC),interfer-desktop,$(USER1_LOG)) & \
sleep 5 && \
$(call run_test_parallel,\
$(INTERFER_DESKTOP_CONFIG2),$(INTERFER_DESKTOP_ENV2),$(USER2_SPEC),interfer,$(USER2_LOG)) && \
wait # waits the background process to be finished
endef
################
# Test coverage.
################
run-cov: do-run-cov
$(if $(wildcard $(ERROR_LOG)),@cat $(ERROR_LOG))
do-run-cov: @JAILS_PATH@ $(NODE_BINS)
@echo
@echo "Setup coverage tools..."
@echo
rm -rf .nyc_output
rm -rf coverage
npm install @cypress/code-coverage --no-save
@echo "import '@cypress/code-coverage/support';" >> $(SUPPORT_FILE_ABS)
@echo "" >> $(SUPPORT_FILE_ABS)
cd .. && npx nyc instrument --compact=false loleaflet/src loleaflet/dist/src && cd cypress_test
@echo
@echo "Run all tests..."
@echo
$(call cleanup_before_run)
$(call start_loolwsd)
$(call run_desktop_tests,,,COVERAGE_RUN="1")
$(call run_mobile_tests,,,COVERAGE_RUN="1")
$(call run_all_multiuser_tests,COVERAGE_RUN="1")
@$(KILL_COMMAND) || true
####################
# General functions.
####################
# Open cypress interactive test runner window with all tests in it.
#
# Parameters:
# 1 - config: cypress configuration (e.g. cypress' --config argument).
# 2 - env: list of environment variables (e.g. cypress' --env argument).
define run_interactive_all
$(CYPRESS_BINARY) open \
--config $(1) \
--env $(2)
endef
# Run single test in cypress interactive test runner.
#
# Parameters:
# 1 - config: cypress configuration (e.g. cypress' --config argument).
# 2 - env: list of environment variables (e.g. cypress' --env argument).
# 3 - spec: test file path (e.g. cypress' --spec argument)
define run_interactive_single
$(CYPRESS_BINARY) run \
--browser $(BROWSER) \
--headed --no-exit \
--config $(1) \
--env $(2) \
--spec=$(3)
endef
# Run one test in parallel mode, using parallel running script.
#
# Parameters:
# 1 - config: cypress configuration (e.g. cypress' --config argument).
# 2 - env: list of environment variables (e.g. cypress' --env argument).
# 3 - spec: test file path (e.g. cypress' --spec argument)
# 4 - type: test type (e.g. mobile, desktop, multi-user)
# 5 - log: log file path
define run_test_parallel
$(PARALLEL_SCRIPT) \
--browser $(BROWSER) \
--config $(1) \
--env $(2) \
--spec $(3) \
--type $(4) \
--log-file $(5)
endef
# Run one test \ tests in headless mode.
#
# Parameters:
# 1 - config: cypress configuration (e.g. cypress' --config argument).
# 2 - env: list of environment variables (e.g. cypress' --env argument).
# 3 - spec (optional): test file path (e.g. cypress' --spec argument)
define run_test_headless
$(CYPRESS_BINARY) run \
--browser $(BROWSER) \
--headless \
--config $(1) \
--env $(2) \
--spec=$(3) \
|| ($(KILL_COMMAND) && false)
endef
else
check-local:
$(error CypressError: Can't find LibreOffice core installation!)
endif
endif