167 lines
5.0 KiB
PHP
167 lines
5.0 KiB
PHP
|
<?php
|
||
|
|
||
|
/**
|
||
|
* Tests for the Nonce implementation.
|
||
|
*
|
||
|
* PHP versions 4 and 5
|
||
|
*
|
||
|
* LICENSE: See the COPYING file included in this distribution.
|
||
|
*
|
||
|
* @package OpenID
|
||
|
* @author JanRain, Inc. <openid@janrain.com>
|
||
|
* @copyright 2006 Janrain, Inc.
|
||
|
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache
|
||
|
*/
|
||
|
|
||
|
require_once 'Auth/OpenID/Nonce.php';
|
||
|
|
||
|
define('Tests_Auth_OpenID_nonce_re',
|
||
|
'/\A\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ/');
|
||
|
|
||
|
class Tests_Auth_OpenID_Nonce extends PHPUnit_Framework_TestSuite {
|
||
|
function Tests_Auth_OpenID_Nonce()
|
||
|
{
|
||
|
$this->addTestSuite('Tests_Auth_OpenID_NonceTests');
|
||
|
$this->makeSplitTests();
|
||
|
$this->makeCheckTimestampTests();
|
||
|
$this->setName('Tests_Auth_OpenID_Nonce');
|
||
|
}
|
||
|
|
||
|
function makeSplitTests()
|
||
|
{
|
||
|
$cases = array(
|
||
|
'',
|
||
|
'1970-01-01T00:00:00+1:00',
|
||
|
'1969-01-01T00:00:00Z',
|
||
|
'1970-00-01T00:00:00Z',
|
||
|
'1970.01-01T00:00:00Z',
|
||
|
'Thu Sep 7 13:29:31 PDT 2006',
|
||
|
'monkeys',
|
||
|
);
|
||
|
|
||
|
foreach ($cases as $nonce_str) {
|
||
|
$this->_mkSplitTest($nonce_str);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function _mkSplitTest($nonce_str)
|
||
|
{
|
||
|
$test = new Tests_Auth_OpenID_Nonce_BadSplitCase($nonce_str);
|
||
|
$test->setName('BadNonceSplit ' . var_export($nonce_str, true));
|
||
|
$this->addTest($test);
|
||
|
}
|
||
|
|
||
|
function makeCheckTimestampTests()
|
||
|
{
|
||
|
$cases = array(
|
||
|
// exact, no allowed skew
|
||
|
array('1970-01-01T00:00:00Z', 0, 0, true),
|
||
|
|
||
|
// exact, large skew
|
||
|
array('1970-01-01T00:00:00Z', 1000, 0, true),
|
||
|
|
||
|
// no allowed skew, one second old
|
||
|
array('1970-01-01T00:00:00Z', 0, 1, false),
|
||
|
|
||
|
// many seconds old, outside of skew
|
||
|
array('1970-01-01T00:00:00Z', 10, 50, false),
|
||
|
|
||
|
// one second old, one second skew allowed
|
||
|
array('1970-01-01T00:00:00Z', 1, 1, true),
|
||
|
|
||
|
// One second in the future, one second skew allowed
|
||
|
array('1970-01-01T00:00:02Z', 1, 1, true),
|
||
|
|
||
|
// two seconds in the future, one second skew allowed
|
||
|
array('1970-01-01T00:00:02Z', 1, 0, false),
|
||
|
|
||
|
// malformed nonce string
|
||
|
array('monkeys', 0, 0, false)
|
||
|
);
|
||
|
|
||
|
foreach ($cases as $case) {
|
||
|
$this->_mkCheckTest($case);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function _mkCheckTest($case)
|
||
|
{
|
||
|
list($nonce_str, $skew, $now, $expected) = $case;
|
||
|
$test = new Tests_Auth_OpenID_Nonce_TimestampCase(
|
||
|
$nonce_str, $skew, $now, $expected);
|
||
|
$test->setName('CheckTimestamp ' . var_export($nonce_str, true));
|
||
|
$this->addTest($test);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class Tests_Auth_OpenID_Nonce_TimestampCase extends PHPUnit_Framework_TestCase {
|
||
|
function Tests_Auth_OpenID_Nonce_TimestampCase(
|
||
|
$nonce_str, $skew, $now, $expected)
|
||
|
{
|
||
|
$this->nonce_string = $nonce_str;
|
||
|
$this->allowed_skew = $skew;
|
||
|
$this->now = $now;
|
||
|
$this->expected = $expected;
|
||
|
}
|
||
|
|
||
|
function runTest()
|
||
|
{
|
||
|
$actual = Auth_OpenID_checkTimestamp($this->nonce_string,
|
||
|
$this->allowed_skew,
|
||
|
$this->now);
|
||
|
$this->assertEquals($this->expected, $actual);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class Tests_Auth_OpenID_NonceTests extends PHPUnit_Framework_TestCase {
|
||
|
function test_mkNonce()
|
||
|
{
|
||
|
$nonce_str = Auth_OpenID_mkNonce();
|
||
|
$this->assertTrue(preg_match(Tests_Auth_OpenID_nonce_re, $nonce_str));
|
||
|
}
|
||
|
|
||
|
function test_mkNonce_when()
|
||
|
{
|
||
|
$nonce_str = Auth_OpenID_mkNonce(0);
|
||
|
$this->assertTrue(preg_match(Tests_Auth_OpenID_nonce_re, $nonce_str));
|
||
|
$tpart = substr($nonce_str, 0, 20);
|
||
|
$this->assertEquals('1970-01-01T00:00:00Z', $tpart);
|
||
|
}
|
||
|
|
||
|
function test_splitNonce()
|
||
|
{
|
||
|
$s = '1970-01-01T00:00:00Z';
|
||
|
$expected_t = 0;
|
||
|
$expected_salt = '';
|
||
|
list($actual_t, $actual_salt) = Auth_OpenID_splitNonce($s);
|
||
|
$this->assertEquals($expected_t, $actual_t);
|
||
|
$this->assertEquals($expected_salt, $actual_salt);
|
||
|
}
|
||
|
|
||
|
|
||
|
function test_mkSplit()
|
||
|
{
|
||
|
$t = 42;;
|
||
|
$nonce_str = Auth_OpenID_mkNonce($t);
|
||
|
$this->assertTrue(preg_match(Tests_Auth_OpenID_nonce_re, $nonce_str));
|
||
|
list($et, $salt) = Auth_OpenID_splitNonce($nonce_str);
|
||
|
$this->assertEquals(6, strlen($salt));
|
||
|
$this->assertEquals($et, $t);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class Tests_Auth_OpenID_Nonce_BadSplitCase extends PHPUnit_Framework_TestCase {
|
||
|
function Tests_Auth_OpenID_Nonce_BadSplitCase($nonce_str)
|
||
|
{
|
||
|
$this->nonce_str = $nonce_str;
|
||
|
}
|
||
|
|
||
|
function runTest()
|
||
|
{
|
||
|
$result = Auth_OpenID_splitNonce($this->nonce_str);
|
||
|
$this->assertNull($result);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|