1
16
17 package probe
18
19 import (
20 "testing"
21
22 v1 "k8s.io/api/core/v1"
23 "k8s.io/apimachinery/pkg/util/intstr"
24 )
25
26 func TestFindPortByName(t *testing.T) {
27 t.Parallel()
28 type args struct {
29 container *v1.Container
30 portName string
31 }
32 tests := []struct {
33 name string
34 args args
35 want int
36 wantErr bool
37 }{
38 {
39 name: "get port from exist port name",
40 args: args{
41 container: &v1.Container{
42 Ports: []v1.ContainerPort{
43 {
44 Name: "foo",
45 ContainerPort: 8080,
46 },
47 {
48 Name: "bar",
49 ContainerPort: 9000,
50 },
51 },
52 },
53 portName: "foo",
54 },
55 want: 8080,
56 wantErr: false,
57 },
58 {
59 name: "get port from not exist port name",
60 args: args{
61 container: &v1.Container{
62 Ports: []v1.ContainerPort{
63 {
64 Name: "foo",
65 ContainerPort: 8080,
66 },
67 {
68 Name: "bar",
69 ContainerPort: 9000,
70 },
71 },
72 },
73 portName: "http",
74 },
75 want: 0,
76 wantErr: true,
77 },
78 }
79
80 for _, tt := range tests {
81 tt := tt
82 t.Run(tt.name, func(t *testing.T) {
83 t.Parallel()
84 got, err := findPortByName(tt.args.container, tt.args.portName)
85 if (err != nil) != tt.wantErr {
86 t.Errorf("findPortByName() error = %v, wantErr %v", err, tt.wantErr)
87 return
88 }
89 if got != tt.want {
90 t.Errorf("findPortByName() = %v, want %v", got, tt.want)
91 }
92 })
93 }
94 }
95
96 func TestResolveContainerPort(t *testing.T) {
97 t.Parallel()
98 type args struct {
99 param intstr.IntOrString
100 container *v1.Container
101 }
102 tests := []struct {
103 name string
104 args args
105 want int
106 wantErr bool
107 }{
108 {
109 name: "get port by int type",
110 args: args{
111 param: intstr.IntOrString{Type: 0, IntVal: 443},
112 container: &v1.Container{},
113 },
114 want: 443,
115 wantErr: false,
116 },
117 {
118 name: "invalid port",
119 args: args{
120 param: intstr.IntOrString{Type: 0, IntVal: 66666},
121 container: &v1.Container{},
122 },
123 want: 66666,
124 wantErr: true,
125 },
126 {
127 name: "get port by port name",
128 args: args{
129 param: intstr.IntOrString{Type: 1, StrVal: "foo"},
130 container: &v1.Container{
131 Ports: []v1.ContainerPort{
132 {
133 Name: "foo",
134 ContainerPort: 8080,
135 },
136 {
137 Name: "bar",
138 ContainerPort: 9000,
139 },
140 },
141 },
142 },
143 want: 8080,
144 wantErr: false,
145 },
146 {
147 name: "no port name",
148 args: args{
149 param: intstr.IntOrString{Type: 1, StrVal: "foo"},
150 container: &v1.Container{
151 Ports: []v1.ContainerPort{
152 {
153 Name: "bar",
154 ContainerPort: 9000,
155 },
156 },
157 },
158 },
159 want: 0,
160 wantErr: true,
161 },
162 {
163 name: "invalid param type",
164 args: args{
165 param: intstr.IntOrString{Type: 2, StrVal: "foo"},
166 container: &v1.Container{
167 Ports: []v1.ContainerPort{
168 {
169 Name: "foo",
170 ContainerPort: 8080,
171 },
172 {
173 Name: "bar",
174 ContainerPort: 9000,
175 },
176 },
177 },
178 },
179 want: -1,
180 wantErr: true,
181 },
182 }
183 for _, tt := range tests {
184 tt := tt
185 t.Run(tt.name, func(t *testing.T) {
186 t.Parallel()
187 got, err := ResolveContainerPort(tt.args.param, tt.args.container)
188 if (err != nil) != tt.wantErr {
189 t.Errorf("ResolveContainerPort() error = %v, wantErr %v", err, tt.wantErr)
190 return
191 }
192 if got != tt.want {
193 t.Errorf("ResolveContainerPort() = %v, want %v", got, tt.want)
194 }
195 })
196 }
197 }
198
View as plain text