Skip to content

Commit 2133079

Browse files
committed
add e2e to check that metrics is accessible
1 parent 6dd31a0 commit 2133079

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ $(call build-image,ocp-cluster-kube-scheduler-operator,$(IMAGE_REGISTRY)/ocp/4.2
3434
$(call add-bindata,v4.1.0,./bindata/v4.1.0/...,bindata,v410_00_assets,pkg/operator/v410_00_assets/bindata.go)
3535

3636
e2e: GO_TEST_PACKAGES :=./test/e2e
37+
e2e: GO_TEST_FLAGS += -v
3738
e2e: test-unit
3839
.PHONY: e2e
3940

test/e2e/scheduler_test.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package e2e
22

33
import (
4+
"context"
45
"fmt"
56
"os"
67
"strings"
@@ -12,12 +13,18 @@ import (
1213
configv1client "github.com/openshift/client-go/config/clientset/versioned"
1314
operatorversionedclient "github.com/openshift/client-go/operator/clientset/versioned"
1415
operatorclientv1 "github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1"
16+
routeclient "github.com/openshift/client-go/route/clientset/versioned"
1517
"github.com/openshift/library-go/pkg/operator/v1helpers"
18+
"github.com/openshift/library-go/test/library/metrics"
19+
20+
"github.com/prometheus/common/model"
21+
1622
appsv1 "k8s.io/api/apps/v1"
1723
corev1 "k8s.io/api/core/v1"
1824
"k8s.io/apimachinery/pkg/api/errors"
1925
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2026
"k8s.io/apimachinery/pkg/util/wait"
27+
"k8s.io/apiserver/pkg/storage/names"
2128
k8sclient "k8s.io/client-go/kubernetes"
2229
"k8s.io/client-go/tools/clientcmd"
2330
"k8s.io/klog"
@@ -64,6 +71,19 @@ func getOpenShiftOperatorConfigClient() (*operatorversionedclient.Clientset, err
6471
return operatorClient, nil
6572
}
6673

74+
func getOpenShiftRouteClient() (*routeclient.Clientset, error) {
75+
kubeconfig := os.Getenv("KUBECONFIG")
76+
config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
77+
if err != nil {
78+
return nil, err
79+
}
80+
routeClient, err := routeclient.NewForConfig(config)
81+
if err != nil {
82+
return nil, err
83+
}
84+
return routeClient, nil
85+
}
86+
6787
func waitForOperator(kclient *k8sclient.Clientset) error {
6888
return wait.PollImmediate(1*time.Second, 10*time.Minute, func() (bool, error) {
6989
d, err := kclient.AppsV1().Deployments("openshift-kube-scheduler-operator").Get("openshift-kube-scheduler-operator", metav1.GetOptions{})
@@ -254,6 +274,50 @@ func TestPolicyConfigMapUpdate(t *testing.T) {
254274
}
255275
}
256276

277+
func TestMetricsAccessible(t *testing.T) {
278+
kClient, err := getKubeClient()
279+
if err != nil {
280+
t.Fatalf("failed to get kubeclient with error %v", err)
281+
}
282+
routeClient, err := getOpenShiftRouteClient()
283+
if err != nil {
284+
t.Fatalf("failed to get routeclient with error %v", err)
285+
}
286+
name := names.SimpleNameGenerator.GenerateName("ksotest-metrics-")
287+
_, err = kClient.CoreV1().Namespaces().Create(&corev1.Namespace{
288+
ObjectMeta: metav1.ObjectMeta{
289+
Name: name,
290+
},
291+
})
292+
if err != nil {
293+
t.Fatalf("could not create test namespace: %v", err)
294+
}
295+
defer kClient.CoreV1().Namespaces().Delete(name, &metav1.DeleteOptions{})
296+
297+
// Now verify kso metrics are accessible
298+
prometheusClient, err := metrics.NewPrometheusClient(kClient, routeClient, "query")
299+
if err != nil {
300+
t.Fatalf("error creating route client for prometheus: %v", err)
301+
}
302+
var response model.Value
303+
err = wait.PollImmediate(time.Second*1, time.Second*30, func() (bool, error) {
304+
response, _, err = prometheusClient.Query(context.Background(), `scheduler_scheduling_duration_seconds_sum`, time.Now())
305+
if err != nil {
306+
return false, fmt.Errorf("error querying prometheus: %v", err)
307+
}
308+
if len(response.String()) == 0 {
309+
return false, nil
310+
}
311+
return true, nil
312+
})
313+
if err != nil {
314+
t.Fatalf("prometheus returned unexpected results: %v", err)
315+
}
316+
317+
// do something with result, eventually this will be tested b4 and after rotation to ensure values differ
318+
fmt.Printf("result from prometheus query `scheduler_scheduling_duration_seconds_sum`: %v", response)
319+
}
320+
257321
func waitForPolicyConfigMapCreation(kclient *k8sclient.Clientset, cm *corev1.ConfigMap) (*corev1.ConfigMap, error) {
258322
var policyCM *corev1.ConfigMap
259323
err := wait.PollImmediate(1*time.Second, 5*time.Minute, func() (bool, error) {

0 commit comments

Comments
 (0)