ports/net/pear-Net_IPv6/files/patch-tests_AllTests.php
Reid Linnemann 1e7a9cbf5a net/pear-Net_IPv6: Add patches for handling zones
Summary:
The upstream Net/IPv6 package from PEAR has significant bugs revolving around
handling of string presentation v6 addresses which have RFC 4007 zones. Patches
are added in this commit to address them plus a handful of other errors until an
updated version of the package becomes available with these changes included.

 * Add getZone() and removeZone() class methods
 * Alter SplitV64() to remove any zone before attempting to split an address
   into v6 and v4 parts. The zone has no meaning in this context
 * Alter compress to remove and restore a zone prior to restoring a prefix
 * Alter compress() to rejoin a compressed v6 part with a v4 part with a colon
   if the v6 part does not already end with one
 * Fix undefined variable '$address' in isCompressible()
 * Ensure no zone is present at the end of an address in _ip2Bin(). The zone is
   not a part of the binary address
 * Change string/int arithmetic to int/int arithmetic in _ip2Bin by mapping
   exploded v4 address octets to integer values
 * Fix unit tests to work in modern versions of php and phpunit
   * Align test case class name with source file name
   * Use phpunit namespaces
   * Make return type of AllTests::setUp() the expected 'void'

In addition, eight unit tests are added for basic verification of zone handling.

Sponsored by:		Rubicon Communications, LLC ("Netgate")
Differential Revision:	https://reviews.freebsd.org/D36151
2022-08-12 08:23:28 -03:00

140 lines
4.3 KiB
PHP

--- tests/AllTests.php.orig 2022-08-11 19:31:42 UTC
+++ tests/AllTests.php
@@ -19,6 +19,7 @@ require_once "Net/IPv6.php";
// $Id: AllTests.php 340792 2016-10-29 14:56:52Z alexmerz $
require_once "Net/IPv6.php";
+use PHPUnit\Framework\TestCase;
/**
* This testcases tests for several bugs and general topics
@@ -28,7 +29,7 @@ require_once "Net/IPv6.php";
* @version $Id: AllTests.php 340792 2016-10-29 14:56:52Z alexmerz $
* @access public
*/
-class NetIPv6Test extends PHPUnit_Framework_TestCase {
+class AllTests extends TestCase {
protected $ip;
@@ -39,7 +40,7 @@ class NetIPv6Test extends PHPUnit_Framework_TestCase {
return $method;
}
- public function setUp() {
+ public function setUp(): void {
$this->ip = new Net_IPv6();
}
@@ -742,6 +743,109 @@ class NetIPv6Test extends PHPUnit_Framework_TestCase {
$netmask = '::ffff/96';
$testip = '0:0:0:0:0:ffff:c000:22f';
$this->assertTrue(Net_IPv6::isInNetmask($testip, $netmask));
+ }
+
+ /**
+ * tests if checkIPv6 can handle addresses with zone
+ * @author Reid Linnemann <rlinnemann@netgate.com>
+ */
+ public function testCheckIPv6WithZone() {
+ $testip = 'fe80::de:ad:be:ef%zone.name';
+ $is = $this->ip->checkIPv6($testip);
+
+ $this->assertTrue($is);
+ }
+
+ /**
+ * tests if splitV64 can handle addresses with zone
+ * @author Reid Linnemann <rlinnemann@netgate.com>
+ */
+ public function testSplitV64WithZone() {
+ $testip = 'fe80::de:ad:be:ef%zone.name';
+ $zonelessip = 'fe80::de:ad:be:ef';
+ $items = $this->ip->SplitV64($testip, false);
+
+ $this->assertEquals(2, count($items));
+ $this->assertEmpty($items[1]);
+ $this->assertEquals($zonelessip, $items[0]);
+ }
+
+ /**
+ * tests zoned address compression
+ * @author Reid Linnemann
+ */
+ public function testCompressWithZone() {
+ $uncompressedip = 'fe80:0:0:0:de:ad:be:ef%zone.name';
+ $compressedip = 'fe80::de:ad:be:ef%zone.name';
+
+ $testip = $this->ip->compress($uncompressedip, false);
+
+ $this->assertEquals($compressedip, $testip);
+ }
+
+ /**
+ * tests zoned address compression with IPv4 part
+ * @author Reid Linnemann
+ */
+ public function testCompressWithIPv4AndZone() {
+ $uncompressedip = 'fe80:0:0:0:dead:beef:172.10.1.1%zone.name';
+ $compressedip = 'fe80::dead:beef:172.10.1.1%zone.name';
+
+ $testip = $this->ip->compress($uncompressedip, false);
+
+ $this->assertEquals($compressedip, $testip);
+ }
+
+ /**
+ * tests zoned address with prefix compression with IPv4 part
+ * @author Reid Linnemann
+ */
+ public function testCompressWithIPv4AndZoneAndPrefix() {
+ $uncompressedip = 'fe80:0:0:0:dead:beef:172.10.1.1%zone.name/64';
+ $compressedip = 'fe80::dead:beef:172.10.1.1%zone.name/64';
+
+ $testip = $this->ip->compress($uncompressedip, false);
+
+ $this->assertEquals($compressedip, $testip);
+ }
+
+ /**
+ * tests zoned address uncompression
+ * @author Reid Linnemann
+ */
+ public function testUncompressWithZone() {
+ $uncompressedip = 'fe80:0:0:0:de:ad:be:ef%zone.name';
+ $compressedip = 'fe80::de:ad:be:ef%zone.name';
+
+ $testip = $this->ip->uncompress($compressedip, false);
+
+ $this->assertEquals($uncompressedip, $testip);
+ }
+
+ /**
+ * tests zoned address uncompression with IPv4 part
+ * @author Reid Linnemann
+ */
+ public function testUncompressWithIPv4AndZone() {
+ $uncompressedip = 'fe80:0:0:0:dead:beef:172.10.1.1%zone.name';
+ $compressedip = 'fe80::dead:beef:172.10.1.1%zone.name';
+
+ $testip = $this->ip->uncompress($compressedip, false);
+
+ $this->assertEquals($uncompressedip, $testip);
+ }
+
+ /**
+ * tests zoned address with prefix uncompression with IPv4 part
+ * @author Reid Linnemann
+ */
+ public function testUncompressWithIPv4AndZoneAndPrefix() {
+ $uncompressedip = 'fe80:0:0:0:dead:beef:172.10.1.1%zone.name/64';
+ $compressedip = 'fe80::dead:beef:172.10.1.1%zone.name/64';
+
+ $testip = $this->ip->uncompress($compressedip, false);
+
+ $this->assertEquals($uncompressedip, $testip);
}
-}
\ No newline at end of file
+}