luck-draw/vendor/s1lentium/iptools/tests/NetworkTest.php

306 lines
7.9 KiB
PHP

<?php
use IPTools\Network;
use IPTools\IP;
class NetworkTest extends \PHPUnit_Framework_TestCase
{
public function testConstructor()
{
$ipv4 = new IP('127.0.0.1');
$ipv4Netmask = new IP('255.255.255.0');
$ipv6 = new IP('2001::');
$ipv6Netmask = new IP('ffff:ffff:ffff:ffff:ffff:ffff:ffff::');
$ipv4Network = new Network($ipv4, $ipv4Netmask);
$ipv6Network = new Network($ipv6, $ipv6Netmask);
$this->assertEquals('127.0.0.0/24', (string)$ipv4Network);
$this->assertEquals('2001::/112', (string)$ipv6Network);
}
public function testProperties()
{
$network = Network::parse('127.0.0.1/24');
$network->ip = new IP('192.0.0.2');
$this->assertEquals('192.0.0.2', $network->ip);
$this->assertEquals('192.0.0.0/24', (string)$network);
$this->assertEquals('0.0.0.255', (string)$network->wildcard);
$this->assertEquals('192.0.0.0', (string)$network->firstIP);
$this->assertEquals('192.0.0.255', (string)$network->lastIP);
}
/**
* @dataProvider getTestParseData
*/
public function testParse($data, $expected)
{
$this->assertEquals($expected, (string)Network::parse($data));
}
/**
* @expectedException Exception
* @expectedExceptionMessage Invalid IP address format
*/
public function testParseWrongNetwork()
{
Network::parse('10.0.0.0/24 abc');
}
/**
* @dataProvider getPrefixData
*/
public function testPrefix2Mask($prefix, $version, $mask)
{
$this->assertEquals($mask, Network::prefix2netmask($prefix, $version));
}
/**
* @expectedException Exception
* @expectedExceptionMessage Wrong IP version
*/
public function testPrefix2MaskWrongIPVersion()
{
Network::prefix2netmask('128', 'ip_version');
}
/**
* @dataProvider getInvalidPrefixData
* @expectedException Exception
* @expectedExceptionMessage Invalid prefix length
*/
public function testPrefix2MaskInvalidPrefix($prefix, $version)
{
Network::prefix2netmask($prefix, $version);
}
/**
* @dataProvider getHostsData
*/
public function testHosts($data, $expected)
{
foreach(Network::parse($data)->getHosts as $ip) {
$result[] = (string)$ip;
}
$this->assertEquals($expected, $result);
}
/**
* @dataProvider getExcludeData
*/
public function testExclude($data, $exclude, $expected)
{
$result = array();
foreach(Network::parse($data)->exclude($exclude) as $network) {
$result[] = (string)$network;
}
$this->assertEquals($expected, $result);
}
/**
* @dataProvider getExcludeExceptionData
* @expectedException Exception
* @expectedExceptionMessage Exclude subnet not within target network
*/
public function testExcludeException($data, $exclude)
{
Network::parse($data)->exclude($exclude);
}
/**
* @dataProvider getMoveToData
*/
public function testMoveTo($network, $prefixLength, $expected)
{
$result = array();
foreach (Network::parse($network)->moveTo($prefixLength) as $network) {
$result[] = (string)$network;
}
$this->assertEquals($expected, $result);
}
/**
* @dataProvider getMoveToExceptionData
* @expectedException Exception
* @expectedExceptionMessage Invalid prefix length
*/
public function testMoveToException($network, $prefixLength)
{
Network::parse($network)->moveTo($prefixLength);
}
/**
* @dataProvider getTestIterationData
*/
public function testNetworkIteration($data, $expected)
{
foreach (Network::parse($data) as $key => $ip) {
$result[] = (string)$ip;
}
$this->assertEquals($expected, $result);
}
/**
* @dataProvider getTestCountData
*/
public function testCount($data, $expected)
{
$this->assertEquals($expected, count(Network::parse($data)));
}
public function getTestParseData()
{
return array(
array('192.168.0.54/24', '192.168.0.0/24'),
array('2001::2001:2001/32', '2001::/32'),
array('127.168.0.1 255.255.255.255', '127.168.0.1/32'),
array('1234::1234', '1234::1234/128'),
);
}
public function getPrefixData()
{
return array(
array('24', IP::IP_V4, IP::parse('255.255.255.0')),
array('32', IP::IP_V4, IP::parse('255.255.255.255')),
array('64', IP::IP_V6, IP::parse('ffff:ffff:ffff:ffff::')),
array('128', IP::IP_V6, IP::parse('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff'))
);
}
public function getInvalidPrefixData()
{
return array(
array('-1', IP::IP_V4),
array('33', IP::IP_V4),
array('prefix', IP::IP_V4),
array('-1', IP::IP_V6),
array('129', IP::IP_V6),
);
}
public function getHostsData()
{
return array(
array('192.0.2.0/29',
array(
'192.0.2.1',
'192.0.2.2',
'192.0.2.3',
'192.0.2.4',
'192.0.2.5',
'192.0.2.6',
)
),
);
}
public function getExcludeData()
{
return array(
array('192.0.2.0/28', '192.0.2.1/32',
array(
'192.0.2.0/32',
'192.0.2.2/31',
'192.0.2.4/30',
'192.0.2.8/29',
)
),
array('192.0.2.2/32', '192.0.2.2/32', array()),
);
}
public function getExcludeExceptionData()
{
return array(
array('192.0.2.0/28', '192.0.3.0/24'),
array('192.0.2.2/32', '192.0.2.3/32'),
);
}
public function getMoveToData()
{
return array(
array('192.168.0.0/22', '24',
array(
'192.168.0.0/24',
'192.168.1.0/24',
'192.168.2.0/24',
'192.168.3.0/24'
)
),
array('192.168.2.0/24', '25',
array(
'192.168.2.0/25',
'192.168.2.128/25'
)
),
array('192.168.2.0/30', '32',
array(
'192.168.2.0/32',
'192.168.2.1/32',
'192.168.2.2/32',
'192.168.2.3/32'
)
),
);
}
public function getMoveToExceptionData()
{
return array(
array('192.168.0.0/22', '22'),
array('192.168.0.0/22', '21'),
array('192.168.0.0/22', '33'),
array('192.168.0.0/22', 'prefixLength')
);
}
public function getTestIterationData()
{
return array(
array('192.168.2.0/29',
array(
'192.168.2.0',
'192.168.2.1',
'192.168.2.2',
'192.168.2.3',
'192.168.2.4',
'192.168.2.5',
'192.168.2.6',
'192.168.2.7',
)
),
array('2001:db8::/125',
array(
'2001:db8::',
'2001:db8::1',
'2001:db8::2',
'2001:db8::3',
'2001:db8::4',
'2001:db8::5',
'2001:db8::6',
'2001:db8::7',
)
),
);
}
public function getTestCountData()
{
return array(
array('127.0.0.0/31', 2),
array('2001:db8::/120', 256),
);
}
}