@@ -99,6 +99,11 @@ func TestUserWorkloadMonitoringMetrics(t *testing.T) {
99
99
name : "assert alertmanager is not deployed in user namespace" ,
100
100
f : f .AssertStatefulsetDoesNotExist ("alertmanager-not-to-be-reconciled" , userWorkloadTestNs ),
101
101
},
102
+
103
+ {
104
+ name : "assert UWM federate endpoint is exposed" ,
105
+ f : assertUWMFederateEndpoint ,
106
+ },
102
107
} {
103
108
t .Run (scenario .name , scenario .f )
104
109
}
@@ -631,7 +636,7 @@ func assertTenancyForMetrics(t *testing.T) {
631
636
err = framework .Poll (5 * time .Second , time .Minute , func () error {
632
637
// The tenancy port (9092) is only exposed in-cluster so we need to use
633
638
// port forwarding to access kube-rbac-proxy.
634
- host , cleanUp , err := f .ForwardPort (t , "thanos-querier" , 9092 )
639
+ host , cleanUp , err := f .ForwardPort (t , f . Ns , "thanos-querier" , 9092 )
635
640
if err != nil {
636
641
t .Fatal (err )
637
642
}
@@ -698,7 +703,7 @@ func assertTenancyForMetrics(t *testing.T) {
698
703
err = framework .Poll (5 * time .Second , time .Minute , func () error {
699
704
// The tenancy port (9092) is only exposed in-cluster so we need to use
700
705
// port forwarding to access kube-rbac-proxy.
701
- host , cleanUp , err := f .ForwardPort (t , "thanos-querier" , 9092 )
706
+ host , cleanUp , err := f .ForwardPort (t , f . Ns , "thanos-querier" , 9092 )
702
707
if err != nil {
703
708
t .Fatal (err )
704
709
}
@@ -764,7 +769,7 @@ func assertTenancyForRules(t *testing.T) {
764
769
765
770
// The tenancy port (9093) is only exposed in-cluster so we need to use
766
771
// port forwarding to access kube-rbac-proxy.
767
- host , cleanUp , err := f .ForwardPort (t , "thanos-querier" , 9093 )
772
+ host , cleanUp , err := f .ForwardPort (t , f . Ns , "thanos-querier" , 9093 )
768
773
if err != nil {
769
774
t .Fatal (err )
770
775
}
@@ -891,6 +896,80 @@ func assertTenancyForRules(t *testing.T) {
891
896
}
892
897
}
893
898
899
+ func assertUWMFederateEndpoint (t * testing.T ) {
900
+ const testAccount = "test-uwm-federate"
901
+
902
+ err := framework .Poll (2 * time .Second , 10 * time .Second , func () error {
903
+ _ , err := f .CreateServiceAccount (userWorkloadTestNs , testAccount )
904
+ return err
905
+ })
906
+ if err != nil {
907
+ t .Fatal (err )
908
+ }
909
+
910
+ // Grant enough permissions to invoke /federate endpoint which is protected by kube-rbac-proxy.
911
+ err = framework .Poll (2 * time .Second , 10 * time .Second , func () error {
912
+ _ , err = f .CreateClusterRoleBinding (userWorkloadTestNs , testAccount , "admin" )
913
+ return err
914
+ })
915
+ if err != nil {
916
+ t .Fatal (err )
917
+ }
918
+
919
+ var token string
920
+ err = framework .Poll (5 * time .Second , time .Minute , func () error {
921
+ token , err = f .GetServiceAccountToken (userWorkloadTestNs , testAccount )
922
+ return err
923
+ })
924
+ if err != nil {
925
+ t .Fatal (err )
926
+ }
927
+
928
+ // check /federate endpoint
929
+ err = framework .Poll (5 * time .Second , time .Minute , func () error {
930
+ // The federate port (9092) is only exposed in-cluster so we need to use
931
+ // port forwarding to access kube-rbac-proxy.
932
+ host , cleanUp , err := f .ForwardPort (t , f .UserWorkloadMonitoringNs , "prometheus-user-workload" , 9092 )
933
+ if err != nil {
934
+ return err
935
+ }
936
+ defer cleanUp ()
937
+
938
+ client := framework .NewPrometheusClient (
939
+ host ,
940
+ token ,
941
+ & framework.QueryParameterInjector {
942
+ Name : "match[]" ,
943
+ Value : `up` ,
944
+ },
945
+ )
946
+
947
+ resp , err := client .Do ("GET" , "/federate" , nil )
948
+ if err != nil {
949
+ return err
950
+ }
951
+ defer resp .Body .Close ()
952
+
953
+ b , err := ioutil .ReadAll (resp .Body )
954
+ if err != nil {
955
+ return err
956
+ }
957
+ if resp .StatusCode != http .StatusOK {
958
+ return fmt .Errorf ("unexpected status code response, want %d, got %d (%s)" , http .StatusOK , resp .StatusCode , framework .ClampMax (b ))
959
+ }
960
+
961
+ if ! strings .Contains (string (b ), "up" ) {
962
+ return fmt .Errorf ("'up' metric is missing, got (%s)" , framework .ClampMax (b ))
963
+ }
964
+
965
+ return nil
966
+ })
967
+
968
+ if err != nil {
969
+ t .Fatal (err )
970
+ }
971
+ }
972
+
894
973
func assertTenancyForSeriesMetadata (t * testing.T ) {
895
974
const testAccount = "test-labels"
896
975
@@ -924,7 +1003,7 @@ func assertTenancyForSeriesMetadata(t *testing.T) {
924
1003
err = framework .Poll (5 * time .Second , time .Minute , func () error {
925
1004
// The tenancy port (9092) is only exposed in-cluster so we need to use
926
1005
// port forwarding to access kube-rbac-proxy.
927
- host , cleanUp , err := f .ForwardPort (t , "thanos-querier" , 9092 )
1006
+ host , cleanUp , err := f .ForwardPort (t , f . Ns , "thanos-querier" , 9092 )
928
1007
if err != nil {
929
1008
return err
930
1009
}
@@ -978,7 +1057,7 @@ func assertTenancyForSeriesMetadata(t *testing.T) {
978
1057
err = framework .Poll (5 * time .Second , time .Minute , func () error {
979
1058
// The tenancy port (9092) is only exposed in-cluster so we need to use
980
1059
// port forwarding to access kube-rbac-proxy.
981
- host , cleanUp , err := f .ForwardPort (t , "thanos-querier" , 9092 )
1060
+ host , cleanUp , err := f .ForwardPort (t , f . Ns , "thanos-querier" , 9092 )
982
1061
if err != nil {
983
1062
return err
984
1063
}
@@ -1032,7 +1111,7 @@ func assertTenancyForSeriesMetadata(t *testing.T) {
1032
1111
err = framework .Poll (5 * time .Second , time .Minute , func () error {
1033
1112
// The tenancy port (9092) is only exposed in-cluster so we need to use
1034
1113
// port forwarding to access kube-rbac-proxy.
1035
- host , cleanUp , err := f .ForwardPort (t , "thanos-querier" , 9092 )
1114
+ host , cleanUp , err := f .ForwardPort (t , f . Ns , "thanos-querier" , 9092 )
1036
1115
if err != nil {
1037
1116
return err
1038
1117
}
0 commit comments