icingaweb2/modules/monitoring/test/php/testlib/datasource/TestFixture.php
Jannis Moßhammer c0b5aa962d Add optional datetime format for fixtures
This allows to use the same insertionStrategy class for MySQL
and PgSQL, as they only differ in the datetime format.

refs #4417
2013-07-16 16:37:16 +02:00

245 lines
No EOL
8 KiB
PHP

<?php
namespace Test\Monitoring\Testlib\DataSource;
class ObjectFlags {
public $flapping = 0;
public $notifications = 1;
public $active_checks = 1;
public $passive_checks = 1;
public $acknowledged = 0;
public $in_downtime = 0;
public $time = 0;
public function __construct($ageInSeconds = null) {
if(!is_int($ageInSeconds))
$ageInSeconds = 0;
$this->time = time()-$ageInSeconds;
}
public static function FLAPPING() {
$flags = new ObjectFlags();
$flags->flapping = 0;
return $flags;
}
public static function DISABLE_NOTIFICATIONS() {
$flags = new ObjectFlags();
$flags->notifications = 0;
return $flags;
}
public static function PASSIVE_ONLY() {
$flags = new ObjectFlags();
$flags->active_checks = 0;
return $flags;
}
public static function ACTIVE_ONLY() {
$flags = new ObjectFlags();
$flags->passive_checks = 0;
return $flags;
}
public static function DISABLED() {
$flags = new ObjectFlags();
$flags->passive_checks = 0;
$flags->active_checks = 0;
return $flags;
}
public static function ACKNOWLEDGED() {
$flags = new ObjectFlags();
$flags->acknowledged = 1;
return $flags;
}
public static function IN_DOWNTIME() {
$flags = new ObjectFlags();
$flags->in_downtime = 1;
return $flags;
}
}
class TestFixtureObjectClosure
{
private $scope;
private $environment;
public function __construct(TestFixture $environment, $scope)
{
$this->scope = $scope;
$this->environment = $environment;
}
public function __call($string, $arguments)
{
$callArg = array($this->scope);
$args = array_merge($callArg, $arguments);
return call_user_func_array(array($this->environment, $string), $args);
}
}
class TestFixture
{
private $hosts = array();
private $services = array();
private $contacts = array();
private $comments = array();
private $servicegroups = array();
private $hostgroups = array();
public function getHosts()
{
return $this->hosts;
}
public function getServices()
{
return $this->services;
}
public function getContacts()
{
return $this->contacts;
}
public function getServicegroups()
{
return $this->servicegroups;
}
public function getHostgroups()
{
return $this->hostgroups;
}
public function getComments()
{
return $this->comments;
}
public function addHost($name, $state, ObjectFlags $flags = null, array $additional = array()) {
if ($flags === null) {
$flags = new ObjectFlags();
}
if (isset($this->hosts[$name])) {
throw new Exception('Tried to create hosts twice');
}
$this->hosts[$name] = array(
'name' => $name,
'state' => $state,
'address' => '127.0.0.1',
'flags' => $flags,
'icon_image' => 'icon.png',
'notes_url' => '',
'action_url' => '',
'contacts' => array(),
'customvariables' => array()
);
$this->hosts[$name] = array_merge($this->hosts[$name], $additional);
return new TestFixtureObjectClosure($this, $name);
}
public function addService($host, $name, $state, ObjectFlags $flags = null, array $additional = array()) {
// when called in service scope only use the host
if (is_array($host)) {
$host = $host[0];
}
if ($flags === null) {
$flags = new ObjectFlags();
}
if (!isset($this->hosts[$host])) {
throw new Exception('Tried to create service for non existing host '.$host);
}
if (isset($this->services[$name])) {
throw new Exception('Tried to create service twice '.$name);
}
$this->services[$host.';'.$name] = array(
'host' => &$this->hosts[$host],
'name' => $name,
'state' => $state,
'contacts' => array(),
'icon_image' => 'icon.png',
'notes_url' => '',
'action_url' => '',
'customvariables' => array(),
'flags' => $flags
);
$this->services[$host.';'.$name] = array_merge($this->services[$host.';'.$name], $additional);
return new TestFixtureObjectClosure($this, array($host, $name));
}
public function addComment($hostOrServiceHostPair, $author, $text) {
if (is_array($hostOrServiceHostPair)) {
if (!isset($this->services[$hostOrServiceHostPair[0].';'.$hostOrServiceHostPair[1]])) {
throw new Exception('Tried to add a comment for a nonexisting service '.$hostOrServiceHostPair[1]);
}
$this->comments[] = array(
'service' => &$this->services[$hostOrServiceHostPair[0].';'.$hostOrServiceHostPair[1]],
'author' => $author,
'text' => $text
);
} else {
if (!isset($this->hosts[$hostOrServiceHostPair])) {
throw new Exception('Tried to add a comment for a nonexisting host '.$hostOrServiceHostPair);
}
$this->comments[] = array(
'host' => &$this->hosts[$hostOrServiceHostPair],
'author' => $author,
'text' => $text
);
}
return new TestFixtureObjectClosure($this, $hostOrServiceHostPair);
}
public function assignContact($hostOrServiceHostPair, $contactname) {
$this->contacts[$contactname] = array('alias' => $contactname);
if (is_array($hostOrServiceHostPair)) {
if (!isset($this->services[$hostOrServiceHostPair[0].';'.$hostOrServiceHostPair[1]])) {
throw new Exception('Tried to add a comment for a nonexisting service '.$hostOrServiceHostPair[1]);
}
$service = $this->services[$hostOrServiceHostPair[0].';'.$hostOrServiceHostPair[1]];
$service['contacts'][] = &$this->contacts[$contactname];
} else {
if (!isset($this->hosts[$hostOrServiceHostPair])) {
throw new Exception('Tried to add a comment for a nonexisting host '.$hostOrServiceHostPair);
}
$host = $this->hosts[$hostOrServiceHostPair];
$host['contacts'][] = &$this->contacts[$contactname];
}
return new TestFixtureObjectClosure($this, $hostOrServiceHostPair);
}
public function addToHostgroup($host, $groupname) {
// check if in service scope
if (is_array($host)) {
$host = $host[0];
}
if (!isset($this->hosts[$host])) {
throw new Exception('Tried to add non-existing host '.$host.' to hostgroup ');
}
if (!isset($this->hostgroups[$groupname])) {
$this->hostgroups[$groupname] = array("name" => $groupname, "members" => array());
}
$this->hostgroups[$groupname]["members"][] = &$this->hosts[$host];
return new TestFixtureObjectClosure($this, $host);
}
public function addToServicegroup(array $serviceHostPair, $groupname) {
if (!isset($this->services[$serviceHostPair[0].";".$serviceHostPair[1]])) {
throw new Exception('Tried to add non-existing service '.$serviceHostPair[1].' to servicegroup ');
}
$service = &$this->services[$serviceHostPair[0].";".$serviceHostPair[1]];
if (!isset($this->servicegroups[$groupname])) {
$this->servicegroups[$groupname] = array("name" => $groupname, "members" => array());
}
$this->servicegroups[$groupname]["members"][] = &$service;
return new TestFixtureObjectClosure($this, $serviceHostPair);
}
}