Skip to content

Commit f1863aa

Browse files
committed
test: Add e2e tests for UWM federate service
Signed-off-by: Arunprasad Rajkumar <[email protected]>
1 parent 7051f4b commit f1863aa

File tree

4 files changed

+89
-10
lines changed

4 files changed

+89
-10
lines changed

test/e2e/alertmanager_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func TestAlertmanagerKubeRbacProxy(t *testing.T) {
8787

8888
// The tenancy port (9092) is only exposed in-cluster so we need to use
8989
// port forwarding to access kube-rbac-proxy.
90-
host, cleanUp, err := f.ForwardPort(t, "alertmanager-main", 9092)
90+
host, cleanUp, err := f.ForwardPort(t, f.Ns, "alertmanager-main", 9092)
9191
if err != nil {
9292
t.Fatal(err)
9393
}

test/e2e/framework/framework.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -411,12 +411,12 @@ func (f *Framework) CreateRoleBindingFromRole(namespace, serviceAccount, role st
411411
}, nil
412412
}
413413

414-
func (f *Framework) ForwardPort(t *testing.T, svc string, port int) (string, func(), error) {
414+
func (f *Framework) ForwardPort(t *testing.T, ns, svc string, port int) (string, func(), error) {
415415
t.Helper()
416416

417417
ctx, cancel := context.WithCancel(context.Background())
418418
// Taken from github.com/openshift/origin/test/extended/etcd/etcd_test_runner.go
419-
cmd := exec.CommandContext(ctx, "oc", "port-forward", fmt.Sprintf("service/%s", svc), fmt.Sprintf(":%d", port), "-n", f.Ns, "--kubeconfig", f.kubeConfigPath)
419+
cmd := exec.CommandContext(ctx, "oc", "port-forward", fmt.Sprintf("service/%s", svc), fmt.Sprintf(":%d", port), "-n", ns, "--kubeconfig", f.kubeConfigPath)
420420

421421
cleanUp := func() {
422422
cancel()

test/e2e/thanos_ruler_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ func createPrometheusRule(t *testing.T) {
118118

119119
func verifyAlertmanagerAlertReceived(t *testing.T) {
120120

121-
host, cleanUp, err := f.ForwardPort(t, "alertmanager-operated", 9093)
121+
host, cleanUp, err := f.ForwardPort(t, f.Ns, "alertmanager-operated", 9093)
122122
if err != nil {
123123
t.Fatal(err)
124124
}

test/e2e/user_workload_monitoring_test.go

Lines changed: 85 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ func TestUserWorkloadMonitoringMetrics(t *testing.T) {
9999
name: "assert alertmanager is not deployed in user namespace",
100100
f: f.AssertStatefulsetDoesNotExist("alertmanager-not-to-be-reconciled", userWorkloadTestNs),
101101
},
102+
103+
{
104+
name: "assert UWM federate endpoint is exposed",
105+
f: assertUWMFederateEndpoint,
106+
},
102107
} {
103108
t.Run(scenario.name, scenario.f)
104109
}
@@ -631,7 +636,7 @@ func assertTenancyForMetrics(t *testing.T) {
631636
err = framework.Poll(5*time.Second, time.Minute, func() error {
632637
// The tenancy port (9092) is only exposed in-cluster so we need to use
633638
// 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)
635640
if err != nil {
636641
t.Fatal(err)
637642
}
@@ -698,7 +703,7 @@ func assertTenancyForMetrics(t *testing.T) {
698703
err = framework.Poll(5*time.Second, time.Minute, func() error {
699704
// The tenancy port (9092) is only exposed in-cluster so we need to use
700705
// 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)
702707
if err != nil {
703708
t.Fatal(err)
704709
}
@@ -764,7 +769,7 @@ func assertTenancyForRules(t *testing.T) {
764769

765770
// The tenancy port (9093) is only exposed in-cluster so we need to use
766771
// 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)
768773
if err != nil {
769774
t.Fatal(err)
770775
}
@@ -891,6 +896,80 @@ func assertTenancyForRules(t *testing.T) {
891896
}
892897
}
893898

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+
894973
func assertTenancyForSeriesMetadata(t *testing.T) {
895974
const testAccount = "test-labels"
896975

@@ -924,7 +1003,7 @@ func assertTenancyForSeriesMetadata(t *testing.T) {
9241003
err = framework.Poll(5*time.Second, time.Minute, func() error {
9251004
// The tenancy port (9092) is only exposed in-cluster so we need to use
9261005
// 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)
9281007
if err != nil {
9291008
return err
9301009
}
@@ -978,7 +1057,7 @@ func assertTenancyForSeriesMetadata(t *testing.T) {
9781057
err = framework.Poll(5*time.Second, time.Minute, func() error {
9791058
// The tenancy port (9092) is only exposed in-cluster so we need to use
9801059
// 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)
9821061
if err != nil {
9831062
return err
9841063
}
@@ -1032,7 +1111,7 @@ func assertTenancyForSeriesMetadata(t *testing.T) {
10321111
err = framework.Poll(5*time.Second, time.Minute, func() error {
10331112
// The tenancy port (9092) is only exposed in-cluster so we need to use
10341113
// 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)
10361115
if err != nil {
10371116
return err
10381117
}

0 commit comments

Comments
 (0)