mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
Block if event is not registered
This commit is contained in:
@@ -500,7 +500,7 @@
|
||||
<event id="EVENT_SERVICE_DOWNLOAD_DOCUMENT" _delta="define">
|
||||
<description>A document has been downloaded from the GUI</description>
|
||||
<sources>
|
||||
<source id="ormDocument">ormDocument</source>
|
||||
<source id="Document">Document</source>
|
||||
</sources>
|
||||
<event_data>
|
||||
<event_datum id="object">
|
||||
|
||||
@@ -129,6 +129,22 @@ class Config
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
],
|
||||
'event_service.debug.filter_events' => [
|
||||
'type' => 'array',
|
||||
'description' => 'Filter Event Service debug by events',
|
||||
'default' => '',
|
||||
'value' => '',
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
],
|
||||
'event_service.debug.filter_sources' => [
|
||||
'type' => 'array',
|
||||
'description' => 'Filter Event Service debug by event sources',
|
||||
'default' => '',
|
||||
'value' => '',
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
],
|
||||
'app_env_label' => [
|
||||
'type' => 'string',
|
||||
'description' => 'Label displayed to describe the current application environment, defaults to the environment name (e.g. "production")',
|
||||
|
||||
@@ -335,9 +335,9 @@ function DisplayEvents(WebPage $oPage, $sClass)
|
||||
continue;
|
||||
}
|
||||
}
|
||||
$sListener = $sListenerClass.'->'.$aListener['callback'][1].'(Combodo\iTop\Service\EventData $oEventData)';
|
||||
$sListener = $sListenerClass.'->'.$aListener['callback'][1].'(\Combodo\iTop\Service\EventData $oEventData)';
|
||||
} else {
|
||||
$sListener = $aListener['callback'][0].'::'.$aListener['callback'][1].'(Combodo\iTop\Service\EventData $oEventData)';
|
||||
$sListener = $aListener['callback'][0].'::'.$aListener['callback'][1].'(\Combodo\iTop\Service\EventData $oEventData)';
|
||||
}
|
||||
$aRows[] = [
|
||||
'event' => $aListener['event'],
|
||||
|
||||
@@ -25,7 +25,7 @@ class EventTest extends ItopTestCase
|
||||
|
||||
private static $iEventCalls;
|
||||
|
||||
protected function setUp()
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
self::$iEventCalls = 0;
|
||||
@@ -61,6 +61,7 @@ class EventTest extends ItopTestCase
|
||||
self::IncrementCallCount();
|
||||
});
|
||||
$this->debug("Registered $sId");
|
||||
EventService::RegisterEvent('event', [], 'test');
|
||||
EventService::FireEvent(new EventData('event'));
|
||||
$this->assertEquals(1, self::$iEventCalls);
|
||||
}
|
||||
@@ -74,6 +75,7 @@ class EventTest extends ItopTestCase
|
||||
*/
|
||||
public function testMethodCallbackFunction(callable $callback)
|
||||
{
|
||||
EventService::RegisterEvent('event', [], 'test');
|
||||
$sId = EventService::RegisterListener('event', $callback);
|
||||
$this->debug("Registered $sId");
|
||||
EventService::FireEvent(new EventData('event'));
|
||||
@@ -95,6 +97,7 @@ class EventTest extends ItopTestCase
|
||||
|
||||
public function testBrokenCallback()
|
||||
{
|
||||
EventService::RegisterEvent('event_a', [], 'test');
|
||||
$oReceiver = new TestEventReceiver();
|
||||
EventService::RegisterListener('event_a', array($oReceiver, 'BrokenCallback'));
|
||||
|
||||
@@ -104,6 +107,7 @@ class EventTest extends ItopTestCase
|
||||
|
||||
public function testRemovedCallback()
|
||||
{
|
||||
EventService::RegisterEvent('event_a', [], 'test');
|
||||
$oReceiver = new TestEventReceiver();
|
||||
EventService::RegisterListener('event_a', array($oReceiver, 'OnEvent1'));
|
||||
|
||||
@@ -116,6 +120,8 @@ class EventTest extends ItopTestCase
|
||||
|
||||
public function testMultiEvent()
|
||||
{
|
||||
EventService::RegisterEvent('event_a', [], 'test');
|
||||
EventService::RegisterEvent('event_b', [], 'test');
|
||||
$oReceiver = new TestEventReceiver();
|
||||
EventService::RegisterListener('event_a', array($oReceiver, 'OnEvent1'));
|
||||
EventService::RegisterListener('event_a', array($oReceiver, 'OnEvent2'));
|
||||
@@ -135,6 +141,7 @@ class EventTest extends ItopTestCase
|
||||
|
||||
public function testMultiSameEvent()
|
||||
{
|
||||
EventService::RegisterEvent('event1', [], 'test');
|
||||
$oReceiver = new TestEventReceiver();
|
||||
$sId = EventService::RegisterListener('event1', array($oReceiver, 'OnEvent1'));
|
||||
$this->debug("Registered $sId");
|
||||
@@ -151,6 +158,7 @@ class EventTest extends ItopTestCase
|
||||
|
||||
public function testData()
|
||||
{
|
||||
EventService::RegisterEvent('event1', [], 'test');
|
||||
$oReceiver = new TestEventReceiver();
|
||||
EventService::RegisterListener('event1', [$oReceiver, 'OnEventWithData'], '');
|
||||
EventService::RegisterListener('event1', [$oReceiver, 'OnEventWithData'], '');
|
||||
@@ -160,6 +168,8 @@ class EventTest extends ItopTestCase
|
||||
|
||||
public function testPriority()
|
||||
{
|
||||
EventService::RegisterEvent('event1', [], 'test');
|
||||
EventService::RegisterEvent('event2', [], 'test');
|
||||
$oReceiver = new TestEventReceiver();
|
||||
EventService::RegisterListener('event1', [$oReceiver, 'OnEvent1'], '', null, null, 0);
|
||||
EventService::RegisterListener('event1', [$oReceiver, 'OnEvent2'], '', null, null, 1);
|
||||
@@ -173,8 +183,19 @@ class EventTest extends ItopTestCase
|
||||
$this->assertEquals(4, self::$iEventCalls);
|
||||
}
|
||||
|
||||
public function testNoRegisterEvent()
|
||||
{
|
||||
try {
|
||||
EventService::FireEvent(new EventData('event1'));
|
||||
$this->assertTrue(false);
|
||||
} catch (\CoreException $e) {
|
||||
$this->assertTrue(true);
|
||||
}
|
||||
}
|
||||
|
||||
public function testContext()
|
||||
{
|
||||
EventService::RegisterEvent('event1', [], 'test');
|
||||
$oReceiver = new TestEventReceiver();
|
||||
EventService::RegisterListener('event1', [$oReceiver, 'OnEvent1'], '', null, null, 0);
|
||||
EventService::RegisterListener('event1', [$oReceiver, 'OnEvent2'], '', null, 'test_context', 1);
|
||||
@@ -187,6 +208,8 @@ class EventTest extends ItopTestCase
|
||||
|
||||
public function testEventSource()
|
||||
{
|
||||
EventService::RegisterEvent('event1', [], 'test');
|
||||
EventService::RegisterEvent('event2', [], 'test');
|
||||
$oReceiver = new TestEventReceiver();
|
||||
EventService::RegisterListener('event1', [$oReceiver, 'OnEvent1'], 'A', null, null, 0);
|
||||
EventService::RegisterListener('event1', [$oReceiver, 'OnEvent2'], 'A', null, null, 1);
|
||||
@@ -212,6 +235,8 @@ class EventTest extends ItopTestCase
|
||||
|
||||
public function testUnRegisterEvent()
|
||||
{
|
||||
EventService::RegisterEvent('event1', [], 'test');
|
||||
EventService::RegisterEvent('event2', [], 'test');
|
||||
$oReceiver = new TestEventReceiver();
|
||||
$sId = EventService::RegisterListener('event1', array($oReceiver, 'OnEvent1'));
|
||||
$this->debug("Registered $sId");
|
||||
@@ -239,6 +264,8 @@ class EventTest extends ItopTestCase
|
||||
|
||||
public function testUnRegisterAll()
|
||||
{
|
||||
EventService::RegisterEvent('event1', [], 'test');
|
||||
EventService::RegisterEvent('event2', [], 'test');
|
||||
$oReceiver = new TestEventReceiver();
|
||||
$sId = EventService::RegisterListener('event1', array($oReceiver, 'OnEvent1'));
|
||||
$this->debug("Registered $sId");
|
||||
@@ -266,6 +293,8 @@ class EventTest extends ItopTestCase
|
||||
|
||||
public function testUnRegisterCallback()
|
||||
{
|
||||
EventService::RegisterEvent('event1', [], 'test');
|
||||
EventService::RegisterEvent('event2', [], 'test');
|
||||
$oReceiver = new TestEventReceiver();
|
||||
$sIdToRemove = EventService::RegisterListener('event1', array($oReceiver, 'OnEvent1'));
|
||||
$this->debug("Registered $sIdToRemove");
|
||||
@@ -296,157 +325,6 @@ class EventTest extends ItopTestCase
|
||||
self::$iEventCalls++;
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider ReentranceProvider
|
||||
*/
|
||||
public function testReentrance($aClasses, $iEventCount)
|
||||
{
|
||||
foreach ($aClasses as $sName => $aClass) {
|
||||
new TestReentrance($sName, $aClass['prio'], $aClass['events'], $aClass['permanent_protection']);
|
||||
}
|
||||
EventService::FireEvent(new EventData('event1', 'main'));
|
||||
$this->assertEquals($iEventCount, self::$iEventCalls);
|
||||
}
|
||||
|
||||
public function ReentranceProvider()
|
||||
{
|
||||
return [
|
||||
'1 class' => [
|
||||
'aClasses' => [
|
||||
'Class A' => ['prio' => 0, 'permanent_protection' => true, 'events' => ['listener1' => ['event1' => true, 'event2' => false], 'listener2' => ['event1' => false, 'event2' => false]]],
|
||||
],
|
||||
'iEventCount' => 1,
|
||||
],
|
||||
'2 classes - 1' => [
|
||||
'aClasses' => [
|
||||
'Class A' => ['prio' => 0, 'permanent_protection' => true, 'events' => ['listener1' => ['event1' => true, 'event2' => false], 'listener2' => ['event1' => false, 'event2' => false]]],
|
||||
'Class B' => ['prio' => 10, 'permanent_protection' => true, 'events' => ['listener1' => ['event1' => false, 'event2' => false], 'listener2' => ['event1' => false, 'event2' => false]]],
|
||||
],
|
||||
'iEventCount' => 3,
|
||||
],
|
||||
'2 classes - 2' => [
|
||||
'aClasses' => [
|
||||
'Class A' => ['prio' => 0, 'permanent_protection' => true, 'events' => ['listener1' => ['event1' => true, 'event2' => true], 'listener2' => ['event1' => false, 'event2' => false]]],
|
||||
'Class B' => ['prio' => 10, 'permanent_protection' => true, 'events' => ['listener1' => ['event1' => false, 'event2' => false], 'listener2' => ['event1' => false, 'event2' => false]]],
|
||||
],
|
||||
'iEventCount' => 4,
|
||||
],
|
||||
'2 classes - 3' => [
|
||||
'aClasses' => [
|
||||
'Class A' => ['prio' => 0, 'permanent_protection' => true, 'events' => ['listener1' => ['event1' => false, 'event2' => true], 'listener2' => ['event1' => false, 'event2' => false]]],
|
||||
'Class B' => ['prio' => 10, 'permanent_protection' => true, 'events' => ['listener1' => ['event1' => false, 'event2' => false], 'listener2' => ['event1' => false, 'event2' => true]]],
|
||||
],
|
||||
'iEventCount' => 3,
|
||||
],
|
||||
'3 classes - 1' => [
|
||||
'aClasses' => [
|
||||
'Class A' => ['prio' => 0, 'permanent_protection' => true, 'events' => ['listener1' => ['event1' => false, 'event2' => true], 'listener2' => ['event1' => false, 'event2' => false]]],
|
||||
'Class B' => ['prio' => 10, 'permanent_protection' => true, 'events' => ['listener1' => ['event1' => false, 'event2' => true], 'listener2' => ['event1' => false, 'event2' => false]]],
|
||||
'Class C' => ['prio' => 20, 'permanent_protection' => true, 'events' => ['listener1' => ['event1' => false, 'event2' => true], 'listener2' => ['event1' => false, 'event2' => true]]],
|
||||
],
|
||||
'iEventCount' => 11,
|
||||
],
|
||||
'3 classes - non permanent' => [
|
||||
'aClasses' => [
|
||||
'Class A' => ['prio' => 0, 'permanent_protection' => false, 'events' => ['listener1' => ['event1' => false, 'event2' => true], 'listener2' => ['event1' => false, 'event2' => false]]],
|
||||
'Class B' => ['prio' => 10, 'permanent_protection' => true, 'events' => ['listener1' => ['event1' => false, 'event2' => true], 'listener2' => ['event1' => false, 'event2' => false]]],
|
||||
'Class C' => ['prio' => 20, 'permanent_protection' => true, 'events' => ['listener1' => ['event1' => false, 'event2' => true], 'listener2' => ['event1' => false, 'event2' => true]]],
|
||||
],
|
||||
'iEventCount' => 12,
|
||||
],
|
||||
'2 classes - loop' => [
|
||||
'aClasses' => [
|
||||
'Class A' => ['prio' => 0, 'permanent_protection' => true, 'events' => ['listener1' => ['event1' => true, 'event2' => false], 'listener2' => ['event1' => false, 'event2' => false]]],
|
||||
'Class B' => ['prio' => 10, 'permanent_protection' => true, 'events' => ['listener1' => ['event1' => true, 'event2' => false], 'listener2' => ['event1' => false, 'event2' => false]]],
|
||||
],
|
||||
'iEventCount' => 4,
|
||||
],
|
||||
'2 classes - loop2' => [
|
||||
'aClasses' => [
|
||||
'Class A' => ['prio' => 0, 'permanent_protection' => false, 'events' => ['listener1' => ['event1' => true, 'event2' => false], 'listener2' => ['event1' => false, 'event2' => false]]],
|
||||
'Class B' => ['prio' => 10, 'permanent_protection' => true, 'events' => ['listener1' => ['event1' => true, 'event2' => false], 'listener2' => ['event1' => false, 'event2' => false]]],
|
||||
],
|
||||
'iEventCount' => 5,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider ReentranceCRUDProvider
|
||||
*/
|
||||
public function testReentranceCRUD($aClasses, $iEventCount)
|
||||
{
|
||||
foreach ($aClasses as $sName => $aClass) {
|
||||
new TestReentranceCRUD($sName, $aClass['prio'], $aClass['events'], $aClass['permanent_protection']);
|
||||
}
|
||||
$oObject = new TestCRUDObject();
|
||||
$oObject->DBInsert('main');
|
||||
$this->assertEquals($iEventCount, self::$iEventCalls);
|
||||
}
|
||||
|
||||
public function ReentranceCRUDProvider()
|
||||
{
|
||||
return [
|
||||
'1 class' => [
|
||||
'aClasses' => [
|
||||
'Class A' => ['prio' => 0, 'permanent_protection' => true, 'events' => ['listener1' => ['update' => false], 'listener2' => ['update' => false]]],
|
||||
],
|
||||
'iEventCount' => 1,
|
||||
],
|
||||
'2 classes - 1' => [
|
||||
'aClasses' => [
|
||||
'Class A' => ['prio' => 0, 'permanent_protection' => true, 'events' => ['listener1' => ['update' => false], 'listener2' => ['update' => false]]],
|
||||
'Class B' => ['prio' => 10, 'permanent_protection' => true, 'events' => ['listener1' => ['update' => false], 'listener2' => ['update' => false]]],
|
||||
],
|
||||
'iEventCount' => 2,
|
||||
],
|
||||
'2 classes - 2'=> [
|
||||
'aClasses' => [
|
||||
'Class A' => ['prio' => 0, 'permanent_protection' => true, 'events' => ['listener1' => ['update' => true], 'listener2' => ['update' => false]]],
|
||||
'Class B' => ['prio' => 10, 'permanent_protection' => true, 'events' => ['listener1' => ['update' => false], 'listener2' => ['update' => false]]],
|
||||
],
|
||||
'iEventCount' => 4,
|
||||
],
|
||||
// '2 classes - 3' => [
|
||||
// 'aClasses' => [
|
||||
// 'Class A' => ['prio' => 0, 'permanent_protection' => true, 'events' => ['listener1' => ['update' => true], 'listener2' => ['update' => false]]],
|
||||
// 'Class B' => ['prio' => 10, 'permanent_protection' => true, 'events' => ['listener1' => ['update' => false], 'listener2' => ['update' => true]]],
|
||||
// ],
|
||||
// 'iEventCount' => 3,
|
||||
// ],
|
||||
// '3 classes - 1' => [
|
||||
// 'aClasses' => [
|
||||
// 'Class A' => ['prio' => 0, 'permanent_protection' => true, 'events' => ['listener1' => ['update' => true], 'listener2' => ['update' => false]]],
|
||||
// 'Class B' => ['prio' => 10, 'permanent_protection' => true, 'events' => ['listener1' => ['update' => true], 'listener2' => ['update' => false]]],
|
||||
// 'Class C' => ['prio' => 20, 'permanent_protection' => true, 'events' => ['listener1' => ['update' => true], 'listener2' => ['update' => true]]],
|
||||
// ],
|
||||
// 'iEventCount' => 11,
|
||||
// ],
|
||||
// '3 classes - non permanent' => [
|
||||
// 'aClasses' => [
|
||||
// 'Class A' => ['prio' => 0, 'permanent_protection' => false, 'events' => ['listener1' => ['update' => true], 'listener2' => ['update' => false]]],
|
||||
// 'Class B' => ['prio' => 10, 'permanent_protection' => true, 'events' => ['listener1' => ['update' => true], 'listener2' => ['update' => false]]],
|
||||
// 'Class C' => ['prio' => 20, 'permanent_protection' => true, 'events' => ['listener1' => ['update' => true], 'listener2' => ['update' => true]]],
|
||||
// ],
|
||||
// 'iEventCount' => 12,
|
||||
// ],
|
||||
// '2 classes - loop' => [
|
||||
// 'aClasses' => [
|
||||
// 'Class A' => ['prio' => 0, 'permanent_protection' => true, 'events' => ['listener1' => ['update' => false], 'listener2' => ['update' => false]]],
|
||||
// 'Class B' => ['prio' => 10, 'permanent_protection' => true, 'events' => ['listener1' => ['update' => false], 'listener2' => ['update' => false]]],
|
||||
// ],
|
||||
// 'iEventCount' => 4,
|
||||
// ],
|
||||
// '2 classes - loop2' => [
|
||||
// 'aClasses' => [
|
||||
// 'Class A' => ['prio' => 0, 'permanent_protection' => false, 'events' => ['listener1' => ['update' => false], 'listener2' => ['update' => false]]],
|
||||
// 'Class B' => ['prio' => 10, 'permanent_protection' => true, 'events' => ['listener1' => ['update' => false], 'listener2' => ['update' => false]]],
|
||||
// ],
|
||||
// 'iEventCount' => 5,
|
||||
// ],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* static version of the debug to be accessible from other objects
|
||||
*
|
||||
@@ -701,18 +579,14 @@ class TestReentrance extends TestClassesWithDebug
|
||||
if ($this->aSendEvent['listener1']['event1']) {
|
||||
$this->Debug("$sName: Fire event 'event1'");
|
||||
self::$iIndent1 += 1;
|
||||
EventService::EnableReentranceProtection($this->sEvent1, $this->bPermanentProtection);
|
||||
EventService::FireEvent(new EventData('event1', $sName));
|
||||
EventService::DisableReentranceProtection($this->sEvent1);
|
||||
self::$iIndent1 -= 1;
|
||||
$this->Debug("$sName: End of event 'event1'");
|
||||
}
|
||||
if ($this->aSendEvent['listener1']['event2']) {
|
||||
$this->Debug("$sName: Fire event 'event2'");
|
||||
self::$iIndent2 += 1;
|
||||
EventService::EnableReentranceProtection($this->sEvent2, $this->bPermanentProtection);
|
||||
EventService::FireEvent(new EventData('event2', $sName));
|
||||
EventService::DisableReentranceProtection($this->sEvent2);
|
||||
self::$iIndent2 -= 1;
|
||||
$this->Debug("$sName: End of event 'event2'");
|
||||
}
|
||||
@@ -729,18 +603,14 @@ class TestReentrance extends TestClassesWithDebug
|
||||
if ($this->aSendEvent['listener2']['event1']) {
|
||||
$this->Debug("$sName: Fire event 'event1'");
|
||||
self::$iIndent1 += 1;
|
||||
EventService::EnableReentranceProtection($this->sEvent1, $this->bPermanentProtection);
|
||||
EventService::FireEvent(new EventData('event1', $sName));
|
||||
EventService::DisableReentranceProtection($this->sEvent1);
|
||||
self::$iIndent1 -= 1;
|
||||
$this->Debug("$sName: End of event 'event1'");
|
||||
}
|
||||
if ($this->aSendEvent['listener2']['event2']) {
|
||||
$this->Debug("$sName: Fire event 'event2'");
|
||||
self::$iIndent2 += 1;
|
||||
EventService::EnableReentranceProtection($this->sEvent2, $this->bPermanentProtection);
|
||||
EventService::FireEvent(new EventData('event2', $sName));
|
||||
EventService::DisableReentranceProtection($this->sEvent2);
|
||||
self::$iIndent2 -= 1;
|
||||
$this->Debug("$sName: End of event 'event2'");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user