golang.org/x/net@v0.25.1-0.20240516223405-c87a5b62e243/route/message_freebsd_test.go (about) 1 // Copyright 2016 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package route 6 7 import ( 8 "syscall" 9 "testing" 10 ) 11 12 func TestFetchAndParseRIBOnFreeBSD(t *testing.T) { 13 for _, typ := range []RIBType{syscall.NET_RT_IFMALIST} { 14 var lastErr error 15 var ms []Message 16 for _, af := range []int{syscall.AF_UNSPEC, syscall.AF_INET, syscall.AF_INET6} { 17 rs, err := fetchAndParseRIB(af, typ) 18 if err != nil { 19 lastErr = err 20 continue 21 } 22 ms = append(ms, rs...) 23 } 24 if len(ms) == 0 && lastErr != nil { 25 t.Error(typ, lastErr) 26 continue 27 } 28 ss, err := msgs(ms).validate() 29 if err != nil { 30 t.Error(typ, err) 31 continue 32 } 33 for _, s := range ss { 34 t.Log(s) 35 } 36 } 37 } 38 39 func TestFetchAndParseRIBOnFreeBSD10AndAbove(t *testing.T) { 40 if _, err := FetchRIB(syscall.AF_UNSPEC, syscall.NET_RT_IFLISTL, 0); err != nil { 41 t.Skip("NET_RT_IFLISTL not supported") 42 } 43 if compatFreeBSD32 { 44 t.Skip("NET_RT_IFLIST vs. NET_RT_IFLISTL doesn't work for 386 emulation on amd64") 45 } 46 47 var tests = [2]struct { 48 typ RIBType 49 b []byte 50 msgs []Message 51 ss []string 52 }{ 53 {typ: syscall.NET_RT_IFLIST}, 54 {typ: syscall.NET_RT_IFLISTL}, 55 } 56 for i := range tests { 57 var lastErr error 58 for _, af := range []int{syscall.AF_UNSPEC, syscall.AF_INET, syscall.AF_INET6} { 59 rs, err := fetchAndParseRIB(af, tests[i].typ) 60 if err != nil { 61 lastErr = err 62 continue 63 } 64 tests[i].msgs = append(tests[i].msgs, rs...) 65 } 66 if len(tests[i].msgs) == 0 && lastErr != nil { 67 t.Error(tests[i].typ, lastErr) 68 continue 69 } 70 tests[i].ss, lastErr = msgs(tests[i].msgs).validate() 71 if lastErr != nil { 72 t.Error(tests[i].typ, lastErr) 73 continue 74 } 75 for _, s := range tests[i].ss { 76 t.Log(s) 77 } 78 } 79 for i := len(tests) - 1; i > 0; i-- { 80 if len(tests[i].ss) != len(tests[i-1].ss) { 81 t.Errorf("got %v; want %v", tests[i].ss, tests[i-1].ss) 82 continue 83 } 84 for j, s1 := range tests[i].ss { 85 s0 := tests[i-1].ss[j] 86 if s1 != s0 { 87 t.Errorf("got %s; want %s", s1, s0) 88 } 89 } 90 } 91 }