tikiwiki/packages/tiki-pkg-expose/enygma/expose/tests/ManagerTest.php
2023-11-20 20:52:04 +00:00

412 lines
11 KiB
PHP
Executable File

<?php
namespace Expose;
require_once 'MockLogger.php';
require_once 'MockQueue.php';
class ManagerTest extends \PHPUnit_Framework_TestCase
{
private $manager = null;
private $sampleFilters = array(
array(
"id" => "2",
"rule" => "testmatch[0-9]+",
"description" => "hard-coded match string",
"tags" => array('test', 'sample'),
"impact" => 2
),
);
public function setUp()
{
$logger = new \Expose\Log\Mongo();
$filters = new \Expose\FilterCollection();
$this->manager = new \Expose\Manager($filters, $logger);
}
public function executeFilters($data, $queue = false, $notify = false)
{
$filterCollection = new \Expose\FilterCollection();
$filterCollection->setFilterData($this->sampleFilters);
$logger = new MockLogger();
$manager = new \Expose\Manager($filterCollection, $logger);
$manager->setConfig(array('test' => 'foo'));
$manager->run($data, $queue, $notify);
return $manager;
}
/**
* Test that the getter and setter for assigning filters
* works correctly
*
* @covers \Expose\Manager::getFilters
* @covers \Expose\Manager::setFilters
*/
public function testGetSetFilters()
{
$filters = new \Expose\FilterCollection();
$filters->setFilterData($this->sampleFilters);
$this->manager->setFilters($filters);
$this->assertEquals(
$filters,
$this->manager->getFilters()
);
}
/**
* Test hte getter/setter for assigning data
*
* @covers \Expose\Manager::getData
* @covers \Expose\Manager::setData
*/
public function testGetSetData()
{
$data = array('foo' => 'bar');
$this->manager->setData($data);
$getData = $this->manager->getData();
$this->assertTrue(
$getData instanceof \Expose\DataCollection
);
}
/**
* Test the getter/setter for the overall impact value
*
* @covers \Expose\Manager::getImpact
* @covers \Expose\Manager::setImpact
*/
public function testGetSetImpact()
{
$impact = 12;
$this->manager->setImpact($impact);
$this->assertEquals(
$impact,
$this->manager->getImpact()
);
}
/**
* Test a successful (found) execution of the filters
*
* @covers \Expose\Manager::run
* @covers \Expose\Manager::getImpact
* @covers \Expose\Manager::getReports
*/
public function testRunSuccess()
{
$data = array(
'POST' => array(
'foo' => 'testmatch1'
)
);
$manager = $this->executeFilters($data);
$this->assertEquals($manager->getImpact(), 2);
$this->assertEquals(count($manager->getReports()), 1);
}
/**
* Test a successful (found) execution of the filters
*
* @covers \Expose\Manager::run
* @covers \Expose\Manager::getImpact
* @covers \Expose\Manager::getReports
*/
public function testRunSuccessWithImpactLimit()
{
$data = array(
'POST' => array(
'foo' => 'testmatch1',
'bar' => 'testmatch1'
)
);
$filterCollection = new \Expose\FilterCollection();
$filterCollection->setFilterData($this->sampleFilters);
$logger = new MockLogger();
$manager = new \Expose\Manager($filterCollection, $logger);
$manager->setImpactLimit(1);
$manager->setConfig(array('test' => 'foo'));
$manager->run($data, false, false);
$this->assertEquals($manager->getImpact(), 2);
$this->assertEquals(count($manager->getReports()), 1);
}
/**
* Test the use of the "export" method
* Loopback just returns the data back, no formatting
*
* @covers \Expose\Manager::run
* @covers \Expose\Manager::export
*/
public function testRunExportFound()
{
$data = array(
'POST' => array(
'foo' => 'testmatch1'
)
);
$manager = $this->executeFilters($data);
$export = $manager->export('loopback');
$this->assertEquals(count($export), 1);
$report = array_shift($export);
$this->assertTrue($report instanceof \Expose\Report);
}
/**
* Test the null response when the export type isn't found
*
* @covers \Expose\Manager::export
*/
public function testRunExportNotFound()
{
$data = array(
'POST' => array(
'foo' => 'testmatch1'
)
);
$manager = $this->executeFilters($data);
$export = $manager->export('notvalid');
$this->assertNull($export);
}
/**
* Test the getter/setter for exceptions to processing
*
* @covers \Expose\Manager::setException
* @covers \Expose\Manager::isException
* @covers \Expose\Manager::getExceptions
*/
public function testGetSetException()
{
$this->manager->setException('testme');
$this->assertTrue($this->manager->isException('testme'));
$exceptions = $this->manager->getExceptions();
$this->assertTrue(in_array('testme', $exceptions));
}
/**
* Test the getter/setter for restrictions
*
* @covers \Expose\Manager::setRestriction
* @covers \Expose\Manager::getRestrictions
*/
public function testGetSetRestriction()
{
$restriction = 'POST.bar.testing';
$this->manager->setRestriction($restriction);
$this->assertEquals(
$this->manager->getRestrictions(),
array($restriction)
);
}
/**
* Test the getter/setter for the log resource/table
*
* @covers \Expose\Manager::setLogResource
* @covers \Expose\Manager::getLogResource
*/
public function testGetSetLogResource()
{
$resource = 'logs';
$this->manager->setLogResource($resource);
$this->assertEquals(
$this->manager->getLogResource(),
$resource
);
}
/**
* Test the getter/setter for the log database option
*
* @covers \Expose\Manager::setLogDatabase
* @covers \Expose\Manager::getLogDatabase
*/
public function testGetSetLogDatabase()
{
$databaseName = 'expose';
$this->manager->setLogDatabase($databaseName);
$this->assertEquals(
$this->manager->getLogDatabase(),
$databaseName
);
}
/**
* Test the setup of the config based on an array (not a file)
*
* @covers \Expose\Manager::setConfig
* @covers \Expose\Manager::getConfig
* @covers \Expose\Config::toArray
*/
public function testSetupConfigArray()
{
$settings = array(
'test' => 'foo'
);
$this->manager->setConfig($settings);
$config = $this->manager->getConfig();
$this->assertEquals(
$config->toArray(),
$settings
);
}
/**
* Test that a field marked as an exception is ignored
*
* @covers \Expose\Manager::setException
* @covers \Expose\Manager::run
*/
public function testExceptionIsIgnored()
{
$filterCollection = new \Expose\FilterCollection();
$filterCollection->setFilterData($this->sampleFilters);
$logger = new MockLogger();
$manager = new \Expose\Manager($filterCollection, $logger);
$manager->setConfig(array('test' => 'foo'));
$manager->setException('POST.foo');
$manager->setException('POST.bar.baz');
$data = array(
'POST' => array(
'foo' => 'testmatch1',
'bar' => array(
'baz' => 'testmatch2'
)
)
);
$manager->run($data);
$this->assertEquals($manager->getImpact(), 0);
}
/**
* Test that a field marked as an exception based on a regex wildcard is ignored
*
* @covers \Expose\Manager::setException
* @covers \Expose\Manager::run
*/
public function testExceptionWildcardIsIgnored()
{
$filterCollection = new \Expose\FilterCollection();
$filterCollection->setFilterData($this->sampleFilters);
$logger = new MockLogger();
$manager = new \Expose\Manager($filterCollection, $logger);
$manager->setConfig(array('test' => 'foo'));
$manager->setException('POST.foo[0-9]+');
$data = array(
'POST' => array(
'foo1234' => 'testmatch1'
)
);
$manager->run($data);
$this->assertEquals($manager->getImpact(), 0);
}
/**
* Test the getter/setter for the Queue object
*
* @covers \Expose\Manager::setQueue
* @covers \Expose\Manager::getQueue
*/
public function testGetSetQueue()
{
$queue = new \Expose\Queue\MockQueue();
$this->manager->setQueue($queue);
$this->assertEquals(
$this->manager->getQueue(),
$queue
);
}
/**
* Getting the default queue object without setting it
* first gives us an exception
*
* @covers \Expose\Manager::getQueue
* @expectedException \Expose\Exception\QueueNotDefined
*/
public function testGetUndefinedQueue()
{
$queue = $this->manager->getQueue();
}
/**
* Test the getter/setter for the notification method
*
* @covers \Expose\Manager::getNotify
* @covers \Expose\Manager::setNotify
*/
public function testGetSetNotify()
{
$notify = new \Expose\Notify\Email();
$this->manager->setNotify($notify);
$this->assertEquals(
$this->manager->getNotify(),
$notify
);
}
public function testThresholdLowerThenImpact() {
$filter = new \Expose\Filter();
$filter->setImpact(100);
$collection = new \Expose\FilterCollection();
$collection->addFilter($filter);
$manager_mock = $this->getMockBuilder('\\Expose\\Manager')
->setConstructorArgs(array($collection, new \Expose\MockLogger()))
->setMethods(array('sendNotification'))
->getMock();
$manager_mock
->expects($this->once())
->method('sendNotification')
->with(array($filter));
$manager_mock->setThreshold(7);
$manager_mock->run(array('test' => 'test'), false, true);
}
public function testThresholdHigherThenImpact() {
$filter = new \Expose\Filter();
$filter->setImpact(5);
$collection = new \Expose\FilterCollection();
$collection->addFilter($filter);
$manager_mock = $this->getMockBuilder('\\Expose\\Manager')
->setConstructorArgs(array($collection, new \Expose\MockLogger()))
->setMethods(array('sendNotification'))
->getMock();
$manager_mock
->expects($this->never())
->method('sendNotification');
$manager_mock->setThreshold(100);
$manager_mock->run(array('test' => 'test'), false, true);
}
}