Skip to content

Commit 2c7858a

Browse files
committed
Improve e2e tests
1 parent 1cafd93 commit 2c7858a

File tree

6 files changed

+92
-36
lines changed

6 files changed

+92
-36
lines changed

e2e/singleserver_singleagent_test.go

Lines changed: 47 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"testing"
99
"time"
1010

11+
io_prometheus_client "github.com/prometheus/client_model/go"
1112
"github.com/prometheus/common/expfmt"
1213
"sigs.k8s.io/e2e-framework/klient/wait"
1314
"sigs.k8s.io/e2e-framework/klient/wait/conditions"
@@ -16,10 +17,11 @@ import (
1617
)
1718

1819
func TestSingleServer_SingleAgent_StaticCount(t *testing.T) {
19-
serviceHost := "konnectivity-server.kube-system.svc.cluster.local"
20+
serverServiceHost := "konnectivity-server.kube-system.svc.cluster.local"
21+
agentServiceHost := "konnectivity-agent.kube-system.svc.cluster.local"
2022
adminPort := 8093
2123

22-
serverDeploymentCfg := DeploymentConfig{
24+
serverStatefulSetCfg := StatefulSetConfig{
2325
Replicas: 1,
2426
Image: *serverImage,
2527
Args: []KeyValue{
@@ -43,18 +45,18 @@ func TestSingleServer_SingleAgent_StaticCount(t *testing.T) {
4345
{Key: "server-count", Value: "1"},
4446
},
4547
}
46-
serverDeployment, _, err := renderServerTemplate("deployment.yaml", serverDeploymentCfg)
48+
serverStatefulSet, _, err := renderServerTemplate("statefulset.yaml", serverStatefulSetCfg)
4749
if err != nil {
4850
t.Fatalf("could not render server deployment: %v", err)
4951
}
5052

51-
agentDeploymentCfg := DeploymentConfig{
53+
agentStatefulSetConfig := StatefulSetConfig{
5254
Replicas: 1,
5355
Image: *agentImage,
5456
Args: []KeyValue{
5557
{Key: "logtostderr", Value: "true"},
5658
{Key: "ca-cert", Value: "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"},
57-
{Key: "proxy-server-host", Value: serviceHost},
59+
{Key: "proxy-server-host", Value: serverServiceHost},
5860
{Key: "proxy-server-port", Value: "8091"},
5961
{Key: "sync-interval", Value: "1s"},
6062
{Key: "sync-interval-cap", Value: "10s"},
@@ -64,26 +66,26 @@ func TestSingleServer_SingleAgent_StaticCount(t *testing.T) {
6466
{Key: "server-count", Value: "1"},
6567
},
6668
}
67-
agentDeployment, _, err := renderAgentTemplate("deployment.yaml", agentDeploymentCfg)
69+
agentStatefulSet, _, err := renderAgentTemplate("statefulset.yaml", agentStatefulSetConfig)
6870
if err != nil {
6971
t.Fatalf("could not render agent deployment: %v", err)
7072
}
7173

72-
feature := features.New("konnectivity server and agent deployment with single replica for each")
74+
feature := features.New("konnectivity server and agent stateful set with single replica for each")
7375
feature.Setup(func(ctx context.Context, t *testing.T, cfg *envconf.Config) context.Context {
7476
client := cfg.Client()
75-
err := client.Resources().Create(ctx, serverDeployment)
77+
err := client.Resources().Create(ctx, serverStatefulSet)
7678
if err != nil {
7779
t.Fatalf("could not create server deployment: %v", err)
7880
}
7981

80-
err = client.Resources().Create(ctx, agentDeployment)
82+
err = client.Resources().Create(ctx, agentStatefulSet)
8183
if err != nil {
8284
t.Fatalf("could not create agent deployment: %v", err)
8385
}
8486

8587
err = wait.For(
86-
conditions.New(client.Resources()).DeploymentAvailable(agentDeployment.GetName(), agentDeployment.GetNamespace()),
88+
conditions.New(client.Resources()).DeploymentAvailable(agentStatefulSet.GetName(), agentStatefulSet.GetNamespace()),
8789
wait.WithTimeout(1*time.Minute),
8890
wait.WithInterval(10*time.Second),
8991
)
@@ -92,7 +94,7 @@ func TestSingleServer_SingleAgent_StaticCount(t *testing.T) {
9294
}
9395

9496
err = wait.For(
95-
conditions.New(client.Resources()).DeploymentAvailable(serverDeployment.GetName(), serverDeployment.GetNamespace()),
97+
conditions.New(client.Resources()).DeploymentAvailable(serverStatefulSet.GetName(), serverStatefulSet.GetNamespace()),
9698
wait.WithTimeout(1*time.Minute),
9799
wait.WithInterval(10*time.Second),
98100
)
@@ -103,21 +105,30 @@ func TestSingleServer_SingleAgent_StaticCount(t *testing.T) {
103105
return ctx
104106
})
105107
feature.Assess("konnectivity server has a connected client", func(ctx context.Context, t *testing.T, cfg *envconf.Config) context.Context {
106-
resp, err := http.Get(fmt.Sprintf("%v:%v/metrics", serviceHost, adminPort))
108+
metricsFamilies, err := getMetrics(fmt.Sprintf("%v:%v/metrics", serverServiceHost, adminPort))
107109
if err != nil {
108-
t.Fatalf("could not read server metrics: %v", err)
110+
t.Fatalf("couldn't get server metrics")
111+
}
112+
connectionsMetric, exists := metricsFamilies["konnectivity_network_proxy_server_ready_backend_connections"]
113+
if !exists {
114+
t.Fatalf("couldn't find number of ready backend connections in metrics")
109115
}
110116

111-
metricsParser := &expfmt.TextParser{}
112-
metricsFamilies, err := metricsParser.TextToMetricFamilies(resp.Body)
113-
defer resp.Body.Close()
114-
if err != nil {
115-
t.Fatalf("could not parse server metrics: %v", err)
117+
numConnections := int(connectionsMetric.GetMetric()[0].GetGauge().GetValue())
118+
if numConnections != 1 {
119+
t.Errorf("incorrect number of connected agents (want: 1, got: %v)", numConnections)
116120
}
117121

118-
connectionsMetric, exists := metricsFamilies["konnectivity_network_proxy_server_ready_backend_connections"]
122+
return ctx
123+
})
124+
feature.Assess("konnectivity agent is connected to a server", func(ctx context.Context, t *testing.T, cfg *envconf.Config) context.Context {
125+
metricsFamilies, err := getMetrics(fmt.Sprintf("%v:%v/metrics", agentServiceHost, adminPort))
126+
if err != nil {
127+
t.Fatalf("couldn't get agent metrics")
128+
}
129+
connectionsMetric, exists := metricsFamilies["konnectivity_network_proxy_agent_open_server_connections"]
119130
if !exists {
120-
t.Fatalf("couldn't find number of ready backend connections in metrics: %v", metricsFamilies)
131+
t.Fatalf("couldn't find number of open server connections in metrics")
121132
}
122133

123134
numConnections := int(connectionsMetric.GetMetric()[0].GetGauge().GetValue())
@@ -128,3 +139,19 @@ func TestSingleServer_SingleAgent_StaticCount(t *testing.T) {
128139
return ctx
129140
})
130141
}
142+
143+
func getMetrics(url string) (map[string]*io_prometheus_client.MetricFamily, error) {
144+
resp, err := http.Get(url)
145+
if err != nil {
146+
return nil, fmt.Errorf("could not get metrics: %w", err)
147+
}
148+
149+
metricsParser := &expfmt.TextParser{}
150+
metricsFamilies, err := metricsParser.TextToMetricFamilies(resp.Body)
151+
defer resp.Body.Close()
152+
if err != nil {
153+
return nil, fmt.Errorf("could not parse metrics: %w", err)
154+
}
155+
156+
return metricsFamilies, nil
157+
}

e2e/templates/agent/service.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: konnectivity-agent
5+
namespace: kube-system
6+
spec:
7+
selector:
8+
k8s-app: konnectivity-agent
9+
clusterIP: None
10+
ports:
11+
- protocol: TCP
12+
port: 8093
13+
targetPort: 8093

e2e/templates/agent/deployment.yaml renamed to e2e/templates/agent/statefulset.yaml

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
apiVersion: apps/v1
2-
kind: Deployment
2+
kind: StatefulSet
33
metadata:
44
labels:
55
k8s-app: konnectivity-agent
@@ -22,26 +22,26 @@ spec:
2222
requests:
2323
cpu: 50m
2424
limits:
25-
memory: 30Mi
25+
memdeploymentory: 30Mi
2626
command: [ "/proxy-agent"]
2727
args: [
2828
{{ range .Args }}
2929
"--{{ .Key }}{{if ne .Value ""}}={{ .Value }}{{ end }}",
3030
{{ end }}
3131
]
3232
env:
33-
- name: POD_NAME
34-
valueFrom:
35-
fieldRef:
36-
fieldPath: metadata.name
37-
- name: POD_NAMESPACE
38-
valueFrom:
39-
fieldRef:
40-
fieldPath: metadata.namespace
41-
- name: HOST_IP
42-
valueFrom:
43-
fieldRef:
44-
fieldPath: status.hostIP
33+
- name: POD_NAME
34+
valueFrom:
35+
fieldRef:
36+
fieldPath: metadata.name
37+
- name: POD_NAMESPACE
38+
valueFrom:
39+
fieldRef:
40+
fieldPath: metadata.namespace
41+
- name: HOST_IP
42+
valueFrom:
43+
fieldRef:
44+
fieldPath: status.hostIP
4545
livenessProbe:
4646
httpGet:
4747
scheme: HTTP
@@ -60,6 +60,19 @@ spec:
6060
- mountPath: /var/run/secrets/tokens
6161
name: konnectivity-agent-token
6262
serviceAccountName: konnectivity-agent
63+
ports:
64+
- name: serverport
65+
containerPort: 8090
66+
hostPort: 8090
67+
- name: agentport
68+
containerPort: 8091
69+
hostPort: 8091
70+
- name: healthport
71+
containerPort: 8092
72+
hostPort: 8092
73+
- name: adminport
74+
containerPort: 8093
75+
hostPort: 8093
6376
volumes:
6477
- name: konnectivity-agent-token
6578
projected:

e2e/templates/server/service.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,6 @@ spec:
1111
- protocol: TCP
1212
port: 8091
1313
targetPort: 8091
14+
- protocol: TCP
15+
port: 8093
16+
targetPort: 8093

e2e/templates/server/deployment.yaml renamed to e2e/templates/server/statefulset.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
apiVersion: apps/v1
2-
kind: Deployment
2+
kind: StatefulSet
33
metadata:
44
labels:
55
k8s-app: konnectivity-server

e2e/templates_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ type KeyValue struct {
1515
Value string
1616
}
1717

18-
type DeploymentConfig struct {
18+
type StatefulSetConfig struct {
1919
Replicas int
2020
Image string
2121
Args []KeyValue

0 commit comments

Comments
 (0)