diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 72cf1a4b..85b6c4e5 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -22,10 +22,18 @@ jobs: test-command: composer test:func download-binaries: true - acceptance: - name: Acceptance Testing + acceptance-slow: + name: Acceptance Testing (Slow) uses: ./.github/workflows/run-test-suite.yml with: fail-fast: false - test-command: composer test:accept + test-command: composer test:accept-slow + download-binaries: true + + acceptance-fast: + name: Acceptance Testing (Fast) + uses: ./.github/workflows/run-test-suite.yml + with: + fail-fast: false + test-command: composer test:accept-fast download-binaries: true diff --git a/.run/Acceptance Fast.run.xml b/.run/Acceptance Fast.run.xml new file mode 100644 index 00000000..687a546d --- /dev/null +++ b/.run/Acceptance Fast.run.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/.run/Acceptance Slow.run.xml b/.run/Acceptance Slow.run.xml new file mode 100644 index 00000000..d9d8e85c --- /dev/null +++ b/.run/Acceptance Slow.run.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/.run/Acceptance.run.xml b/.run/Acceptance.run.xml index af5f7ae9..ae1d8ef2 100644 --- a/.run/Acceptance.run.xml +++ b/.run/Acceptance.run.xml @@ -1,6 +1,6 @@ - + - \ No newline at end of file + diff --git a/composer.json b/composer.json index e9fba120..6aeef729 100644 --- a/composer.json +++ b/composer.json @@ -102,7 +102,9 @@ "test:unit": "tests/runner.php vendor/bin/phpunit --testsuite=Unit --color=always --testdox", "test:func": "tests/runner.php vendor/bin/phpunit --testsuite=Functional --color=always --testdox", "test:arch": "phpunit --testsuite=Arch --color=always --testdox", - "test:accept": "tests/runner.php vendor/bin/phpunit --testsuite=Acceptance --color=always --testdox" + "test:accept": "tests/runner.php vendor/bin/phpunit --testsuite=Acceptance --color=always --testdox", + "test:accept-slow": "tests/runner.php vendor/bin/phpunit --testsuite=\"Acceptance-Slow\" --color=always --testdox", + "test:accept-fast": "tests/runner.php vendor/bin/phpunit --testsuite=\"Acceptance-Fast\" --color=always --testdox" }, "config": { "sort-packages": true, diff --git a/phpunit.xml.dist b/phpunit.xml.dist index a982abbf..43bb60c7 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -14,9 +14,56 @@ displayDetailsOnTestsThatTriggerDeprecations="true" displayDetailsOnTestsThatTriggerErrors="true" displayDetailsOnTestsThatTriggerNotices="true" - displayDetailsOnTestsThatTriggerWarnings="true" -> + displayDetailsOnTestsThatTriggerWarnings="true"> + + tests/Acceptance/Extra + tests/Acceptance/Harness + tests/Acceptance/Harness/Update/SelfTest.php + tests/Acceptance/Harness/Query/TimeoutDueToNoActiveWorkersTest.php + tests/Acceptance/Extra/Activity/ActivityPausedTest.php + tests/Acceptance/Extra/Versioning/DeploymentTest.php + tests/Acceptance/Harness/EagerWorkflow/SuccessfulStartTest.php + tests/Acceptance/Harness/Activity/CancelTryCancelTest.php + tests/Acceptance/Extra/Stability/ResetWorkerTest.php + tests/Acceptance/Harness/Activity/RetryOnErrorTest.php + tests/Acceptance/Harness/Update/WorkerRestartTest.php + tests/Acceptance/Harness/Schedule/BasicTest.php + tests/Acceptance/Harness/Update/AsyncAcceptTest.php + tests/Acceptance/Extra/Workflow/BuiltInPrefixedHandlersTest.php + tests/Acceptance/Harness/Schedule/TriggerTest.php + tests/Acceptance/Extra/Workflow/InitMethodTest.php + tests/Acceptance/Harness/Signal/PreventCloseTest.php + tests/Acceptance/Extra/Update/UntypedStubTest.php + tests/Acceptance/Extra/Update/TimeoutTest.php + tests/Acceptance/Extra/Workflow/DateTimeZoneWorkflowTest.php + tests/Acceptance/Extra/Schedule/ScheduleUpdateTest.php + tests/Acceptance/Harness/ChildWorkflow/CancelAbandonTest.php + tests/Acceptance/Harness/ContinueAsNew/ContinueAsSameTest.php + + + tests/Acceptance/Harness/Update/SelfTest.php + tests/Acceptance/Harness/Query/TimeoutDueToNoActiveWorkersTest.php + tests/Acceptance/Extra/Activity/ActivityPausedTest.php + tests/Acceptance/Extra/Versioning/DeploymentTest.php + tests/Acceptance/Harness/EagerWorkflow/SuccessfulStartTest.php + tests/Acceptance/Harness/Activity/CancelTryCancelTest.php + tests/Acceptance/Extra/Stability/ResetWorkerTest.php + tests/Acceptance/Harness/Activity/RetryOnErrorTest.php + tests/Acceptance/Harness/Update/WorkerRestartTest.php + tests/Acceptance/Harness/Schedule/BasicTest.php + tests/Acceptance/Harness/Update/AsyncAcceptTest.php + tests/Acceptance/Extra/Workflow/BuiltInPrefixedHandlersTest.php + tests/Acceptance/Harness/Schedule/TriggerTest.php + tests/Acceptance/Extra/Workflow/InitMethodTest.php + tests/Acceptance/Harness/Signal/PreventCloseTest.php + tests/Acceptance/Extra/Update/UntypedStubTest.php + tests/Acceptance/Extra/Update/TimeoutTest.php + tests/Acceptance/Extra/Workflow/DateTimeZoneWorkflowTest.php + tests/Acceptance/Extra/Schedule/ScheduleUpdateTest.php + tests/Acceptance/Harness/ChildWorkflow/CancelAbandonTest.php + tests/Acceptance/Harness/ContinueAsNew/ContinueAsSameTest.php + tests/Acceptance/Extra tests/Acceptance/Harness @@ -45,4 +92,4 @@ src - + \ No newline at end of file diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 0dd2045e..fc34416d 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -35,7 +35,10 @@ return null; })($GLOBALS['argv'] ?? []); +$suite = \substr($suite, 0, \strpos($suite, '-') ?: \strlen($suite)); + # Include related bootstrap -$suite === null or (static fn(string $file) => \is_file($file) and include $file)( - __DIR__ . DIRECTORY_SEPARATOR . $suite . DIRECTORY_SEPARATOR . 'bootstrap.php', -); +$file = __DIR__ . DIRECTORY_SEPARATOR . $suite . DIRECTORY_SEPARATOR . 'bootstrap.php'; +if (\is_file($file)) { + include $file; +} diff --git a/tests/phpunit-generate.php b/tests/phpunit-generate.php new file mode 100644 index 00000000..2a3bbb85 --- /dev/null +++ b/tests/phpunit-generate.php @@ -0,0 +1,151 @@ +#!/usr/bin/env php +xpath('//testcase') as $testcase) { + $file = (string) $testcase['file']; + $time = (float) $testcase['time']; + + if (!isset($tests[$file])) { + $tests[$file] = 0.0; + } + $tests[$file] = \max($tests[$file], $time); // max instead of sum + } +} + +$slow = []; +$fast = []; + +foreach ($tests as $file => $time) { + if ($time >= $threshold) { + $slow[$file] = $time; + } else { + $fast[$file] = $time; + } +} + +\arsort($slow); + +$extractPath = static function (string $file): string { + if (\preg_match('#(tests/Acceptance/.+)$#', $file, $matches)) { + return $matches[1]; + } + return $file; +}; + +$slowFiles = \array_map($extractPath, \array_keys($slow)); + +$excludeLines = \implode("\n", \array_map( + static fn(string $file): string => " $file", + $slowFiles, +)); + +$fileLines = \implode("\n", \array_map( + static fn(string $file): string => " $file", + $slowFiles, +)); + +$template = <<<'XML' + + + + + tests/Acceptance/Extra + tests/Acceptance/Harness +{{EXCLUDES}} + + +{{FILES}} + + + tests/Acceptance/Extra + tests/Acceptance/Harness + + + tests/Arch + + + tests/Unit + + + tests/Functional + + + + + skip-on-test-server + + + + + + + + + src + + + +XML; + +$output = \str_replace( + ['{{EXCLUDES}}', '{{FILES}}'], + [$excludeLines, $fileLines], + $template, +); + +\file_put_contents($outputFile, $output); + +$slowTime = \array_sum($slow); +$fastTime = \array_sum($fast); + +echo "Generated: $outputFile (threshold: {$threshold}s)\n\n"; +echo "Fast: " . \count($fast) . " files (~" . \round($fastTime, 1) . "s)\n"; +echo "Slow: " . \count($slow) . " files (~" . \round($slowTime, 1) . "s)\n\n"; + +foreach ($slow as $file => $time) { + echo \sprintf("%6.2fs %s\n", $time, $extractPath($file)); +}