mirror of
				https://github.com/tailscale/tailscale.git
				synced 2025-11-04 02:01:14 +01:00 
			
		
		
		
	I was running all tests while preparing a recent stable release, and
this was failing because my computer is connected to a fairly large
tailnet.
```
--- FAIL: TestGetRouteTable (0.01s)
    routetable_linux_test.go:32: expected at least one default route;
    ...
```
```
$ ip route show table 52  | wc -l
1051
```
Updates #cleanup
Signed-off-by: Anton Tolchanov <anton@tailscale.com>
		
	
			
		
			
				
	
	
		
			82 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright (c) Tailscale Inc & AUTHORS
 | 
						|
// SPDX-License-Identifier: BSD-3-Clause
 | 
						|
 | 
						|
//go:build linux
 | 
						|
 | 
						|
package routetable
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"net/netip"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"golang.org/x/sys/unix"
 | 
						|
)
 | 
						|
 | 
						|
func TestGetRouteTable(t *testing.T) {
 | 
						|
	routes, err := Get(512000) // arbitrarily large
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
 | 
						|
	// Basic assertion: we have at least one 'default' route in the main table
 | 
						|
	var (
 | 
						|
		hasDefault bool
 | 
						|
	)
 | 
						|
	for _, route := range routes {
 | 
						|
		if route.Dst == defaultRouteIPv4 && route.Sys.(RouteEntryLinux).Table == unix.RT_TABLE_MAIN {
 | 
						|
			hasDefault = true
 | 
						|
		}
 | 
						|
	}
 | 
						|
	if !hasDefault {
 | 
						|
		t.Errorf("expected at least one default route; routes=%v", routes)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestRouteEntryFormatting(t *testing.T) {
 | 
						|
	testCases := []struct {
 | 
						|
		re   RouteEntry
 | 
						|
		want string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			re: RouteEntry{
 | 
						|
				Family:    4,
 | 
						|
				Type:      RouteTypeMulticast,
 | 
						|
				Dst:       RouteDestination{Prefix: netip.MustParsePrefix("100.64.0.0/10")},
 | 
						|
				Gateway:   netip.MustParseAddr("1.2.3.1"),
 | 
						|
				Interface: "tailscale0",
 | 
						|
				Sys: RouteEntryLinux{
 | 
						|
					Type:     unix.RTN_UNICAST,
 | 
						|
					Table:    52,
 | 
						|
					Proto:    unix.RTPROT_STATIC,
 | 
						|
					Src:      netip.MustParseAddr("1.2.3.4"),
 | 
						|
					Priority: 555,
 | 
						|
				},
 | 
						|
			},
 | 
						|
			want: `{Family: IPv4, Type: multicast, Dst: 100.64.0.0/10, Gateway: 1.2.3.1, Interface: tailscale0, Sys: {Type: unicast, Table: 52, Proto: static, Src: 1.2.3.4, Priority: 555}}`,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			re: RouteEntry{
 | 
						|
				Family:  4,
 | 
						|
				Type:    RouteTypeUnicast,
 | 
						|
				Dst:     RouteDestination{Prefix: netip.MustParsePrefix("1.2.3.0/24")},
 | 
						|
				Gateway: netip.MustParseAddr("1.2.3.1"),
 | 
						|
				Sys: RouteEntryLinux{
 | 
						|
					Type:  unix.RTN_UNICAST,
 | 
						|
					Table: unix.RT_TABLE_MAIN,
 | 
						|
					Proto: unix.RTPROT_BOOT,
 | 
						|
				},
 | 
						|
			},
 | 
						|
			want: `{Family: IPv4, Dst: 1.2.3.0/24, Gateway: 1.2.3.1, Sys: {Type: unicast}}`,
 | 
						|
		},
 | 
						|
	}
 | 
						|
	for _, tc := range testCases {
 | 
						|
		t.Run("", func(t *testing.T) {
 | 
						|
			got := fmt.Sprint(tc.re)
 | 
						|
			if got != tc.want {
 | 
						|
				t.Fatalf("RouteEntry.String() = %q; want %q", got, tc.want)
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |