diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml new file mode 100644 index 00000000..19853b70 --- /dev/null +++ b/.github/workflows/php.yml @@ -0,0 +1,173 @@ +name: PHP Tests + +on: + push: + branches: + - master + - release/* + pull_request: + branches: + - master + +jobs: + lint: + name: Static analysis for php ${{ matrix.php }} on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + php: ['7.2', '7.3', '7.4', '8.0', '8.1'] + os: ['ubuntu-latest'] + + steps: + - name: Checkout code base + uses: actions/checkout@v3 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + tools: phpcs + + - name: Setup dependencies + run: composer require -n --no-progress overtrue/phplint + + - name: PHP Lint + if: ${{ ! cancelled() }} + run: ./vendor/bin/phplint -n --exclude={^vendor/.*} -- . + + - name: PHP CodeSniffer + if: ${{ ! cancelled() }} + run: phpcs + + test: + name: Unit tests with php ${{ matrix.php }} on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + + env: + phpunit-version: 9.5 + + strategy: + fail-fast: false + matrix: + php: ['7.2', '7.3', '7.4', '8.0', '8.1'] + os: ['ubuntu-latest'] + include: + - php: '7.2' + phpunit-version: 8.5 + + services: + mysql: + image: mariadb + env: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: director_test + MYSQL_USER: director_test + MYSQL_PASSWORD: director_test + options: >- + --health-cmd "mariadb -s -uroot -proot -e'SHOW DATABASES;' 2> /dev/null | grep director_test > test" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 3306/tcp + + pgsql: + image: postgres + env: + POSTGRES_USER: director_test + POSTGRES_PASSWORD: director_test + POSTGRES_DB: director_test + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5432/tcp + + steps: + - name: Checkout code base + uses: actions/checkout@v3 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + tools: phpunit:${{ matrix.phpunit-version || env.phpunit-version }} + extensions: mysql, pgsql + + - name: Setup Icinga Web + run: | + git clone --depth 1 https://github.com/Icinga/icingaweb2.git _icingaweb2 + ln -s `pwd` _icingaweb2/modules/director + + - name: Setup Libraries + run: | + mkdir _libraries + git clone --depth 1 -b snapshot/nightly https://github.com/Icinga/icinga-php-library.git _libraries/ipl + git clone --depth 1 -b snapshot/nightly https://github.com/Icinga/icinga-php-thirdparty.git _libraries/vendor + + - name: Setup Incubator + run: | + git clone --depth 1 https://github.com/Icinga/icingaweb2-module-incubator _icingaweb2/modules/incubator + mkdir -p test/config/enabledModules + cd _icingaweb2/modules/incubator + ln -s `pwd` ../../../test/config/enabledModules/incubator + composer require --no-update \ + "gipfl/calendar": "dev-master as 99.x-dev" \ + "gipfl/cli": "dev-master as 99.x-dev" \ + "gipfl/curl": "dev-master as 99.x-dev" \ + "gipfl/data-type": "dev-master as 99.x-dev" \ + "gipfl/db-migration": "dev-master as 99.x-dev" \ + "gipfl/diff": "dev-master as 99.x-dev" \ + "gipfl/format": "dev-master as 99.x-dev" \ + "gipfl/icinga-bundles": "dev-master as 99.x-dev" \ + "gipfl/icinga-cli-daemon": "dev-master as 99.x-dev" \ + "gipfl/icingaweb2": "dev-master as 99.x-dev" \ + "gipfl/influxdb": "dev-master as 99.x-dev" \ + "gipfl/json": "dev-master as 99.x-dev" \ + "gipfl/linux-health": "dev-master as 99.x-dev" \ + "gipfl/log": "dev-master as 99.x-dev" \ + "gipfl/process": "dev-master as 99.x-dev" \ + "gipfl/protocol-jsonrpc": "dev-master as 99.x-dev" \ + "gipfl/protocol-netstring": "dev-master as 99.x-dev" \ + "gipfl/react-utils": "dev-master as 99.x-dev" \ + "gipfl/simple-daemon": "dev-master as 99.x-dev" \ + "gipfl/socket": "dev-master as 99.x-dev" \ + "gipfl/stream": "dev-master as 99.x-dev" \ + "gipfl/systemd": "dev-master as 99.x-dev" \ + "gipfl/translation": "dev-master as 99.x-dev" \ + "gipfl/web": "dev-master as 99.x-dev" \ + "gipfl/zfdb": "dev-master as 99.x-dev" \ + "gipfl/zfdbstore": "dev-master as 99.x-dev" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git config user.name "github-actions[bot]" + bin/make-release.sh snapshot + + - name: PHPUnit with MySQL + if: ${{ ! cancelled() }} + env: + ICINGAWEB_LIBDIR: _libraries + ICINGAWEB_CONFIGDIR: test/config + DIRECTOR_TESTDB_RES: Director MySQL TestDB + DIRECTOR_TESTDB: director_test + DIRECTOR_TESTDB_HOST: 127.0.0.1 + DIRECTOR_TESTDB_PORT: ${{ job.services.mysql.ports['3306'] }} + DIRECTOR_TESTDB_USER: director_test + DIRECTOR_TESTDB_PASSWORD: director_test + run: phpunit --verbose --bootstrap _icingaweb2/test/php/bootstrap.php + + - name: PHPUnit with PostgreSQL + if: ${{ ! cancelled() }} + env: + ICINGAWEB_LIBDIR: _libraries + ICINGAWEB_CONFIGDIR: test/config + DIRECTOR_TESTDB_RES: Director PostgreSQL TestDB + DIRECTOR_TESTDB: director_test + DIRECTOR_TESTDB_HOST: 127.0.0.1 + DIRECTOR_TESTDB_PORT: ${{ job.services.pgsql.ports['5432'] }} + DIRECTOR_TESTDB_USER: director_test + DIRECTOR_TESTDB_PASSWORD: director_test + run: phpunit --verbose --bootstrap _icingaweb2/test/php/bootstrap.php diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index bd73458e..00000000 --- a/.travis.yml +++ /dev/null @@ -1,42 +0,0 @@ -language: php -php: - - '5.6' - - '7.0' - - '7.1' - - '7.2' - - '7.3' - - '7.4snapshot' - - nightly - -services: - - mysql - - postgresql - -#cache: -# directories: -# - vendor - -matrix: - fast_finish: true - include: - - env: CHECK=phpcs - php: nightly # Note: will be allowed failure - - env: CHECK=phpcs - php: '7.0' - - env: CHECK=phpcs - php: '5.6' - allow_failures: - - php: nightly - -env: - - CHECK=phpunit DB=mysql DIRECTOR_TESTDB_RES="Director MySQL TestDB" DIRECTOR_TESTDB="director_test" - - CHECK=phpunit DB=pgsql DIRECTOR_TESTDB_RES="Director PostgreSQL TestDB" DIRECTOR_TESTDB="director_test" - DIRECTOR_TESTDB_USER="director_test" - -before_script: - - ./test/setup_vendor.sh - - '[ "$CHECK" != phpunit ] || ./test/travis-prepare.sh' - -script: - - '[ "$CHECK" != phpcs ] || php vendor/phpcs.phar' - - '[ "$CHECK" != phpunit ] || php vendor/phpunit.phar --testdox || php vendor/phpunit.phar --verbose' diff --git a/application/forms/IcingaCloneObjectForm.php b/application/forms/IcingaCloneObjectForm.php index 166e1f19..8381eee7 100644 --- a/application/forms/IcingaCloneObjectForm.php +++ b/application/forms/IcingaCloneObjectForm.php @@ -251,7 +251,7 @@ class IcingaCloneObjectForm extends DirectorForm return $db->fetchPairs( $db->select() ->from('icinga_service_set', ['id', 'object_name']) - ->where('object_type = ?','template') + ->where('object_type = ?', 'template') ->order('object_name') ); } diff --git a/doc/93-Testing.md b/doc/93-Testing.md index 7d2f8fb9..7bdf4dfe 100644 --- a/doc/93-Testing.md +++ b/doc/93-Testing.md @@ -12,16 +12,12 @@ there is probably already someone running them from time to time. So, just lean back with full trust in our development toolchain and spend your time elsewhere ;-) Cheers! -### Tests on Travis-CI +### Tests on GitHub When pushing to [GitHub](https://github.com/Icinga/icingaweb2-module-director/) -or sending pull requests, Unit-Tests are automatically triggered on -[Travis-CI](https://travis-ci.org/Icinga/icingaweb2-module-director): +or sending pull requests, Unit-Tests are automatically triggered. -[![Build Status](https://travis-ci.org/Icinga/icingaweb2-module-director.svg?branch=master)](https://travis-ci.org/Icinga/icingaweb2-module-director) - -We run our tests against MySQL and PostgreSQL, with PHP versions ranging from -5.3 to 7.1, including nightly builds. +![Build Status](https://github.com/Icinga/icingaweb2-module-director/workflows/PHP%20Tests/badge.svg?branch=master) ### Tests for supported Platforms diff --git a/library/Director/Filter/CidrExpression.php b/library/Director/Filter/CidrExpression.php index d6b7fd7b..169ddce0 100644 --- a/library/Director/Filter/CidrExpression.php +++ b/library/Director/Filter/CidrExpression.php @@ -22,7 +22,6 @@ class CidrExpression extends FilterExpression { if ($parts = static::splitOptionalCidrString($expression)) { list($this->networkAddress, $this->broadcastAddress) = $parts; - } else { throw new InvalidArgumentException("'$expression' isn't valid CIDR notation"); } diff --git a/library/Director/Test/BaseTestCase.php b/library/Director/Test/BaseTestCase.php index 611805be..07217c1b 100644 --- a/library/Director/Test/BaseTestCase.php +++ b/library/Director/Test/BaseTestCase.php @@ -10,16 +10,16 @@ use Icinga\Module\Director\Db; use Icinga\Module\Director\Db\Migrations; use Icinga\Module\Director\Objects\IcingaObject; use Icinga\Module\Director\Objects\IcingaZone; -use PHPUnit_Framework_TestCase; +use PHPUnit\Framework\TestCase; -abstract class BaseTestCase extends PHPUnit_Framework_TestCase +abstract class BaseTestCase extends TestCase { private static $app; /** @var Db */ private static $db; - public function setUp() + public function setUp(): void { $this->app(); } @@ -69,6 +69,9 @@ abstract class BaseTestCase extends PHPUnit_Framework_TestCase if (array_key_exists('DIRECTOR_TESTDB_HOST', $_SERVER)) { $dbConfig->host = $_SERVER['DIRECTOR_TESTDB_HOST']; } + if (array_key_exists('DIRECTOR_TESTDB_PORT', $_SERVER)) { + $dbConfig->port = $_SERVER['DIRECTOR_TESTDB_PORT']; + } if (array_key_exists('DIRECTOR_TESTDB_USER', $_SERVER)) { $dbConfig->username = $_SERVER['DIRECTOR_TESTDB_USER']; } diff --git a/library/Director/Test/IcingaObjectTestCase.php b/library/Director/Test/IcingaObjectTestCase.php index a37fcedd..b8831bb9 100644 --- a/library/Director/Test/IcingaObjectTestCase.php +++ b/library/Director/Test/IcingaObjectTestCase.php @@ -76,7 +76,7 @@ abstract class IcingaObjectTestCase extends BaseTestCase /** * @inheritdoc */ - public function tearDown() + public function tearDown(): void { if ($this->hasDb()) { /** @var IcingaObject $object */ diff --git a/library/Director/Test/SyncTest.php b/library/Director/Test/SyncTest.php index 7614ff9d..ac704e89 100644 --- a/library/Director/Test/SyncTest.php +++ b/library/Director/Test/SyncTest.php @@ -29,7 +29,7 @@ abstract class SyncTest extends BaseTestCase /** @var Sync */ protected $sync; - public function setUp() + public function setUp(): void { $this->source = ImportSource::create(array( 'source_name' => 'testimport', @@ -49,7 +49,7 @@ abstract class SyncTest extends BaseTestCase $this->sync = new Sync($this->rule); } - public function tearDown() + public function tearDown(): void { // properties should be deleted automatically if ($this->rule !== null && $this->rule->hasBeenLoadedFromDb()) { diff --git a/test/php/library/Director/Data/AssignFilterHelperTest.php b/test/php/library/Director/Data/AssignFilterHelperTest.php index 5fcdd95f..e7c2f841 100644 --- a/test/php/library/Director/Data/AssignFilterHelperTest.php +++ b/test/php/library/Director/Data/AssignFilterHelperTest.php @@ -11,7 +11,7 @@ class AssignFilterHelperTest extends BaseTestCase { protected static $exampleHost; - public static function setUpBeforeClass() + public static function setUpBeforeClass(): void { self::$exampleHost = (object) [ 'address' => '127.0.0.1', diff --git a/test/php/library/Director/Data/RecursiveUtf8ValidatorTest.php b/test/php/library/Director/Data/RecursiveUtf8ValidatorTest.php index 1434d4af..9b4bf337 100644 --- a/test/php/library/Director/Data/RecursiveUtf8ValidatorTest.php +++ b/test/php/library/Director/Data/RecursiveUtf8ValidatorTest.php @@ -7,11 +7,10 @@ use Icinga\Module\Director\Test\BaseTestCase; class RecursiveUtf8ValidatorTest extends BaseTestCase { - /** - * @expectedException \InvalidArgumentException - */ public function testDetectInvalidUtf8Character() { + $this->expectException(\InvalidArgumentException::class); + RecursiveUtf8Validator::validateRows([ (object) [ 'name' => 'test 1', diff --git a/test/php/library/Director/IcingaConfig/IcingaConfigHelperTest.php b/test/php/library/Director/IcingaConfig/IcingaConfigHelperTest.php index 506f3b8f..10cd644c 100644 --- a/test/php/library/Director/IcingaConfig/IcingaConfigHelperTest.php +++ b/test/php/library/Director/IcingaConfig/IcingaConfigHelperTest.php @@ -18,11 +18,10 @@ class IcingaConfigHelperTest extends BaseTestCase $this->assertEquals(c::parseInterval('1h 5m 60s'), 3960); } - /** - * @expectedException \InvalidArgumentException - */ public function testWhetherInvalidIntervalStringRaisesException() { + $this->expectException(\InvalidArgumentException::class); + c::parseInterval('1h 5m 60x'); } diff --git a/test/php/library/Director/IcingaConfig/StateFilterTest.php b/test/php/library/Director/IcingaConfig/StateFilterTest.php index 82e94d82..6b7708b6 100644 --- a/test/php/library/Director/IcingaConfig/StateFilterTest.php +++ b/test/php/library/Director/IcingaConfig/StateFilterTest.php @@ -2,6 +2,8 @@ namespace Tests\Icinga\Module\Director\IcingaConfig; +use Icinga\Exception\InvalidPropertyException; +use Icinga\Exception\ProgrammingError; use Icinga\Module\Director\IcingaConfig\StateFilterSet; use Icinga\Module\Director\Objects\IcingaUser; use Icinga\Module\Director\Test\BaseTestCase; @@ -23,19 +25,17 @@ class StateFilterSetTest extends BaseTestCase ); } - /** - * @expectedException \Icinga\Exception\InvalidPropertyException - */ public function testFailsForInvalidProperties() { + $this->expectException(InvalidPropertyException::class); + $set = new StateFilterSet('bla'); } - /** - * @expectedException \Icinga\Exception\ProgrammingError - */ public function testCannotBeStoredForAnUnstoredUser() { + $this->expectException(ProgrammingError::class); + StateFilterSet::forIcingaObject( $this->user1(), 'states' @@ -152,7 +152,7 @@ class StateFilterSetTest extends BaseTestCase )); } - public function tearDown() + public function tearDown(): void { if ($this->hasDb()) { $users = array( diff --git a/test/php/library/Director/Import/HostSyncTest.php b/test/php/library/Director/Import/HostSyncTest.php index eeee7a4c..a18fc3db 100644 --- a/test/php/library/Director/Import/HostSyncTest.php +++ b/test/php/library/Director/Import/HostSyncTest.php @@ -242,7 +242,7 @@ class HostSyncTest extends SyncTest } } - public function tearDown() + public function tearDown(): void { $this->removeGroups(['SYNCTEST_groupa', 'SYNCTEST_groupb']); parent::tearDown(); diff --git a/test/php/library/Director/Objects/HostGroupMembershipResolverTest.php b/test/php/library/Director/Objects/HostGroupMembershipResolverTest.php index cf2fb368..f6d21d0a 100644 --- a/test/php/library/Director/Objects/HostGroupMembershipResolverTest.php +++ b/test/php/library/Director/Objects/HostGroupMembershipResolverTest.php @@ -15,7 +15,7 @@ class HostGroupMembershipResolverTest extends BaseTestCase const PREFIX = '__groupmembership'; const TYPE = 'host'; - public function setUp() + public function setUp(): void { IcingaTemplateRepository::clear(); } @@ -32,12 +32,12 @@ class HostGroupMembershipResolverTest extends BaseTestCase $db->delete('icinga_' . self::TYPE, $where); } - public static function setUpBeforeClass() + public static function setUpBeforeClass(): void { static::cleanArtifacts(); } - public static function tearDownAfterClass() + public static function tearDownAfterClass(): void { static::cleanArtifacts(); } diff --git a/test/php/library/Director/Objects/IcingaCommandTest.php b/test/php/library/Director/Objects/IcingaCommandTest.php index 8e564d85..ca4b5fd1 100644 --- a/test/php/library/Director/Objects/IcingaCommandTest.php +++ b/test/php/library/Director/Objects/IcingaCommandTest.php @@ -206,7 +206,7 @@ class IcingaCommandTest extends BaseTestCase return file_get_contents(__DIR__ . '/rendered/' . $name . '.out'); } - public function tearDown() + public function tearDown(): void { $db = $this->getDb(); if (IcingaCommand::exists($this->testCommandName, $db)) { diff --git a/test/php/library/Director/Objects/IcingaHostTest.php b/test/php/library/Director/Objects/IcingaHostTest.php index f953d4ff..97dfcc03 100644 --- a/test/php/library/Director/Objects/IcingaHostTest.php +++ b/test/php/library/Director/Objects/IcingaHostTest.php @@ -2,6 +2,7 @@ namespace Tests\Icinga\Module\Director\Objects; +use Icinga\Exception\NotFoundError; use Icinga\Module\Director\Data\PropertiesFilter\ArrayCustomVariablesFilter; use Icinga\Module\Director\Data\PropertiesFilter\CustomVariablesFilter; use Icinga\Module\Director\IcingaConfig\IcingaConfig; @@ -255,14 +256,14 @@ class IcingaHostTest extends BaseTestCase $zone->delete(); } - /** - * @expectedException \RuntimeException - */ public function testFailsToStoreWithMissingLazyRelations() { if ($this->skipForMissingDb()) { return; } + + $this->expectException(\RuntimeException::class); + $db = $this->getDb(); $host = $this->host(); $host->zone = '___TEST___zone'; @@ -336,15 +337,14 @@ class IcingaHostTest extends BaseTestCase ); } - /** - * @expectedException \RuntimeException - */ public function testFailsToStoreWithInvalidUnresolvedDependencies() { if ($this->skipForMissingDb()) { return; } + $this->expectException(\RuntimeException::class); + $host = $this->host(); $host->zone = 'invalid'; $host->store($this->getDb()); @@ -474,15 +474,14 @@ class IcingaHostTest extends BaseTestCase $b->delete(); } - /** - * @expectedException \Icinga\Exception\NotFoundError - */ public function testWhetherInvalidApiKeyThrows404() { if ($this->skipForMissingDb()) { return; } + $this->expectException(NotFoundError::class); + $db = $this->getDb(); IcingaHost::loadWithApiKey('No___such___key', $db); } @@ -731,7 +730,7 @@ class IcingaHostTest extends BaseTestCase return file_get_contents(__DIR__ . '/rendered/' . $name . '.out'); } - public function tearDown() + public function tearDown(): void { if ($this->hasDb()) { $db = $this->getDb(); diff --git a/test/php/library/Director/Objects/IcingaNotificationTest.php b/test/php/library/Director/Objects/IcingaNotificationTest.php index 9d9436af..ee02a083 100644 --- a/test/php/library/Director/Objects/IcingaNotificationTest.php +++ b/test/php/library/Director/Objects/IcingaNotificationTest.php @@ -226,7 +226,7 @@ class IcingaNotificationTest extends BaseTestCase return file_get_contents(__DIR__ . '/rendered/' . $name . '.out'); } - public function tearDown() + public function tearDown(): void { if ($this->hasDb()) { $db = $this->getDb(); diff --git a/test/php/library/Director/Objects/IcingaServiceSetTest.php b/test/php/library/Director/Objects/IcingaServiceSetTest.php index ad7c1357..564d3448 100644 --- a/test/php/library/Director/Objects/IcingaServiceSetTest.php +++ b/test/php/library/Director/Objects/IcingaServiceSetTest.php @@ -10,7 +10,7 @@ class IcingaServiceSetTest extends IcingaObjectTestCase protected $table = 'icinga_service_set'; protected $testObjectName = '___TEST___set'; - public function setUp() + public function setUp(): void { $this->assertNull($this->subject, 'subject must have been taken down before!'); @@ -106,22 +106,20 @@ class IcingaServiceSetTest extends IcingaObjectTestCase $this->checkForDanglingServices(); } - /** - * @expectedException \RuntimeException - */ public function testCreatingSetWithoutType() { + $this->expectException(\RuntimeException::class); + $set = IcingaServiceSet::create(array( 'object_name' => '___TEST__set_BAD', )); $set->store($this->getDb()); } - /** - * @expectedException \InvalidArgumentException - */ public function testCreatingServiceSetWithoutHost() { + $this->expectException(\InvalidArgumentException::class); + $set = IcingaServiceSet::create(array( 'object_name' => '___TEST__set_BAD2', 'object_type' => 'object', diff --git a/test/php/library/Director/Objects/IcingaServiceTest.php b/test/php/library/Director/Objects/IcingaServiceTest.php index 468db675..8899361c 100644 --- a/test/php/library/Director/Objects/IcingaServiceTest.php +++ b/test/php/library/Director/Objects/IcingaServiceTest.php @@ -26,15 +26,14 @@ class IcingaServiceTest extends BaseTestCase ); } - /** - * @expectedException \RuntimeException - */ public function testFailsToStoreWithMissingLazyRelations() { if ($this->skipForMissingDb()) { return; } + $this->expectException(\RuntimeException::class); + $db = $this->getDb(); $service = $this->service(); $service->display_name = 'Something else'; @@ -50,11 +49,10 @@ class IcingaServiceTest extends BaseTestCase $service->assign_filter = 'host.address="127.*"'; } - /** - * @expectedException \LogicException - */ public function testRefusesAssignRulesWhenNotBeingAnApply() { + $this->expectException(\LogicException::class); + $service = $this->service(); $service->assign_filter = 'host.address=127.*'; } @@ -271,7 +269,7 @@ class IcingaServiceTest extends BaseTestCase return file_get_contents(__DIR__ . '/rendered/' . $name . '.out'); } - public function tearDown() + public function tearDown(): void { if ($this->hasDb()) { $db = $this->getDb(); diff --git a/test/php/library/Director/Objects/IcingaTemplateResolverTest.php b/test/php/library/Director/Objects/IcingaTemplateResolverTest.php index 09d0ead0..e1a046db 100644 --- a/test/php/library/Director/Objects/IcingaTemplateResolverTest.php +++ b/test/php/library/Director/Objects/IcingaTemplateResolverTest.php @@ -144,7 +144,7 @@ class IcingaTemplateResolverTest extends BaseTestCase return $host; } - public function tearDown() + public function tearDown(): void { $db = $this->getDb(); $kill = array('t1', 't2', 't6', 't3', 't4', 't5'); diff --git a/test/php/library/Director/Objects/IcingaTimePeriodTest.php b/test/php/library/Director/Objects/IcingaTimePeriodTest.php index 84496d32..efa01b8e 100644 --- a/test/php/library/Director/Objects/IcingaTimePeriodTest.php +++ b/test/php/library/Director/Objects/IcingaTimePeriodTest.php @@ -171,7 +171,7 @@ class IcingaTimePeriodTest extends BaseTestCase return IcingaTimePeriod::load($this->testPeriodName . $suffix, $this->getDb()); } - public function tearDown() + public function tearDown(): void { $db = $this->getDb(); diff --git a/test/php/library/Director/PropertyModifier/PropertyModifierArrayElementByPositionTest.php b/test/php/library/Director/PropertyModifier/PropertyModifierArrayElementByPositionTest.php index 84465f38..2f0522ae 100644 --- a/test/php/library/Director/PropertyModifier/PropertyModifierArrayElementByPositionTest.php +++ b/test/php/library/Director/PropertyModifier/PropertyModifierArrayElementByPositionTest.php @@ -31,11 +31,10 @@ class PropertyModifierArrayElementByPositionTest extends BaseTestCase ); } - /** - * @expectedException \InvalidArgumentException - */ public function testGettingFirstFailsForEmptyArray() { + $this->expectException(\InvalidArgumentException::class); + $this->buildModifier('first')->transform([]); } @@ -60,11 +59,10 @@ class PropertyModifierArrayElementByPositionTest extends BaseTestCase ); } - /** - * @expectedException \InvalidArgumentException - */ public function testGettingLastFailsForEmptyArray() { + $this->expectException(\InvalidArgumentException::class); + $this->buildModifier('last')->transform([]); } @@ -89,11 +87,10 @@ class PropertyModifierArrayElementByPositionTest extends BaseTestCase ); } - /** - * @expectedException \InvalidArgumentException - */ public function testGettingSpecificFailsForEmptyArray() { + $this->expectException(\InvalidArgumentException::class); + $this->buildModifier('fixed', 1)->transform([]); } @@ -102,11 +99,10 @@ class PropertyModifierArrayElementByPositionTest extends BaseTestCase $this->assertNull($this->buildModifier('fixed', 1, 'null')->transform([])); } - /** - * @expectedException \InvalidArgumentException - */ public function testGettingSpecificFailsForMissingValue() { + $this->expectException(\InvalidArgumentException::class); + $this->buildModifier('fixed', 3)->transform(['one', 'two', 'three']); } @@ -115,11 +111,10 @@ class PropertyModifierArrayElementByPositionTest extends BaseTestCase $this->assertNull($this->buildModifier('fixed', 3, 'null')->transform(['one', 'two', 'three'])); } - /** - * @expectedException \InvalidArgumentException - */ public function testFailsForStrings() { + $this->expectException(\InvalidArgumentException::class); + $this->buildModifier('first')->transform('string'); } diff --git a/test/php/library/Director/PropertyModifier/PropertyModifierListToObjectTest.php b/test/php/library/Director/PropertyModifier/PropertyModifierListToObjectTest.php index 93d498c9..0a150be8 100644 --- a/test/php/library/Director/PropertyModifier/PropertyModifierListToObjectTest.php +++ b/test/php/library/Director/PropertyModifier/PropertyModifierListToObjectTest.php @@ -23,21 +23,19 @@ class PropertyModifierListToObjectTest extends BaseTestCase ); } - /** - * @expectedException \InvalidArgumentException - */ public function testFailsOnMissingKey() { + $this->expectException(\InvalidArgumentException::class); + $input = $this->getInputArrays(); unset($input[0]['name']); $this->getNewModifier()->transform($input); } - /** - * @expectedException \InvalidArgumentException - */ public function testFailsWithDuplicateRows() { + $this->expectException(\InvalidArgumentException::class); + $input = $this->getInputArrays(); $input[1]['name'] = 'row1'; $this->getNewModifier()->transform($input); diff --git a/test/php/library/Director/PropertyModifier/PropertyModifierParseURLTest.php b/test/php/library/Director/PropertyModifier/PropertyModifierParseURLTest.php index a5ccb796..fe89ac6b 100644 --- a/test/php/library/Director/PropertyModifier/PropertyModifierParseURLTest.php +++ b/test/php/library/Director/PropertyModifier/PropertyModifierParseURLTest.php @@ -2,6 +2,7 @@ namespace Tests\Icinga\Module\Director\PropertyModifier; +use Icinga\Exception\InvalidPropertyException; use Icinga\Module\Director\PropertyModifier\PropertyModifierParseURL; use Icinga\Module\Director\Test\BaseTestCase; @@ -50,11 +51,10 @@ class PropertyModifierParseURLTest extends BaseTestCase $this->assertEquals('http://www.icinga.org/path/', $modifier->transform('http://www.icinga.org/path/')); } - /** - * @expectedException \Icinga\Exception\InvalidPropertyException - */ public function testMissingComponentThrowsExceptionOnfailureFail() { + $this->expectException(InvalidPropertyException::class); + $modifier = new PropertyModifierParseURL(); $modifier->setSettings([ 'url_component' => 'query', @@ -87,11 +87,10 @@ class PropertyModifierParseURLTest extends BaseTestCase $this->assertEquals(self::$invalidurl, $modifier->transform(self::$invalidurl)); } - /** - * @expectedException \Icinga\Exception\InvalidPropertyException - */ public function testInvalidUrlThrowsExceptionOnfailureFail() { + $this->expectException(InvalidPropertyException::class); + $modifier = new PropertyModifierParseURL(); $modifier->setSettings([ 'url_component' => 'host', diff --git a/test/php/library/Director/Resolver/TemplateTreeTest.php b/test/php/library/Director/Resolver/TemplateTreeTest.php index f44d0816..7211ff4a 100644 --- a/test/php/library/Director/Resolver/TemplateTreeTest.php +++ b/test/php/library/Director/Resolver/TemplateTreeTest.php @@ -248,7 +248,7 @@ class TemplateTreeTest extends BaseTestCase } } - public function tearDown() + public function tearDown(): void { if ($this->hasDb()) { $db = $this->getDb(); diff --git a/test/setup_vendor.sh b/test/setup_vendor.sh deleted file mode 100755 index c53982f8..00000000 --- a/test/setup_vendor.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash - -set -ex - -MODULE_HOME=${MODULE_HOME:="$(dirname "$(readlink -f "$(dirname "$0")")")"} -PHP_VERSION="$(php -r 'echo phpversion();')" - -ICINGAWEB_VERSION=${ICINGAWEB_VERSION:=2.7.1} -ICINGAWEB_GITREF=${ICINGAWEB_GITREF:=} - -if [ "$PHP_VERSION" '<' 7.1.0 ]; then - PHPCS_VERSION=${PHPCS_VERSION:=3.3.2} -else - PHPCS_VERSION=${PHPCS_VERSION:=3.5.2} -fi - -if [ "$PHP_VERSION" '<' 5.6.0 ]; then - PHPUNIT_VERSION=${PHPUNIT_VERSION:=4.8} -else - PHPUNIT_VERSION=${PHPUNIT_VERSION:=5.7} -fi - -cd "${MODULE_HOME}" - -test -d vendor || mkdir vendor -cd vendor/ - -# icingaweb2 -if [ -n "$ICINGAWEB_GITREF" ]; then - icingaweb_path="icingaweb2" - test ! -L "$icingaweb_path" || rm "$icingaweb_path" - - if [ ! -d "$icingaweb_path" ]; then - git clone https://github.com/Icinga/icingaweb2.git "$icingaweb_path" - fi - - ( - set -e - cd "$icingaweb_path" - git fetch -p - git checkout -f "$ICINGAWEB_GITREF" - ) -else - icingaweb_path="icingaweb2-${ICINGAWEB_VERSION}" - if [ ! -e "${icingaweb_path}".tar.gz ]; then - wget -O "${icingaweb_path}".tar.gz https://github.com/Icinga/icingaweb2/archive/v"${ICINGAWEB_VERSION}".tar.gz - fi - if [ ! -d "${icingaweb_path}" ]; then - tar xf "${icingaweb_path}".tar.gz - fi - - rm -f icingaweb2 - ln -svf "${icingaweb_path}" icingaweb2 -fi -ln -svf "${icingaweb_path}"/library/Icinga Icinga -ln -svf "${icingaweb_path}"/library/vendor/Zend Zend - -# phpunit -phpunit_path="phpunit-${PHPUNIT_VERSION}" -if [ ! -e "${phpunit_path}".phar ]; then - wget -O "${phpunit_path}".phar https://phar.phpunit.de/phpunit-${PHPUNIT_VERSION}.phar -fi -ln -svf "${phpunit_path}".phar phpunit.phar - -# phpcs -phpcs_path="phpcs-${PHPCS_VERSION}" -if [ ! -e "${phpcs_path}".phar ]; then - wget -O "${phpcs_path}".phar \ - https://github.com/squizlabs/PHP_CodeSniffer/releases/download/${PHPCS_VERSION}/phpcs.phar -fi -ln -svf "${phpcs_path}".phar phpcs.phar diff --git a/test/travis-prepare.sh b/test/travis-prepare.sh deleted file mode 100755 index 7a303e88..00000000 --- a/test/travis-prepare.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -set -ex - -: "${DIRECTOR_TESTDB:=director_test}" - -psql_cmd() { - psql -U postgres ${DIRECTOR_TESTDB} -q -c "$@" -} - -if [ "$DB" = mysql ]; then - mysql -u root -e "DROP DATABASE IF EXISTS ${DIRECTOR_TESTDB}; CREATE DATABASE ${DIRECTOR_TESTDB};" -elif [ "$DB" = pgsql ]; then - : "${DIRECTOR_TESTDB_USER:=director_test}" - - psql -U postgres postgres -q -c "DROP DATABASE IF EXISTS ${DIRECTOR_TESTDB};" - psql -U postgres postgres -q -c "CREATE DATABASE ${DIRECTOR_TESTDB} WITH ENCODING 'UTF8';" - psql_cmd "CREATE USER ${DIRECTOR_TESTDB_USER} WITH PASSWORD 'testing';" - psql_cmd "GRANT ALL PRIVILEGES ON DATABASE ${DIRECTOR_TESTDB} TO ${DIRECTOR_TESTDB_USER};" - psql_cmd "CREATE EXTENSION pgcrypto;" -else - echo "Unknown database set in environment!" >&2 - env - exit 1 -fi