1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
package main
import (
"testing"
"github.com/containers/common/pkg/machine"
"github.com/rootless-containers/rootlesskit/pkg/port"
"github.com/stretchr/testify/assert"
)
type SpecData struct {
mach string
sourceProto string
sourceIP string
expectCount int
expectProto string
expectIP string
secondProto string
secondIP string
}
func TestDualStackSplit(t *testing.T) {
//nolint:revive,stylecheck
const (
IP4_ALL = "0.0.0.0"
IP4__LO = "127.0.0.1"
IP6_ALL = "::"
IP6__LO = "::1"
TCP_ = "tcp"
TCP4 = "tcp4"
TCP6 = "tcp6"
WSL = "wsl"
___ = ""
IP6_REG = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
IP4_REG = "10.0.0.1"
)
tests := []SpecData{
// Split cases
{WSL, TCP_, IP4_ALL, 2, TCP4, IP4_ALL, TCP6, IP6_ALL},
{WSL, TCP_, IP6_ALL, 2, TCP4, IP4_ALL, TCP6, IP6_ALL},
{WSL, TCP_, IP6__LO, 2, TCP4, IP4__LO, TCP6, IP6__LO},
// Non-Split
{WSL, TCP_, IP4__LO, 1, TCP_, IP4__LO, "", ""},
{WSL, TCP4, IP4_ALL, 1, TCP4, IP4_ALL, "", ""},
{WSL, TCP6, IP6__LO, 1, TCP6, IP6__LO, "", ""},
{WSL, TCP_, IP4_REG, 1, TCP_, IP4_REG, "", ""},
{WSL, TCP_, IP6_REG, 1, TCP_, IP6_REG, "", ""},
{___, TCP_, IP4_ALL, 1, TCP_, IP4_ALL, "", ""},
{___, TCP_, IP6_ALL, 1, TCP_, IP6_ALL, "", ""},
{___, TCP_, IP4__LO, 1, TCP_, IP4__LO, "", ""},
{___, TCP_, IP6__LO, 1, TCP_, IP6__LO, "", ""},
}
for _, data := range tests {
verifySplit(t, data)
}
}
func verifySplit(t *testing.T, data SpecData) {
machine := machine.GetMachineMarker()
oldEnable, oldType := machine.Enabled, machine.Type
machine.Enabled, machine.Type = len(data.mach) > 0, data.mach
source := port.Spec{
Proto: data.sourceProto,
ParentIP: data.sourceIP,
ParentPort: 100,
ChildIP: "1.1.1.1",
ChildPort: 200,
}
expect, second := source, source
specs := splitDualStackSpecIfWsl(source)
assert.Equal(t, data.expectCount, len(specs))
expect.Proto = data.expectProto
expect.ParentIP = data.expectIP
assert.Equal(t, expect, specs[0])
if data.expectCount > 1 {
second.Proto = data.secondProto
second.ParentIP = data.secondIP
assert.Equal(t, second, specs[1])
}
machine.Enabled, machine.Type = oldEnable, oldType
}
|