From 49d07d1f260f22bb65517504782edde4b676a5db Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Wed, 16 Nov 2022 10:47:56 +0200 Subject: [PATCH] Return error in vnet.NewNet() Return error in vnet.NewNet() --- examples/vnet-udpproxy/main.go | 6 +- vnet/delay_filter_test.go | 10 ++- vnet/loss_filter_test.go | 12 +++- vnet/net.go | 4 +- vnet/net_test.go | 108 ++++++++++++++++++++++++++------- vnet/router_test.go | 46 +++++++++----- vnet/stress_test.go | 10 ++- vnet/udpproxy.go | 8 ++- vnet/udpproxy_direct_test.go | 12 +++- vnet/udpproxy_test.go | 18 +++++- 10 files changed, 178 insertions(+), 56 deletions(-) diff --git a/examples/vnet-udpproxy/main.go b/examples/vnet-udpproxy/main.go index 86d158a..2aef8c4 100644 --- a/examples/vnet-udpproxy/main.go +++ b/examples/vnet-udpproxy/main.go @@ -27,9 +27,13 @@ func main() { } // Create a network and add to router, for example, for client. - clientNetwork := vnet.NewNet(&vnet.NetConfig{ + clientNetwork, err := vnet.NewNet(&vnet.NetConfig{ StaticIP: "10.0.0.11", }) + if err != nil { + panic(err) + } + if err = router.AddNet(clientNetwork); err != nil { panic(err) } diff --git a/vnet/delay_filter_test.go b/vnet/delay_filter_test.go index f0257ca..d3f460b 100644 --- a/vnet/delay_filter_test.go +++ b/vnet/delay_filter_test.go @@ -12,7 +12,10 @@ func TestDelayFilter(t *testing.T) { t.Run("schedulesOnePacketAtATime", func(t *testing.T) { nic := newMockNIC(t) df, err := NewDelayFilter(nic, 10*time.Millisecond) - assert.NoError(t, err) + if !assert.NoError(t, err, "should succeed") { + return + } + ctx, cancel := context.WithCancel(context.Background()) defer cancel() go df.Run(ctx) @@ -55,7 +58,10 @@ func TestDelayFilter(t *testing.T) { t.Run("schedulesSubsequentManyPackets", func(t *testing.T) { nic := newMockNIC(t) df, err := NewDelayFilter(nic, 10*time.Millisecond) - assert.NoError(t, err) + if !assert.NoError(t, err, "should succeed") { + return + } + ctx, cancel := context.WithCancel(context.Background()) defer cancel() go df.Run(ctx) diff --git a/vnet/loss_filter_test.go b/vnet/loss_filter_test.go index b6ac48e..a79439c 100644 --- a/vnet/loss_filter_test.go +++ b/vnet/loss_filter_test.go @@ -56,7 +56,9 @@ func TestLossFilter(t *testing.T) { mnic := newMockNIC(t) f, err := NewLossFilter(mnic, 100) - assert.NoError(t, err) + if !assert.NoError(t, err, "should succeed") { + return + } f.onInboundChunk(&chunkUDP{}) }) @@ -65,7 +67,9 @@ func TestLossFilter(t *testing.T) { mnic := newMockNIC(t) f, err := NewLossFilter(mnic, 0) - assert.NoError(t, err) + if !assert.NoError(t, err, "should succeed") { + return + } packets := 100 received := 0 @@ -84,7 +88,9 @@ func TestLossFilter(t *testing.T) { mnic := newMockNIC(t) f, err := NewLossFilter(mnic, 50) - assert.NoError(t, err) + if !assert.NoError(t, err, "should succeed") { + return + } packets := 1000 received := 0 diff --git a/vnet/net.go b/vnet/net.go index 99e303a..e142b97 100644 --- a/vnet/net.go +++ b/vnet/net.go @@ -547,7 +547,7 @@ type NetConfig struct { // By design, it always have lo0 and eth0 interfaces. // The lo0 has the address 127.0.0.1 assigned by default. // IP address for eth0 will be assigned when this Net is added to a router. -func NewNet(config *NetConfig) *Net { +func NewNet(config *NetConfig) (*Net, error) { lo0 := transport.NewInterface(net.Interface{ Index: 1, MTU: 16384, @@ -584,7 +584,7 @@ func NewNet(config *NetConfig) *Net { interfaces: []*transport.Interface{lo0, eth0}, staticIPs: staticIPs, udpConns: newUDPConnMap(), - } + }, nil } // DialTCP acts like Dial for TCP networks. diff --git a/vnet/net_test.go b/vnet/net_test.go index c982243..573c539 100644 --- a/vnet/net_test.go +++ b/vnet/net_test.go @@ -15,7 +15,11 @@ func TestNetVirtual(t *testing.T) { log := logging.NewDefaultLoggerFactory().NewLogger("test") t.Run("tnet.Interfaces", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } + intfs, err := nw.Interfaces() assert.Equal(t, 2, len(intfs), "should be one tnet.Interface") assert.NoError(t, err, "should succeed") @@ -64,7 +68,10 @@ func TestNetVirtual(t *testing.T) { }) t.Run("tnet.InterfaceByName", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } intfs, err := nw.Interfaces() assert.Equal(t, 2, len(intfs), "should be one tnet.Interface") @@ -109,7 +116,10 @@ func TestNetVirtual(t *testing.T) { }) t.Run("hasIPAddr", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } intfs, err := nw.Interfaces() assert.Equal(t, 2, len(intfs), "should be one tnet.Interface") @@ -136,7 +146,10 @@ func TestNetVirtual(t *testing.T) { }) t.Run("getAllIPAddrs", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } intfs, err := nw.Interfaces() assert.Equal(t, 2, len(intfs), "should be one tnet.Interface") @@ -160,7 +173,10 @@ func TestNetVirtual(t *testing.T) { }) t.Run("assignPort()", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } addr := demoIP start := 1000 @@ -206,7 +222,10 @@ func TestNetVirtual(t *testing.T) { }) t.Run("determineSourceIP()", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } intfs, err := nw.Interfaces() assert.Equal(t, 2, len(intfs), "should be one tnet.Interface") @@ -247,7 +266,10 @@ func TestNetVirtual(t *testing.T) { }) t.Run("ResolveUDPAddr", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } udpAddr, err := nw.ResolveUDPAddr(udp, "localhost:1234") if !assert.NoError(t, err, "should succeed") { @@ -258,7 +280,10 @@ func TestNetVirtual(t *testing.T) { }) t.Run("UDPLoopback", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } conn, err := nw.ListenPacket(udp, "127.0.0.1:0") assert.NoError(t, err, "should succeed") @@ -281,7 +306,10 @@ func TestNetVirtual(t *testing.T) { }) t.Run("ListenPacket random port", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } conn, err := nw.ListenPacket(udp, "127.0.0.1:0") assert.NoError(t, err, "should succeed") @@ -295,7 +323,10 @@ func TestNetVirtual(t *testing.T) { }) t.Run("ListenPacket specific port", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } conn, err := nw.ListenPacket(udp, "127.0.0.1:50916") assert.NoError(t, err, "should succeed") @@ -309,7 +340,10 @@ func TestNetVirtual(t *testing.T) { }) t.Run("ListenUDP random port", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } srcAddr := &net.UDPAddr{ IP: net.ParseIP("127.0.0.1"), @@ -326,7 +360,10 @@ func TestNetVirtual(t *testing.T) { }) t.Run("ListenUDP specific port", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } srcAddr := &net.UDPAddr{ IP: net.ParseIP("127.0.0.1"), @@ -344,7 +381,10 @@ func TestNetVirtual(t *testing.T) { }) t.Run("Dial (UDP) lo0", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } conn, err := nw.Dial(udp, "127.0.0.1:1234") assert.NoError(t, err, "should succeed") @@ -369,9 +409,11 @@ func TestNetVirtual(t *testing.T) { LoggerFactory: loggerFactory, }) assert.NoError(t, err, "should succeed") - assert.NotNil(t, wan, "should succeed") - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } assert.NoError(t, wan.AddNet(nw), "should succeed") @@ -393,7 +435,10 @@ func TestNetVirtual(t *testing.T) { }) t.Run("DialUDP", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } locAddr := &net.UDPAddr{ IP: net.IPv4(127, 0, 0, 1), @@ -433,7 +478,10 @@ func TestNetVirtual(t *testing.T) { err = wan.AddHost("test.pion.ly", "30.31.32.33") assert.NoError(t, err, "should succeed") - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } assert.NoError(t, wan.AddNet(nw), "should succeed") @@ -455,7 +503,10 @@ func TestNetVirtual(t *testing.T) { }) t.Run("Loopback", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } conn, err := nw.ListenPacket(udp, "127.0.0.1:50916") assert.NoError(t, err, "should succeed") @@ -524,16 +575,21 @@ func TestNetVirtual(t *testing.T) { LoggerFactory: loggerFactory, }) assert.NoError(t, err, "should succeed") - assert.NotNil(t, wan, "should succeed") - net1 := NewNet(&NetConfig{}) + net1, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } err = wan.AddNet(net1) assert.NoError(t, err, "should succeed") ip1, err := getIPAddr(net1) assert.NoError(t, err, "should succeed") - net2 := NewNet(&NetConfig{}) + net2, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } err = wan.AddNet(net2) assert.NoError(t, err, "should succeed") @@ -618,7 +674,10 @@ func TestNetVirtual(t *testing.T) { }) t.Run("Dialer", func(t *testing.T) { - nw := NewNet(&NetConfig{}) + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } dialer := nw.CreateDialer(&net.Dialer{ LocalAddr: &net.UDPAddr{ @@ -655,12 +714,15 @@ func TestNetVirtual(t *testing.T) { assert.NoError(t, err, "should succeed") assert.NotNil(t, wan, "should succeed") - net1 := NewNet(&NetConfig{ + net1, err := NewNet(&NetConfig{ StaticIPs: []string{ demoIP, "1.2.3.5", }, }) + if !assert.NoError(t, err, "should succeed") { + return + } err = wan.AddNet(net1) assert.NoError(t, err, "should succeed") diff --git a/vnet/router_test.go b/vnet/router_test.go index f8889da..59eb6e5 100644 --- a/vnet/router_test.go +++ b/vnet/router_test.go @@ -83,8 +83,10 @@ func TestRouterStandalone(t *testing.T) { }) assert.Nil(t, err, "should succeed") - nic := NewNet(&NetConfig{}) - assert.NotNil(t, nic, "should succeed") + nic, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } err = r.AddNet(nic) assert.Nil(t, err, "should succeed") @@ -137,8 +139,10 @@ func TestRouterStandalone(t *testing.T) { ip := make([]*net.UDPAddr, 2) for i := 0; i < 2; i++ { - anic := NewNet(&NetConfig{}) - assert.NotNil(t, anic, "should succeed") + anic, netErr := NewNet(&NetConfig{}) + if !assert.NoError(t, netErr, "should succeed") { + return + } nic[i] = &dummyNIC{ Net: anic, @@ -195,8 +199,10 @@ func TestRouterStandalone(t *testing.T) { ip := make([]*net.UDPAddr, 2) for i := 0; i < 2; i++ { - anic := NewNet(&NetConfig{}) - assert.NotNil(t, anic, "should succeed") + anic, netErr := NewNet(&NetConfig{}) + if !assert.NoError(t, netErr, "should succeed") { + return + } nic[i] = &dummyNIC{ Net: anic, @@ -293,8 +299,10 @@ func TestRouterDelay(t *testing.T) { ip := make([]*net.UDPAddr, 2) for i := 0; i < 2; i++ { - anic := NewNet(&NetConfig{}) - assert.NotNil(t, anic, "should succeed") + anic, netErr := NewNet(&NetConfig{}) + if !assert.NoError(t, netErr, "should succeed") { + return + } nic[i] = &dummyNIC{ Net: anic, @@ -374,11 +382,13 @@ func TestRouterOneChild(t *testing.T) { CIDR: "1.2.3.0/24", LoggerFactory: loggerFactory, }) - assert.Nil(t, err, "should succeed") - assert.NotNil(t, wan, "should succeed") + nw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } wanNet := &dummyNIC{ - Net: NewNet(&NetConfig{}), + Net: nw, } err = wan.AddNet(wanNet) @@ -394,11 +404,13 @@ func TestRouterOneChild(t *testing.T) { CIDR: "192.168.0.0/24", LoggerFactory: loggerFactory, }) - assert.Nil(t, err, "should succeed") - assert.NotNil(t, lan, "should succeed") + lnw, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } lanNet := &dummyNIC{ - Net: NewNet(&NetConfig{}), + Net: lnw, } err = lan.AddNet(lanNet) assert.Nil(t, err, "should succeed") @@ -631,12 +643,14 @@ func TestRouterFailures(t *testing.T) { }) assert.Nil(t, err, "should succeed") - nic := NewNet(&NetConfig{ + nic, err := NewNet(&NetConfig{ StaticIPs: []string{ "5.6.7.8", // out of parent router'c CIDR }, }) - assert.NotNil(t, nic, "should succeed") + if !assert.NoError(t, err, "should succeed") { + return + } err = r.AddNet(nic) assert.Error(t, err, "should fail") diff --git a/vnet/stress_test.go b/vnet/stress_test.go index 9e8483c..25d70f3 100644 --- a/vnet/stress_test.go +++ b/vnet/stress_test.go @@ -29,9 +29,12 @@ func TestStressTestUDP(t *testing.T) { assert.NoError(t, err, "should succeed") assert.NotNil(t, wan, "should succeed") - net0 := NewNet(&NetConfig{ + net0, err := NewNet(&NetConfig{ StaticIPs: []string{demoIP}, }) + if !assert.NoError(t, err, "should succeed") { + return + } err = wan.AddNet(net0) assert.NoError(t, err, "should succeed") @@ -45,7 +48,10 @@ func TestStressTestUDP(t *testing.T) { assert.NoError(t, err, "should succeed") assert.NotNil(t, lan, "should succeed") - net1 := NewNet(&NetConfig{}) + net1, err := NewNet(&NetConfig{}) + if !assert.NoError(t, err, "should succeed") { + return + } err = lan.AddNet(net1) assert.NoError(t, err, "should succeed") diff --git a/vnet/udpproxy.go b/vnet/udpproxy.go index 2e5ba11..1378d73 100644 --- a/vnet/udpproxy.go +++ b/vnet/udpproxy.go @@ -110,10 +110,14 @@ func (v *aUDPProxyWorker) Close() error { func (v *aUDPProxyWorker) Proxy(ctx context.Context, client *Net, serverAddr *net.UDPAddr) error { // nolint:gocognit // Create vnet for real server by serverAddr. - nw := NewNet(&NetConfig{ + nw, err := NewNet(&NetConfig{ StaticIP: serverAddr.IP.String(), }) - if err := v.router.AddNet(nw); err != nil { + if err != nil { + return err + } + + if err = v.router.AddNet(nw); err != nil { return err } diff --git a/vnet/udpproxy_direct_test.go b/vnet/udpproxy_direct_test.go index 99d7777..1e3b8c4 100644 --- a/vnet/udpproxy_direct_test.go +++ b/vnet/udpproxy_direct_test.go @@ -83,9 +83,13 @@ func TestUDPProxyDirectDeliverTypical(t *testing.T) { return err } - clientNetwork := NewNet(&NetConfig{ + clientNetwork, err := NewNet(&NetConfig{ StaticIP: "10.0.0.11", }) + if err != nil { + return err + } + if err = router.AddNet(clientNetwork); err != nil { return err } @@ -232,9 +236,13 @@ func TestUDPProxyDirectDeliverBadCase(t *testing.T) { return err } - clientNetwork := NewNet(&NetConfig{ + clientNetwork, err := NewNet(&NetConfig{ StaticIP: "10.0.0.11", }) + if err != nil { + return err + } + if err = router.AddNet(clientNetwork); err != nil { return err } diff --git a/vnet/udpproxy_test.go b/vnet/udpproxy_test.go index 98e1114..cc9b25d 100644 --- a/vnet/udpproxy_test.go +++ b/vnet/udpproxy_test.go @@ -156,9 +156,13 @@ func TestUDPProxyOne2One(t *testing.T) { return err } - clientNetwork := NewNet(&NetConfig{ + clientNetwork, err := NewNet(&NetConfig{ StaticIP: "10.0.0.11", }) + if err != nil { + return err + } + if err = router.AddNet(clientNetwork); err != nil { return err } @@ -305,9 +309,13 @@ func TestUDPProxyTwo2One(t *testing.T) { return err } - clientNetwork := NewNet(&NetConfig{ + clientNetwork, err := NewNet(&NetConfig{ StaticIP: "10.0.0.11", }) + if err != nil { + return err + } + if err = router.AddNet(clientNetwork); err != nil { return err } @@ -489,9 +497,13 @@ func TestUDPProxyProxyTwice(t *testing.T) { return err } - clientNetwork := NewNet(&NetConfig{ + clientNetwork, err := NewNet(&NetConfig{ StaticIP: "10.0.0.11", }) + if err != nil { + return err + } + if err = router.AddNet(clientNetwork); err != nil { return err }