Testing a bundle
This page is for bundlers who test a release before it goes out. A bundle combines many parts; the only proof that they work together is installing and using the bundle as a recipient would.
Contents
The test matrix
List what you claim and test each combination you claim, not more:
PHP: 8.x, 8.y
Database: SQLite 3, PostgreSQL <version>
Server: Velocity (qbix) / Apache + PHP-FPM / nginx + PHP-FPM
Install: exp:install / kickstarter / setup wizard
Network: online / offline
Upgrade: from bundle <previous version>The project's own CI tests PostgreSQL 15 and MySQL 8.0 and runs driver unit tests for the others (Database support); a combination your bundle claims beyond that is yours to prove.
Build checks
| Check | Command or method | Pass when |
|---|---|---|
| Composer | composer validate --no-check-publish; composer install --no-dev from the lock file | no errors |
| PHP extensions | php bin/php/console exp:velocity ext check | nothing missing |
| Classes | php bin/php/console exp:checkclasses | no class PHP refuses to load |
| Integrity | php bin/php/checkmanifest.php --all | exit 0, or only your listed changes |
| Licenses | composer licenses --no-dev | no package without a license you have not cleared |
| Nothing secret shipped | inspect the artifact for settings/override/*.ini.append.php, kickstart.ini, var/log/ | none present |
Install tests
- Dry run:
php bin/php/console exp:install --dry-run ...orexp:kickstarter run --dry-run; exit0. - Install: exit
0;var/log/setup.logends with a RESULT line and no errors. The log includes "health checks after the install (database, declared tables, content classes, objects, content root, name lists, settings, siteaccesses, file ownership)" (Install in one command). - Second start: the already-installed test skips the install; data is still there.
- Offline: the same install with no outgoing network (Offline bundles).
- Failure path: a wrong database password gives exit
1, maintenance mode on, a readable reason invar/log/setup.log.
Running-site checks
- To do: The site and the administration answer at the documented addresses.
- To do: Sign in with the handed-over password; change it; the file
var/log/initial-admin-passwordis gone. - To do: Publish an article with an image; it appears on the site; image variations are created.
- To do: Search finds it.
- To do: Cron runs (
runcronjobs.php) as the site user without permission errors. - To do:
/.git/config,/settings/site.ini,/composer.jsonare not served (13.16). - To do: No Demo mode banner (except in demo bundles).
- To do: Info > About and Info > Copyright show the versions and licenses.
- To do: No files owned by root under
var/. - To do: After a restart of the whole bundle, everything above still holds.
Upgrade test
- Install the previous bundle release; add some content.
- Apply your update the way recipients will (Updates and upgrade paths).
- Check the version row (expected value for the 6.0.15 line:
6.0.15stable, query in 11.2), the content, the sign-in and the checks above. - Follow 11.7 Verify the upgrade.
The test log
Keep, per release: the matrix with results, var/log/setup.log and var/log/kickstart.log of each install, the
build record (Lock files and reproducible builds) and the
names of the testers. Partners who test Exponential releases themselves can feed results back
(Testing releases).
Related pages
- Bundle release checklist
- Testing in a sandbox (site packages)
- Benchmarking a hosted site
- Free documentation: this page is free to copy, translate and improve under the GNU FDL 1.3.
Become an Exponential Partner
Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.