8
8
"testing"
9
9
"time"
10
10
11
+ io_prometheus_client "github.com/prometheus/client_model/go"
11
12
"github.com/prometheus/common/expfmt"
12
13
"sigs.k8s.io/e2e-framework/klient/wait"
13
14
"sigs.k8s.io/e2e-framework/klient/wait/conditions"
@@ -16,10 +17,11 @@ import (
16
17
)
17
18
18
19
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"
20
22
adminPort := 8093
21
23
22
- serverDeploymentCfg := DeploymentConfig {
24
+ serverStatefulSetCfg := StatefulSetConfig {
23
25
Replicas : 1 ,
24
26
Image : * serverImage ,
25
27
Args : []KeyValue {
@@ -43,18 +45,18 @@ func TestSingleServer_SingleAgent_StaticCount(t *testing.T) {
43
45
{Key : "server-count" , Value : "1" },
44
46
},
45
47
}
46
- serverDeployment , _ , err := renderServerTemplate ("deployment .yaml" , serverDeploymentCfg )
48
+ serverStatefulSet , _ , err := renderServerTemplate ("statefulset .yaml" , serverStatefulSetCfg )
47
49
if err != nil {
48
50
t .Fatalf ("could not render server deployment: %v" , err )
49
51
}
50
52
51
- agentDeploymentCfg := DeploymentConfig {
53
+ agentStatefulSetConfig := StatefulSetConfig {
52
54
Replicas : 1 ,
53
55
Image : * agentImage ,
54
56
Args : []KeyValue {
55
57
{Key : "logtostderr" , Value : "true" },
56
58
{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 },
58
60
{Key : "proxy-server-port" , Value : "8091" },
59
61
{Key : "sync-interval" , Value : "1s" },
60
62
{Key : "sync-interval-cap" , Value : "10s" },
@@ -64,26 +66,26 @@ func TestSingleServer_SingleAgent_StaticCount(t *testing.T) {
64
66
{Key : "server-count" , Value : "1" },
65
67
},
66
68
}
67
- agentDeployment , _ , err := renderAgentTemplate ("deployment .yaml" , agentDeploymentCfg )
69
+ agentStatefulSet , _ , err := renderAgentTemplate ("statefulset .yaml" , agentStatefulSetConfig )
68
70
if err != nil {
69
71
t .Fatalf ("could not render agent deployment: %v" , err )
70
72
}
71
73
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" )
73
75
feature .Setup (func (ctx context.Context , t * testing.T , cfg * envconf.Config ) context.Context {
74
76
client := cfg .Client ()
75
- err := client .Resources ().Create (ctx , serverDeployment )
77
+ err := client .Resources ().Create (ctx , serverStatefulSet )
76
78
if err != nil {
77
79
t .Fatalf ("could not create server deployment: %v" , err )
78
80
}
79
81
80
- err = client .Resources ().Create (ctx , agentDeployment )
82
+ err = client .Resources ().Create (ctx , agentStatefulSet )
81
83
if err != nil {
82
84
t .Fatalf ("could not create agent deployment: %v" , err )
83
85
}
84
86
85
87
err = wait .For (
86
- conditions .New (client .Resources ()).DeploymentAvailable (agentDeployment .GetName (), agentDeployment .GetNamespace ()),
88
+ conditions .New (client .Resources ()).DeploymentAvailable (agentStatefulSet .GetName (), agentStatefulSet .GetNamespace ()),
87
89
wait .WithTimeout (1 * time .Minute ),
88
90
wait .WithInterval (10 * time .Second ),
89
91
)
@@ -92,7 +94,7 @@ func TestSingleServer_SingleAgent_StaticCount(t *testing.T) {
92
94
}
93
95
94
96
err = wait .For (
95
- conditions .New (client .Resources ()).DeploymentAvailable (serverDeployment .GetName (), serverDeployment .GetNamespace ()),
97
+ conditions .New (client .Resources ()).DeploymentAvailable (serverStatefulSet .GetName (), serverStatefulSet .GetNamespace ()),
96
98
wait .WithTimeout (1 * time .Minute ),
97
99
wait .WithInterval (10 * time .Second ),
98
100
)
@@ -103,21 +105,30 @@ func TestSingleServer_SingleAgent_StaticCount(t *testing.T) {
103
105
return ctx
104
106
})
105
107
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 ))
107
109
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" )
109
115
}
110
116
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 )
116
120
}
117
121
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" ]
119
130
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" )
121
132
}
122
133
123
134
numConnections := int (connectionsMetric .GetMetric ()[0 ].GetGauge ().GetValue ())
@@ -128,3 +139,19 @@ func TestSingleServer_SingleAgent_StaticCount(t *testing.T) {
128
139
return ctx
129
140
})
130
141
}
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
+ }
0 commit comments