diff --git a/Build/Scripts/runTests.sh b/Build/Scripts/runTests.sh index 084b3bbf438790f08f5b2b687171e3c99f875b25..92b6825809b017d647941401f7f4ed0591d8e8e3 100755 --- a/Build/Scripts/runTests.sh +++ b/Build/Scripts/runTests.sh @@ -65,6 +65,7 @@ Options: Specifies which test suite to run - acceptance: backend acceptance tests - acceptancePagetree: backend acceptance tests for page tree + - acceptanceInstallTool: acceptance tests for stand alone install tool - buildCss: execute scss to css builder - buildJavascript: execute typescript to javascript builder - cglGit: test and fix latest committed patch for CGL compliance @@ -289,6 +290,13 @@ case ${TEST_SUITE} in SUITE_EXIT_CODE=$? docker-compose down ;; + acceptanceInstallTool) + setUpDockerComposeDotEnv + docker-compose run prepare_acceptance_installtool_mariadb10 + docker-compose run acceptance_installtool_mariadb10 + SUITE_EXIT_CODE=$? + docker-compose down + ;; buildCss) setUpDockerComposeDotEnv docker-compose run build_css diff --git a/Build/bamboo/src/main/java/core/AbstractCoreSpec.java b/Build/bamboo/src/main/java/core/AbstractCoreSpec.java index 94517073abebe9d6b1846daf2b94249f0bf11b08..34648e3d06c3d18499a6325718d033353a7e6b63 100644 --- a/Build/bamboo/src/main/java/core/AbstractCoreSpec.java +++ b/Build/bamboo/src/main/java/core/AbstractCoreSpec.java @@ -338,7 +338,7 @@ abstract class AbstractCoreSpec { this.getTaskStopDanglingContainers(), composerTask, this.getTaskPrepareAcceptanceTest(), - this.getTaskDockerDependenciesAcceptanceInstallPostgres10(), + this.getTaskDockerDependenciesAcceptancePostgres10(), new ScriptTask() .description("Install TYPO3 on postgresql 10") .interpreter(ScriptTaskProperties.Interpreter.BINSH_OR_CMDEXE) @@ -574,6 +574,63 @@ abstract class AbstractCoreSpec { return jobs; } + ArrayList<Job> getJobsAcceptanceTestsInstallToolMysql(int stageNumber, String requirementIdentifier, Task composerTask, Boolean isSecurity) { + String name = getTaskNamePartForComposer(stageNumber); + ArrayList<Job> jobs = new ArrayList<Job>(); + + jobs.add(new Job("Accept InstallTool my " + name + " " + requirementIdentifier, new BambooKey("ACITMY" + stageNumber + requirementIdentifier)) + .description("Run acceptance tests for install tool " + requirementIdentifier) + .pluginConfigurations(this.getDefaultJobPluginConfiguration()) + .tasks( + this.getTaskGitCloneRepository(), + this.getTaskGitCherryPick(isSecurity), + this.getTaskStopDanglingContainers(), + composerTask, + this.getTaskPrepareAcceptanceTest(), + this.getTaskDockerDependenciesAcceptanceBackendMariadb10(), + new ScriptTask() + .description("Execute codeception acceptance test for standalone install tool.") + .interpreter(ScriptTaskProperties.Interpreter.BINSH_OR_CMDEXE) + .inlineBody( + this.getScriptTaskBashInlineBody() + + "function codecept() {\n" + + " docker run \\\n" + + " -u ${HOST_UID} \\\n" + + " -v /bamboo-data/${BAMBOO_COMPOSE_PROJECT_NAME}/passwd:/etc/passwd \\\n" + + " -v ${BAMBOO_COMPOSE_PROJECT_NAME}_bamboo-data:/srv/bamboo/xml-data/build-dir/ \\\n" + + " -e typo3DatabaseName=func_test \\\n" + + " -e typo3DatabaseUsername=root \\\n" + + " -e typo3DatabasePassword=funcp \\\n" + + " -e typo3DatabaseHost=mariadb10 \\\n" + + " --name ${BAMBOO_COMPOSE_PROJECT_NAME}sib_adhoc \\\n" + + " --network ${BAMBOO_COMPOSE_PROJECT_NAME}_test \\\n" + + " --rm \\\n" + + " typo3gmbh/" + requirementIdentifier.toLowerCase() + ":latest \\\n" + + " bin/bash -c \"cd ${PWD}; ./bin/codecept $*\"\n" + + "}\n" + + "\n" + + "codecept run InstallTool -d -c typo3/sysext/core/Tests/codeception.yml --env=mysql --xml reports.xml --html reports.html\n" + ) + ) + .finalTasks( + this.getTaskStopDockerDependencies(), + new TestParserTask(TestParserTaskProperties.TestType.JUNIT) + .resultDirectories("typo3temp/var/tests/AcceptanceReports/reports.xml") + ) + .artifacts(new Artifact() + .name("Test Report") + .copyPattern("typo3temp/var/tests/AcceptanceReports/") + .shared(false) + ) + .requirements( + this.getRequirementDocker10() + ) + .cleanWorkingDirectory(true) + ); + + return jobs; + } + /** * Jobs for mysql based functional tests with driver mysqli */ @@ -1744,7 +1801,7 @@ abstract class AbstractCoreSpec { /** * Start docker sibling containers to execute acceptance install tests on postgres */ - private Task getTaskDockerDependenciesAcceptanceInstallPostgres10() { + private Task getTaskDockerDependenciesAcceptancePostgres10() { return new ScriptTask() .description("Start docker siblings for acceptance test install postgres") .interpreter(ScriptTaskProperties.Interpreter.BINSH_OR_CMDEXE) diff --git a/Build/bamboo/src/main/java/core/AbstractPreMergeSpec.java b/Build/bamboo/src/main/java/core/AbstractPreMergeSpec.java index ca91daec2b767b4894049d8ab98b5bbde828f0d4..4fdc17cdfd668bac529a3e032b4c852072fb108a 100644 --- a/Build/bamboo/src/main/java/core/AbstractPreMergeSpec.java +++ b/Build/bamboo/src/main/java/core/AbstractPreMergeSpec.java @@ -55,6 +55,7 @@ abstract class AbstractPreMergeSpec extends AbstractCoreSpec { jobsMainStage.addAll(this.getJobsAcceptanceTestsBackendMysql(0, numberOfAcceptanceTestJobs, phpVersions[1], this.getTaskComposerInstall(phpVersions[1]), isSecurity)); jobsMainStage.addAll(this.getJobsAcceptanceTestsPageTreeMysql(0, phpVersions[1], this.getTaskComposerInstall(phpVersions[1]), isSecurity)); + jobsMainStage.addAll(this.getJobsAcceptanceTestsInstallToolMysql(0, phpVersions[1], this.getTaskComposerInstall(phpVersions[1]), isSecurity)); jobsMainStage.add(this.getJobIntegrationPhpStan(phpVersions[0], this.getTaskComposerInstall(phpVersions[0]), isSecurity)); jobsMainStage.add(this.getJobIntegrationDocBlocks(phpVersions[0], this.getTaskComposerInstall(phpVersions[0]), isSecurity)); diff --git a/Build/bamboo/src/main/java/core/NightlySpec.java b/Build/bamboo/src/main/java/core/NightlySpec.java index 79494ea44cb612c746d56b13d7b3069542631c6c..72bb2e8ee62f6817a62ce897db3a77061b548f32 100644 --- a/Build/bamboo/src/main/java/core/NightlySpec.java +++ b/Build/bamboo/src/main/java/core/NightlySpec.java @@ -327,14 +327,17 @@ public class NightlySpec extends AbstractCoreSpec { String phpVersion = "PHP72"; Task composerTask = getComposerTaskByStageNumber(phpVersion, COMPOSER_MIN); jobs.add(this.getJobAcceptanceTestInstallPgsql(COMPOSER_MIN, phpVersion, composerTask, false)); + jobs.addAll(this.getJobsAcceptanceTestsInstallToolMysql(COMPOSER_MIN, phpVersion, composerTask, false)); phpVersion = "PHP73"; composerTask = getComposerTaskByStageNumber(phpVersion, COMPOSER_DEFAULT); jobs.add(this.getJobAcceptanceTestInstallPgsql(COMPOSER_DEFAULT, phpVersion, composerTask, false)); + jobs.addAll(this.getJobsAcceptanceTestsInstallToolMysql(COMPOSER_DEFAULT, phpVersion, composerTask, false)); phpVersion = "PHP74"; composerTask = getComposerTaskByStageNumber(phpVersion, COMPOSER_MAX); jobs.add(this.getJobAcceptanceTestInstallPgsql(COMPOSER_MAX, phpVersion, composerTask, false)); + jobs.addAll(this.getJobsAcceptanceTestsInstallToolMysql(COMPOSER_MAX, phpVersion, composerTask, false)); stages.add(new Stage("Acceptance pgsql").jobs(jobs.toArray(new Job[0]))); return stages; diff --git a/Build/testing-docker/local/docker-compose.yml b/Build/testing-docker/local/docker-compose.yml index 27dfc995d083f61cbc061aad628c5f550f9c1bd2..44124bbc9406ec10eb63cd2a41a553d37b7d52ac 100644 --- a/Build/testing-docker/local/docker-compose.yml +++ b/Build/testing-docker/local/docker-compose.yml @@ -129,6 +129,46 @@ services: && ./bin/codecept run PageTree -d -c typo3/sysext/core/Tests/codeception.yml ${TEST_FILE} --html reports.html " + prepare_acceptance_installtool_mariadb10: + image: alpine:3.8 + links: + - mariadb10 + - chrome + - web + command: > + /bin/sh -c " + if [ ${SCRIPT_VERBOSE} -eq 1 ]; then + set -x + fi + echo Waiting for database start...; + while ! nc -z mariadb10 3306; do + sleep 1; + done; + echo Database is up; + " + acceptance_installtool_mariadb10: + image: typo3gmbh/${DOCKER_PHP_IMAGE}:latest + user: ${HOST_UID} + environment: + typo3DatabaseName: func_test + typo3DatabaseUsername: root + typo3DatabasePassword: funcp + typo3DatabaseHost: mariadb10 + volumes: + - ${CORE_ROOT}:${CORE_ROOT} + - ${HOST_HOME}:${HOST_HOME} + - /etc/passwd:/etc/passwd:ro + - /etc/group:/etc/group:ro + working_dir: ${CORE_ROOT} + command: > + /bin/sh -c " + if [ ${SCRIPT_VERBOSE} -eq 1 ]; then + set -x + fi + mkdir -p typo3temp/var/tests/ \ + && ./bin/codecept run InstallTool -d -c typo3/sysext/core/Tests/codeception.yml ${TEST_FILE} --html reports.html + " + prepare_acceptance_install_mariadb10: image: alpine:3.8 links: diff --git a/typo3/sysext/core/Tests/Acceptance/InstallTool.suite.yml b/typo3/sysext/core/Tests/Acceptance/InstallTool.suite.yml new file mode 100644 index 0000000000000000000000000000000000000000..a6cd4ec54bad4ff9a6cfd937f6dce2b2e3e4a452 --- /dev/null +++ b/typo3/sysext/core/Tests/Acceptance/InstallTool.suite.yml @@ -0,0 +1,14 @@ +class_name: BackendTester +modules: + enabled: + - WebDriver: + url: http://web:8000/typo3temp/var/tests/acceptance + browser: chrome + wait: 1 + host: chrome + - \TYPO3\TestingFramework\Core\Acceptance\Helper\Acceptance + - Asserts + +extensions: + enabled: + - TYPO3\CMS\Core\Tests\Acceptance\Support\Extension\BackendCoreEnvironment diff --git a/typo3/sysext/core/Tests/Acceptance/InstallTool/LoginCest.php b/typo3/sysext/core/Tests/Acceptance/InstallTool/LoginCest.php index 5b67fac68f3f00f81c8c5bf3ef46804fdb7ba7a3..825595c8860918d4529f0022e781c07e7c7b67fc 100644 --- a/typo3/sysext/core/Tests/Acceptance/InstallTool/LoginCest.php +++ b/typo3/sysext/core/Tests/Acceptance/InstallTool/LoginCest.php @@ -21,6 +21,9 @@ use TYPO3\CMS\Core\Tests\Acceptance\Support\BackendTester; class LoginCest extends AbstractCest { + /** + * @param BackendTester $I + */ public function installToolLogin(BackendTester $I) { $I->amGoingTo('assert the install tool is locked in the first place'); diff --git a/typo3/sysext/core/Tests/Acceptance/InstallTool/MaintenanceCest.php b/typo3/sysext/core/Tests/Acceptance/InstallTool/MaintenanceCest.php index 2748f2c53a02cde4762b16ec3fea7970eff3707e..4b24f0c822e5a643f024e5adfdd8b823c27dfbae 100644 --- a/typo3/sysext/core/Tests/Acceptance/InstallTool/MaintenanceCest.php +++ b/typo3/sysext/core/Tests/Acceptance/InstallTool/MaintenanceCest.php @@ -28,6 +28,11 @@ class MaintenanceCest extends AbstractCest $I->click('Maintenance'); $I->see('Maintenance', 'h1'); } + + /** + * @param BackendTester $I + * @throws \Exception + */ public function flushCacheWorks(BackendTester $I) { $I->click('Flush cache'); @@ -35,6 +40,10 @@ class MaintenanceCest extends AbstractCest $I->see('Caches cleared', '.alert-success h4'); } + /** + * @param BackendTester $I + * @throws \Exception + */ public function analyzeDatabaseStructureWorks(BackendTester $I) { $I->click('Analyze database'); @@ -46,6 +55,10 @@ class MaintenanceCest extends AbstractCest $I->waitForElementNotVisible('.modal-dialog'); } + /** + * @param BackendTester $I + * @throws \Exception + */ public function removeTemporaryAssetsWorks(BackendTester $I) { $I->click('Scan temporary files'); @@ -55,6 +68,10 @@ class MaintenanceCest extends AbstractCest $I->waitForElementNotVisible('.modal-dialog'); } + /** + * @param BackendTester $I + * @throws \Exception + */ public function dumpAutoloadWorks(BackendTester $I) { $I->click('Dump autoload'); @@ -62,6 +79,10 @@ class MaintenanceCest extends AbstractCest $I->see('Successfully dumped class loading information for extensions.', '.alert-success h4'); } + /** + * @param BackendTester $I + * @throws \Exception + */ public function clearPersistentTablesWorks(BackendTester $I) { $I->click('Scan tables'); @@ -71,6 +92,10 @@ class MaintenanceCest extends AbstractCest $I->waitForElementNotVisible('.modal-dialog'); } + /** + * @param BackendTester $I + * @throws \Exception + */ public function createAdminUserWorks(BackendTester $I) { $I->click('Create Administrator'); @@ -80,6 +105,10 @@ class MaintenanceCest extends AbstractCest $I->waitForElementNotVisible('.modal-dialog'); } + /** + * @param BackendTester $I + * @throws \Exception + */ public function resetBackendUserPreferencesWorks(BackendTester $I) { $I->click('Reset backend user preferences'); @@ -87,6 +116,10 @@ class MaintenanceCest extends AbstractCest $I->see('Preferences of all backend users have been reset', '.alert-success h4'); } + /** + * @param BackendTester $I + * @throws \Exception + */ public function manageLanguagePacksWorks(BackendTester $I) { $I->click('Manage languages');