annotate vendor/symfony/phpunit-bridge/DnsMock.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of the Symfony package.
Chris@0 5 *
Chris@0 6 * (c) Fabien Potencier <fabien@symfony.com>
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Symfony\Bridge\PhpUnit;
Chris@0 13
Chris@0 14 /**
Chris@0 15 * @author Nicolas Grekas <p@tchwork.com>
Chris@0 16 */
Chris@0 17 class DnsMock
Chris@0 18 {
Chris@0 19 private static $hosts = array();
Chris@0 20 private static $dnsTypes = array(
Chris@0 21 'A' => DNS_A,
Chris@0 22 'MX' => DNS_MX,
Chris@0 23 'NS' => DNS_NS,
Chris@0 24 'SOA' => DNS_SOA,
Chris@0 25 'PTR' => DNS_PTR,
Chris@0 26 'CNAME' => DNS_CNAME,
Chris@0 27 'AAAA' => DNS_AAAA,
Chris@0 28 'A6' => DNS_A6,
Chris@0 29 'SRV' => DNS_SRV,
Chris@0 30 'NAPTR' => DNS_NAPTR,
Chris@0 31 'TXT' => DNS_TXT,
Chris@0 32 'HINFO' => DNS_HINFO,
Chris@0 33 );
Chris@0 34
Chris@0 35 /**
Chris@0 36 * Configures the mock values for DNS queries.
Chris@0 37 *
Chris@0 38 * @param array $hosts Mocked hosts as keys, arrays of DNS records as returned by dns_get_record() as values
Chris@0 39 */
Chris@0 40 public static function withMockedHosts(array $hosts)
Chris@0 41 {
Chris@0 42 self::$hosts = $hosts;
Chris@0 43 }
Chris@0 44
Chris@0 45 public static function checkdnsrr($hostname, $type = 'MX')
Chris@0 46 {
Chris@0 47 if (!self::$hosts) {
Chris@0 48 return \checkdnsrr($hostname, $type);
Chris@0 49 }
Chris@0 50 if (isset(self::$hosts[$hostname])) {
Chris@0 51 $type = strtoupper($type);
Chris@0 52
Chris@0 53 foreach (self::$hosts[$hostname] as $record) {
Chris@0 54 if ($record['type'] === $type) {
Chris@0 55 return true;
Chris@0 56 }
Chris@0 57 if ('ANY' === $type && isset(self::$dnsTypes[$record['type']]) && 'HINFO' !== $record['type']) {
Chris@0 58 return true;
Chris@0 59 }
Chris@0 60 }
Chris@0 61 }
Chris@0 62
Chris@0 63 return false;
Chris@0 64 }
Chris@0 65
Chris@0 66 public static function getmxrr($hostname, &$mxhosts, &$weight = null)
Chris@0 67 {
Chris@0 68 if (!self::$hosts) {
Chris@0 69 return \getmxrr($hostname, $mxhosts, $weight);
Chris@0 70 }
Chris@0 71 $mxhosts = $weight = array();
Chris@0 72
Chris@0 73 if (isset(self::$hosts[$hostname])) {
Chris@0 74 foreach (self::$hosts[$hostname] as $record) {
Chris@0 75 if ('MX' === $record['type']) {
Chris@0 76 $mxhosts[] = $record['host'];
Chris@0 77 $weight[] = $record['pri'];
Chris@0 78 }
Chris@0 79 }
Chris@0 80 }
Chris@0 81
Chris@0 82 return (bool) $mxhosts;
Chris@0 83 }
Chris@0 84
Chris@0 85 public static function gethostbyaddr($ipAddress)
Chris@0 86 {
Chris@0 87 if (!self::$hosts) {
Chris@0 88 return \gethostbyaddr($ipAddress);
Chris@0 89 }
Chris@0 90 foreach (self::$hosts as $hostname => $records) {
Chris@0 91 foreach ($records as $record) {
Chris@0 92 if ('A' === $record['type'] && $ipAddress === $record['ip']) {
Chris@0 93 return $hostname;
Chris@0 94 }
Chris@0 95 if ('AAAA' === $record['type'] && $ipAddress === $record['ipv6']) {
Chris@0 96 return $hostname;
Chris@0 97 }
Chris@0 98 }
Chris@0 99 }
Chris@0 100
Chris@0 101 return $ipAddress;
Chris@0 102 }
Chris@0 103
Chris@0 104 public static function gethostbyname($hostname)
Chris@0 105 {
Chris@0 106 if (!self::$hosts) {
Chris@0 107 return \gethostbyname($hostname);
Chris@0 108 }
Chris@0 109 if (isset(self::$hosts[$hostname])) {
Chris@0 110 foreach (self::$hosts[$hostname] as $record) {
Chris@0 111 if ('A' === $record['type']) {
Chris@0 112 return $record['ip'];
Chris@0 113 }
Chris@0 114 }
Chris@0 115 }
Chris@0 116
Chris@0 117 return $hostname;
Chris@0 118 }
Chris@0 119
Chris@0 120 public static function gethostbynamel($hostname)
Chris@0 121 {
Chris@0 122 if (!self::$hosts) {
Chris@0 123 return \gethostbynamel($hostname);
Chris@0 124 }
Chris@0 125 $ips = false;
Chris@0 126
Chris@0 127 if (isset(self::$hosts[$hostname])) {
Chris@0 128 $ips = array();
Chris@0 129
Chris@0 130 foreach (self::$hosts[$hostname] as $record) {
Chris@0 131 if ('A' === $record['type']) {
Chris@0 132 $ips[] = $record['ip'];
Chris@0 133 }
Chris@0 134 }
Chris@0 135 }
Chris@0 136
Chris@0 137 return $ips;
Chris@0 138 }
Chris@0 139
Chris@0 140 public static function dns_get_record($hostname, $type = DNS_ANY, &$authns = null, &$addtl = null, $raw = false)
Chris@0 141 {
Chris@0 142 if (!self::$hosts) {
Chris@0 143 return \dns_get_record($hostname, $type, $authns, $addtl, $raw);
Chris@0 144 }
Chris@0 145
Chris@0 146 $records = false;
Chris@0 147
Chris@0 148 if (isset(self::$hosts[$hostname])) {
Chris@0 149 if (DNS_ANY === $type) {
Chris@0 150 $type = DNS_ALL;
Chris@0 151 }
Chris@0 152 $records = array();
Chris@0 153
Chris@0 154 foreach (self::$hosts[$hostname] as $record) {
Chris@0 155 if (isset(self::$dnsTypes[$record['type']]) && (self::$dnsTypes[$record['type']] & $type)) {
Chris@0 156 $records[] = array_merge(array('host' => $hostname, 'class' => 'IN', 'ttl' => 1, 'type' => $record['type']), $record);
Chris@0 157 }
Chris@0 158 }
Chris@0 159 }
Chris@0 160
Chris@0 161 return $records;
Chris@0 162 }
Chris@0 163
Chris@0 164 public static function register($class)
Chris@0 165 {
Chris@17 166 $self = \get_called_class();
Chris@0 167
Chris@0 168 $mockedNs = array(substr($class, 0, strrpos($class, '\\')));
Chris@0 169 if (0 < strpos($class, '\\Tests\\')) {
Chris@0 170 $ns = str_replace('\\Tests\\', '\\', $class);
Chris@0 171 $mockedNs[] = substr($ns, 0, strrpos($ns, '\\'));
Chris@0 172 } elseif (0 === strpos($class, 'Tests\\')) {
Chris@0 173 $mockedNs[] = substr($class, 6, strrpos($class, '\\') - 6);
Chris@0 174 }
Chris@0 175 foreach ($mockedNs as $ns) {
Chris@17 176 if (\function_exists($ns.'\checkdnsrr')) {
Chris@0 177 continue;
Chris@0 178 }
Chris@0 179 eval(<<<EOPHP
Chris@0 180 namespace $ns;
Chris@0 181
Chris@0 182 function checkdnsrr(\$host, \$type = 'MX')
Chris@0 183 {
Chris@0 184 return \\$self::checkdnsrr(\$host, \$type);
Chris@0 185 }
Chris@0 186
Chris@0 187 function dns_check_record(\$host, \$type = 'MX')
Chris@0 188 {
Chris@0 189 return \\$self::checkdnsrr(\$host, \$type);
Chris@0 190 }
Chris@0 191
Chris@0 192 function getmxrr(\$hostname, &\$mxhosts, &\$weight = null)
Chris@0 193 {
Chris@0 194 return \\$self::getmxrr(\$hostname, \$mxhosts, \$weight);
Chris@0 195 }
Chris@0 196
Chris@0 197 function dns_get_mx(\$hostname, &\$mxhosts, &\$weight = null)
Chris@0 198 {
Chris@0 199 return \\$self::getmxrr(\$hostname, \$mxhosts, \$weight);
Chris@0 200 }
Chris@0 201
Chris@0 202 function gethostbyaddr(\$ipAddress)
Chris@0 203 {
Chris@0 204 return \\$self::gethostbyaddr(\$ipAddress);
Chris@0 205 }
Chris@0 206
Chris@0 207 function gethostbyname(\$hostname)
Chris@0 208 {
Chris@0 209 return \\$self::gethostbyname(\$hostname);
Chris@0 210 }
Chris@0 211
Chris@0 212 function gethostbynamel(\$hostname)
Chris@0 213 {
Chris@0 214 return \\$self::gethostbynamel(\$hostname);
Chris@0 215 }
Chris@0 216
Chris@0 217 function dns_get_record(\$hostname, \$type = DNS_ANY, &\$authns = null, &\$addtl = null, \$raw = false)
Chris@0 218 {
Chris@0 219 return \\$self::dns_get_record(\$hostname, \$type, \$authns, \$addtl, \$raw);
Chris@0 220 }
Chris@0 221
Chris@0 222 EOPHP
Chris@0 223 );
Chris@0 224 }
Chris@0 225 }
Chris@0 226 }