Skip to content

Commit c2f6cf1

Browse files
authored
Add benchmark tests for configurator (#6423)
1 parent 150bb9f commit c2f6cf1

File tree

1 file changed

+236
-0
lines changed

1 file changed

+236
-0
lines changed
Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
package configs
2+
3+
import (
4+
"testing"
5+
6+
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
7+
8+
"github.com/nginxinc/kubernetes-ingress/internal/configs/version1"
9+
"github.com/nginxinc/kubernetes-ingress/internal/configs/version2"
10+
"github.com/nginxinc/kubernetes-ingress/internal/nginx"
11+
conf_v1 "github.com/nginxinc/kubernetes-ingress/pkg/apis/configuration/v1"
12+
)
13+
14+
func createTestConfiguratorBench() (*Configurator, error) {
15+
templateExecutor, err := version1.NewTemplateExecutor("version1/nginx-plus.tmpl", "version1/nginx-plus.ingress.tmpl")
16+
if err != nil {
17+
return nil, err
18+
}
19+
20+
templateExecutorV2, err := version2.NewTemplateExecutor("version2/nginx-plus.virtualserver.tmpl", "version2/nginx-plus.transportserver.tmpl")
21+
if err != nil {
22+
return nil, err
23+
}
24+
25+
manager := nginx.NewFakeManager("/etc/nginx")
26+
cnf := NewConfigurator(ConfiguratorParams{
27+
NginxManager: manager,
28+
StaticCfgParams: createTestStaticConfigParams(),
29+
Config: NewDefaultConfigParams(false),
30+
TemplateExecutor: templateExecutor,
31+
TemplateExecutorV2: templateExecutorV2,
32+
LatencyCollector: nil,
33+
LabelUpdater: nil,
34+
IsPlus: false,
35+
IsWildcardEnabled: false,
36+
IsPrometheusEnabled: false,
37+
IsLatencyMetricsEnabled: false,
38+
NginxVersion: nginx.NewVersion("nginx version: nginx/1.25.3 (nginx-plus-r31)"),
39+
})
40+
cnf.isReloadsEnabled = true
41+
return cnf, nil
42+
}
43+
44+
func BenchmarkAddOrUpdateIngress(b *testing.B) {
45+
cnf, err := createTestConfiguratorBench()
46+
if err != nil {
47+
b.Fatal(err)
48+
}
49+
ingress := createCafeIngressEx()
50+
51+
b.ResetTimer()
52+
for range b.N {
53+
_, err := cnf.AddOrUpdateIngress(&ingress)
54+
if err != nil {
55+
b.Fatal(err)
56+
}
57+
}
58+
}
59+
60+
func BenchmarkAddOrUpdateMergeableIngress(b *testing.B) {
61+
cnf, err := createTestConfiguratorBench()
62+
if err != nil {
63+
b.Fatal(err)
64+
}
65+
mergeableIngress := createMergeableCafeIngress()
66+
67+
b.ResetTimer()
68+
for range b.N {
69+
_, err := cnf.AddOrUpdateMergeableIngress(mergeableIngress)
70+
if err != nil {
71+
b.Fatal(err)
72+
}
73+
}
74+
}
75+
76+
func BenchUpdateEndpoints(b *testing.B) {
77+
cnf, err := createTestConfiguratorBench()
78+
if err != nil {
79+
b.Fatal(err)
80+
}
81+
ingress := createCafeIngressEx()
82+
ingresses := []*IngressEx{&ingress}
83+
84+
b.ResetTimer()
85+
for range b.N {
86+
err := cnf.UpdateEndpoints(ingresses)
87+
if err != nil {
88+
b.Fatal(err)
89+
}
90+
}
91+
}
92+
93+
func BenchmarkUpdateEndpointsMergeableIngress(b *testing.B) {
94+
cnf, err := createTestConfiguratorBench()
95+
if err != nil {
96+
b.Fatal(err)
97+
}
98+
mergeableIngress := createMergeableCafeIngress()
99+
mergeableIngresses := []*MergeableIngresses{mergeableIngress}
100+
101+
b.ResetTimer()
102+
for range b.N {
103+
err := cnf.UpdateEndpointsMergeableIngress(mergeableIngresses)
104+
if err != nil {
105+
b.Fatal(err)
106+
}
107+
}
108+
}
109+
110+
func BenchmarkAddVirtualServerMetricsLabels(b *testing.B) {
111+
cnf, err := createTestConfiguratorBench()
112+
if err != nil {
113+
b.Fatal(err)
114+
}
115+
116+
cnf.isPlus = true
117+
cnf.labelUpdater = newFakeLabelUpdater()
118+
testLatencyCollector := newMockLatencyCollector()
119+
cnf.latencyCollector = testLatencyCollector
120+
121+
vsEx := &VirtualServerEx{
122+
VirtualServer: &conf_v1.VirtualServer{
123+
ObjectMeta: meta_v1.ObjectMeta{
124+
Name: "test-vs",
125+
Namespace: "default",
126+
},
127+
Spec: conf_v1.VirtualServerSpec{
128+
Host: "example.com",
129+
},
130+
},
131+
PodsByIP: map[string]PodInfo{
132+
"10.0.0.1:80": {Name: "pod-1"},
133+
"10.0.0.2:80": {Name: "pod-2"},
134+
},
135+
}
136+
137+
upstreams := []version2.Upstream{
138+
{
139+
Name: "upstream-1",
140+
Servers: []version2.UpstreamServer{
141+
{
142+
Address: "10.0.0.1:80",
143+
},
144+
},
145+
UpstreamLabels: version2.UpstreamLabels{
146+
Service: "service-1",
147+
ResourceType: "virtualserver",
148+
ResourceName: vsEx.VirtualServer.Name,
149+
ResourceNamespace: vsEx.VirtualServer.Namespace,
150+
},
151+
},
152+
{
153+
Name: "upstream-2",
154+
Servers: []version2.UpstreamServer{
155+
{
156+
Address: "10.0.0.2:80",
157+
},
158+
},
159+
UpstreamLabels: version2.UpstreamLabels{
160+
Service: "service-2",
161+
ResourceType: "virtualserver",
162+
ResourceName: vsEx.VirtualServer.Name,
163+
ResourceNamespace: vsEx.VirtualServer.Namespace,
164+
},
165+
},
166+
}
167+
168+
b.ResetTimer()
169+
for range b.N {
170+
cnf.updateVirtualServerMetricsLabels(vsEx, upstreams)
171+
}
172+
}
173+
174+
func BenchmarkAddTransportServerMetricsLabels(b *testing.B) {
175+
cnf, err := createTestConfiguratorBench()
176+
if err != nil {
177+
b.Fatal(err)
178+
}
179+
cnf.isPlus = true
180+
cnf.labelUpdater = newFakeLabelUpdater()
181+
182+
tsEx := &TransportServerEx{
183+
TransportServer: &conf_v1.TransportServer{
184+
ObjectMeta: meta_v1.ObjectMeta{
185+
Name: "test-transportserver",
186+
Namespace: "default",
187+
},
188+
Spec: conf_v1.TransportServerSpec{
189+
Listener: conf_v1.TransportServerListener{
190+
Name: "dns-tcp",
191+
Protocol: "TCP",
192+
},
193+
},
194+
},
195+
PodsByIP: map[string]string{
196+
"10.0.0.1:80": "pod-1",
197+
"10.0.0.2:80": "pod-2",
198+
},
199+
}
200+
201+
streamUpstreams := []version2.StreamUpstream{
202+
{
203+
Name: "upstream-1",
204+
Servers: []version2.StreamUpstreamServer{
205+
{
206+
Address: "10.0.0.1:80",
207+
},
208+
},
209+
UpstreamLabels: version2.UpstreamLabels{
210+
Service: "service-1",
211+
ResourceType: "transportserver",
212+
ResourceName: tsEx.TransportServer.Name,
213+
ResourceNamespace: tsEx.TransportServer.Namespace,
214+
},
215+
},
216+
{
217+
Name: "upstream-2",
218+
Servers: []version2.StreamUpstreamServer{
219+
{
220+
Address: "10.0.0.2:80",
221+
},
222+
},
223+
UpstreamLabels: version2.UpstreamLabels{
224+
Service: "service-2",
225+
ResourceType: "transportserver",
226+
ResourceName: tsEx.TransportServer.Name,
227+
ResourceNamespace: tsEx.TransportServer.Namespace,
228+
},
229+
},
230+
}
231+
232+
b.ResetTimer()
233+
for range b.N {
234+
cnf.updateTransportServerMetricsLabels(tsEx, streamUpstreams)
235+
}
236+
}

0 commit comments

Comments
 (0)