From 0bd5eca85f9b84b54293c6865074ff2ebf629ca4 Mon Sep 17 00:00:00 2001 From: Alex Willmer Date: Mon, 24 May 2021 21:15:59 +0100 Subject: [PATCH] Fuzz IP.Is() methods against stdlib net.IP equivalents The intent is to find discrepancies between netaddr.IP and net.IP. These don't necessarily indicate a bug (in either), but it's better to find them and explicitly document/exclude them. Signed-off-by: Alex Willmer --- fuzz.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/fuzz.go b/fuzz.go index 06d90a5..e38631c 100644 --- a/fuzz.go +++ b/fuzz.go @@ -32,6 +32,23 @@ func Fuzz(b []byte) int { fmt.Println("ip=", ip, "stdip=", stdip) panic("net.IP.String() != IP.String()") } + + for _, tt := range []struct { + name string + ipResult bool + stdipResult bool + }{ + {"IsInterfaceLocalMulticast", ip.IsInterfaceLocalMulticast(), stdip.IsInterfaceLocalMulticast()}, + {"IsLinkLocalMulticast", ip.IsLinkLocalMulticast(), stdip.IsLinkLocalMulticast()}, + {"IsLinkLocalUnicast", ip.IsLinkLocalUnicast(), stdip.IsLinkLocalUnicast()}, + {"IsLoopback", ip.IsLoopback(), stdip.IsLoopback()}, + {"IsMulticast", ip.IsMulticast(), stdip.IsMulticast()}, + } { + if tt.ipResult != tt.stdipResult { + fmt.Printf("net.IP=%#v .%v=%v, netaddr.IP=%#v %v=%v\n", stdip, tt.name, tt.stdipResult, ip, tt.name, tt.ipResult) + panic(fmt.Sprintf(".%v() did not agree with stdlib", tt.name)) + } + } } // Check that .Next().Prior() and .Prior().Next() preserve the IP. if !ip.IsZero() && !ip.Next().IsZero() && ip.Next().Prior() != ip {