You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
nextcloud-server/tests/lib/Net/IpAddressClassifierTest.php

94 lines
2.3 KiB

<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace lib\Net;
use IPLib\Address\IPv4;
use IPLib\Address\IPv6;
use OC\Net\IpAddressClassifier;
use Test\TestCase;
class IpAddressClassifierTest extends TestCase {
private IpAddressClassifier $classifier;
#[\Override]
protected function setUp(): void {
parent::setUp();
$this->classifier = new IpAddressClassifier();
}
public static function publicIpAddressData(): array {
return [
['8.8.8.8'],
['8.8.4.4'],
['2001:4860:4860::8888'],
['2001:4860:4860::8844'],
];
}
#[\PHPUnit\Framework\Attributes\DataProvider('publicIpAddressData')]
public function testPublicAddress(string $ip): void {
$isLocal = $this->classifier->isLocalAddress($ip);
self::assertFalse($isLocal);
}
public static function localIpAddressData(): array {
return [
['127.0.0.1'],
['127.0.0.13'], // all 127.0.0.0/8 network is loopback address
['192.168.0.1'],
['fe80::200:5aee:feaa:20a2'],
['fe80::1fc4:15d8:78db:2319%enp4s0'], // v6 zone ID
['0:0:0:0:0:ffff:10.0.0.1'],
['0:0:0:0:0:ffff:127.0.0.0'],
['10.0.0.1'],
['::'],
['::1'],
['100.100.100.200'],
['192.0.0.1'],
['64:ff9b::a9fe:a9fe'], // NAT64 of 169.254.169.254
['64:ff9b:1::a9fe:a9fe'], // rfc8215
['::ffff:127.0.0.1'],
['2130706433'],
['0177.0.0.1'],
['169.254.169.254'],
];
}
#[\PHPUnit\Framework\Attributes\DataProvider('localIpAddressData')]
public function testLocalAddress(string $ip): void {
$isLocal = $this->classifier->isLocalAddress($ip);
self::assertTrue($isLocal);
}
public static function mappedAddresses(): array {
return [
['64:ff9b::a9fe:a9fe', '169.254.169.254'],
['::ffff:7f00:1', '127.0.0.1'],
['::127.0.0.1', '127.0.0.1'],
['::7f00:1', '127.0.0.1'],
['2001:0000:4136:e378:8000:63bf:3fff:fdd2', '192.0.2.45'],
['2001:4860:4860::8888', null],
];
}
#[\PHPUnit\Framework\Attributes\DataProvider('mappedAddresses')]
public function testMappedAddresses(string $ipv6, ?string $ipv4): void {
$mapped = $this->classifier->getMappedIpv4(IPv6::parseString($ipv6));
if ($ipv4 === null) {
self::assertEquals(null, $mapped);
} else {
self::assertEquals(IPv4::parseString($ipv4), $mapped);
}
}
}