123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- <?php
- /**
- * Tests for the combination of Yadis discovery and the OpenID
- * protocol.
- */
- require_once "Auth/Yadis/XRDS.php";
- require_once "Auth/OpenID/Discover.php";
- global $__XRDS_BOILERPLATE;
- $__XRDS_BOILERPLATE = '<?xml version="1.0" encoding="UTF-8"?>
- <xrds:XRDS xmlns:xrds="xri://$xrds"
- xmlns="xri://$xrd*($v*2.0)"
- xmlns:openid="http://openid.net/xmlns/1.0">
- <XRD>
- %s
- </XRD>
- </xrds:XRDS>
- ';
- // Different sets of server URLs for use in the URI tag
- global $__server_url_options;
- $__server_url_options = array(
- array(), // This case should not generate an endpoint object
- array('http://server.url/'),
- array('https://server.url/'),
- array('https://server.url/', 'http://server.url/'),
- array('https://server.url/',
- 'http://server.url/',
- 'http://example.server.url/'),
- );
- // A couple of example extension type URIs. These are not at all
- // official, but are just here for testing.
- global $__ext_types;
- $__ext_types = array(
- 'http://janrain.com/extension/blah',
- 'http://openid.net/sreg/1.0');
- // All valid combinations of Type tags that should produce an OpenID
- // endpoint
- global $__openid_types;
- $__openid_types = array(
- Auth_OpenID_TYPE_1_0,
- Auth_OpenID_TYPE_1_1);
- $temp = array();
- foreach (__subsets($__ext_types) as $exts) {
- foreach (__subsets($__openid_types) as $ts) {
- if ($ts) {
- $temp[] = array_merge($exts, $ts);
- }
- }
- }
- global $__type_uri_options;
- $__type_uri_options = $temp;
- // Range of valid Delegate tag values for generating test data
- global $__delegate_options;
- $__delegate_options = array(
- null,
- 'http://vanity.domain/',
- 'https://somewhere/yadis/');
- $temp = array();
- foreach ($__delegate_options as $delegate) {
- foreach ($__type_uri_options as $type_uris) {
- foreach ($__server_url_options as $uris) {
- $temp[] = array($uris, $type_uris, $delegate);
- }
- }
- }
- // All combinations of valid URIs, Type URIs and Delegate tags
- global $__data;
- $__data = $temp;
- function _mkXRDS($services_str)
- {
- global $__XRDS_BOILERPLATE;
- return sprintf($__XRDS_BOILERPLATE, $services_str);
- }
- function _mkService($uris = null, $type_uris = null,
- $delegate = null, $dent = ' ')
- {
- $chunks = array($dent, "<Service>\n");
- $dent2 = $dent . ' ';
- if ($type_uris) {
- foreach ($type_uris as $type_uri) {
- $chunks = array_merge($chunks,
- array($dent2 . '<Type>',
- $type_uri, "</Type>\n"));
- }
- }
- if ($uris) {
- foreach ($uris as $uri) {
- if (is_array($uri)) {
- list($uri, $prio) = $uri;
- } else {
- $prio = null;
- }
- $chunks = array_merge($chunks, array($dent2, '<URI'));
- if ($prio !== null) {
- $chunks = array_merge($chunks, array(' priority="', strval($prio), '"'));
- }
- $chunks = array_merge($chunks, array('>', $uri, "</URI>\n"));
- }
- }
- if ($delegate) {
- $chunks = array_merge($chunks,
- array($dent2, '<openid:Delegate>',
- $delegate, "</openid:Delegate>\n"));
- }
- $chunks = array_merge($chunks, array($dent, "</Service>\n"));
- return implode("", $chunks);
- }
- // Used for generating test data
- function __subsets($list)
- {
- // Generate all non-empty sublists of a list
- $subsets_list = array(array());
- foreach ($list as $elem) {
- $temp = array();
- foreach ($subsets_list as $t) {
- $temp[] = array_merge(array($elem), $t);
- }
- $subsets_list = array_merge($subsets_list, $temp);
- }
- return $subsets_list;
- }
- class Tests_Auth_OpenID_Tester extends PHPUnit_Framework_TestCase {
- function Tests_Auth_OpenID_Tester($uris, $type_uris, $delegate)
- {
- parent::__construct();
- $this->uris = $uris;
- $this->type_uris = $type_uris;
- $this->local_id = $delegate;
- }
- function setUp()
- {
- $this->yadis_url = 'http://unit.test/';
- // Create an XRDS document to parse
- $services = _mkService($this->uris,
- $this->type_uris,
- $this->local_id);
- $this->xrds = _mkXRDS($services);
- }
- function runTest()
- {
- // Parse into endpoint objects that we will check
- $xrds_object = Auth_Yadis_XRDS::parseXRDS($this->xrds);
- $endpoints = array();
- if ($xrds_object) {
- $endpoints = $xrds_object->services(array('filter_MatchesAnyOpenIDType'));
- $endpoints = Auth_OpenID_makeOpenIDEndpoints($this->yadis_url, $endpoints);
- }
- // make sure there are the same number of endpoints as
- // URIs. This assumes that the type_uris contains at least one
- // OpenID type.
- $this->assertEquals(count($this->uris), count($endpoints),
- "URI <-> Endpoint count");
- // So that we can check equality on the endpoint types
- $type_uris = $this->type_uris;
- sort($type_uris);
- $seen_uris = array();
- foreach ($endpoints as $endpoint) {
- $seen_uris[] = $endpoint->server_url;
- // All endpoints will have same yadis_url
- $this->assertEquals($this->yadis_url, $endpoint->claimed_id);
- // and delegate
- $this->assertEquals($this->local_id, $endpoint->local_id);
- // and types
- $actual_types = $endpoint->type_uris;
- sort($actual_types);
- $this->assertEquals($actual_types, $type_uris);
- }
- // So that they will compare equal, because we don't care what
- // order they are in
- sort($seen_uris);
- $uris = $this->uris;
- sort($uris);
- // Make sure we saw all URIs, and saw each one once
- $this->assertEquals($uris, $seen_uris);
- }
- }
- class Tests_Auth_OpenID_OpenID_Yadis extends PHPUnit_Framework_TestSuite {
- function Tests_Auth_OpenID_OpenID_Yadis()
- {
- global $__data;
- foreach ($__data as $case) {
- $this->addTest(new Tests_Auth_OpenID_Tester($case[0], $case[1], $case[2]));
- }
- }
- function getName()
- {
- return 'Tests_Auth_OpenID_OpenID_Yadis';
- }
- }
|