cypress: test idle handling

For faster testing use special values in Cypress case.
- check inactivity every 1s
- out of focus timeout - 1s
- inactivity timeout - 7s

Signed-off-by: Szymon Kłos <szymon.klos@collabora.com>
Change-Id: I9dd51f2098486917898b7624ac5ade56521f9e96
pull/8037/head
Szymon Kłos 2024-01-05 17:55:28 +01:00 committed by Szymon Kłos
parent c9e99706d6
commit a776ddf48d
4 changed files with 162 additions and 4 deletions

View File

@ -96,7 +96,7 @@ class IdleHandler {
this._inactivityTimer = setTimeout(() => {
this._dimIfInactive();
}, 1 * 60 * 1000); // Check once a minute
}, (L.Browser.cypressTest ? 1000 : 1 * 60 * 1000)); // Check once a minute
}
_startOutOfFocusTimer() {

View File

@ -34,6 +34,12 @@ DESKTOP_DATA_FOLDER = $(abs_srcdir)/data/desktop/
DESKTOP_DATA_WORKDIR = $(if $(coolwsd),$(DESKTOP_DATA_FOLDER),$(abs_builddir)/workdir/data/desktop/)
DESKTOP_TRACK_FOLDER = $(abs_builddir)/workdir/track/desktop
IDLE_USER_AGENT = "cypress"
IDLE_TEST_FOLDER = $(abs_srcdir)/integration_tests/idle
IDLE_DATA_FOLDER = $(abs_srcdir)/data/idle/
IDLE_DATA_WORKDIR = $(if $(coolwsd),$(IDLE_DATA_FOLDER),$(abs_builddir)/workdir/data/idle/)
IDLE_TRACK_FOLDER = $(abs_builddir)/workdir/track/idle
MOBILE_USER_AGENT = "cypress-mobile"
MOBILE_TEST_FOLDER = $(abs_srcdir)/integration_tests/mobile
MOBILE_DATA_FOLDER = $(abs_srcdir)/data/mobile/
@ -81,6 +87,8 @@ MOBILE_TEST_FILES=$(subst $(MOBILE_TEST_FOLDER)/,,$(wildcard $(MOBILE_TEST_FOLDE
DESKTOP_TEST_FILES=$(subst $(DESKTOP_TEST_FOLDER)/,,$(wildcard $(DESKTOP_TEST_FOLDER)/*_spec.js) $(wildcard $(DESKTOP_TEST_FOLDER)/*/*_spec.js))
IDLE_TEST_FILES=$(subst $(IDLE_TEST_FOLDER)/,,$(wildcard $(IDLE_TEST_FOLDER)/*_spec.js) $(wildcard $(IDLE_TEST_FOLDER)/*/*_spec.js))
MULTIUSER_TEST_FILES=$(subst $(MULTIUSER_TEST_FOLDER)/,,$(wildcard $(MULTIUSER_TEST_FOLDER)/*_spec.js) $(wildcard $(MULTIUSER_TEST_FOLDER)/*/*_spec.js))
MOBILE_TEST_FILES_DONE= \
@ -89,13 +97,16 @@ MOBILE_TEST_FILES_DONE= \
DESKTOP_TEST_FILES_DONE= \
$(foreach test_file,$(DESKTOP_TEST_FILES),$(DESKTOP_TRACK_FOLDER)/$(test_file).done)
IDLE_TEST_FILES_DONE= \
$(foreach test_file,$(IDLE_TEST_FILES),$(IDLE_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)
do-check: $(DESKTOP_TEST_FILES_DONE) $(MOBILE_TEST_FILES_DONE) $(IDLE_TEST_FILES_DONE) $(MULTIUSER_TESTS_DONE)
$(V)$(KILL_COMMAND) || true
$(if $(HEADLESS_BUILD),$(V)pkill Xvfb,)
$(if $(wildcard $(ERROR_LOG)),$(V)cat $(ERROR_LOG))
@ -106,6 +117,20 @@ $(PID_FILE): @JAILS_PATH@ $(NODE_BINS)
$(if $(HEADLESS_BUILD),$(call start_Xvfb),)
$(call start_coolwsd)
setup_short_idle:
$(eval SHORT_IDLE=1)
setup_regular_idle:
$(eval SHORT_IDLE=)
start_short_idle_coolwsd: @JAILS_PATH@ $(NODE_BINS) setup_short_idle
$(V)$(KILL_COMMAND) || true
$(if $(HEADLESS_BUILD),$(V)pkill Xvfb,)
$(call cleanup_before_run)
$(call run_JS_error_check)
$(if $(HEADLESS_BUILD),$(call start_Xvfb),)
$(call start_coolwsd)
$(MOBILE_TEST_FILES_DONE): $(PID_FILE) $(DESKTOP_TEST_FILES_DONE)
$(if $(PARALLEL_BUILD),\
$(call run_mobile_tests,$(subst $(MOBILE_TRACK_FOLDER)/,,$(basename $@)),$(basename $@).log),\
@ -130,6 +155,16 @@ $(MULTIUSER_TESTS_DONE): $(PID_FILE) $(MOBILE_TEST_FILES_DONE)
$(call run_all_multiuser_tests)
$(V)mkdir -p $(dir $@) && touch $@
$(IDLE_TEST_FILES_DONE): $(MULTIUSER_TESTS_DONE) start_short_idle_coolwsd $(PID_FILE)
$(if $(PARALLEL_BUILD),\
$(call run_idle_tests,$(subst $(IDLE_TRACK_FOLDER)/,,$(basename $@)),$(basename $@).log),\
$(call run_idle_tests))
$(if $(PARALLEL_BUILD),\
$(V)mkdir -p $(dir $@) && touch $@\
,\
$(V)$(foreach done_file,$(IDLE_TEST_FILES_DONE),mkdir -p $(dir $(done_file)) && touch $(done_file) &&) true\
)
@JAILS_PATH@:
mkdir -p $@
@ -171,6 +206,8 @@ define start_coolwsd_instance
--o:user_interface.mode=$(USER_INTERFACE) \
--o:accessibility.enable=$(A11Y_ENABLE) \
--o:security.enable_macros_execution=true \
$(if $(SHORT_IDLE),--o:per_view.out_of_focus_timeout_secs=1) \
$(if $(SHORT_IDLE),--o:per_view.idle_timeout_secs=7) \
--port=$(FREE_PORT) \
--pidfile=$(PID_FILE) \
--o:logging.file.property[0]=$(COOLWSD_LOG) \
@ -351,6 +388,71 @@ define run_desktop_tests
)
endef
################
# Idle tests.
################
check-idle: @JAILS_PATH@ $(NODE_BINS) start_short_idle_coolwsd $(PID_FILE)
$(call run_idle_tests,$(spec))
$(if $(HEADLESS_BUILD),$(V)pkill Xvfb,)
$(V)$(KILL_COMMAND) || true
run-idle: @JAILS_PATH@ $(NODE_BINS) start_short_idle_coolwsd $(PID_FILE)
$(call run_interactive_idle,$(spec)) || true
$(V)$(KILL_COMMAND) || true
IDLE_CONFIG = \
specPattern=$(IDLE_TEST_FOLDER)/**/*_spec.js,supportFile=$(SUPPORT_FILE),userAgent=$(IDLE_USER_AGENT)
IDLE_ENV = \
DATA_FOLDER=$(IDLE_DATA_FOLDER),DATA_WORKDIR=$(IDLE_DATA_WORKDIR),WSD_VERSION_HASH=$(COOLWSD_VERSION_HASH),SERVER=$(COOLWSD_SERVER),SERVER_PORT=$(FREE_PORT),LO_CORE_VERSION="$(CORE_VERSION)",INTEGRATION=$(CYPRESS_INTEGRATION),SCREENSHOT_FOLDER=$(abs_srcdir)/cypress/screenshots,IMAGES_FOLDER=$(abs_top_srcdir)/browser/images/help/en/
IDLE_INCLUDE_TAGS = \
tagdesktop,$(A11Y_TAG)
# Run one idle test / all idle tests in interactive test runner.
# Parameters:
# 1 - spec (optional): test file to run, if not specified all idle tests are run.
define run_interactive_idle
$(V)echo "Open cypress with idle tests..."
$(V)echo
$(eval CYPRESS_INCLUDE_TAGS=$(IDLE_INCLUDE_TAGS))
$(V)echo Cypress tags: $(CYPRESS_INCLUDE_TAGS)
$(V)echo
$(eval export CYPRESS_INCLUDE_TAGS)
$(if $(1),\
$(eval SPEC_FILE=$(IDLE_TEST_FOLDER)/$(1))\
$(call check_spec_existence,$(1),idle)\
$(call run_interactive_single,$(IDLE_CONFIG),$(IDLE_ENV),$(SPEC_FILE))\
,\
$(call run_interactive_all,$(IDLE_CONFIG),$(IDLE_ENV))\
)
endef
# Run one idle test / all idle tests in headless mode.
# Parameters:
# 1 - spec (optional): test file to run, if not specified all idle 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 $(IDLE_ENV).
define run_idle_tests
$(V)echo $(if $(1),"Running cypress idle test: $(1)","Running cypress idle tests...")
$(V)echo
$(eval CYPRESS_INCLUDE_TAGS=$(IDLE_INCLUDE_TAGS))
$(V)echo Cypress tags: $(CYPRESS_INCLUDE_TAGS)
$(V)echo
$(eval export CYPRESS_INCLUDE_TAGS)
$(eval ENV_EXTENDED=$(IDLE_ENV)$(if $(3),$(COMMA)$(3)))
$(if $(and $(PARALLEL_BUILD), $(1)),\
$(V)$(call run_test_parallel,\
$(IDLE_CONFIG),$(ENV_EXTENDED),$(1),idle,$(2))\
,\
$(eval SPEC_FILE=$(if $(1),$(IDLE_TEST_FOLDER)/$(1)))\
$(if $(1),$(call check_spec_existence,$(1),idle))\
$(call run_test_headless,\
$(IDLE_CONFIG),$(ENV_EXTENDED),$(SPEC_FILE))\
)
endef
###################
# Multi-user tests.
###################
@ -586,6 +688,8 @@ do-run-cov: @JAILS_PATH@ $(NODE_BINS)
$(call run_mobile_tests,,,COVERAGE_RUN="1")
$(call run_all_multiuser_tests,COVERAGE_RUN="1")
$(V)$(KILL_COMMAND) || true
$(call run_idle_tests,,,COVERAGE_RUN="1")
$(V)$(KILL_COMMAND) || true
####################
# General functions.
@ -669,11 +773,12 @@ endef
#
# Parameters:
# 1 - spec: test file path (e.g. make check-mobile spec=...)
# 2 - test type: mobile, desktop or multi test.
# 2 - test type: mobile, desktop, idle or multi test.
define check_spec_existence
$(eval TEST_FILES=$(if $(filter mobile,$(2)),$(MOBILE_TEST_FILES),\
$(if $(filter desktop,$(2)),$(DESKTOP_TEST_FILES),\
$(if $(filter multi,$(2)),$(MULTIUSER_TEST_FILES)))))
$(if $(filter idle,$(2)),$(IDLE_TEST_FILES),\
$(if $(filter multi,$(2)),$(MULTIUSER_TEST_FILES))))))
$(if $(filter $(1),$(TEST_FILES)),,$(error CypressError: Can't find the given spec file!))
endef

Binary file not shown.

View File

@ -0,0 +1,53 @@
/* global describe it cy beforeEach require afterEach */
var helper = require('../../common/helper');
var calcHelper = require('../../common/calc_helper');
describe(['tagdesktop'], 'Idle', function() {
var origTestFileName = 'idle.ods';
var testFileName;
var dimDialogSelector = '#modal-dialog-inactive_user_message-overlay';
beforeEach(function() {
testFileName = helper.beforeAll(origTestFileName, 'calc');
});
afterEach(function() {
helper.afterAll(testFileName, this.currentTest.state);
});
function checkIfIsInteractiveAgain() {
calcHelper.dblClickOnFirstCell();
const content = 'New content';
helper.typeIntoDocument(content + '{enter}');
calcHelper.selectEntireSheet();
helper.waitUntilIdle('#copy-paste-container tbody');
calcHelper.assertDataClipboardTable(['C' + content + 'ypress Test', 'Status', 'Test 1', 'Pass', 'Test 2', 'Fail', 'Test 3', 'Pass', 'Test 4', '', 'Test 5', 'Fail']);
}
it('Check idle out of focus', function() {
cy.getFrameWindow()
.its('L')
.then(function(L) {
L.Map.THIS._onLostFocus();
});
cy.cGet(dimDialogSelector, { timeout: 1000 }).should('not.exist');
cy.wait(1100); // out of focus timeout is 1s
cy.cGet(dimDialogSelector, { timeout: 1000 }).should('exist');
checkIfIsInteractiveAgain();
});
it('Check idle after inactivity', function() {
cy.cGet(dimDialogSelector).should('not.exist');
cy.wait(7100); // inactivity timeout is 7s
cy.cGet(dimDialogSelector).should('exist');
checkIfIsInteractiveAgain();
});
});