[ 'key' => 'item_ui64', 'value_type' => ITEM_VALUE_TYPE_UINT64, 'triggers' => [ // All values different, this case is also used to check // "not enough data" scenario 'all_different' => [ 'params' => '#5', 'expected_result' => 4 ], // Some values are equal 'some_equal' => [ 'params' => '#5', 'expected_result' => 2 ], // "inc" mode 'inc' => [ 'params' => '#5,"inc"', 'expected_result' => 2 ], // "dec" mode 'dec' => [ 'params' => '#5,"dec"', 'expected_result' => 2 ], // Explicit "all" mode 'all' => [ 'params' => '#5,"all"', 'expected_result' => 3 ], // Below scenarios have wrong parameters, trigger creation must fail [ 'params' => '#5,"inc","strict"', 'expected_result' => 0, 'expected_error' => true ], [ 'params' => '', 'expected_result' => 0, 'expected_error' => true ], [ 'params' => '"inc"', 'expected_result' => 0, 'expected_error' => true ], [ 'params' => '#20,"strict"', 'expected_result' => 0, 'expected_error' => true ] ] ], 'item_dbl' => [ 'key' => 'item_dbl', 'value_type' => ITEM_VALUE_TYPE_FLOAT, 'triggers' => [ // All values different 'all_different' => [ 'params' => '#5', 'expected_result' => 4 ], // Some values are equal, explicit "all" mode 'some_equal' => [ 'params' => '#5,"all"', 'expected_result' => 3 ], // "inc" mode 'inc' => [ 'params' => '#5,"inc"', 'expected_result' => 3 ], // "dec" mode 'dec' => [ 'params' => '#5,"dec"', 'expected_result' => 1 ] ] ], 'item_str' => [ 'key' => 'item_str', 'value_type' => ITEM_VALUE_TYPE_STR, 'triggers' => [ // All values different 'all_different' => [ 'params' => '#5', 'expected_result' => 4 ], // Some values are equal 'some_equal' => [ 'params' => '#5', 'expected_result' => 2 ] ] ] ]; /** * @inheritdoc */ public function prepareData() { // Create host "test_host" $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]], 'status' => HOST_STATUS_NOT_MONITORED ] ]); $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']); self::$interfaceid = $response['result'][0]['interfaces'][0]['interfaceid']; // Create trapper items foreach (self::$items as &$item) { $items[] = [ 'name' => $item['key'], 'key_' => $item['key'], 'value_type' => $item['value_type'], 'type' => ITEM_TYPE_TRAPPER, 'hostid' => self::$hostid ]; } $response = $this->call('item.create', $items); $this->assertArrayHasKey('itemids', $response['result']); $this->assertEquals(count($items), count($response['result']['itemids'])); $itemids = $response['result']['itemids']; $id = 0; foreach (self::$items as &$item) { $item['itemid'] = $itemids[$id++]; } // Create triggers foreach (self::$items as &$item) { foreach ($item['triggers'] as &$trigger) { $response = $this->call('trigger.create', [ [ 'description' => self::FUNC_NAME.'('.$trigger['params'].')', 'expression' => self::FUNC_NAME.'(/'.self::HOST_NAME.'/'.$item['key'].','.$trigger['params'].')='.$trigger['expected_result'] ] ], $error = (array_key_exists('expected_error', $trigger))); // Check for scenarios when trigger creation must fail if (array_key_exists('expected_error', $trigger)) { $this->assertArrayHasKey('error', $response); continue; } $this->assertArrayHasKey('triggerids', $response['result']); $this->assertEquals(1, count($response['result']['triggerids'])); $trigger['triggerid'] = $response['result']['triggerids'][0]; } } return true; } /** * Send values */ private function sendValues($item, $values) { foreach ($values as &$value) { $this->sendSenderValue(self::HOST_NAME, $item, $value); } sleep(self::WAIT_TIME); return true; } /** * Check trigger value */ private function checkTriggerValue($trigger) { $response = $this->call('trigger.get', ['triggerids' => [$trigger['triggerid']]]); $this->assertEquals(1, $response['result'][0]['value']); return true; } public function testFunctionChangeCount_Send_NotEnoughData() { return $this->sendValues('item_ui64', [64]); } /** * @depends testFunctionChangeCount_Send_NotEnoughData */ public function testFunctionChangeCount_Get_NotEnoughData() { $response = $this->call('trigger.get', ['triggerids' => [self::$items['item_ui64']['triggers']['all_different']['triggerid']]]); $this->assertArrayHasKey('error', $response['result'][0]); $this->assertContains('not enough data', $response['result'][0]['error']); return true; } /** * @depends testFunctionChangeCount_Get_NotEnoughData */ public function testFunctionChangeCount_Send_Ui64ImplicitAll_AllDifferent() { return $this->sendValues('item_ui64', [64, 24, 69, 32, 96]); } /** * @depends testFunctionChangeCount_Send_Ui64ImplicitAll_AllDifferent */ public function testFunctionChangeCount_Get_Ui64ImplicitAll_AllDifferent() { return $this->checkTriggerValue(self::$items['item_ui64']['triggers']['all_different']); } public function testFunctionChangeCount_Send_Ui64ImplicitAll_SomeEqual() { return $this->sendValues('item_ui64', [97, 35, 35, 29, 29]); } /** * @depends testFunctionChangeCount_Send_Ui64ImplicitAll_SomeEqual */ public function testFunctionChangeCount_Get_Ui64ImplicitAll_SomeEqual() { return $this->checkTriggerValue(self::$items['item_ui64']['triggers']['some_equal']); } public function testFunctionChangeCount_Send_Ui64Inc() { return $this->sendValues('item_ui64', [21, 34, 73, 55, 46]); } /** * @depends testFunctionChangeCount_Send_Ui64Inc */ public function testFunctionChangeCount_Get_Ui64Inc() { return $this->checkTriggerValue(self::$items['item_ui64']['triggers']['inc']); } public function testFunctionChangeCount_Send_Ui64Dec() { return $this->sendValues('item_ui64', [7, 92, 67, 96, 44]); } /** * @depends testFunctionChangeCount_Send_Ui64Dec */ public function testFunctionChangeCount_Get_Ui64Dec() { return $this->checkTriggerValue(self::$items['item_ui64']['triggers']['dec']); } public function testFunctionChangeCount_Send_Ui64ExplicitAll() { return $this->sendValues('item_ui64', [55, 93, 76, 76, 33]); } /** * @depends testFunctionChangeCount_Send_Ui64ExplicitAll */ public function testFunctionChangeCount_Get_Ui64_ExplicitAll() { return $this->checkTriggerValue(self::$items['item_ui64']['triggers']['all']); } public function testFunctionChangeCount_Send_DblImplicitAll() { return $this->sendValues('item_dbl', [0.000005, 0.000001, 0.000007, 0.000004, 0.000002]); } /** * @depends testFunctionChangeCount_Send_DblImplicitAll */ public function testFunctionChangeCount_Get_DblImplicitAll() { return $this->checkTriggerValue(self::$items['item_dbl']['triggers']['all_different']); } public function testFunctionChangeCount_Send_DblExplicitAll() { return $this->sendValues('item_dbl', [0.0001, 0.0011, 0.0011, 0.0002, 0.0005]); } /** * @depends testFunctionChangeCount_Send_DblExplicitAll */ public function testFunctionChangeCount_Get_DblExplicitAll() { return $this->checkTriggerValue(self::$items['item_dbl']['triggers']['some_equal']); } public function testFunctionChangeCount_Send_DblInc() { return $this->sendValues('item_dbl', [0.0001, 0.0002, 0.0003, 0.0004, 0.0004]); } /** * @depends testFunctionChangeCount_Send_DblInc */ public function testFunctionChangeCount_Get_DblInc() { return $this->checkTriggerValue(self::$items['item_dbl']['triggers']['inc']); } public function testFunctionChangeCount_Send_DblDec() { return $this->sendValues('item_dbl', [0.00001, 0.00002, 0.00003, 0.00004, 0.00003]); } /** * @depends testFunctionChangeCount_Send_DblDec */ public function testFunctionChangeCount_Get_DblDec() { return $this->checkTriggerValue(self::$items['item_dbl']['triggers']['dec']); } public function testFunctionChangeCount_Send_StrAllDifferent() { return $this->sendValues('item_str', ['abc', 'def', 'ghi', 'jkl', 'mno']); } /** * @depends testFunctionChangeCount_Send_StrAllDifferent */ public function testFunctionChangeCount_Get_StrAllDifferent() { return $this->checkTriggerValue(self::$items['item_str']['triggers']['all_different']); } public function testFunctionChangeCount_Send_StrSomeEqual() { return $this->sendValues('item_str', ['abc', 'abc', 'ghi', 'ghi', 'mno']); } /** * @depends testFunctionChangeCount_Send_StrSomeEqual */ public function testFunctionChangeCount_Get_StrSomeEqual() { return $this->checkTriggerValue(self::$items['item_str']['triggers']['some_equal']); } }