Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/zabbix/zabbix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'ui/tests/integration/testExpressionMacros.php')
-rw-r--r--ui/tests/integration/testExpressionMacros.php268
1 files changed, 268 insertions, 0 deletions
diff --git a/ui/tests/integration/testExpressionMacros.php b/ui/tests/integration/testExpressionMacros.php
new file mode 100644
index 00000000000..80899ed2d14
--- /dev/null
+++ b/ui/tests/integration/testExpressionMacros.php
@@ -0,0 +1,268 @@
+<?php
+/*
+** Zabbix
+** Copyright (C) 2001-2021 Zabbix SIA
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+**/
+
+require_once dirname(__FILE__).'/../include/CIntegrationTest.php';
+
+/**
+ * Test suite for expression macros
+ *
+ * @required-components server
+ * @configurationDataProvider serverConfigurationProvider
+ * @backup items,actions,triggers
+ * @hosts test_macros
+ */
+class testExpressionMacros extends CIntegrationTest {
+
+ private static $hostid;
+ private static $triggerid;
+ private static $trigger_actionid;
+ private static $alert_response;
+ private static $event_response;
+
+ const TRAPPER_ITEM_NAME = 'trap';
+ const HOST_NAME = 'test_macros';
+ const MESSAGE_PREFIX = 'message with expression macro: ';
+ const SUBJECT_PREFIX = 'subject with expression macro: ';
+ const EVENT_PREFIX = 'event name with expression macro: ';
+
+ /**
+ * @inheritdoc
+ */
+ public function prepareData() {
+ // Create host "test_macros".
+ $response = $this->call('host.create', [
+ 'host' => self::HOST_NAME,
+ 'interfaces' => [
+ [
+ 'type' => 1,
+ 'main' => 1,
+ 'useip' => 1,
+ 'ip' => '127.0.0.1',
+ 'dns' => '',
+ 'port' => $this->getConfigurationValue(self::COMPONENT_AGENT, 'ListenPort')
+ ]
+ ],
+ 'groups' => [
+ [
+ 'groupid' => 4
+ ]
+ ]
+ ]);
+
+ $this->assertArrayHasKey('hostids', $response['result']);
+ $this->assertArrayHasKey(0, $response['result']['hostids']);
+ self::$hostid = $response['result']['hostids'][0];
+
+ // Get host interface ids.
+ $response = $this->call('host.get', [
+ 'output' => ['host'],
+ 'hostids' => [self::$hostid],
+ 'selectInterfaces' => ['interfaceid']
+ ]);
+
+ $this->assertArrayHasKey(0, $response['result']);
+ $this->assertArrayHasKey('interfaces', $response['result'][0]);
+ $this->assertArrayHasKey(0, $response['result'][0]['interfaces']);
+
+ // Create trapper item
+ $response = $this->call('item.create', [
+ 'hostid' => self::$hostid,
+ 'name' => self::TRAPPER_ITEM_NAME,
+ 'key_' => self::TRAPPER_ITEM_NAME,
+ 'type' => ITEM_TYPE_TRAPPER,
+ 'value_type' => ITEM_VALUE_TYPE_UINT64
+ ]);
+ $this->assertArrayHasKey('itemids', $response['result']);
+ $this->assertEquals(1, count($response['result']['itemids']));
+
+ // Create trigger
+ $response = $this->call('trigger.create', [
+ 'description' => 'trigger_trap',
+ 'expression' => 'last(/'.self::HOST_NAME.'/'.self::TRAPPER_ITEM_NAME.')<>3',
+ 'event_name' => self::EVENT_PREFIX.'{?last(//'.self::TRAPPER_ITEM_NAME.')}'
+ ]);
+ $this->assertArrayHasKey('triggerids', $response['result']);
+ $this->assertEquals(1, count($response['result']['triggerids']));
+ self::$triggerid = $response['result']['triggerids'][0];
+
+ // Create trigger action
+ $response = $this->call('action.create', [
+ 'esc_period' => '1m',
+ 'eventsource' => EVENT_SOURCE_TRIGGERS,
+ 'status' => 0,
+ 'filter' => [
+ 'conditions' => [
+ [
+ 'conditiontype' => CONDITION_TYPE_TRIGGER,
+ 'operator' => CONDITION_OPERATOR_EQUAL,
+ 'value' => self::$triggerid
+ ]
+ ],
+ 'evaltype' => CONDITION_EVAL_TYPE_AND_OR
+ ],
+ 'name' => 'action_trigger_trap',
+ 'operations' => [
+ [
+ 'esc_period' => 0,
+ 'esc_step_from' => 1,
+ 'esc_step_to' => 1,
+ 'evaltype' => 0,
+ 'operationtype' => OPERATION_TYPE_MESSAGE,
+ 'opmessage' => [
+ 'default_msg' => 0,
+ 'mediatypeid' => 1,
+ 'subject' => self::SUBJECT_PREFIX.'{?last(//'.self::TRAPPER_ITEM_NAME.')}',
+ 'message' => self::MESSAGE_PREFIX.'{?last(/'.self::HOST_NAME.'/'.self::TRAPPER_ITEM_NAME.')}'
+ ],
+ 'opmessage_grp' => [
+ ['usrgrpid' => 7]
+ ]
+ ],
+ [
+ 'esc_period' => 0,
+ 'esc_step_from' => 2,
+ 'esc_step_to' => 2,
+ 'evaltype' => 0,
+ 'operationtype' => OPERATION_TYPE_MESSAGE,
+ 'opmessage' => [
+ 'default_msg' => 0,
+ 'mediatypeid' => 4,
+ 'subject' => self::SUBJECT_PREFIX.'{?first(//'.self::TRAPPER_ITEM_NAME.',1h)}',
+ 'message' => self::MESSAGE_PREFIX.'{?first(/{HOST.HOST}/'.self::TRAPPER_ITEM_NAME.',1h)}'
+ ],
+ 'opmessage_grp' => [
+ ['usrgrpid' => 7]
+ ]
+ ]
+ ],
+ 'pause_suppressed' => 0,
+ 'recovery_operations' => [
+ [
+ 'evaltype' => 0,
+ 'operationtype' => OPERATION_TYPE_MESSAGE,
+ 'opmessage' => [
+ 'default_msg' => 0,
+ 'mediatypeid' => 0,
+ 'subject' => self::SUBJECT_PREFIX.'{?last(//'.self::TRAPPER_ITEM_NAME.')}',
+ 'message' => self::MESSAGE_PREFIX.'{?last(//'.self::TRAPPER_ITEM_NAME.',#2)}'
+ ],
+ 'opmessage_grp' => [
+ ['usrgrpid' => 7]
+ ]
+ ]
+ ]
+ ]);
+ $this->assertArrayHasKey('actionids', $response['result']);
+ $this->assertEquals(1, count($response['result']['actionids']));
+ self::$trigger_actionid = $response['result']['actionids'][0];
+
+ return true;
+ }
+
+ /**
+ * Component configuration provider.
+ *
+ * @return array
+ */
+ public function serverConfigurationProvider() {
+ return [
+ self::COMPONENT_SERVER => [
+ 'DebugLevel' => 4,
+ 'LogFileSize' => 20,
+ 'AllowUnsupportedDBVersions' => 1
+ ]
+ ];
+ }
+
+ /**
+ * Get data
+ *
+ * @backup alerts,events,history_uint
+ */
+ public function testExpressionMacros_getData() {
+ $this->sendSenderValue(self::HOST_NAME, self::TRAPPER_ITEM_NAME, 3);
+ $this->sendSenderValue(self::HOST_NAME, self::TRAPPER_ITEM_NAME, 2);
+
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'In escalation_execute()', true);
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'End of escalation_execute()', true, 10, 3);
+
+ self::$event_response = $this->callUntilDataIsPresent('event.get', [
+ 'hostids' => [self::$hostid]
+ ], 5, 2);
+ $this->assertCount(1, self::$event_response['result']);
+
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'In escalation_execute()', true, 95, 3);
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'End of escalation_execute()', true, 10, 3);
+
+ $this->sendSenderValue(self::HOST_NAME, self::TRAPPER_ITEM_NAME, 3);
+
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'In escalation_recover()', true);
+ $this->waitForLogLineToBePresent(self::COMPONENT_SERVER, 'End of escalation_recover()', true, 10, 3);
+
+ self::$alert_response = $this->callUntilDataIsPresent('alert.get', [
+ 'actionids' => [self::$trigger_actionid],
+ 'sortfield' => 'alertid'
+ ], 5, 2);
+ $this->assertCount(3, self::$alert_response['result']);
+ }
+
+ /**
+ * Test expression macro in problem message
+ */
+ public function testExpressionMacros_checkProblemMessage() {
+ $this->assertEquals(self::MESSAGE_PREFIX.'2', self::$alert_response['result'][0]['message']);
+ }
+
+ /**
+ * Test expression macro with empty hostname
+ */
+ public function testExpressionMacros_checkEmptyHostname() {
+ $this->assertEquals(self::SUBJECT_PREFIX.'2', self::$alert_response['result'][0]['subject']);
+ }
+
+ /**
+ * Test expression macro in function with argument
+ */
+ public function testExpressionMacros_checkFunctionArgument() {
+ $this->assertEquals(self::SUBJECT_PREFIX.'3', self::$alert_response['result'][1]['subject']);
+ }
+
+ /**
+ * Test expression macro with {HOST.HOST} macro
+ */
+ public function testExpressionMacros_checkHostMacro() {
+ $this->assertEquals(self::MESSAGE_PREFIX.'3', self::$alert_response['result'][1]['message']);
+ }
+
+ /**
+ * Test expression macro in recovery message
+ */
+ public function testExpressionMacros_checkRecoveryMessage() {
+ $this->assertEquals(self::SUBJECT_PREFIX.'3', self::$alert_response['result'][2]['subject']);
+ $this->assertEquals(self::MESSAGE_PREFIX.'2', self::$alert_response['result'][2]['message']);
+ }
+
+ /**
+ * Test expression macro in event name
+ */
+ public function testExpressionMacros_checkEventName() {
+ $this->assertEquals(self::EVENT_PREFIX.'2', self::$event_response['result'][0]['name']);
+ }
+}