11package e2e
22
33import (
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+
6787func 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+
257321func 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