Add validation routines 61/105561/1
authorEric Multanen <eric.w.multanen@intel.com>
Wed, 8 Apr 2020 19:01:24 +0000 (12:01 -0700)
committerEric Multanen <eric.w.multanen@intel.com>
Wed, 8 Apr 2020 19:01:24 +0000 (12:01 -0700)
Splitting out new orchestration validation routines
from other patch for ncm which uses them - so these
changes can go in first.  Should fix build issues.

Issue-ID: MULTICLOUD-1029
Signed-off-by: Eric Multanen <eric.w.multanen@intel.com>
Change-Id: I89c4163e1204d444e48a4786acececa20fce1844

src/orchestrator/pkg/infra/validation/validation.go
src/orchestrator/pkg/infra/validation/validation_test.go

index d744dc3..03b37fa 100644 (file)
@@ -70,21 +70,37 @@ func IsTarGz(r io.Reader) error {
 }
 
 func IsIpv4Cidr(cidr string) error {
-       _, _, err := net.ParseCIDR(cidr)
-       if err != nil {
-               return pkgerrors.Wrapf(err, "could not parse subnet %v", cidr)
+       ip, _, err := net.ParseCIDR(cidr)
+       if err != nil || ip.To4() == nil {
+               return pkgerrors.Wrapf(err, "could not parse ipv4 cidr %v", cidr)
        }
        return nil
 }
 
-func IsIpv4(ip string) error {
+func IsIp(ip string) error {
        addr := net.ParseIP(ip)
        if addr == nil {
+               return pkgerrors.Errorf("invalid ip address %v", ip)
+       }
+       return nil
+}
+
+func IsIpv4(ip string) error {
+       addr := net.ParseIP(ip)
+       if addr == nil || addr.To4() == nil {
                return pkgerrors.Errorf("invalid ipv4 address %v", ip)
        }
        return nil
 }
 
+func IsMac(mac string) error {
+       _, err := net.ParseMAC(mac)
+       if err != nil {
+               return pkgerrors.Errorf("invalid MAC address %v", mac)
+       }
+       return nil
+}
+
 // default name check - matches valid label value with addtion that length > 0
 func IsValidName(name string) []string {
        var errs []string
index 5109b6c..6a7f504 100644 (file)
@@ -185,6 +185,43 @@ func TestIsIpv4(t *testing.T) {
        })
 }
 
+func TestIsMac(t *testing.T) {
+       t.Run("Valid MAC", func(t *testing.T) {
+               validmacs := []string{
+                       "11:22:33:44:55:66",
+                       "ab-cd-ef-12-34-56",
+                       "AB-CD-EF-12-34-56",
+               }
+               for _, mac := range validmacs {
+                       err := IsMac(mac)
+                       if err != nil {
+                               t.Errorf("Valid MAC string failed to pass: %v", mac)
+                       }
+               }
+       })
+
+       t.Run("Invalid MAC", func(t *testing.T) {
+               invalidmacs := []string{
+                       "",
+                       "1.2.3.4.5",
+                       "1.2.3.45/32",
+                       "ab:cd:ef:gh:12:34",
+                       "11:22-33-44:55:66",
+                       "11,22,33,44,55,66",
+                       "11|22|33|44|55|66",
+                       "11:22:33:44:55:66:77",
+                       "11-22-33-44-55",
+                       "11-22-33-44-55-66-77",
+               }
+               for _, mac := range invalidmacs {
+                       err := IsMac(mac)
+                       if err == nil {
+                               t.Errorf("Invalid MAC passed: %v", mac)
+                       }
+               }
+       })
+}
+
 func TestIsValidString(t *testing.T) {
        t.Run("Valid Strings", func(t *testing.T) {
                validStrings := []struct {