306 lines
7.9 KiB
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),
|
|
);
|
|
}
|
|
}
|