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('') === 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"); } }