@@ -581,5 +581,95 @@ var _ = Describe("Configuration Anomaly Detection", Ordered, func() {
581
581
Expect (logsAfter ).To (HaveLen (len (logsBefore )), "Service logs count changed after scale down/up" )
582
582
}
583
583
})
584
+
585
+ It ("AWS CCS: InsightsOperatorDown (blocked egress)" , Label ("aws" , "ccs" , "insights-operator" , "blocking-egress" ), func (ctx context.Context ) {
586
+ if provider == "aws" {
587
+ awsAccessKey := os .Getenv ("AWS_ACCESS_KEY_ID" )
588
+ awsSecretKey := os .Getenv ("AWS_SECRET_ACCESS_KEY" )
589
+ Expect (awsAccessKey ).NotTo (BeEmpty (), "AWS access key not found" )
590
+ Expect (awsSecretKey ).NotTo (BeEmpty (), "AWS secret key not found" )
591
+
592
+ awsCfg , err := config .LoadDefaultConfig (ctx ,
593
+ config .WithRegion (region ),
594
+ config .WithCredentialsProvider (credentials .NewStaticCredentialsProvider (
595
+ awsAccessKey ,
596
+ awsSecretKey ,
597
+ "" ,
598
+ )),
599
+ )
600
+ Expect (err ).NotTo (HaveOccurred (), "Failed to create AWS config" )
601
+
602
+ ec2Client := ec2 .NewFromConfig (awsCfg )
603
+ ec2Wrapper := utils .NewEC2ClientWrapper (ec2Client )
604
+
605
+ awsCad , err := awsinternal .NewClient (awsCfg )
606
+ Expect (err ).NotTo (HaveOccurred (), "Failed to create AWS client" )
607
+
608
+ clusterResource , err := ocme2eCli .ClustersMgmt ().V1 ().Clusters ().Cluster (clusterID ).Get ().Send ()
609
+ Expect (err ).NotTo (HaveOccurred (), "Failed to fetch cluster from OCM" )
610
+
611
+ cluster := clusterResource .Body ()
612
+ infraID := cluster .InfraID ()
613
+ Expect (infraID ).NotTo (BeEmpty (), "InfraID missing from cluster" )
614
+
615
+ sgID , err := awsCad .GetSecurityGroupID (infraID )
616
+ Expect (err ).NotTo (HaveOccurred (), "Failed to get security group ID" )
617
+
618
+ // Step 1: Get logs before action
619
+ logsBefore , err := utils .GetServiceLogs (ocmCli , cluster )
620
+ Expect (err ).ToNot (HaveOccurred (), "Failed to get service logs before action" )
621
+
622
+ existingLogIDs := map [string ]bool {}
623
+ for _ , item := range logsBefore .Items ().Slice () {
624
+ existingLogIDs [item .ID ()] = true
625
+ }
626
+
627
+ // Step 2: Block egress
628
+ Expect (utils .BlockEgress (ctx , ec2Wrapper , sgID )).To (Succeed (), "Failed to block egress" )
629
+
630
+ // Clean up: restore egress
631
+ defer func () {
632
+ err := utils .RestoreEgress (ctx , ec2Wrapper , sgID )
633
+ if err != nil {
634
+ ginkgo .GinkgoWriter .Printf ("Failed to restore egress: %v\n " , err )
635
+ } else {
636
+ ginkgo .GinkgoWriter .Printf ("Egress restored\n " )
637
+ }
638
+ }()
639
+
640
+ // Step 3: Scale down insights-operator
641
+ var zero int32 = 0
642
+ var originalIOReplicas int32
643
+ err = retry .RetryOnConflict (retry .DefaultRetry , func () error {
644
+ io := & appsv1.Deployment {}
645
+ err := k8s .Get (ctx , "insights-operator" , "openshift-insights" , io )
646
+ if err != nil {
647
+ return err
648
+ }
649
+ originalIOReplicas = * io .Spec .Replicas
650
+ io .Spec .Replicas = & zero
651
+ return k8s .Update (ctx , io )
652
+ })
653
+ Expect (err ).ToNot (HaveOccurred (), "failed to scale down insights-operator" )
654
+ fmt .Printf ("Scaled down insights-operator from %d to 0 replicas\n " , originalIOReplicas )
655
+
656
+ _ , err = testPdClient .TriggerIncident ("InsightsOperatorDown" , clusterID )
657
+ Expect (err ).NotTo (HaveOccurred (), "Failed to trigger silent PagerDuty alert" )
658
+
659
+ // Step 4: Get logs again and find new entries
660
+ logsAfter , err := utils .GetServiceLogs (ocmCli , cluster )
661
+ Expect (err ).ToNot (HaveOccurred (), "Failed to get service logs after action" )
662
+
663
+ newLogs := []interface {}{}
664
+ for _ , item := range logsAfter .Items ().Slice () {
665
+ if ! existingLogIDs [item .ID ()] {
666
+ newLogs = append (newLogs , item )
667
+ }
668
+ }
669
+
670
+ // Step 4: Verify no new logs were created
671
+ Expect (len (newLogs )).To (BeZero (), "Expected no new service logs after blocking egress and scaling down" )
672
+ }
673
+ })
584
674
585
675
}, ginkgo .ContinueOnFailure )
0 commit comments