]> Cypherpunks repositories - gostls13.git/commitdiff
net: ignore duplicate interfaces in TestInterfaceHardwareAddrWithGetmac
authorAlex Brainman <alex.brainman@gmail.com>
Mon, 28 Aug 2017 02:21:44 +0000 (12:21 +1000)
committerAlex Brainman <alex.brainman@gmail.com>
Fri, 10 Nov 2017 23:18:17 +0000 (23:18 +0000)
Sometimes getmac lists many interfaces for the same MAC address,
while Interfaces returns only single name for that address. Adjust
the test to ignore the names that are not returned by the Interfaces.

Fixes #21027

Change-Id: I08d98746a7c669f2d730dba2da36e07451a6f405
Reviewed-on: https://go-review.googlesource.com/59411
Reviewed-by: Mikio Hara <mikioh.mikioh@gmail.com>
src/net/net_windows_test.go

index 04416129eb4d9768d19d1cba5897be6cc4550c44..db211e9d6ed60dd7807f3c87c16449cbe6e5b38d 100644 (file)
@@ -608,15 +608,34 @@ func TestInterfaceHardwareAddrWithGetmac(t *testing.T) {
        }
        processGroup()
 
+       dups := make(map[string][]string)
+       for name, addr := range want {
+               if _, ok := dups[addr]; !ok {
+                       dups[addr] = make([]string, 0)
+               }
+               dups[addr] = append(dups[addr], name)
+       }
+
+nextWant:
        for name, wantAddr := range want {
-               haveAddr, ok := have[name]
-               if !ok {
-                       t.Errorf("getmac lists %q, but it could not be found among Go interfaces %v", name, have)
+               if haveAddr, ok := have[name]; ok {
+                       if haveAddr != wantAddr {
+                               t.Errorf("unexpected MAC address for %q - %v, want %v", name, haveAddr, wantAddr)
+                       }
                        continue
                }
-               if haveAddr != wantAddr {
-                       t.Errorf("unexpected MAC address for %q - %v, want %v", name, haveAddr, wantAddr)
-                       continue
+               // We could not find the interface in getmac output by name.
+               // But sometimes getmac lists many interface names
+               // for the same MAC address. If that is the case here,
+               // and we can match at least one of those names,
+               // let's ignore the other names.
+               if dupNames, ok := dups[wantAddr]; ok && len(dupNames) > 1 {
+                       for _, dupName := range dupNames {
+                               if haveAddr, ok := have[dupName]; ok && haveAddr == wantAddr {
+                                       continue nextWant
+                               }
+                       }
                }
+               t.Errorf("getmac lists %q, but it could not be found among Go interfaces %v", name, have)
        }
 }