diff --git a/tstest/integration/nat/nat_test.go b/tstest/integration/nat/nat_test.go index 45783aa75..3b3980ede 100644 --- a/tstest/integration/nat/nat_test.go +++ b/tstest/integration/nat/nat_test.go @@ -87,7 +87,7 @@ func findKernelPath(goMod string) (string, error) { return "", fmt.Errorf("failed to find kernel in %v", goMod) } -type addNodeFunc func(c *vnet.Config) *vnet.Node +type addNodeFunc func(c *vnet.Config) *vnet.Node // returns nil to omit test func easy(c *vnet.Config) *vnet.Node { n := c.NumNodes() + 1 @@ -96,6 +96,17 @@ func easy(c *vnet.Config) *vnet.Node { fmt.Sprintf("192.168.%d.1/24", n), vnet.EasyNAT)) } +func sameLAN(c *vnet.Config) *vnet.Node { + nw := c.FirstNetwork() + if nw == nil { + return nil + } + if !nw.CanTakeMoreNodes() { + return nil + } + return c.AddNode(nw) +} + func one2one(c *vnet.Config) *vnet.Node { n := c.NumNodes() + 1 return c.AddNode(c.AddNetwork( @@ -132,6 +143,9 @@ func (nt *natTest) runTest(node1, node2 addNodeFunc) pingRoute { node1(&c), node2(&c), } + if nodes[0] == nil || nodes[1] == nil { + t.Skip("skipping test; not applicable combination") + } var err error nt.vnet, err = vnet.New(&c) @@ -413,6 +427,7 @@ type nodeType struct { {"easyPMP", easyPMP}, {"hardPMP", hardPMP}, {"one2one", one2one}, + {"sameLAN", sameLAN}, } sem := syncs.NewSemaphore(2) @@ -420,9 +435,10 @@ type nodeType struct { mu sync.Mutex res = make(map[string]pingRoute) ) - for i, a := range types { - for _, b := range types[i:] { + for _, a := range types { + for _, b := range types { key := a.name + "-" + b.name + keyBack := b.name + "-" + a.name t.Run(key, func(t *testing.T) { t.Parallel() @@ -431,6 +447,10 @@ type nodeType struct { filename := key + ".cache" contents, _ := os.ReadFile(filename) + if len(contents) == 0 { + filename2 := keyBack + ".cache" + contents, _ = os.ReadFile(filename2) + } route := pingRoute(strings.TrimSpace(string(contents))) if route == "" { @@ -464,13 +484,18 @@ type nodeType struct { pf("\n") for _, a := range types { + if a.name == "sameLAN" { + continue + } pf("