5398ef8591
By now 'make check-mobile' and 'make check-desktop' commands are not supposed to run in parallel. So 'make check-mobile -j3' won't run mobile tests in parallel (three tests at once). However, before this commit running these make rules with more jobs, led to build failure. With this commit the build does not fail, but still ignores the jobs and run the tests on a single job. Signed-off-by: Tamás Zolnai <tamas.zolnai@collabora.com> Change-Id: I13e13fdefcfb393ae5a42b4e065bbfe00278236a
582 lines
20 KiB
Makefile
582 lines
20 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)/workdir/loolwsd.log
|
|
LOOLWSD_OUTPUT=$(abs_builddir)/workdir/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_WORKDIR = $(abs_builddir)/workdir/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_WORKDIR = $(abs_builddir)/workdir/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_WORKDIR = $(abs_builddir)/workdir/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
|
|
../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 $(LOOLWSD_LOG)
|
|
@rm -f $(LOOLWSD_OUTPUT)
|
|
@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)
|
|
@echo
|
|
@echo "Open cypress with mobile tests..."
|
|
@echo
|
|
$(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),WORKDIR=$(MOBILE_WORKDIR),WSD_VERSION_HASH=$(LOOLWSD_VERSION_HASH),SERVER_PORT=$(FREE_PORT),LO_CORE_VERSION="$(CORE_VERSION)",INTEGRATION=$(CYPRESS_INTEGRATION)
|
|
|
|
define run_interactive_mobile
|
|
$(if $(1),\
|
|
$(call run_interactive_single,$(MOBILE_CONFIG),$(MOBILE_ENV),$(abs_dir)/integration_tests/mobile/$(1)),\
|
|
$(call run_interactive_all,$(MOBILE_CONFIG),$(MOBILE_ENV)))
|
|
endef
|
|
|
|
define run_mobile_tests
|
|
@echo $(if $(1),"Running cypress mobile test: $(1)","Running cypress mobile tests...")
|
|
@echo
|
|
$(if $(and $(PARALLEL_BUILD), $(1)),\
|
|
@$(call run_test_parallel,\
|
|
$(MOBILE_CONFIG),$(MOBILE_ENV)$(if $(3),$(COMMA)$(3)),$(1),mobile,$(2))\
|
|
,\
|
|
$(CYPRESS_BINARY) run \
|
|
--browser $(BROWSER) \
|
|
--headless \
|
|
--config $(MOBILE_CONFIG) \
|
|
--env $(MOBILE_ENV)$(if $(3),$(COMMA)$(3)) \
|
|
$(if $(1), --spec=$(abs_dir)/integration_tests/mobile/$(1)) \
|
|
|| ($(KILL_COMMAND) && false) \
|
|
)
|
|
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)
|
|
@echo
|
|
@echo "Open cypress with desktop tests..."
|
|
@echo
|
|
$(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),WORKDIR=$(DESKTOP_WORKDIR),WSD_VERSION_HASH=$(LOOLWSD_VERSION_HASH),SERVER_PORT=$(FREE_PORT),LO_CORE_VERSION="$(CORE_VERSION)",INTEGRATION=$(CYPRESS_INTEGRATION)
|
|
|
|
define run_interactive_desktop
|
|
$(if $(1),\
|
|
$(call run_interactive_single,$(DESKTOP_CONFIG),$(DESKTOP_ENV),$(abs_dir)/integration_tests/desktop/$(1)),\
|
|
$(call run_interactive_all,$(DESKTOP_CONFIG),$(DESKTOP_ENV)))
|
|
endef
|
|
|
|
define run_desktop_tests
|
|
@echo $(if $(1),"Running cypress desktop test: $(1)","Running cypress desktop tests...")
|
|
@echo
|
|
$(if $(and $(PARALLEL_BUILD), $(1)),\
|
|
@$(call run_test_parallel,\
|
|
$(DESKTOP_CONFIG),$(DESKTOP_ENV)$(if $(3),$(COMMA)$(3)),$(1),desktop,$(2))\
|
|
,\
|
|
$(CYPRESS_BINARY) run \
|
|
--browser $(BROWSER) \
|
|
--headless \
|
|
--config $(DESKTOP_CONFIG) \
|
|
--env $(DESKTOP_ENV)$(if $(3),$(COMMA)$(3)) \
|
|
$(if $(1), --spec=$(abs_dir)/integration_tests/desktop/$(1)) \
|
|
|| ($(KILL_COMMAND) && false) \
|
|
)
|
|
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)
|
|
@$(call run_test_parallel,\
|
|
$(MULTIUSER_CONFIG),$(MULTIUSER_ENV),$(BACKGROUND_USER_SPEC),multi-user,$(BACKGROUND_USER_LOG)) &
|
|
@sleep 5
|
|
$(call run_interactive_multi,$(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),WORKDIR=$(MULTIUSER_WORKDIR),WSD_VERSION_HASH=$(LOOLWSD_VERSION_HASH),SERVER_PORT=$(FREE_PORT),LO_CORE_VERSION="$(CORE_VERSION)",INTEGRATION=$(CYPRESS_INTEGRATION)
|
|
|
|
define run_interactive_multi
|
|
$(call run_interactive_single,$(MULTIUSER_CONFIG),$(MULTIUSER_ENV),$(abs_dir)/integration_tests/multiuser/$(1))
|
|
endef
|
|
|
|
define run_all_multiuser_tests
|
|
$(foreach test,$(MULTIUSER_TESTS),$(call run_multiuser_test,$(test),$(1)))
|
|
endef
|
|
|
|
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: $(USER1_SPEC) - $(USER2_SPEC)"
|
|
@echo
|
|
@$(call run_test_parallel,\
|
|
$(MULTIUSER_CONFIG),$(MULTIUSER_ENV)$(if $(2),$(COMMA)$(2)),$(USER1_SPEC),multi-user,$(USER1_LOG)) & \
|
|
sleep 5 && \
|
|
$(call run_test_parallel,\
|
|
$(MULTIUSER_CONFIG),$(MULTIUSER_ENV)$(if $(2),$(COMMA)$(2)),$(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 BACKGROUND_USER_SPEC=interference_user_spec.js)
|
|
$(eval INTERACTIVE_USER_SPEC=$(spec))
|
|
$(eval BACKGROUND_USER_LOG=$(MULTIUSER_TRACK_FOLDER)/$(BACKGROUND_USER_SPEC).log)
|
|
$(call run_interactive_interfer_mobile,$(INTERACTIVE_USER_SPEC)) &
|
|
@sleep 5
|
|
@$(call run_test_parallel,\
|
|
$(INTERFER_MOBILE_CONFIG2),$(INTERFER_MOBILE_ENV2),$(BACKGROUND_USER_SPEC),multi-user,$(BACKGROUND_USER_LOG)) || true
|
|
@$(KILL_COMMAND) || true
|
|
|
|
define run_interactive_interfer_mobile
|
|
$(call run_interactive_single,$(INTERFER_MOBILE_CONFIG1),$(INTERFER_MOBILE_ENV1),$(abs_dir)/integration_tests/mobile/$(1))
|
|
endef
|
|
|
|
INTERFER_MOBILE_CONFIG1 = \
|
|
integrationFolder=$(MOBILE_TEST_FOLDER),supportFile=$(SUPPORT_FILE),userAgent=$(MOBILE_USER_AGENT),defaultCommandTimeout=30000,retries=0
|
|
|
|
INTERFER_MOBILE_ENV1 = \
|
|
DATA_FOLDER=$(MOBILE_DATA_FOLDER),WORKDIR=$(MULTIUSER_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),WORKDIR=$(MULTIUSER_WORKDIR),WSD_VERSION_HASH=$(LOOLWSD_VERSION_HASH),SERVER_PORT=$(FREE_PORT),LO_CORE_VERSION="$(CORE_VERSION)",INTEGRATION=$(CYPRESS_INTEGRATION)
|
|
|
|
define run_mobile_interference_tests
|
|
$(foreach test,$(MOBILE_TEST_FILES),$(call run_mobile_interference_test,$(test)))
|
|
endef
|
|
|
|
define run_mobile_interference_test
|
|
$(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)
|
|
@echo "Running cypress mobile interference test: $(1)"
|
|
@echo
|
|
@$(call run_test_parallel,\
|
|
$(INTERFER_MOBILE_CONFIG1),$(INTERFER_MOBILE_ENV1),$(USER1_SPEC),mobile,$(USER1_LOG)) & \
|
|
sleep 5 && \
|
|
$(call run_test_parallel,\
|
|
$(INTERFER_MOBILE_CONFIG2),$(INTERFER_MOBILE_ENV2),$(USER2_SPEC),multi-user,$(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 BACKGROUND_USER_SPEC=interference_user_spec.js)
|
|
$(eval INTERACTIVE_USER_SPEC=$(spec))
|
|
$(eval BACKGROUND_USER_LOG=$(MULTIUSER_TRACK_FOLDER)/$(BACKGROUND_USER_SPEC).log)
|
|
$(call run_interactive_interfer_desktop,$(INTERACTIVE_USER_SPEC)) &
|
|
@sleep 5
|
|
@$(call run_test_parallel,\
|
|
$(INTERFER_DESKTOP_CONFIG2),$(INTERFER_DESKTOP_ENV2),$(BACKGROUND_USER_SPEC),multi-user,$(BACKGROUND_USER_LOG)) || true
|
|
@$(KILL_COMMAND) || true
|
|
|
|
define run_interactive_interfer_desktop
|
|
$(call run_interactive_single,$(INTERFER_DESKTOP_CONFIG1),$(INTERFER_DESKTOP_ENV1),$(abs_dir)/integration_tests/desktop/$(1))
|
|
endef
|
|
|
|
INTERFER_DESKTOP_CONFIG1 = \
|
|
integrationFolder=$(DESKTOP_TEST_FOLDER),supportFile=$(SUPPORT_FILE),userAgent=$(DESKTOP_USER_AGENT),defaultCommandTimeout=30000,retries=0
|
|
|
|
INTERFER_DESKTOP_ENV1 = \
|
|
DATA_FOLDER=$(DESKTOP_DATA_FOLDER),WORKDIR=$(MULTIUSER_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),WORKDIR=$(MULTIUSER_WORKDIR),WSD_VERSION_HASH=$(LOOLWSD_VERSION_HASH),SERVER_PORT=$(FREE_PORT),LO_CORE_VERSION="$(CORE_VERSION)",INTEGRATION=$(CYPRESS_INTEGRATION)
|
|
|
|
define run_desktop_interference_tests
|
|
$(foreach test,$(DESKTOP_TEST_FILES),$(call run_desktop_interference_test,$(test)))
|
|
endef
|
|
|
|
define run_desktop_interference_test
|
|
$(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)
|
|
@echo "Running cypress desktop interference test: $(1)"
|
|
@echo
|
|
@$(call run_test_parallel,\
|
|
$(INTERFER_DESKTOP_CONFIG1),$(INTERFER_DESKTOP_ENV1),$(USER1_SPEC),desktop,$(USER1_LOG)) & \
|
|
sleep 5 && \
|
|
$(call run_test_parallel,\
|
|
$(INTERFER_DESKTOP_CONFIG2),$(INTERFER_DESKTOP_ENV2),$(USER2_SPEC),multi-user,$(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
|
|
|
|
else
|
|
|
|
check-local:
|
|
$(error CypressError: Can't find LibreOffice core installation!)
|
|
|
|
endif
|
|
endif
|