Mercurial > hg > isophonics-drupal-site
diff vendor/symfony/phpunit-bridge/DnsMock.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/symfony/phpunit-bridge/DnsMock.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,226 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bridge\PhpUnit; + +/** + * @author Nicolas Grekas <p@tchwork.com> + */ +class DnsMock +{ + private static $hosts = array(); + private static $dnsTypes = array( + 'A' => DNS_A, + 'MX' => DNS_MX, + 'NS' => DNS_NS, + 'SOA' => DNS_SOA, + 'PTR' => DNS_PTR, + 'CNAME' => DNS_CNAME, + 'AAAA' => DNS_AAAA, + 'A6' => DNS_A6, + 'SRV' => DNS_SRV, + 'NAPTR' => DNS_NAPTR, + 'TXT' => DNS_TXT, + 'HINFO' => DNS_HINFO, + ); + + /** + * Configures the mock values for DNS queries. + * + * @param array $hosts Mocked hosts as keys, arrays of DNS records as returned by dns_get_record() as values + */ + public static function withMockedHosts(array $hosts) + { + self::$hosts = $hosts; + } + + public static function checkdnsrr($hostname, $type = 'MX') + { + if (!self::$hosts) { + return \checkdnsrr($hostname, $type); + } + if (isset(self::$hosts[$hostname])) { + $type = strtoupper($type); + + foreach (self::$hosts[$hostname] as $record) { + if ($record['type'] === $type) { + return true; + } + if ('ANY' === $type && isset(self::$dnsTypes[$record['type']]) && 'HINFO' !== $record['type']) { + return true; + } + } + } + + return false; + } + + public static function getmxrr($hostname, &$mxhosts, &$weight = null) + { + if (!self::$hosts) { + return \getmxrr($hostname, $mxhosts, $weight); + } + $mxhosts = $weight = array(); + + if (isset(self::$hosts[$hostname])) { + foreach (self::$hosts[$hostname] as $record) { + if ('MX' === $record['type']) { + $mxhosts[] = $record['host']; + $weight[] = $record['pri']; + } + } + } + + return (bool) $mxhosts; + } + + public static function gethostbyaddr($ipAddress) + { + if (!self::$hosts) { + return \gethostbyaddr($ipAddress); + } + foreach (self::$hosts as $hostname => $records) { + foreach ($records as $record) { + if ('A' === $record['type'] && $ipAddress === $record['ip']) { + return $hostname; + } + if ('AAAA' === $record['type'] && $ipAddress === $record['ipv6']) { + return $hostname; + } + } + } + + return $ipAddress; + } + + public static function gethostbyname($hostname) + { + if (!self::$hosts) { + return \gethostbyname($hostname); + } + if (isset(self::$hosts[$hostname])) { + foreach (self::$hosts[$hostname] as $record) { + if ('A' === $record['type']) { + return $record['ip']; + } + } + } + + return $hostname; + } + + public static function gethostbynamel($hostname) + { + if (!self::$hosts) { + return \gethostbynamel($hostname); + } + $ips = false; + + if (isset(self::$hosts[$hostname])) { + $ips = array(); + + foreach (self::$hosts[$hostname] as $record) { + if ('A' === $record['type']) { + $ips[] = $record['ip']; + } + } + } + + return $ips; + } + + public static function dns_get_record($hostname, $type = DNS_ANY, &$authns = null, &$addtl = null, $raw = false) + { + if (!self::$hosts) { + return \dns_get_record($hostname, $type, $authns, $addtl, $raw); + } + + $records = false; + + if (isset(self::$hosts[$hostname])) { + if (DNS_ANY === $type) { + $type = DNS_ALL; + } + $records = array(); + + foreach (self::$hosts[$hostname] as $record) { + if (isset(self::$dnsTypes[$record['type']]) && (self::$dnsTypes[$record['type']] & $type)) { + $records[] = array_merge(array('host' => $hostname, 'class' => 'IN', 'ttl' => 1, 'type' => $record['type']), $record); + } + } + } + + return $records; + } + + public static function register($class) + { + $self = get_called_class(); + + $mockedNs = array(substr($class, 0, strrpos($class, '\\'))); + if (0 < strpos($class, '\\Tests\\')) { + $ns = str_replace('\\Tests\\', '\\', $class); + $mockedNs[] = substr($ns, 0, strrpos($ns, '\\')); + } elseif (0 === strpos($class, 'Tests\\')) { + $mockedNs[] = substr($class, 6, strrpos($class, '\\') - 6); + } + foreach ($mockedNs as $ns) { + if (function_exists($ns.'\checkdnsrr')) { + continue; + } + eval(<<<EOPHP +namespace $ns; + +function checkdnsrr(\$host, \$type = 'MX') +{ + return \\$self::checkdnsrr(\$host, \$type); +} + +function dns_check_record(\$host, \$type = 'MX') +{ + return \\$self::checkdnsrr(\$host, \$type); +} + +function getmxrr(\$hostname, &\$mxhosts, &\$weight = null) +{ + return \\$self::getmxrr(\$hostname, \$mxhosts, \$weight); +} + +function dns_get_mx(\$hostname, &\$mxhosts, &\$weight = null) +{ + return \\$self::getmxrr(\$hostname, \$mxhosts, \$weight); +} + +function gethostbyaddr(\$ipAddress) +{ + return \\$self::gethostbyaddr(\$ipAddress); +} + +function gethostbyname(\$hostname) +{ + return \\$self::gethostbyname(\$hostname); +} + +function gethostbynamel(\$hostname) +{ + return \\$self::gethostbynamel(\$hostname); +} + +function dns_get_record(\$hostname, \$type = DNS_ANY, &\$authns = null, &\$addtl = null, \$raw = false) +{ + return \\$self::dns_get_record(\$hostname, \$type, \$authns, \$addtl, \$raw); +} + +EOPHP + ); + } + } +}