forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			248 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			248 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * XRDS-parsing tests for the Yadis library.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								require_once 'Auth/Yadis/XRDS.php';
							 | 
						||
| 
								 | 
							
								require_once 'Auth/Yadis/XRIRes.php';
							 | 
						||
| 
								 | 
							
								require_once 'Auth/Yadis/XRI.php';
							 | 
						||
| 
								 | 
							
								require_once 'Tests/Auth/Yadis/TestUtil.php';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Tests_Auth_Yadis_XRDS extends PHPUnit_Framework_TestCase {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function test_good()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $files = array(
							 | 
						||
| 
								 | 
							
								                       'brian.xrds' => 1,
							 | 
						||
| 
								 | 
							
								                       'pip.xrds' => 2
							 | 
						||
| 
								 | 
							
								                       );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        foreach ($files as $filename => $service_count) {
							 | 
						||
| 
								 | 
							
								            $xml = Tests_Auth_Yadis_readdata($filename);
							 | 
						||
| 
								 | 
							
								            $xrds = Auth_Yadis_XRDS::parseXRDS($xml);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            $this->assertTrue($xrds !== null);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if ($xrds) {
							 | 
						||
| 
								 | 
							
								                $this->assertEquals(count($xrds->services()), $service_count);
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                $this->fail("Could not test XRDS service list because the ".
							 | 
						||
| 
								 | 
							
								                            "XRDS object is null");
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function test_good_multi()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $xml = Tests_Auth_Yadis_readdata("brian.multi.xrds");
							 | 
						||
| 
								 | 
							
								        $xrds = Auth_Yadis_XRDS::parseXRDS($xml);
							 | 
						||
| 
								 | 
							
								        $this->assertTrue($xrds !== null);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(count($xrds->services()), 1);
							 | 
						||
| 
								 | 
							
								        $s = $xrds->services();
							 | 
						||
| 
								 | 
							
								        $s = $s[0];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $types = $s->getTypes();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(count($types) == 1);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals('http://openid.net/signon/1.0',
							 | 
						||
| 
								 | 
							
								                            $types[0]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function test_good_uri_multi()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $xml = Tests_Auth_Yadis_readdata("brian.multi_uri.xrds");
							 | 
						||
| 
								 | 
							
								        $xrds = Auth_Yadis_XRDS::parseXRDS($xml);
							 | 
						||
| 
								 | 
							
								        $this->assertTrue($xrds !== null);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(1, count($xrds->services()));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function test_uri_sorting()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $xml = Tests_Auth_Yadis_readdata("uri_priority.xrds");
							 | 
						||
| 
								 | 
							
								        $xrds = Auth_Yadis_XRDS::parseXRDS($xml);
							 | 
						||
| 
								 | 
							
								        $services = $xrds->services();
							 | 
						||
| 
								 | 
							
								        $uris = $services[0]->getURIs();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $expected_uris = array(
							 | 
						||
| 
								 | 
							
								                               "http://zero.priority/",
							 | 
						||
| 
								 | 
							
								                               "http://one.priority/",
							 | 
						||
| 
								 | 
							
								                               "http://no.priority/"
							 | 
						||
| 
								 | 
							
								                               );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertEquals($uris, $expected_uris);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function test_bad()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(Auth_Yadis_XRDS::parseXRDS(null) === null);
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(Auth_Yadis_XRDS::parseXRDS(5) === null);
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(Auth_Yadis_XRDS::parseXRDS('') === null);
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(Auth_Yadis_XRDS::parseXRDS('<html></html>') ===
							 | 
						||
| 
								 | 
							
								                          null);
							 | 
						||
| 
								 | 
							
								        $this->assertTrue(Auth_Yadis_XRDS::parseXRDS("\x00") === null);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function test_getCanonicalID()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $canonicalIDtests = array(
							 | 
						||
| 
								 | 
							
								               array("@ootao*test1", "delegated-20060809.xrds",
							 | 
						||
| 
								 | 
							
								                     "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01"),
							 | 
						||
| 
								 | 
							
								               array("@ootao*test1", "delegated-20060809-r1.xrds",
							 | 
						||
| 
								 | 
							
								                     "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01"),
							 | 
						||
| 
								 | 
							
								               array("@ootao*test1", "delegated-20060809-r2.xrds",
							 | 
						||
| 
								 | 
							
								                     "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01"),
							 | 
						||
| 
								 | 
							
								               array("@ootao*test1", "sometimesprefix.xrds",
							 | 
						||
| 
								 | 
							
								                     "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01"),
							 | 
						||
| 
								 | 
							
								               array("@ootao*test1", "prefixsometimes.xrds",
							 | 
						||
| 
								 | 
							
								                     "@!5BAD.2AA.3C72.AF46!0000.0000.3B9A.CA01"),
							 | 
						||
| 
								 | 
							
								               array("=keturn*isDrummond", "spoof1.xrds", null),
							 | 
						||
| 
								 | 
							
								               array("=keturn*isDrummond", "spoof2.xrds", null),
							 | 
						||
| 
								 | 
							
								               array("@keturn*is*drummond", "spoof3.xrds", null),
							 | 
						||
| 
								 | 
							
								               // Don't let IRI authorities be canonical for the GCS.
							 | 
						||
| 
								 | 
							
								               array("phreak.example.com", "delegated-20060809-r2.xrds", null)
							 | 
						||
| 
								 | 
							
								               // TODO: Refs
							 | 
						||
| 
								 | 
							
								               // ("@ootao*test.ref", "ref.xrds", "@!BAE.A650.823B.2475")
							 | 
						||
| 
								 | 
							
								               );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        foreach ($canonicalIDtests as $tupl) {
							 | 
						||
| 
								 | 
							
								            list($iname, $filename, $expectedID) = $tupl;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            $xml = Tests_Auth_Yadis_readdata($filename);
							 | 
						||
| 
								 | 
							
								            $xrds = Auth_Yadis_XRDS::parseXRDS($xml);
							 | 
						||
| 
								 | 
							
								            $this->_getCanonicalID($iname, $xrds, $expectedID);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function _getCanonicalID($iname, $xrds, $expectedID)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if ($expectedID === null) {
							 | 
						||
| 
								 | 
							
								            $result = Auth_Yadis_getCanonicalID($iname, $xrds);
							 | 
						||
| 
								 | 
							
								            if ($result !== false) {
							 | 
						||
| 
								 | 
							
								                $this->fail($iname.' (got '.$result.')');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            $cid = Auth_Yadis_getCanonicalID($iname, $xrds);
							 | 
						||
| 
								 | 
							
								            $this->assertEquals(Auth_Yadis_XRI($expectedID), $cid);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function test_services_filters()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // First, just be sure that service objects do the right
							 | 
						||
| 
								 | 
							
								        // thing.
							 | 
						||
| 
								 | 
							
								        $xml = Tests_Auth_Yadis_readdata("brian_priority.xrds");
							 | 
						||
| 
								 | 
							
								        $xrds = Auth_Yadis_XRDS::parseXRDS($xml,
							 | 
						||
| 
								 | 
							
								                                               array('openid' =>
							 | 
						||
| 
								 | 
							
								                                                     'http://openid.net/xmlns/1.0'));
							 | 
						||
| 
								 | 
							
								        $this->assertTrue($xrds !== null);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Get list of service objects.
							 | 
						||
| 
								 | 
							
								        $services = $xrds->services();
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(count($services), 2, "first service count");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Query the two service objecs.
							 | 
						||
| 
								 | 
							
								        $s1 = $services[0];
							 | 
						||
| 
								 | 
							
								        $this->assertEquals($s1->getPriority(), 1, "first priority check");
							 | 
						||
| 
								 | 
							
								        $types = $s1->getTypes();
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(count($types), 1, "first type check");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $s2 = $services[1];
							 | 
						||
| 
								 | 
							
								        $this->assertEquals($s2->getPriority(), 2, "second priority check");
							 | 
						||
| 
								 | 
							
								        $types = $s2->getTypes();
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(count($types), 1, "second type check");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        function _DelegateFilter($service)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                if ($service->getElements('openid:Delegate')) {
							 | 
						||
| 
								 | 
							
								                    return true;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                return false;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Make sure that a filter which matches both DOES match both.
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(count(
							 | 
						||
| 
								 | 
							
								                              $xrds->services(array("_DelegateFilter"))), 2,
							 | 
						||
| 
								 | 
							
								                            "_DelegateFilter check");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // This filter should match all services in the document.
							 | 
						||
| 
								 | 
							
								        function _HasTypeAndURI($service)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                if ($service->getTypes() &&
							 | 
						||
| 
								 | 
							
								                    $service->getURIs()) {
							 | 
						||
| 
								 | 
							
								                    return true;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                return false;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // This filter should only match one.
							 | 
						||
| 
								 | 
							
								        function _URIMatchesSchtuff($service)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                $uris = $service->getURIs();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                foreach ($uris as $uri) {
							 | 
						||
| 
								 | 
							
								                    if (preg_match("|schtuff|", $uri)) {
							 | 
						||
| 
								 | 
							
								                        return true;
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                return false;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // This filter should only match one.
							 | 
						||
| 
								 | 
							
								        function _URIMatchesMyOpenID($service)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                $uris = $service->getURIs();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                foreach ($uris as $uri) {
							 | 
						||
| 
								 | 
							
								                    if (preg_match("|myopenid|", $uri)) {
							 | 
						||
| 
								 | 
							
								                        return true;
							 | 
						||
| 
								 | 
							
								                    }
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                return false;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Make sure a pair of filters in ALL mode only match one service.
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(count(
							 | 
						||
| 
								 | 
							
								                              $xrds->services(array("_HasTypeAndURI",
							 | 
						||
| 
								 | 
							
								                                                    "_URIMatchesSchtuff"),
							 | 
						||
| 
								 | 
							
								                                              SERVICES_YADIS_MATCH_ALL)), 1,
							 | 
						||
| 
								 | 
							
								                            "_HasTypeAndURI / _URIMatchesSchtuff check");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Make sure a pair of filters in ALL mode only match one service.
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(count(
							 | 
						||
| 
								 | 
							
								                              $xrds->services(array("_HasTypeAndURI",
							 | 
						||
| 
								 | 
							
								                                                    "_URIMatchesMyOpenID"),
							 | 
						||
| 
								 | 
							
								                                              SERVICES_YADIS_MATCH_ALL)), 1,
							 | 
						||
| 
								 | 
							
								                            "_HasTypeAndURI / _URIMatchesMyOpenID check");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Make sure a pair of filters in ANY mode matches both services.
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(count(
							 | 
						||
| 
								 | 
							
								                              $xrds->services(array("_URIMatchesMyOpenID",
							 | 
						||
| 
								 | 
							
								                                                    "_URIMatchesSchtuff"))), 2,
							 | 
						||
| 
								 | 
							
								                            "_URIMatchesMyOpenID / _URIMatchesSchtuff check");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Make sure the order of the services returned (when using
							 | 
						||
| 
								 | 
							
								        // filters) is correct.
							 | 
						||
| 
								 | 
							
								        $s = $xrds->services(array("_URIMatchesMyOpenID",
							 | 
						||
| 
								 | 
							
								                                   "_URIMatchesSchtuff"));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertTrue($s[0]->getPriority() === 1, "s[0] priority check");
							 | 
						||
| 
								 | 
							
								        $this->assertTrue($s[1]->getPriority() === 2, "s[1] priority check");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Make sure a bad filter mode gets us a null service list.
							 | 
						||
| 
								 | 
							
								        $this->assertTrue($xrds->services(array("_URIMatchesMyOpenID",
							 | 
						||
| 
								 | 
							
								                                                "_URIMatchesSchtuff"),
							 | 
						||
| 
								 | 
							
								                                          "bogus") === null,
							 | 
						||
| 
								 | 
							
								                          "bogus filter check");
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function test_multisegment_xri()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $xml = Tests_Auth_Yadis_readdata('subsegments.xrds');
							 | 
						||
| 
								 | 
							
								        $xmldoc = Auth_Yadis_XRDS::parseXRDS($xml);
							 | 
						||
| 
								 | 
							
								        $result = Auth_Yadis_getCanonicalId('xri://=nishitani*masaki', $xmldoc);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals($result, "xri://=!E117.EF2F.454B.C707!0000.0000.3B9A.CA01");
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 |