Skip to content

Commit 2e3f4bb

Browse files
committed
Made final changes
1 parent c438011 commit 2e3f4bb

File tree

3 files changed

+87
-19
lines changed

3 files changed

+87
-19
lines changed

test/e2e/configuration_anomaly_detection_test.go

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
v1beta1 "github.com/openshift/api/machine/v1beta1"
2222
awsinternal "github.com/openshift/configuration-anomaly-detection/pkg/aws"
2323
machineutil "github.com/openshift/configuration-anomaly-detection/pkg/investigations/utils/machine"
24-
"github.com/openshift/configuration-anomaly-detection/pkg/ocm"
2524
"github.com/openshift/configuration-anomaly-detection/test/e2e/utils"
2625
ocme2e "github.com/openshift/osde2e-common/pkg/clients/ocm"
2726
"github.com/openshift/osde2e-common/pkg/clients/openshift"
@@ -37,7 +36,6 @@ import (
3736
var _ = Describe("Configuration Anomaly Detection", Ordered, func() {
3837
var (
3938
ocme2eCli *ocme2e.Client
40-
ocmCli ocm.Client
4139
k8s *openshift.Client
4240
region string
4341
provider string
@@ -60,9 +58,6 @@ var _ = Describe("Configuration Anomaly Detection", Ordered, func() {
6058
ocme2eCli, err = ocme2e.New(ctx, ocmToken, clientID, clientSecret, ocmEnv)
6159
Expect(err).ShouldNot(HaveOccurred(), "Unable to setup E2E OCM Client")
6260

63-
ocmCli, err := ocm.New(ctx, os.Getenv("OCM_TOKEN"), ocmUrl)
64-
Expect(err).ShouldNot(HaveOccurred(), "Unable to setup ocm anomaly detection client")
65-
6661
k8s, err = openshift.New(ginkgo.GinkgoLogr)
6762
Expect(err).ShouldNot(HaveOccurred(), "Unable to setup k8s client")
6863

@@ -164,7 +159,7 @@ var _ = Describe("Configuration Anomaly Detection", Ordered, func() {
164159
Expect(cluster).ToNot(BeNil(), "received nil cluster from OCM")
165160

166161
// Get service logs
167-
logs, err := utils.GetServiceLogs(ocmCli, cluster)
162+
logs, err := utils.GetServiceLogs(ocme2eCli, cluster)
168163
Expect(err).ToNot(HaveOccurred(), "Failed to get service logs")
169164
logsBefore := logs.Items().Slice()
170165

@@ -227,7 +222,7 @@ var _ = Describe("Configuration Anomaly Detection", Ordered, func() {
227222

228223
time.Sleep(1 * time.Minute)
229224

230-
logs, err = utils.GetServiceLogs(ocmCli, cluster)
225+
logs, err = utils.GetServiceLogs(ocme2eCli, cluster)
231226
Expect(err).ToNot(HaveOccurred(), "Failed to get service logs")
232227
logsAfter := logs.Items().Slice()
233228

@@ -519,7 +514,7 @@ var _ = Describe("Configuration Anomaly Detection", Ordered, func() {
519514
Expect(cluster).ToNot(BeNil(), "Cluster response is nil")
520515

521516
fmt.Println("Step 1: Getting service logs before misconfiguration")
522-
logs, err := utils.GetServiceLogs(ocmCli, cluster)
517+
logs, err := utils.GetServiceLogs(ocme2eCli, cluster)
523518
Expect(err).ToNot(HaveOccurred(), "Failed to fetch service logs before misconfig")
524519
logsBefore := logs.Items().Slice()
525520

@@ -573,7 +568,7 @@ var _ = Describe("Configuration Anomaly Detection", Ordered, func() {
573568
time.Sleep(2 * time.Minute)
574569

575570
fmt.Println("Step 5: Fetching service logs after misconfiguration")
576-
logs, err = utils.GetServiceLogs(ocmCli, cluster)
571+
logs, err = utils.GetServiceLogs(ocme2eCli, cluster)
577572
Expect(err).ToNot(HaveOccurred(), "Failed to get service logs")
578573
logsAfter := logs.Items().Slice()
579574

@@ -615,7 +610,7 @@ var _ = Describe("Configuration Anomaly Detection", Ordered, func() {
615610
Expect(err).NotTo(HaveOccurred(), "Failed to get security group ID")
616611

617612
// Step 1: Get logs before action
618-
logsBefore, err := utils.GetServiceLogs(ocmCli, cluster)
613+
logsBefore, err := utils.GetServiceLogs(ocme2eCli, cluster)
619614
Expect(err).ToNot(HaveOccurred(), "Failed to get service logs before action")
620615

621616
existingLogIDs := map[string]bool{}
@@ -658,7 +653,7 @@ var _ = Describe("Configuration Anomaly Detection", Ordered, func() {
658653
time.Sleep(2 * time.Minute)
659654

660655
// Step 4: Get logs again and find new entries
661-
logsAfter, err := utils.GetServiceLogs(ocmCli, cluster)
656+
logsAfter, err := utils.GetServiceLogs(ocme2eCli, cluster)
662657
Expect(err).ToNot(HaveOccurred(), "Failed to get service logs after action")
663658

664659
newLogs := []interface{}{}
@@ -692,7 +687,7 @@ var _ = Describe("Configuration Anomaly Detection", Ordered, func() {
692687

693688
// Check if user is banned (part of the investigation logic)
694689
ginkgo.GinkgoWriter.Printf("Checking if cluster owner is banned...\n")
695-
userBannedStatus, userBannedNotes, err := ocm.CheckIfUserBanned(ocmCli, cluster)
690+
userBannedStatus, userBannedNotes, err := utils.IsUserBanned(ocme2eCli, cluster)
696691
Expect(err).NotTo(HaveOccurred(), "Failed to check if user is banned")
697692

698693
if userBannedStatus {

test/e2e/utils/generate_incident.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const (
1616
AlertInsightsOperatorDown = "InsightsOperatorDown"
1717
AlertMachineHealthCheckUnterminatedShortCircuitSRE = "MachineHealthCheckUnterminatedShortCircuitSRE"
1818
AlertApiErrorBudgetBurn = "ApiErrorBudgetBurn"
19+
UpgradeConfigSyncFailureOver4HrSRE = "UpgradeConfigSyncFailureOver4HrSRE"
1920
)
2021

2122
func GetAlertTitle(alertName string) (string, error) {
@@ -32,6 +33,8 @@ func GetAlertTitle(alertName string) (string, error) {
3233
return "MachineHealthCheckUnterminatedShortCircuitSRE CRITICAL (1)", nil
3334
case AlertApiErrorBudgetBurn:
3435
return "api-ErrorBudgetBurn k8sgpt test CRITICAL (1)", nil
36+
case UpgradeConfigSyncFailureOver4HrSRE:
37+
return "UpgradeConfigSyncFailureOver4HrSRE Critical (1)", nil
3538
default:
3639
return "", fmt.Errorf("unknown alert name: %s", alertName)
3740
}

test/e2e/utils/utils.go

Lines changed: 77 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@ package utils
66
import (
77
"fmt"
88

9+
sdk "github.com/openshift-online/ocm-sdk-go"
10+
amv1 "github.com/openshift-online/ocm-sdk-go/accountsmgmt/v1"
911
cmv1 "github.com/openshift-online/ocm-sdk-go/clustersmgmt/v1"
1012
servicelogsv1 "github.com/openshift-online/ocm-sdk-go/servicelogs/v1"
13+
"github.com/openshift/configuration-anomaly-detection/pkg/logging"
1114
"github.com/openshift/configuration-anomaly-detection/pkg/ocm"
1215
ocme2e "github.com/openshift/osde2e-common/pkg/clients/ocm"
1316
"k8s.io/client-go/tools/clientcmd"
@@ -16,24 +19,91 @@ import (
1619

1720
func GetLimitedSupportReasons(ocme2eCli *ocme2e.Client, clusterID string) (*cmv1.LimitedSupportReasonsListResponse, error) {
1821
lsResponse, err := ocme2eCli.ClustersMgmt().V1().Clusters().Cluster(clusterID).LimitedSupportReasons().List().Send()
19-
2022
if err != nil {
2123
return nil, fmt.Errorf("failed sending service log: %w", err)
2224
}
2325
return lsResponse, nil
2426
}
2527

26-
func GetServiceLogs(ocmCli ocm.Client, cluster *cmv1.Cluster) (*servicelogsv1.ClusterLogsUUIDListResponse, error) {
27-
filter := "log_type='cluster-state-updates'"
28-
clusterLogsUUIDListResponse, err := ocmCli.GetServiceLog(cluster, filter)
28+
func GetServiceLogs(ocmLike interface{}, cluster *cmv1.Cluster) (*servicelogsv1.ClusterLogsUUIDListResponse, error) {
29+
const filter = "log_type='cluster-state-updates'"
30+
31+
switch v := ocmLike.(type) {
32+
case ocm.Client:
33+
clusterLogsUUIDListResponse, err := v.GetServiceLog(cluster, filter)
34+
if err != nil {
35+
return nil, fmt.Errorf("Failed to get service log: %w", err)
36+
}
37+
return clusterLogsUUIDListResponse, nil
38+
case *ocme2e.Client:
39+
adapter := &e2eOCMAdapter{conn: v.Connection}
40+
clusterLogsUUIDListResponse, err := adapter.GetServiceLog(cluster, filter)
41+
if err != nil {
42+
return nil, fmt.Errorf("Failed to get service log (via adapter): %w", err)
43+
}
44+
return clusterLogsUUIDListResponse, nil
45+
default:
46+
return nil, fmt.Errorf("unsupported type for GetServiceLogs: %T", v)
47+
}
48+
}
49+
50+
type e2eOCMAdapter struct {
51+
conn *sdk.Connection
52+
}
53+
54+
func (a *e2eOCMAdapter) GetServiceLog(cluster *cmv1.Cluster, filter string) (*servicelogsv1.ClusterLogsUUIDListResponse, error) {
55+
if filter != "" {
56+
return a.conn.ServiceLogs().V1().Clusters().Cluster(cluster.ExternalID()).ClusterLogs().List().Search(filter).Send()
57+
}
58+
return a.conn.ServiceLogs().V1().Clusters().Cluster(cluster.ExternalID()).ClusterLogs().List().Send()
59+
}
60+
61+
// === IS USER BANNED (uses ocme2eCli.Connection) ===
62+
func IsUserBanned(ocme2eCli *ocme2e.Client, cluster *cmv1.Cluster) (bool, string, error) {
63+
conn := ocme2eCli.Connection
64+
user, err := getCreatorFromCluster(conn, cluster)
65+
if err != nil {
66+
return false, "encountered an issue when checking if the cluster owner is banned. Please investigate.", err
67+
}
68+
69+
if user.Banned() {
70+
noteMessage := fmt.Sprintf("User is banned %s. Ban description %s.\n Please open a proactive case, so that MCS can resolve the ban or organize an ownership transfer.", user.BanCode(), user.BanDescription())
71+
logging.Warnf(noteMessage)
72+
return true, noteMessage, nil
73+
}
74+
return false, "User is not banned.", nil
75+
}
76+
77+
func getCreatorFromCluster(conn *sdk.Connection, cluster *cmv1.Cluster) (*amv1.Account, error) {
78+
logging.Debugf("Getting subscription from cluster: %s", cluster.ID())
79+
sub, ok := cluster.GetSubscription()
80+
if !ok {
81+
return nil, fmt.Errorf("failed to get subscription from cluster: %s", cluster.ID())
82+
}
83+
subResp, err := conn.AccountsMgmt().V1().Subscriptions().Subscription(sub.ID()).Get().Send()
2984
if err != nil {
30-
return nil, fmt.Errorf("Failed to get service log: %w", err)
85+
return nil, err
86+
}
87+
subscription, ok := subResp.GetBody()
88+
if !ok {
89+
return nil, fmt.Errorf("failed to get subscription body")
90+
}
91+
if subscription.Status() != "Active" {
92+
return nil, fmt.Errorf("expecting status 'Active' found %v", subscription.Status())
93+
}
94+
accResp, err := conn.AccountsMgmt().V1().Accounts().Account(subscription.Creator().ID()).Get().Send()
95+
if err != nil {
96+
return nil, err
97+
}
98+
account, ok := accResp.GetBody()
99+
if !ok {
100+
return nil, fmt.Errorf("failed to get account body")
31101
}
32-
return clusterLogsUUIDListResponse, nil
102+
return account, nil
33103
}
34104

105+
// === CREATE CLIENT FROM KUBECONFIG ===
35106
func CreateClientFromKubeConfig(kubeConfigPath string) (pclient.Client, error) {
36-
// Load kubeconfig file and create a client
37107
cfg, err := clientcmd.BuildConfigFromFlags("", kubeConfigPath)
38108
if err != nil {
39109
return nil, fmt.Errorf("failed to build kubeconfig: %v", err)

0 commit comments

Comments
 (0)