Block if event is not registered

This commit is contained in:
Eric Espie
2022-06-02 13:48:59 +02:00
parent e77f21a0b5
commit 23c95ebbf3
4 changed files with 49 additions and 163 deletions

View File

@@ -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">

View File

@@ -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")',

View File

@@ -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'],

View File

@@ -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'");
}