From ca2609efbdd332ee0694e0e25ebcb6f315d86e79 Mon Sep 17 00:00:00 2001 From: Franco Fichtner Date: Wed, 27 Sep 2023 16:27:54 +0200 Subject: [PATCH] mvc: add "make validate" target and script --- Makefile | 3 + plist | 1 + src/opnsense/mvc/script/run_validations.php | 63 +++++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100755 src/opnsense/mvc/script/run_validations.php diff --git a/Makefile b/Makefile index c797bab80..8c3f564cd 100644 --- a/Makefile +++ b/Makefile @@ -528,6 +528,9 @@ push: migrate: @src/opnsense/mvc/script/run_migrations.php +validate: + @src/opnsense/mvc/script/run_validations.php + test: debug @if [ "$$(${VERSIONBIN} -v)" != "${CORE_PKGVERSION}" ]; then \ echo "Installed version does not match, expected ${CORE_PKGVERSION}"; \ diff --git a/plist b/plist index befb91d7a..28e860101 100644 --- a/plist +++ b/plist @@ -810,6 +810,7 @@ /usr/local/opnsense/mvc/app/views/layouts/default.volt /usr/local/opnsense/mvc/script/load_phalcon.php /usr/local/opnsense/mvc/script/run_migrations.php +/usr/local/opnsense/mvc/script/run_validations.php /usr/local/opnsense/mvc/tests/PHPunit.xml /usr/local/opnsense/mvc/tests/app/config/config.php /usr/local/opnsense/mvc/tests/app/models/OPNsense/Base/BaseModel/Migrations/M0_0_1.php diff --git a/src/opnsense/mvc/script/run_validations.php b/src/opnsense/mvc/script/run_validations.php new file mode 100755 index 000000000..047f8c382 --- /dev/null +++ b/src/opnsense/mvc/script/run_validations.php @@ -0,0 +1,63 @@ +#!/usr/local/bin/php +getFileName()) . "/../../"; + +foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($model_dir)) as $x) { + if (strtolower(substr($x->getPathname(), -4)) == '.php') { + $classname = str_replace('/', '\\', explode('.', str_replace($model_dir, '', $x->getPathname()))[0]); + /* XXX we match the prefix here, but should eventually switch to component exploded by "\" */ + if (!empty($classprefix) && strpos($classname, $classprefix) !== 0) { + /* not our requested class */ + continue; + } + try { + $mdl_class_info = new \ReflectionClass($classname); + $parent = $mdl_class_info->getParentClass(); + if ($parent && $parent->name == 'OPNsense\Base\BaseModel') { + $name = $mdl_class_info->getName(); + $mdl = $mdl_class_info->newInstance(); + if (!$mdl->isVolatile()) { + $msgs = $mdl->validate(); + foreach ($msgs as $key => $msg) { + echo sprintf('%s.%s => %s', $name, $key, $msg) . PHP_EOL; + } + } + } + } catch (\ReflectionException $e) { + /* cannot construct, skip */ + } + } +}