diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-14 13:17:31 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-14 13:17:31 +0000 |
commit | f66ab8dae2f3d0418759f81a3a64dc9517a62449 (patch) | |
tree | fbff2135e7013f196b891bbde54618eb050e4aaf /library/Director/Test/SyncTest.php | |
parent | Initial commit. (diff) | |
download | icingaweb2-module-director-f66ab8dae2f3d0418759f81a3a64dc9517a62449.tar.xz icingaweb2-module-director-f66ab8dae2f3d0418759f81a3a64dc9517a62449.zip |
Adding upstream version 1.10.2.upstream/1.10.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'library/Director/Test/SyncTest.php')
-rw-r--r-- | library/Director/Test/SyncTest.php | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/library/Director/Test/SyncTest.php b/library/Director/Test/SyncTest.php new file mode 100644 index 0000000..7614ff9 --- /dev/null +++ b/library/Director/Test/SyncTest.php @@ -0,0 +1,105 @@ +<?php + +namespace Icinga\Module\Director\Test; + +use Icinga\Exception\IcingaException; +use Icinga\Module\Director\Data\Db\DbObject; +use Icinga\Module\Director\Db\Cache\PrefetchCache; +use Icinga\Module\Director\Import\Sync; +use Icinga\Module\Director\Objects\IcingaObject; +use Icinga\Module\Director\Objects\ImportSource; +use Icinga\Module\Director\Objects\SyncProperty; +use Icinga\Module\Director\Objects\SyncRule; + +abstract class SyncTest extends BaseTestCase +{ + protected $objectType; + + protected $keyColumn; + + /** @var ImportSource */ + protected $source; + + /** @var SyncRule */ + protected $rule; + + /** @var SyncProperty[] */ + protected $properties = array(); + + /** @var Sync */ + protected $sync; + + public function setUp() + { + $this->source = ImportSource::create(array( + 'source_name' => 'testimport', + 'provider_class' => 'Icinga\\Module\\Director\\Test\\ImportSourceDummy', + 'key_column' => $this->keyColumn, + )); + $this->source->store($this->getDb()); + + $this->rule = SyncRule::create(array( + 'rule_name' => 'testrule', + 'object_type' => $this->objectType, + 'update_policy' => 'merge', + 'purge_existing' => 'n' + )); + $this->rule->store($this->getDb()); + + $this->sync = new Sync($this->rule); + } + + public function tearDown() + { + // properties should be deleted automatically + if ($this->rule !== null && $this->rule->hasBeenLoadedFromDb()) { + $this->rule->delete(); + } + + if ($this->source !== null && $this->source->hasBeenLoadedFromDb()) { + $this->source->delete(); + } + + // find objects created by this class and delete them + $db = $this->getDb(); + $dummy = IcingaObject::createByType($this->objectType, array(), $db); + $query = $db->getDbAdapter()->select() + ->from($dummy->getTableName()) + ->where('object_name LIKE ?', 'SYNCTEST_%'); + + /** @var IcingaObject $object */ + foreach (IcingaObject::loadAllByType($this->objectType, $db, $query) as $object) { + $object->delete(); + } + + // make sure cache is clean for other tests + PrefetchCache::forget(); + DbObject::clearAllPrefetchCaches(); + } + + /** + * @param array $rows + * + * @throws IcingaException + */ + protected function runImport($rows) + { + ImportSourceDummy::setRows($rows); + $this->source->runImport(); + if ($this->source->get('import_state') !== 'in-sync') { + throw new IcingaException('Import failed: %s', $this->source->get('last_error_message')); + } + } + + protected function setUpProperty($properties = array()) + { + $properties = array_merge(array( + 'rule_id' => $this->rule->id, + 'source_id' => $this->source->id, + 'merge_policy' => 'override', + ), $properties); + + $this->properties[] = $property = SyncProperty::create($properties); + $property->store($this->getDb()); + } +} |