1<?php 2 3require_once "Auth/Yadis/Yadis.php"; 4require_once "Tests/Auth/Yadis/TestUtil.php"; 5 6global $testlist; 7$testlist = [ 8// success, input_name, id_name, result_name 9 [true, "equiv", "equiv", "xrds"], 10 [true, "header", "header", "xrds"], 11 [true, "lowercase_header", "lowercase_header", "xrds"], 12 [true, "xrds", "xrds", "xrds"], 13 [true, "xrds_ctparam", "xrds_ctparam", "xrds_ctparam"], 14 [true, "xrds_ctcase", "xrds_ctcase", "xrds_ctcase"], 15 [false, "xrds_html", "xrds_html", "xrds_html"], 16 [true, "redir_equiv", "equiv", "xrds"], 17 [true, "redir_header", "header", "xrds"], 18 [true, "redir_xrds", "xrds", "xrds"], 19 [false, "redir_xrds_html", "xrds_html", "xrds_html"], 20 [true, "redir_redir_equiv", "equiv", "xrds"], 21 [false, "404_server_response", null, null], 22 [false, "404_with_header", null, null], 23 [false, "404_with_meta", null, null], 24 [false, "201_server_response", null, null], 25 [false, "500_server_response", null, null], 26]; 27 28function getExampleXRDS() 29{ 30 return Tests_Auth_Yadis_readdata('example-xrds.xml'); 31} 32 33global $example_xrds; 34$example_xrds = getExampleXRDS(); 35 36global $default_test_file; 37$default_test_file = 'test1-discover.txt'; 38 39global $discover_tests; 40$discover_tests = []; 41 42function readTests($filename) 43{ 44 $data = Tests_Auth_Yadis_readdata($filename); 45 46 if ($data === null) { 47 return null; 48 } 49 50 $tests = []; 51 foreach (preg_split("/\f\n/", $data) as $case) { 52 list($name, $content) = explode("\n", $case, 2); 53 $tests[$name] = $content; 54 } 55 return $tests; 56} 57 58function getData($filename, $name) 59{ 60 global $discover_tests; 61 if (!array_key_exists($filename, $discover_tests)) { 62 $data = readTests($filename); 63 if ($data === null) { 64 return null; 65 } 66 $discover_tests[$filename] = $data; 67 } 68 69 $file_tests = $discover_tests[$filename]; 70 71 if (array_key_exists($name, $file_tests)) { 72 return $file_tests[$name]; 73 } else { 74 return null; 75 } 76} 77 78function fillTemplate($test_name, $template, $base_url, $example_xrds) 79{ 80 $mapping = [ 81 ['URL_BASE/', $base_url], 82 ['<XRDS Content>', $example_xrds], 83 ['YADIS_HEADER', 'X-XRDS-Location'], 84 ['NAME', $test_name], 85 ]; 86 87 foreach ($mapping as $pair) { 88 list($k, $v) = $pair; 89 $template = str_replace($k, $v, $template); 90 } 91 92 return $template; 93} 94 95function generateSample($test_name, $base_url, 96 $_example_xrds = null, $filename = null) 97{ 98 global $example_xrds, $default_test_file; 99 100 if ($_example_xrds === null) { 101 $_example_xrds = $example_xrds; 102 } 103 104 if ($filename === null) { 105 $filename = $default_test_file; 106 } 107 108 $template = getData($filename, $test_name); 109 110 if ($template === null) { 111 return null; 112 } 113 114 return fillTemplate($test_name, $template, $base_url, $_example_xrds); 115} 116 117function generateResult($base_url, $input_name, $id_name, $result_name, $success) 118{ 119 $input_url = $base_url . $input_name; // urlparse.urljoin(base_url, input_name) 120 121 // If the name is null then we expect the protocol to fail, which 122 // we represent by null 123 if ($id_name === null) { 124 // assert result_name is null 125 return [$input_url, null]; // DiscoveryFailure 126 } 127 128 $result = generateSample($result_name, $base_url); 129 list($headers, $content) = explode("\n\n", $result, 2); 130 $header_lines = explode("\n", $headers); 131 $ctype = null; 132 foreach ($header_lines as $header_line) { 133 if (strpos($header_line, 'Content-Type:') === 0) { 134 list($temp, $ctype) = explode(":", $header_line, 2); 135 $ctype = trim($ctype); 136 break; 137 } 138 } 139 140 $id_url = $base_url . $id_name; 141 142 $result = new Auth_Yadis_Yadis(); 143 $result->uri = $id_url; 144 if ($success) { 145 $result->xrds_uri = $base_url . $result_name; 146 } else { 147 $result->xrds_uri = null; 148 } 149 $result->content_type = $ctype; 150 $result->body = $content; 151 return [$input_url, $result]; 152} 153 154