256 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			256 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | ||
|  | 
 | ||
|  | use IPTools\IP; | ||
|  | 
 | ||
|  | class IPTest extends \PHPUnit_Framework_TestCase | ||
|  | { | ||
|  |     public function testConstructor() | ||
|  |     { | ||
|  |         $ipv4String = '127.0.0.1'; | ||
|  |         $ipv6String = '2001::'; | ||
|  | 
 | ||
|  |         $ipv4 = new IP($ipv4String); | ||
|  |         $ipv6 = new IP($ipv6String); | ||
|  | 
 | ||
|  |         $this->assertEquals(inet_pton($ipv4String), $ipv4->inAddr()); | ||
|  |         $this->assertEquals(IP::IP_V4, $ipv4->getVersion()); | ||
|  |         $this->assertEquals(IP::IP_V4_MAX_PREFIX_LENGTH, $ipv4->getMaxPrefixLength()); | ||
|  |         $this->assertEquals(IP::IP_V4_OCTETS, $ipv4->getOctetsCount()); | ||
|  | 
 | ||
|  |         $this->assertEquals(inet_pton($ipv6String), $ipv6->inAddr()); | ||
|  |         $this->assertEquals(IP::IP_V6, $ipv6->getVersion()); | ||
|  |         $this->assertEquals(IP::IP_V6_MAX_PREFIX_LENGTH, $ipv6->getMaxPrefixLength()); | ||
|  |         $this->assertEquals(IP::IP_V6_OCTETS, $ipv6->getOctetsCount()); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @dataProvider getTestContructorExceptionData | ||
|  |      * @expectedException Exception | ||
|  |      * @expectedExceptionMessage Invalid IP address format | ||
|  |      */ | ||
|  |     public function testConstructorException($string) | ||
|  |     { | ||
|  |         $ip = new IP($string); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testProperties() | ||
|  |     { | ||
|  |         $ip = new IP('127.0.0.1'); | ||
|  | 
 | ||
|  |         $this->assertNotEmpty($ip->maxPrefixLength); | ||
|  |         $this->assertNotEmpty($ip->octetsCount); | ||
|  |         $this->assertNotEmpty($ip->reversePointer); | ||
|  | 
 | ||
|  |         $this->assertNotEmpty($ip->bin); | ||
|  |         $this->assertNotEmpty($ip->long); | ||
|  |         $this->assertNotEmpty($ip->hex); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @dataProvider getToStringData | ||
|  |      */ | ||
|  |     public function testToString($actual, $expected) | ||
|  |     { | ||
|  |         $ip = new IP($actual); | ||
|  |         $this->assertEquals($expected, (string)$ip); | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @dataProvider getTestParseData | ||
|  |      */ | ||
|  |     public function testParse($ipString, $expected) | ||
|  |     { | ||
|  |         $ip = IP::parse($ipString); | ||
|  |         $this->assertEquals($expected, (string) $ip); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @dataProvider getParseBinData | ||
|  |      */ | ||
|  |     public function testParseBin($bin, $expectedString) | ||
|  |     { | ||
|  |         $ip = IP::parseBin($bin); | ||
|  | 
 | ||
|  |         $this->assertEquals($expectedString, (string) $ip); | ||
|  |         $this->assertEquals($bin, $ip->toBin()); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @expectedException Exception | ||
|  |      * @expectedExceptionMessage Invalid binary IP address format | ||
|  |      */ | ||
|  |     public function testParseBinException() | ||
|  |     { | ||
|  |         IP::parseBin('192.168.1.1'); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testParseLong() | ||
|  |     { | ||
|  |         $ipv4long = '2130706433'; | ||
|  |         $ipv4 = IP::parseLong($ipv4long); | ||
|  | 
 | ||
|  |         $ipv6Long = '340277174624079928635746076935438991360'; | ||
|  |         $ipv6 = IP::parseLong($ipv6Long, IP::IP_V6); | ||
|  | 
 | ||
|  |         $this->assertEquals('127.0.0.1', (string)$ipv4); | ||
|  |         $this->assertEquals($ipv4long, $ipv4->toLong()); | ||
|  | 
 | ||
|  |         $this->assertEquals('ffff::', (string)$ipv6); | ||
|  |         $this->assertEquals($ipv6Long, $ipv6->toLong()); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testParseHex() | ||
|  |     { | ||
|  |         $hex = '7f000001'; | ||
|  |         $ip = IP::parseHex($hex); | ||
|  | 
 | ||
|  |         $this->assertEquals('127.0.0.1', (string)$ip); | ||
|  |         $this->assertEquals($hex, $ip->toHex()); | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @expectedException Exception | ||
|  |      * @expectedExceptionMessage Invalid hexadecimal IP address format | ||
|  |      */ | ||
|  |     public function testParseHexException() | ||
|  |     { | ||
|  |         IP::parseHex('192.168.1.1'); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testParseInAddr() | ||
|  |     { | ||
|  |         $inAddr = inet_pton('127.0.0.1'); | ||
|  |         $ip = IP::parseInAddr($inAddr); | ||
|  | 
 | ||
|  |         $this->assertEquals($inAddr, $ip->inAddr()); | ||
|  | 
 | ||
|  |         $inAddr = inet_pton('2001::8000:0:0:0'); | ||
|  |         $ip = IP::parseInAddr($inAddr); | ||
|  | 
 | ||
|  |         $this->assertEquals($inAddr, $ip->inAddr()); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @dataProvider getTestNextData | ||
|  |      */ | ||
|  |     public function testNext($ip, $step, $expected) | ||
|  |     { | ||
|  |         $object = new IP($ip); | ||
|  |         $next = $object->next($step); | ||
|  | 
 | ||
|  |         $this->assertEquals($expected, (string) $next); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @dataProvider getTestPrevData | ||
|  |      */ | ||
|  |     public function testPrev($ip, $step, $expected) | ||
|  |     { | ||
|  |         $object = new IP($ip); | ||
|  |         $prev = $object->prev($step); | ||
|  | 
 | ||
|  |         $this->assertEquals($expected, (string) $prev); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @expectedException Exception | ||
|  |      * @expectedExceptionMessage Number must be greater than 0 | ||
|  |      */ | ||
|  |     public function testPrevException() | ||
|  |     { | ||
|  |         $object = new IP('192.168.1.1'); | ||
|  |         $object->prev(-1); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @dataProvider getReversePointerData | ||
|  |      */ | ||
|  |     public function testReversePointer($ip, $expected) | ||
|  |     { | ||
|  |         $object = new IP($ip); | ||
|  |         $reversePointer = $object->getReversePointer(); | ||
|  |         $this->assertEquals($expected, $reversePointer); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function getTestContructorExceptionData() | ||
|  |     { | ||
|  |         return array( | ||
|  |             array('256.0.0.1'), | ||
|  |             array('127.-1.0.1'), | ||
|  |             array(123.45), | ||
|  |             array(-123.45), | ||
|  |             array('cake'), | ||
|  |             array('12345'), | ||
|  |             array('-12345'), | ||
|  |             array('0000:0000:0000:ffff:0127:0000:0000:0001:0000'), | ||
|  |         ); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function getToStringData() | ||
|  |     { | ||
|  |         return array( | ||
|  |             array('127.0.0.1', '127.0.0.1'), | ||
|  |             array('2001::', '2001::'), | ||
|  |             array('2001:0000:0000:0000:0000:0000:0000:0000', '2001::'), | ||
|  |             array('2001:0000:0000:0000:8000:0000:0000:0000', '2001::8000:0:0:0') | ||
|  |         ); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function getTestParseData() | ||
|  |     { | ||
|  |         return array( | ||
|  |             array(2130706433, '127.0.0.1'), //long
 | ||
|  |             array('0b01111111000000000000000000000001', '127.0.0.1'), //bin
 | ||
|  |             array('0x7f000001', '127.0.0.1'), //hex,
 | ||
|  |             array('0x20010000000000008000000000000000', '2001::8000:0:0:0'), //hex
 | ||
|  |             array('127.0.0.1', '127.0.0.1'), | ||
|  |             array('2001::', '2001::') | ||
|  |         ); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function getParseBinData() | ||
|  |     { | ||
|  |         return array( | ||
|  |             array( | ||
|  |                 '00100000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', | ||
|  |                 '2001::' | ||
|  |             ), | ||
|  |             array('01111111000000000000000000000001', '127.0.0.1') | ||
|  |         ); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function getTestNextData() | ||
|  |     { | ||
|  |         return array( | ||
|  |             array('192.168.0.1', 1, '192.168.0.2'), | ||
|  |             array('192.168.0.1', 254, '192.168.0.255'), | ||
|  |             array('192.168.0.1', 255, '192.168.1.0'), | ||
|  |             array('2001::', 1, '2001::1'), | ||
|  |             array('2001::', 65535, '2001::ffff'), | ||
|  |             array('2001::', 65536, '2001::1:0') | ||
|  |         ); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function getTestPrevData() | ||
|  |     { | ||
|  |         return array( | ||
|  |             array('192.168.1.1', 1, '192.168.1.0'), | ||
|  |             array('192.168.1.0', 1, '192.168.0.255'), | ||
|  |             array('192.168.1.1', 258, '192.167.255.255'), | ||
|  |             array('2001::1', 1, '2001::'), | ||
|  |             array('2001::1:0', 1, '2001::ffff'), | ||
|  |             array('2001::1:0', 65536, '2001::'), | ||
|  |         ); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function getReversePointerData() | ||
|  |     { | ||
|  |         return array( | ||
|  |             array('192.0.2.5', '5.2.0.192.in-addr.arpa'), | ||
|  |             array('2001:db8::567:89ab', 'b.a.9.8.7.6.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa'), | ||
|  |         ); | ||
|  |     } | ||
|  | } |