1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
<?php
use PHPUnit\Framework\TestCase;
/**
* Test for the core:PHP filter.
*/
class Test_Core_Auth_Process_PHP extends TestCase
{
/**
* Helper function to run the filter with a given configuration.
*
* @param array $config The filter configuration.
* @param array $request The request state.
*
* @return array The state array after processing.
*/
private static function processFilter(array $config, array $request)
{
$filter = new sspmod_core_Auth_Process_PHP($config, null);
@$filter->process($request);
return $request;
}
/**
* Test the configuration of the filter.
*/
public function testInvalidConfiguration()
{
$config = array();
$this->setExpectedException(
"SimpleSAML_Error_Exception",
"core:PHP: missing mandatory configuration option 'code'."
);
new sspmod_core_Auth_Process_PHP($config, null);
}
/**
* Check that defining the code works as expected.
*/
public function testCodeDefined()
{
$config = array(
'code' => '
$attributes["key"] = array("value");
',
);
$request = array('Attributes' => array());
$expected = array(
'Attributes' => array(
'key' => array('value'),
),
);
$this->assertEquals($expected, $this->processFilter($config, $request));
}
/**
* Check that the incoming attributes are also available after processing
*/
public function testPreserveIncomingAttributes()
{
$config = array(
'code' => '
$attributes["orig2"] = array("value0");
',
);
$request = array(
'Attributes' => array(
'orig1' => array('value1', 'value2'),
'orig2' => array('value3'),
'orig3' => array('value4')
)
);
$expected = array(
'Attributes' => array(
'orig1' => array('value1', 'value2'),
'orig2' => array('value0'),
'orig3' => array('value4')
),
);
$this->assertEquals($expected, $this->processFilter($config, $request));
}
/**
* Check that throwing an Exception inside the PHP code of the
* filter (a documented use case) works.
*/
public function testThrowExceptionFromFilter()
{
$config = array(
'code' => '
if (empty($attributes["uid"])) {
throw new Exception("Missing uid attribute.");
}
$attributes["uid"][0] = strtoupper($attributes["uid"][0]);
',
);
$request = array(
'Attributes' => array(
'orig1' => array('value1', 'value2'),
)
);
$this->setExpectedException(
"Exception",
"Missing uid attribute."
);
$this->processFilter($config, $request);
}
}
|