gggeek / ezdbintegrity
允许检查数据库中数据的完整性
Requires
Requires (Dev)
- phpunit/phpunit: ^5.0 || ^8.5.14
- roave/security-advisories: dev-disablechecks as dev-master
This package is auto-updated.
Last update: 2024-09-11 14:57:03 UTC
README
对于 eZPlatform 3.0 及更高版本,请查看: https://github.com/tanoconsulting/ezdbintegritybundle
目标
允许检查数据库(eZ Publish 的,但也可以是其他数据库)中数据的完整性。允许检查 eZPublish 存储文件(内容中的图像和二进制文件)的完整性。
支持的检查
-
外键完整性
这适用于没有启用外键,但实际上存在父子关系的数据库。要检查的关系通过配置文件定义。标准配置为 eZ Publish/eZPlatform 模式(版本 4.x => 5.x)提供了外键定义。
-
数据完整性
类似于外键检查,这些是自定义的 SQL 查询,可以执行以查找任何类型的数据不一致。要运行的查询通过配置文件定义。标准配置为 eZ Publish/eZPlatform 模式(版本 4.x => 5.x)提供了许多数据完整性查询。
-
内容对象完整性
这检查 eZ Publish 内容对象,根据其数据类型定义验证每个属性。例如,它检查是否应该为 null 的属性,或者图像文件是否丢失。请注意:目前并不支持所有数据类型,只支持有限的一组。
-
孤立存储文件
这检查在已知的 eZ Publish 存储目录中找到的所有文件,并列出在数据库中找不到的任何文件,这些文件对应于 ezmedia、ezimage 和 ezbinaryfile 属性。
注意 提醒
- 通过 eZ5 栈生成的图像变体不会存储在数据库中的 ezimage 表中。因此,它们将被报告为孤立。如果您删除它们,eZ5 将重新生成它们,所以这不是什么大问题,但可能包括许多实际正在使用的文件。
脚本可以选择删除文件。我们假设您使用此功能不承担任何责任!
如何使用
-
运行
php extension/ezdbintegrity/bin/php/checkschema.php --help
、php extension/ezdbintegrity/bin/php/checkattributes.php --help
和php extension/ezdbintegrity/bin/php/checkstorage.php --help
以开始 -
您可以在 ezdbintegrity.ini.append.php 中定义更多要检查的外键和属性类型
免责声明
!!! 不要盲目删除数据库中报告为外键违规的数据!!!
!!! 不要盲目删除报告为孤立的存储文件!!!
如果您这样做,我们不承担任何责任。您应仔细调查违规的原因。很可能问题是出在这个扩展,而不是您的数据——提供的外键定义是从现有的代码库和数据库中逆向工程得出的,并不是一成不变的。
运行测试
该包使用 PHPUnit 运行功能测试。
注意 测试 不 模拟与数据库的交互,但在其中创建/修改/删除许多类型的数据。因此,运行测试可能会留下陈旧/损坏的数据。建议使用专用的 eZ Publish 安装或至少专用数据库来运行测试套件。
为该包设置专用测试环境
运行扩展测试的一个安全选择是设置一个专用环境,类似于在GitHub Actions上运行测试套件时使用的环境。其优点很多:一方面,你可以从你想要的任何版本的eZPublish开始;另一方面,你将更有信心,你添加或修改的任何测试也将通过GitHub。缺点是,你需要Docker和Docker-compose,而且你将使用的环境将与传统eZPublish设置大不相同!另外,构建该环境需要相当多的磁盘空间和时间。
设置专用测试环境并在其中运行测试的步骤
git clone --depth 1 https://github.com/tanoconsulting/euts.git teststack
# if you have a github auth token, it is a good idea to copy it now to teststack/docker/data/.composer/auth.json
# this config sets up a test environment with eZPlatform 2.5 running on php 7.4 / ubuntu jammy
export TESTSTACK_CONFIG_FILE=Tests/environment/.euts.2.5.env
./teststack/teststack build
./teststack/teststack runtests
./teststack/teststack stop
注意:第一次运行时需要一些时间,但之后的运行会更快。注意:请确保有足够的磁盘空间可用。
如果您想手动运行命令,例如symfony控制台
./teststack/teststack console cache:clear
或者轻松地访问数据库shell提示符
./teststack/teststack dbconsole
或者运行测试的Docker容器的命令行shell提示符
./teststack/teststack shell
在Docker容器中运行的测试使用的是在文件Tests/environment/.euts.2.5.env
中指定的debian/php/mysql/eZPlatform内核版本,该文件由环境变量TESTSTACK_CONFIG_FILE
指定。如果未设置该环境变量的值,将查找名为.euts.env
的文件。如果不存在此类文件,将使用一些默认值,您可以在./teststack/README.md中的文档中找到它们。如果您想针对不同的eZ/php/debian版本进行测试,请随意
- 创建
.euts.env
文件(如果不存在的话) - 向其中添加任何必要的变量(参见文件
teststack/.euts.env.example
作为指导) - 重新构建测试堆栈
- 以通常的方式运行测试
您甚至可以通过使用不同的环境文件,同时保持多个测试堆栈可用
- 创建一个名为
.euts.env.local
的文件,并向其中添加任何所需的env变量,从唯一的COMPOSE_PROJECT_NAME
开始 - 通过
./teststack/teststack. -e .euts.env.local build
构建新的测试堆栈 - 通过
./teststack/teststack -e .euts.env.local runtests
运行测试