From 36d5eb0a479ea0cf090be92c248a62fa31fe772a Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Wed, 19 Sep 2018 11:42:19 -0700 Subject: [PATCH] pkg/ipnet: Teach IPNet.String() to handle nil receivers Instead of panicking. This makes some comparisons easier, as you can see from the test changes. --- pkg/ipnet/ipnet.go | 9 +++++++++ pkg/ipnet/ipnet_test.go | 18 +++++++----------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/pkg/ipnet/ipnet.go b/pkg/ipnet/ipnet.go index 48ca01e6706..e6a4c3e4f5e 100644 --- a/pkg/ipnet/ipnet.go +++ b/pkg/ipnet/ipnet.go @@ -16,6 +16,15 @@ type IPNet struct { net.IPNet } +// String returns a CIDR serialization of the subnet, or an empty +// string if the subnet is nil. +func (ipnet *IPNet) String() string { + if ipnet == nil { + return "" + } + return ipnet.IPNet.String() +} + // MarshalJSON interface for an IPNet func (ipnet IPNet) MarshalJSON() (data []byte, err error) { if reflect.DeepEqual(ipnet.IPNet, emptyIPNet) { diff --git a/pkg/ipnet/ipnet_test.go b/pkg/ipnet/ipnet_test.go index 94b927d6f47..a072a4a907e 100644 --- a/pkg/ipnet/ipnet_test.go +++ b/pkg/ipnet/ipnet_test.go @@ -38,23 +38,19 @@ func TestUnmarshal(t *testing.T) { Mask: net.IPv4Mask(255, 255, 255, 0), }}, } { - data, err := json.Marshal(ipNetIn) - if err != nil { - t.Fatal(err) - } + t.Run(ipNetIn.String(), func(t *testing.T) { + data, err := json.Marshal(ipNetIn) + if err != nil { + t.Fatal(err) + } - t.Run(string(data), func(t *testing.T) { var ipNetOut *IPNet - err := json.Unmarshal(data, &ipNetOut) + err = json.Unmarshal(data, &ipNetOut) if err != nil { t.Fatal(err) } - if ipNetIn == nil { - if ipNetOut != nil { - t.Fatalf("%v != %v", ipNetOut, ipNetIn) - } - } else if ipNetOut.String() != ipNetIn.String() { + if ipNetOut.String() != ipNetIn.String() { t.Fatalf("%v != %v", ipNetOut, ipNetIn) } })