2a06261f75
This adds a composer.json for all dependencies that are available
1252 lines
37 KiB
PHP
1252 lines
37 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Unit tests for the Auth_OpenID_Message implementation.
|
|
*/
|
|
|
|
require_once "Auth/OpenID/Message.php";
|
|
require_once "Auth/OpenID.php";
|
|
|
|
class MessageTest extends PHPUnit_Framework_TestCase {
|
|
function _argTest($ns, $key, $expected = null)
|
|
{
|
|
$a_default = 'a bogus default value';
|
|
|
|
$this->assertEquals($this->msg->getArg($ns, $key), $expected);
|
|
if ($expected === null) {
|
|
$this->assertEquals(
|
|
$this->msg->getArg($ns, $key, $a_default), $a_default);
|
|
$result = $this->msg->getArg($ns, $key, Auth_OpenID_NO_DEFAULT);
|
|
$this->assertTrue(Auth_OpenID::isFailure($result));
|
|
} else {
|
|
$this->assertEquals(
|
|
$this->msg->getArg($ns, $key, $a_default), $expected);
|
|
$this->assertEquals(
|
|
$this->msg->getArg($ns, $key, Auth_OpenID_NO_DEFAULT),
|
|
$expected);
|
|
}
|
|
}
|
|
}
|
|
|
|
class Tests_Auth_OpenID_EmptyMessage extends MessageTest {
|
|
function setUp()
|
|
{
|
|
$this->msg = new Auth_OpenID_Message();
|
|
}
|
|
|
|
function test_toPostArgs()
|
|
{
|
|
$this->assertEquals($this->msg->toPostArgs(), array());
|
|
}
|
|
|
|
function test_toArgs()
|
|
{
|
|
$this->assertEquals($this->msg->toArgs(), array());
|
|
}
|
|
|
|
function test_toKVForm()
|
|
{
|
|
$this->assertEquals($this->msg->toKVForm(), '');
|
|
}
|
|
|
|
function test_toURLEncoded()
|
|
{
|
|
$this->assertEquals($this->msg->toURLEncoded(), '');
|
|
}
|
|
|
|
function test_toURL()
|
|
{
|
|
$base_url = 'http://base.url/';
|
|
$this->assertEquals($this->msg->toURL($base_url), $base_url);
|
|
}
|
|
|
|
function test_getOpenID()
|
|
{
|
|
$this->assertEquals($this->msg->getOpenIDNamespace(), null);
|
|
}
|
|
|
|
function test_getKeyOpenID()
|
|
{
|
|
$key = $this->msg->getKey(Auth_OpenID_OPENID_NS, 'foo');
|
|
$this->assertTrue(Auth_OpenID::isFailure($key));
|
|
|
|
$this->msg->setOpenIDNamespace(Auth_OpenID_OPENID1_NS, false);
|
|
$key = $this->msg->getKey(Auth_OpenID_OPENID_NS, 'foo');
|
|
$this->assertEquals('openid.foo', $key);
|
|
}
|
|
|
|
function test_getKeyBARE()
|
|
{
|
|
$this->assertEquals($this->msg->getKey(Auth_OpenID_BARE_NS, 'foo'), 'foo');
|
|
}
|
|
|
|
function test_getKeyNS1()
|
|
{
|
|
$this->assertEquals($this->msg->getKey(Auth_OpenID_OPENID1_NS, 'foo'), null);
|
|
}
|
|
|
|
function test_getKeyNS2()
|
|
{
|
|
$this->assertEquals($this->msg->getKey(Auth_OpenID_OPENID2_NS, 'foo'), null);
|
|
}
|
|
|
|
function test_getKeyNS3()
|
|
{
|
|
$this->assertEquals($this->msg->getKey('urn:nothing-significant', 'foo'),
|
|
null);
|
|
}
|
|
|
|
function test_hasKey()
|
|
{
|
|
$this->assertEquals($this->msg->hasKey(Auth_OpenID_OPENID_NS, 'foo'), false);
|
|
}
|
|
|
|
function test_hasKeyBARE()
|
|
{
|
|
$this->assertEquals($this->msg->hasKey(Auth_OpenID_BARE_NS, 'foo'), false);
|
|
}
|
|
|
|
function test_hasKeyNS1()
|
|
{
|
|
$this->assertEquals($this->msg->hasKey(Auth_OpenID_OPENID1_NS, 'foo'), false);
|
|
}
|
|
|
|
function test_hasKeyNS2()
|
|
{
|
|
$this->assertEquals($this->msg->hasKey(Auth_OpenID_OPENID2_NS, 'foo'), false);
|
|
}
|
|
|
|
function test_hasKeyNS3()
|
|
{
|
|
$this->assertEquals($this->msg->hasKey('urn:nothing-significant', 'foo'),
|
|
false);
|
|
}
|
|
|
|
function test_getArg()
|
|
{
|
|
$result = $this->msg->getArg(Auth_OpenID_OPENID_NS, 'foo');
|
|
$this->assertTrue(Auth_OpenID::isFailure($result));
|
|
}
|
|
|
|
function test_getArgs()
|
|
{
|
|
$result = $this->msg->getArgs(Auth_OpenID_OPENID_NS);
|
|
$this->assertTrue(Auth_OpenID::isFailure($result));
|
|
}
|
|
|
|
function test_getArgsBARE()
|
|
{
|
|
$this->assertEquals($this->msg->getArgs(Auth_OpenID_BARE_NS), array());
|
|
}
|
|
|
|
function test_getArgsNS1()
|
|
{
|
|
$this->assertEquals($this->msg->getArgs(Auth_OpenID_OPENID1_NS), array());
|
|
}
|
|
|
|
function test_getArgsNS2()
|
|
{
|
|
$this->assertEquals($this->msg->getArgs(Auth_OpenID_OPENID2_NS), array());
|
|
}
|
|
|
|
function test_getArgsNS3()
|
|
{
|
|
$this->assertEquals($this->msg->getArgs('urn:nothing-significant'), array());
|
|
}
|
|
|
|
function test_updateArgs()
|
|
{
|
|
$result= $this->msg->updateArgs(Auth_OpenID_OPENID_NS,
|
|
array('does not' => 'matter'));
|
|
$this->assertTrue(Auth_OpenID::isFailure($result));
|
|
}
|
|
|
|
function _test_updateArgsNS($ns)
|
|
{
|
|
$update_args = array(
|
|
'Camper van Beethoven' => 'David Lowery',
|
|
'Magnolia Electric Co.' => 'Jason Molina');
|
|
|
|
$this->assertEquals($this->msg->getArgs($ns), array());
|
|
$this->msg->updateArgs($ns, $update_args);
|
|
$this->assertEquals($this->msg->getArgs($ns), $update_args);
|
|
}
|
|
|
|
function test_updateArgsBARE()
|
|
{
|
|
$this->_test_updateArgsNS(Auth_OpenID_BARE_NS);
|
|
}
|
|
|
|
function test_updateArgsNS1()
|
|
{
|
|
$this->_test_updateArgsNS(Auth_OpenID_OPENID1_NS);
|
|
}
|
|
|
|
function test_updateArgsNS2()
|
|
{
|
|
$this->_test_updateArgsNS(Auth_OpenID_OPENID2_NS);
|
|
}
|
|
|
|
function test_updateArgsNS3()
|
|
{
|
|
$this->_test_updateArgsNS('urn:nothing-significant');
|
|
}
|
|
|
|
function test_setArg()
|
|
{
|
|
$result = $this->msg->setArg(Auth_OpenID_OPENID_NS,
|
|
'does not', 'matter');
|
|
$this->assertTrue(Auth_OpenID::isFailure($result));
|
|
}
|
|
|
|
function _test_setArgNS($ns)
|
|
{
|
|
$key = 'Camper van Beethoven';
|
|
$value = 'David Lowery';
|
|
$this->assertEquals($this->msg->getArg($ns, $key), null);
|
|
$this->msg->setArg($ns, $key, $value);
|
|
$this->assertEquals($this->msg->getArg($ns, $key), $value);
|
|
}
|
|
|
|
function test_setArgBARE()
|
|
{
|
|
$this->_test_setArgNS(Auth_OpenID_BARE_NS);
|
|
}
|
|
|
|
function test_setArgNS1()
|
|
{
|
|
$this->_test_setArgNS(Auth_OpenID_OPENID1_NS);
|
|
}
|
|
|
|
function test_setArgNS2()
|
|
{
|
|
$this->_test_setArgNS(Auth_OpenID_OPENID2_NS);
|
|
}
|
|
|
|
function test_setArgNS3()
|
|
{
|
|
$this->_test_setArgNS('urn:nothing-significant');
|
|
}
|
|
|
|
function test_delArg()
|
|
{
|
|
$result = $this->msg->delArg(Auth_OpenID_OPENID_NS, 'does not');
|
|
$this->assertTrue(Auth_OpenID::isFailure($result));
|
|
}
|
|
|
|
function _test_delArgNS($ns)
|
|
{
|
|
$key = 'Camper van Beethoven';
|
|
$this->assertEquals($this->msg->delArg($ns, $key), false);
|
|
}
|
|
|
|
function test_delArgBARE()
|
|
{
|
|
$this->_test_delArgNS(Auth_OpenID_BARE_NS);
|
|
}
|
|
|
|
function test_delArgNS1()
|
|
{
|
|
$this->_test_delArgNS(Auth_OpenID_OPENID1_NS);
|
|
}
|
|
|
|
function test_delArgNS2()
|
|
{
|
|
$this->_test_delArgNS(Auth_OpenID_OPENID2_NS);
|
|
}
|
|
|
|
function test_delArgNS3()
|
|
{
|
|
$this->_test_delArgNS('urn:nothing-significant');
|
|
}
|
|
|
|
function test_isOpenID1()
|
|
{
|
|
$this->assertFalse($this->msg->isOpenID1());
|
|
}
|
|
|
|
function test_isOpenID2()
|
|
{
|
|
$this->assertFalse($this->msg->isOpenID2());
|
|
}
|
|
|
|
function test_args()
|
|
{
|
|
$this->_argTest(Auth_OpenID_BARE_NS, 'foo');
|
|
$this->_argTest(Auth_OpenID_OPENID1_NS, 'foo');
|
|
$this->_argTest(Auth_OpenID_OPENID2_NS, 'foo');
|
|
$this->_argTest('urn:nothing-significant', 'foo');
|
|
}
|
|
}
|
|
|
|
class Tests_Auth_OpenID_OpenID1Message extends MessageTest {
|
|
function setUp()
|
|
{
|
|
$this->msg = Auth_OpenID_Message::fromPostArgs(array('openid.mode' => 'error',
|
|
'openid.error' => 'unit test'));
|
|
}
|
|
|
|
function test_toPostArgs()
|
|
{
|
|
$this->assertEquals($this->msg->toPostArgs(),
|
|
array('openid.mode' => 'error',
|
|
'openid.error' => 'unit test'));
|
|
}
|
|
|
|
function test_toArgs()
|
|
{
|
|
$this->assertEquals($this->msg->toArgs(),
|
|
array('mode' => 'error',
|
|
'error' => 'unit test'));
|
|
}
|
|
|
|
function test_toKVForm()
|
|
{
|
|
$this->assertEquals($this->msg->toKVForm(),
|
|
"error:unit test\nmode:error\n");
|
|
}
|
|
|
|
function test_toURLEncoded()
|
|
{
|
|
$this->assertEquals($this->msg->toURLEncoded(),
|
|
'openid.error=unit+test&openid.mode=error');
|
|
}
|
|
|
|
function test_toURL()
|
|
{
|
|
$base_url = 'http://base.url/';
|
|
$actual = $this->msg->toURL($base_url);
|
|
$actual_base = substr($actual, 0, strlen($base_url));
|
|
$this->assertEquals($actual_base, $base_url);
|
|
$this->assertEquals($actual[strlen($base_url)], '?');
|
|
$query = substr($actual, strlen($base_url) + 1);
|
|
|
|
$parsed = Auth_OpenID::parse_str($query);
|
|
|
|
$this->assertEquals($parsed, array('openid.mode' => 'error',
|
|
'openid.error' => 'unit test'));
|
|
}
|
|
|
|
function test_getOpenID()
|
|
{
|
|
$this->assertEquals($this->msg->getOpenIDNamespace(),
|
|
Auth_OpenID_OPENID1_NS);
|
|
$this->assertTrue($this->msg->namespaces->isImplicit(Auth_OpenID_OPENID1_NS));
|
|
}
|
|
|
|
function test_getKeyOpenID()
|
|
{
|
|
$this->assertEquals($this->msg->getKey(Auth_OpenID_OPENID_NS, 'mode'),
|
|
'openid.mode');
|
|
}
|
|
|
|
function test_getKeyBARE()
|
|
{
|
|
$this->assertEquals($this->msg->getKey(Auth_OpenID_BARE_NS, 'mode'), 'mode');
|
|
}
|
|
|
|
function test_getKeyNS1()
|
|
{
|
|
$this->assertEquals(
|
|
$this->msg->getKey(Auth_OpenID_OPENID1_NS, 'mode'), 'openid.mode');
|
|
}
|
|
|
|
function test_getKeyNS2()
|
|
{
|
|
$this->assertEquals($this->msg->getKey(Auth_OpenID_OPENID2_NS, 'mode'), null);
|
|
}
|
|
|
|
function test_getKeyNS3()
|
|
{
|
|
$this->assertEquals(
|
|
$this->msg->getKey('urn:nothing-significant', 'mode'), null);
|
|
}
|
|
|
|
function test_hasKey()
|
|
{
|
|
$this->assertEquals($this->msg->hasKey(Auth_OpenID_OPENID_NS, 'mode'), true);
|
|
}
|
|
|
|
function test_hasKeyBARE()
|
|
{
|
|
$this->assertEquals($this->msg->hasKey(Auth_OpenID_BARE_NS, 'mode'), false);
|
|
}
|
|
|
|
function test_hasKeyNS1()
|
|
{
|
|
$this->assertEquals($this->msg->hasKey(Auth_OpenID_OPENID1_NS, 'mode'), true);
|
|
}
|
|
|
|
function test_hasKeyNS2()
|
|
{
|
|
$this->assertEquals(
|
|
$this->msg->hasKey(Auth_OpenID_OPENID2_NS, 'mode'), false);
|
|
}
|
|
|
|
function test_hasKeyNS3()
|
|
{
|
|
$this->assertEquals(
|
|
$this->msg->hasKey('urn:nothing-significant', 'mode'), false);
|
|
}
|
|
|
|
function test_getArgs()
|
|
{
|
|
$this->assertEquals($this->msg->getArgs(Auth_OpenID_OPENID_NS),
|
|
array('mode' => 'error',
|
|
'error' => 'unit test'));
|
|
}
|
|
|
|
function test_getArgsBARE()
|
|
{
|
|
$this->assertEquals($this->msg->getArgs(Auth_OpenID_BARE_NS), array());
|
|
}
|
|
|
|
function test_getArgsNS1()
|
|
{
|
|
$this->assertEquals($this->msg->getArgs(Auth_OpenID_OPENID1_NS),
|
|
array('mode' => 'error',
|
|
'error' => 'unit test'));
|
|
}
|
|
|
|
function test_getArgsNS2()
|
|
{
|
|
$this->assertEquals($this->msg->getArgs(Auth_OpenID_OPENID2_NS), array());
|
|
}
|
|
|
|
function test_getArgsNS3()
|
|
{
|
|
$this->assertEquals($this->msg->getArgs('urn:nothing-significant'), array());
|
|
}
|
|
|
|
function _test_updateArgsNS($ns, $before=null)
|
|
{
|
|
if ($before === null) {
|
|
$before = array();
|
|
}
|
|
|
|
$update_args = array(
|
|
'Camper van Beethoven' => 'David Lowery',
|
|
'Magnolia Electric Co.' => 'Jason Molina');
|
|
|
|
$this->assertEquals($this->msg->getArgs($ns), $before);
|
|
$this->msg->updateArgs($ns, $update_args);
|
|
$after = $before;
|
|
$after = array_merge($after, $update_args);
|
|
$this->assertEquals($this->msg->getArgs($ns), $after);
|
|
}
|
|
|
|
function test_updateArgs()
|
|
{
|
|
$this->_test_updateArgsNS(Auth_OpenID_OPENID_NS,
|
|
array('mode' => 'error', 'error' => 'unit test'));
|
|
}
|
|
|
|
function test_updateArgsBARE()
|
|
{
|
|
$this->_test_updateArgsNS(Auth_OpenID_BARE_NS);
|
|
}
|
|
|
|
function test_updateArgsNS1()
|
|
{
|
|
$this->_test_updateArgsNS(Auth_OpenID_OPENID1_NS,
|
|
array('mode' => 'error', 'error' => 'unit test'));
|
|
}
|
|
|
|
function test_updateArgsNS2()
|
|
{
|
|
$this->_test_updateArgsNS(Auth_OpenID_OPENID2_NS);
|
|
}
|
|
|
|
function test_updateArgsNS3()
|
|
{
|
|
$this->_test_updateArgsNS('urn:nothing-significant');
|
|
}
|
|
|
|
function _test_setArgNS($ns)
|
|
{
|
|
$key = 'Camper van Beethoven';
|
|
$value = 'David Lowery';
|
|
$this->assertEquals($this->msg->getArg($ns, $key), null);
|
|
$this->msg->setArg($ns, $key, $value);
|
|
$this->assertEquals($this->msg->getArg($ns, $key), $value);
|
|
}
|
|
|
|
function test_setArg()
|
|
{
|
|
$this->_test_setArgNS(Auth_OpenID_OPENID_NS);
|
|
}
|
|
|
|
function test_setArgBARE()
|
|
{
|
|
$this->_test_setArgNS(Auth_OpenID_BARE_NS);
|
|
}
|
|
|
|
function test_setArgNS1()
|
|
{
|
|
$this->_test_setArgNS(Auth_OpenID_OPENID1_NS);
|
|
}
|
|
|
|
function test_setArgNS2()
|
|
{
|
|
$this->_test_setArgNS(Auth_OpenID_OPENID2_NS);
|
|
}
|
|
|
|
function test_setArgNS3()
|
|
{
|
|
$this->_test_setArgNS('urn:nothing-significant');
|
|
}
|
|
|
|
function _test_delArgNS($ns)
|
|
{
|
|
$key = 'Camper van Beethoven';
|
|
$value = 'David Lowery';
|
|
|
|
$this->assertEquals($this->msg->delArg($ns, $key), false);
|
|
$this->msg->setArg($ns, $key, $value);
|
|
$this->assertEquals($this->msg->getArg($ns, $key), $value);
|
|
$this->msg->delArg($ns, $key);
|
|
$this->assertEquals($this->msg->getArg($ns, $key), null);
|
|
}
|
|
|
|
function test_delArg()
|
|
{
|
|
$this->_test_delArgNS(Auth_OpenID_OPENID_NS);
|
|
}
|
|
|
|
function test_delArgBARE()
|
|
{
|
|
$this->_test_delArgNS(Auth_OpenID_BARE_NS);
|
|
}
|
|
|
|
function test_delArgNS1()
|
|
{
|
|
$this->_test_delArgNS(Auth_OpenID_OPENID1_NS);
|
|
}
|
|
|
|
function test_delArgNS2()
|
|
{
|
|
$this->_test_delArgNS(Auth_OpenID_OPENID2_NS);
|
|
}
|
|
|
|
function test_delArgNS3()
|
|
{
|
|
$this->_test_delArgNS('urn:nothing-significant');
|
|
}
|
|
|
|
function test_isOpenID1()
|
|
{
|
|
$this->assertTrue($this->msg->isOpenID1());
|
|
}
|
|
|
|
function test_isOpenID2()
|
|
{
|
|
$this->assertFalse($this->msg->isOpenID2());
|
|
}
|
|
|
|
function test_args()
|
|
{
|
|
$this->_argTest(Auth_OpenID_BARE_NS, 'mode');
|
|
$this->_argTest(Auth_OpenID_OPENID_NS, 'mode', 'error');
|
|
$this->_argTest(Auth_OpenID_OPENID1_NS, 'mode', 'error');
|
|
$this->_argTest(Auth_OpenID_OPENID2_NS, 'mode');
|
|
$this->_argTest('urn:nothing-significant', 'mode');
|
|
}
|
|
}
|
|
|
|
class Tests_Auth_OpenID_OpenID1ExplicitMessage extends PHPUnit_Framework_TestCase {
|
|
function setUp()
|
|
{
|
|
$this->msg = Auth_OpenID_Message::fromPostArgs(array('openid.mode' => 'error',
|
|
'openid.error' => 'unit test',
|
|
'openid.ns' => Auth_OpenID_OPENID1_NS));
|
|
}
|
|
|
|
function test_isOpenID1()
|
|
{
|
|
$this->assertTrue($this->msg->isOpenID1());
|
|
$this->assertFalse(
|
|
$this->msg->namespaces->isImplicit(Auth_OpenID_OPENID1_NS));
|
|
}
|
|
|
|
function test_isOpenID2()
|
|
{
|
|
$this->assertFalse($this->msg->isOpenID2());
|
|
}
|
|
|
|
function test_toPostArgs()
|
|
{
|
|
$this->assertEquals($this->msg->toPostArgs(),
|
|
array('openid.mode' => 'error',
|
|
'openid.error' => 'unit test',
|
|
'openid.ns' => Auth_OpenID_OPENID1_NS));
|
|
}
|
|
|
|
function test_toArgs()
|
|
{
|
|
$this->assertEquals($this->msg->toArgs(),
|
|
array('mode' => 'error',
|
|
'error' => 'unit test',
|
|
'ns' => Auth_OpenID_OPENID1_NS));
|
|
}
|
|
|
|
function test_toKVForm()
|
|
{
|
|
$this->assertEquals($this->msg->toKVForm(),
|
|
"error:unit test\nmode:error\nns:".
|
|
Auth_OpenID_OPENID1_NS."\n");
|
|
}
|
|
|
|
function test_toURLEncoded()
|
|
{
|
|
$this->assertEquals($this->msg->toURLEncoded(),
|
|
'openid.error=unit+test&openid.mode=error&openid.ns=http%3A%2F%2Fopenid.net%2Fsignon%2F1.0');
|
|
}
|
|
|
|
function test_toURL()
|
|
{
|
|
$base_url = 'http://base.url/';
|
|
$actual = $this->msg->toURL($base_url);
|
|
$actual_base = substr($actual, 0, strlen($base_url));
|
|
$this->assertEquals($actual_base, $base_url);
|
|
$this->assertEquals($actual[strlen($base_url)], '?');
|
|
$query = substr($actual, strlen($base_url) + 1);
|
|
|
|
$parsed = Auth_OpenID::parse_str($query);
|
|
|
|
$this->assertEquals($parsed, array('openid.mode' => 'error',
|
|
'openid.error' => 'unit test',
|
|
'openid.ns' => Auth_OpenID_OPENID1_NS));
|
|
}
|
|
}
|
|
|
|
class Tests_Auth_OpenID_OpenID2Message extends MessageTest {
|
|
function setUp()
|
|
{
|
|
$this->msg = Auth_OpenID_Message::fromPostArgs(array('openid.mode' => 'error',
|
|
'openid.error' => 'unit test',
|
|
'openid.ns' => Auth_OpenID_OPENID2_NS));
|
|
$this->msg->setArg(Auth_OpenID_BARE_NS, "xey", "value");
|
|
}
|
|
|
|
function test_toPostArgs()
|
|
{
|
|
$this->assertEquals($this->msg->toPostArgs(),
|
|
array('openid.mode' => 'error',
|
|
'openid.error' => 'unit test',
|
|
'openid.ns' => Auth_OpenID_OPENID2_NS,
|
|
'xey' => 'value'));
|
|
}
|
|
|
|
function test_toArgs()
|
|
{
|
|
// This method can't tolerate BARE_NS.
|
|
$this->msg->delArg(Auth_OpenID_BARE_NS, "xey");
|
|
$this->assertEquals($this->msg->toArgs(),
|
|
array('mode' => 'error',
|
|
'error' => 'unit test',
|
|
'ns' => Auth_OpenID_OPENID2_NS));
|
|
}
|
|
|
|
function test_toKVForm()
|
|
{
|
|
// Can't tolerate BARE_NS in kvform
|
|
$this->msg->delArg(Auth_OpenID_BARE_NS, "xey");
|
|
$this->assertEquals($this->msg->toKVForm(),
|
|
sprintf("error:unit test\nmode:error\nns:%s\n",
|
|
Auth_OpenID_OPENID2_NS));
|
|
}
|
|
|
|
function _test_urlencoded($s)
|
|
{
|
|
$expected = 'openid.error=unit+test&openid.mode=error&' .
|
|
'openid.ns=%s&xey=value';
|
|
|
|
$expected = sprintf($expected, urlencode(Auth_OpenID_OPENID2_NS));
|
|
$this->assertEquals($s, $expected);
|
|
}
|
|
|
|
function test_toURLEncoded()
|
|
{
|
|
$this->_test_urlencoded($this->msg->toURLEncoded());
|
|
}
|
|
|
|
function test_toURL()
|
|
{
|
|
$base_url = 'http://base.url/';
|
|
$actual = $this->msg->toURL($base_url);
|
|
$actual_base = substr($actual, 0, strlen($base_url));
|
|
|
|
$this->assertEquals($actual_base, $base_url);
|
|
$this->assertEquals($actual[strlen($base_url)], '?');
|
|
$query = substr($actual, strlen($base_url) + 1);
|
|
$this->_test_urlencoded($query);
|
|
}
|
|
|
|
function test_getOpenID()
|
|
{
|
|
$this->assertEquals($this->msg->getOpenIDNamespace(),
|
|
Auth_OpenID_OPENID2_NS);
|
|
}
|
|
|
|
function test_getKeyOpenID()
|
|
{
|
|
$this->assertEquals($this->msg->getKey(Auth_OpenID_OPENID_NS, 'mode'),
|
|
'openid.mode');
|
|
}
|
|
|
|
function test_getKeyBARE()
|
|
{
|
|
$this->assertEquals($this->msg->getKey(Auth_OpenID_BARE_NS, 'mode'), 'mode');
|
|
}
|
|
|
|
function test_getKeyNS1()
|
|
{
|
|
$this->assertEquals(
|
|
$this->msg->getKey(Auth_OpenID_OPENID1_NS, 'mode'), null);
|
|
}
|
|
|
|
function test_getKeyNS2()
|
|
{
|
|
$this->assertEquals(
|
|
$this->msg->getKey(Auth_OpenID_OPENID2_NS, 'mode'), 'openid.mode');
|
|
}
|
|
|
|
function test_getKeyNS3()
|
|
{
|
|
$this->assertEquals(
|
|
$this->msg->getKey('urn:nothing-significant', 'mode'), null);
|
|
}
|
|
|
|
function test_hasKeyOpenID()
|
|
{
|
|
$this->assertEquals($this->msg->hasKey(Auth_OpenID_OPENID_NS, 'mode'), true);
|
|
}
|
|
|
|
function test_hasKeyBARE()
|
|
{
|
|
$this->assertEquals($this->msg->hasKey(Auth_OpenID_BARE_NS, 'mode'), false);
|
|
}
|
|
|
|
function test_hasKeyNS1()
|
|
{
|
|
$this->assertEquals(
|
|
$this->msg->hasKey(Auth_OpenID_OPENID1_NS, 'mode'), false);
|
|
}
|
|
|
|
function test_hasKeyNS2()
|
|
{
|
|
$this->assertEquals(
|
|
$this->msg->hasKey(Auth_OpenID_OPENID2_NS, 'mode'), true);
|
|
}
|
|
|
|
function test_hasKeyNS3()
|
|
{
|
|
$this->assertEquals(
|
|
$this->msg->hasKey('urn:nothing-significant', 'mode'), false);
|
|
}
|
|
|
|
function test_getArgsOpenID()
|
|
{
|
|
$this->assertEquals($this->msg->getArgs(Auth_OpenID_OPENID_NS),
|
|
array('mode' => 'error',
|
|
'error' => 'unit test'));
|
|
}
|
|
|
|
function test_getArgsBARE()
|
|
{
|
|
$this->assertEquals($this->msg->getArgs(Auth_OpenID_BARE_NS),
|
|
array('xey' => 'value'));
|
|
}
|
|
|
|
function test_getArgsNS1()
|
|
{
|
|
$this->assertEquals($this->msg->getArgs(Auth_OpenID_OPENID1_NS), array());
|
|
}
|
|
|
|
function test_getArgsNS2()
|
|
{
|
|
$this->assertEquals($this->msg->getArgs(Auth_OpenID_OPENID2_NS),
|
|
array('mode' => 'error',
|
|
'error' => 'unit test'));
|
|
}
|
|
|
|
function test_getArgsNS3()
|
|
{
|
|
$this->assertEquals($this->msg->getArgs('urn:nothing-significant'), array());
|
|
}
|
|
|
|
function _test_updateArgsNS($ns, $before=null)
|
|
{
|
|
if ($before === null) {
|
|
$before = array();
|
|
}
|
|
|
|
$update_args = array(
|
|
'Camper van Beethoven' => 'David Lowery',
|
|
'Magnolia Electric Co.' => 'Jason Molina');
|
|
|
|
$this->assertEquals($this->msg->getArgs($ns), $before);
|
|
$this->msg->updateArgs($ns, $update_args);
|
|
$after = $before;
|
|
$after = array_merge($after, $update_args);
|
|
$this->assertEquals($this->msg->getArgs($ns), $after);
|
|
}
|
|
|
|
function test_updateArgsOpenID()
|
|
{
|
|
$this->_test_updateArgsNS(Auth_OpenID_OPENID_NS,
|
|
array('mode' => 'error', 'error' => 'unit test'));
|
|
}
|
|
|
|
function test_updateArgsBARE()
|
|
{
|
|
$this->_test_updateArgsNS(Auth_OpenID_BARE_NS,
|
|
array('xey' => 'value'));
|
|
}
|
|
|
|
function test_updateArgsNS1()
|
|
{
|
|
$this->_test_updateArgsNS(Auth_OpenID_OPENID1_NS);
|
|
}
|
|
|
|
function test_updateArgsNS2()
|
|
{
|
|
$this->_test_updateArgsNS(Auth_OpenID_OPENID2_NS,
|
|
array('mode' => 'error', 'error' => 'unit test'));
|
|
}
|
|
|
|
function test_updateArgsNS3()
|
|
{
|
|
$this->_test_updateArgsNS('urn:nothing-significant');
|
|
}
|
|
|
|
function _test_setArgNS($ns)
|
|
{
|
|
$key = 'Camper van Beethoven';
|
|
$value = 'David Lowery';
|
|
$this->assertEquals($this->msg->getArg($ns, $key), null);
|
|
$this->msg->setArg($ns, $key, $value);
|
|
$this->assertEquals($this->msg->getArg($ns, $key), $value);
|
|
}
|
|
|
|
function test_setArgOpenID()
|
|
{
|
|
$this->_test_setArgNS(Auth_OpenID_OPENID_NS);
|
|
}
|
|
|
|
function test_setArgBARE()
|
|
{
|
|
$this->_test_setArgNS(Auth_OpenID_BARE_NS);
|
|
}
|
|
|
|
function test_setArgNS1()
|
|
{
|
|
$this->_test_setArgNS(Auth_OpenID_OPENID1_NS);
|
|
}
|
|
|
|
function test_setArgNS2()
|
|
{
|
|
$this->_test_setArgNS(Auth_OpenID_OPENID2_NS);
|
|
}
|
|
|
|
function test_setArgNS3()
|
|
{
|
|
$this->_test_setArgNS('urn:nothing-significant');
|
|
}
|
|
|
|
function test_badAlias()
|
|
{
|
|
// Make sure dotted aliases and OpenID protocol fields are not
|
|
// allowed as namespace aliases.
|
|
|
|
global $Auth_OpenID_OPENID_PROTOCOL_FIELDS;
|
|
|
|
$all = array_merge($Auth_OpenID_OPENID_PROTOCOL_FIELDS, array('dotted.alias'));
|
|
|
|
foreach ($all as $f) {
|
|
$args = array(sprintf('openid.ns.%s', $f) => 'blah',
|
|
sprintf('openid.%s.foo', $f) => 'test');
|
|
|
|
// .fromPostArgs covers .fromPostArgs, .fromOpenIDArgs,
|
|
// ._fromOpenIDArgs, and .fromOpenIDArgs (since it calls
|
|
// .fromPostArgs). Python code raises AssertionError, but
|
|
// we usually return null for bad things in PHP.
|
|
$this->assertEquals($this->msg->fromPostArgs($args), null);
|
|
}
|
|
}
|
|
|
|
function _test_delArgNS($ns)
|
|
{
|
|
$key = 'Camper van Beethoven';
|
|
$value = 'David Lowery';
|
|
|
|
$this->assertEquals($this->msg->delArg($ns, $key), false);
|
|
$this->msg->setArg($ns, $key, $value);
|
|
$this->assertEquals($this->msg->getArg($ns, $key), $value);
|
|
$this->msg->delArg($ns, $key);
|
|
$this->assertEquals($this->msg->getArg($ns, $key), null);
|
|
}
|
|
|
|
function test_delArgOpenID()
|
|
{
|
|
$this->_test_delArgNS(Auth_OpenID_OPENID_NS);
|
|
}
|
|
|
|
function test_delArgBARE()
|
|
{
|
|
$this->_test_delArgNS(Auth_OpenID_BARE_NS);
|
|
}
|
|
|
|
function test_delArgNS1()
|
|
{
|
|
$this->_test_delArgNS(Auth_OpenID_OPENID1_NS);
|
|
}
|
|
|
|
function test_delArgNS2()
|
|
{
|
|
$this->_test_delArgNS(Auth_OpenID_OPENID2_NS);
|
|
}
|
|
|
|
function test_delArgNS3()
|
|
{
|
|
$this->_test_delArgNS('urn:nothing-significant');
|
|
}
|
|
|
|
function test_overwriteExtensionArg()
|
|
{
|
|
$ns = 'urn:unittest_extension';
|
|
$key = 'mykey';
|
|
$value_1 = 'value_1';
|
|
$value_2 = 'value_2';
|
|
|
|
$this->msg->setArg($ns, $key, $value_1);
|
|
$this->assertTrue($this->msg->getArg($ns, $key) == $value_1);
|
|
$this->msg->setArg($ns, $key, $value_2);
|
|
$this->assertTrue($this->msg->getArg($ns, $key) == $value_2);
|
|
}
|
|
|
|
function test_argList()
|
|
{
|
|
$this->assertEquals($this->msg->fromPostArgs(array('arg' => array(1, 2, 3))),
|
|
null);
|
|
}
|
|
|
|
function test_isOpenID1()
|
|
{
|
|
$this->assertFalse($this->msg->isOpenID1());
|
|
}
|
|
|
|
function test_isOpenID2()
|
|
{
|
|
$this->assertTrue($this->msg->isOpenID2());
|
|
}
|
|
|
|
function test_args()
|
|
{
|
|
$this->_argTest(Auth_OpenID_BARE_NS, 'mode');
|
|
$this->_argTest(Auth_OpenID_OPENID_NS, 'mode', 'error');
|
|
$this->_argTest(Auth_OpenID_OPENID1_NS, 'mode');
|
|
$this->_argTest(Auth_OpenID_OPENID2_NS, 'mode', 'error');
|
|
$this->_argTest('urn:nothing-significant', 'mode');
|
|
}
|
|
}
|
|
|
|
class Tests_Auth_OpenID_GeneralMessageTest extends PHPUnit_Framework_TestCase {
|
|
function setUp()
|
|
{
|
|
$this->postargs = array(
|
|
'openid.ns' => Auth_OpenID_OPENID2_NS,
|
|
'openid.mode' => 'checkid_setup',
|
|
'openid.identity' => 'http://bogus.example.invalid:port/',
|
|
'openid.assoc_handle' => 'FLUB',
|
|
'openid.return_to' => 'Neverland');
|
|
|
|
$this->action_url = 'scheme://host:port/path?query';
|
|
|
|
$this->form_tag_attrs = array(
|
|
'company' => 'janrain',
|
|
'class' => 'fancyCSS');
|
|
|
|
$this->submit_text = 'GO!';
|
|
|
|
// Expected data regardless of input
|
|
|
|
$this->required_form_attrs = array(
|
|
'accept-charset' => 'UTF-8',
|
|
'enctype' => 'application/x-www-form-urlencoded',
|
|
'method' => 'post');
|
|
}
|
|
|
|
function _checkForm($html, $message_, $action_url,
|
|
$form_tag_attrs, $submit_text)
|
|
{
|
|
$parser = Auth_Yadis_getXMLParser();
|
|
|
|
// Parse HTML source
|
|
$this->assertTrue($parser->init($html, array()));
|
|
|
|
// Get root element
|
|
$form = $parser->evalXPath('/form[1]');
|
|
$this->assertTrue(count($form) == 1);
|
|
$form = $form[0];
|
|
|
|
// Check required form attributes
|
|
$form_attrs = $parser->attributes($form);
|
|
foreach ($this->required_form_attrs as $k => $v) {
|
|
$this->assertTrue($form_attrs[$k] == $v);
|
|
}
|
|
|
|
// Check extra form attributes
|
|
foreach ($form_tag_attrs as $k => $v) {
|
|
// Skip attributes that already passed the required
|
|
// attribute check, since they should be ignored by the
|
|
// form generation code.
|
|
if (in_array($k, array_keys($this->required_form_attrs))) {
|
|
continue;
|
|
}
|
|
|
|
$this->assertTrue($form_attrs[$k] == $v,
|
|
"Form attr $k is ".$form_attrs[$k]." (expected $v)");
|
|
}
|
|
|
|
// Check hidden fields against post args
|
|
$hiddens = array();
|
|
$input_elements = $parser->evalXPath('input', $form);
|
|
foreach ($input_elements as $e) {
|
|
$attrs = $parser->attributes($e);
|
|
if (strtoupper($attrs['type']) == 'HIDDEN') {
|
|
$hiddens[] = $e;
|
|
}
|
|
}
|
|
|
|
// For each post arg, make sure there is a hidden with that
|
|
// value. Make sure there are no other hiddens.
|
|
$postargs = $message_->toPostArgs();
|
|
foreach ($postargs as $name => $value) {
|
|
$found = false;
|
|
|
|
foreach ($hiddens as $e) {
|
|
$attrs = $parser->attributes($e);
|
|
if ($attrs['name'] == $name) {
|
|
$this->assertTrue($attrs['value'] == $value);
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!$found) {
|
|
$this->fail("Post arg $name not found in form");
|
|
}
|
|
}
|
|
|
|
$keys = array_keys($postargs);
|
|
foreach ($hiddens as $e) {
|
|
$attrs = $parser->attributes($e);
|
|
$this->assertTrue(in_array($attrs['name'], $keys));
|
|
}
|
|
|
|
// Check action URL
|
|
$this->assertTrue($form_attrs['action'] == $action_url);
|
|
|
|
// Check submit text
|
|
$submits = array();
|
|
foreach ($input_elements as $e) {
|
|
$attrs = $parser->attributes($e);
|
|
if (strtoupper($attrs['type']) == 'SUBMIT') {
|
|
$submits[] = $e;
|
|
}
|
|
}
|
|
|
|
$this->assertTrue(count($submits) == 1);
|
|
|
|
$attrs = $parser->attributes($submits[0]);
|
|
$this->assertTrue($attrs['value'] == $submit_text);
|
|
}
|
|
|
|
function test_toFormMarkup()
|
|
{
|
|
$m = Auth_OpenID_Message::fromPostArgs($this->postargs);
|
|
$html = $m->toFormMarkup($this->action_url, $this->form_tag_attrs,
|
|
$this->submit_text);
|
|
$this->_checkForm($html, $m, $this->action_url,
|
|
$this->form_tag_attrs, $this->submit_text);
|
|
}
|
|
|
|
function test_overrideMethod()
|
|
{
|
|
// Be sure that caller cannot change form method to GET.
|
|
$m = Auth_OpenID_Message::fromPostArgs($this->postargs);
|
|
|
|
$tag_attrs = $this->form_tag_attrs;
|
|
$tag_attrs['method'] = 'GET';
|
|
|
|
$html = $m->toFormMarkup($this->action_url, $this->form_tag_attrs,
|
|
$this->submit_text);
|
|
$this->_checkForm($html, $m, $this->action_url,
|
|
$this->form_tag_attrs, $this->submit_text);
|
|
}
|
|
|
|
function test_overrideRequired()
|
|
{
|
|
// Be sure that caller CANNOT change the form charset for
|
|
// encoding type.
|
|
$m = Auth_OpenID_Message::fromPostArgs($this->postargs);
|
|
|
|
$tag_attrs = $this->form_tag_attrs;
|
|
$tag_attrs['accept-charset'] = 'UCS4';
|
|
$tag_attrs['enctype'] = 'invalid/x-broken';
|
|
|
|
$html = $m->toFormMarkup($this->action_url, $tag_attrs,
|
|
$this->submit_text);
|
|
$this->_checkForm($html, $m, $this->action_url,
|
|
$tag_attrs, $this->submit_text);
|
|
}
|
|
|
|
function test_setOpenIDNamespace_invalid()
|
|
{
|
|
$m = new Auth_OpenID_Message();
|
|
$invalid_things = array(
|
|
// Empty string is not okay here.
|
|
'',
|
|
// Good guess! But wrong.
|
|
'http://openid.net/signon/2.0',
|
|
// What?
|
|
'http://specs%\\\r2Eopenid.net/auth/2.0',
|
|
// Too much escapings!
|
|
'http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0',
|
|
// This is a Type URI, not a openid.ns value.
|
|
'http://specs.openid.net/auth/2.0/signon',
|
|
);
|
|
|
|
foreach ($invalid_things as $x) {
|
|
$this->assertTrue($m->setOpenIDNamespace($x, true) === false);
|
|
}
|
|
}
|
|
|
|
function test_isOpenID1()
|
|
{
|
|
$v1_namespaces = array(
|
|
// Yes, there are two of them.
|
|
'http://openid.net/signon/1.1',
|
|
'http://openid.net/signon/1.0',
|
|
);
|
|
|
|
foreach ($v1_namespaces as $ns) {
|
|
$m = new Auth_OpenID_Message($ns);
|
|
$this->assertTrue($m->isOpenID1(),
|
|
"$ns not recognized as OpenID 1");
|
|
$this->assertEquals($ns, $m->getOpenIDNamespace());
|
|
$this->assertTrue($m->namespaces->isImplicit($ns));
|
|
}
|
|
}
|
|
|
|
function test_isOpenID2()
|
|
{
|
|
$ns = 'http://specs.openid.net/auth/2.0';
|
|
$m = new Auth_OpenID_Message($ns);
|
|
$this->assertTrue($m->isOpenID2());
|
|
$this->assertFalse(
|
|
$m->namespaces->isImplicit(Auth_OpenID_NULL_NAMESPACE));
|
|
$this->assertEquals($ns, $m->getOpenIDNamespace());
|
|
}
|
|
|
|
function test_setOpenIDNamespace_explicit()
|
|
{
|
|
$m = new Auth_OpenID_Message();
|
|
$m->setOpenIDNamespace(Auth_OpenID_THE_OTHER_OPENID1_NS, false);
|
|
$this->assertFalse($m->namespaces->isImplicit(
|
|
Auth_OpenID_THE_OTHER_OPENID1_NS));
|
|
}
|
|
|
|
function test_setOpenIDNamespace_implicit()
|
|
{
|
|
$m = new Auth_OpenID_Message();
|
|
$m->setOpenIDNamespace(Auth_OpenID_THE_OTHER_OPENID1_NS, true);
|
|
$this->assertTrue(
|
|
$m->namespaces->isImplicit(Auth_OpenID_THE_OTHER_OPENID1_NS));
|
|
}
|
|
|
|
|
|
function test_explicitOpenID11NSSerialzation()
|
|
{
|
|
$m = new Auth_OpenID_Message();
|
|
$m->setOpenIDNamespace(Auth_OpenID_THE_OTHER_OPENID1_NS, false);
|
|
|
|
$post_args = $m->toPostArgs();
|
|
$this->assertEquals($post_args,
|
|
array('openid.ns' =>
|
|
Auth_OpenID_THE_OTHER_OPENID1_NS));
|
|
}
|
|
|
|
function test_fromPostArgs_ns11()
|
|
{
|
|
// An example of the stuff that some Drupal installations send us,
|
|
// which includes openid.ns but is 1.1.
|
|
$query = array(
|
|
'openid.assoc_handle' => '',
|
|
'openid.claimed_id' => 'http://foobar.invalid/',
|
|
'openid.identity' => 'http://foobar.myopenid.com',
|
|
'openid.mode' => 'checkid_setup',
|
|
'openid.ns' => 'http://openid.net/signon/1.1',
|
|
'openid.ns.sreg' => 'http://openid.net/extensions/sreg/1.1',
|
|
'openid.return_to' => 'http://drupal.invalid/return_to',
|
|
'openid.sreg.required' => 'nickname,email',
|
|
'openid.trust_root' => 'http://drupal.invalid',
|
|
);
|
|
$m = Auth_OpenID_Message::fromPostArgs($query);
|
|
$this->assertTrue($m->isOpenID1());
|
|
}
|
|
}
|
|
|
|
class Tests_Auth_OpenID_NamespaceMap extends PHPUnit_Framework_TestCase {
|
|
function test_onealias()
|
|
{
|
|
$nsm = new Auth_OpenID_NamespaceMap();
|
|
$uri = 'http://example.com/foo';
|
|
$alias = "foo";
|
|
$nsm->addAlias($uri, $alias);
|
|
$this->assertTrue($nsm->getNamespaceURI($alias) == $uri);
|
|
$this->assertTrue($nsm->getAlias($uri) == $alias);
|
|
}
|
|
|
|
function test_iteration()
|
|
{
|
|
$nsm = new Auth_OpenID_NamespaceMap();
|
|
$uripat = 'http://example.com/foo%d';
|
|
|
|
$nsm->add(sprintf($uripat, 0));
|
|
|
|
for ($n = 1; $n < 23; $n++) {
|
|
$this->assertTrue($nsm->contains(sprintf($uripat, $n - 1)));
|
|
$this->assertTrue($nsm->isDefined(sprintf($uripat, $n - 1)));
|
|
$nsm->add(sprintf($uripat, $n));
|
|
}
|
|
|
|
foreach ($nsm->iteritems() as $pair) {
|
|
list($uri, $alias) = $pair;
|
|
$this->assertTrue('ext'.substr($uri, 22) == $alias);
|
|
}
|
|
|
|
$it = $nsm->iterAliases();
|
|
$this->assertTrue(count($it) == 23);
|
|
|
|
$it = $nsm->iterNamespaceURIs();
|
|
$this->assertTrue(count($it) == 23);
|
|
}
|
|
}
|
|
|
|
class Tests_Auth_OpenID_Message extends PHPUnit_Framework_TestCase {
|
|
}
|
|
|
|
global $Tests_Auth_OpenID_Message_other;
|
|
$Tests_Auth_OpenID_Message_other = array(
|
|
new Tests_Auth_OpenID_EmptyMessage(),
|
|
new Tests_Auth_OpenID_OpenID1Message(),
|
|
new Tests_Auth_OpenID_OpenID2Message(),
|
|
new Tests_Auth_OpenID_NamespaceMap(),
|
|
new Tests_Auth_OpenID_OpenID1ExplicitMessage(),
|
|
new Tests_Auth_OpenID_GeneralMessageTest()
|
|
);
|
|
|
|
|