22
33import com .github .streamshub .systemtests .AbstractST ;
44import com .github .streamshub .systemtests .TestCaseConfig ;
5- import com .github .streamshub .systemtests .constants .Constants ;
65import com .github .streamshub .systemtests .constants .TestTags ;
7- import com .github .streamshub .systemtests .locators .CssBuilder ;
86import com .github .streamshub .systemtests .locators .NodesPageSelectors ;
97import com .github .streamshub .systemtests .logs .LogWrapper ;
108import com .github .streamshub .systemtests .setup .console .ConsoleInstanceSetup ;
119import com .github .streamshub .systemtests .setup .strimzi .KafkaSetup ;
10+ import com .github .streamshub .systemtests .utils .WaitUtils ;
1211import com .github .streamshub .systemtests .utils .playwright .PwPageUrls ;
1312import com .github .streamshub .systemtests .utils .playwright .PwUtils ;
1413import com .github .streamshub .systemtests .utils .resourceutils .KafkaTopicUtils ;
14+ import com .github .streamshub .systemtests .utils .resourceutils .KafkaUtils ;
1515import com .github .streamshub .systemtests .utils .resourceutils .NamespaceUtils ;
16+ import com .github .streamshub .systemtests .utils .resourceutils .ResourceUtils ;
1617import io .skodjob .testframe .resources .KubeResourceManager ;
18+ import io .strimzi .api .kafka .model .rebalance .KafkaRebalance ;
19+ import io .strimzi .api .kafka .model .rebalance .KafkaRebalanceMode ;
20+ import io .strimzi .api .kafka .model .rebalance .KafkaRebalanceState ;
1721import org .apache .logging .log4j .Logger ;
1822import org .junit .jupiter .api .AfterEach ;
1923import org .junit .jupiter .api .BeforeEach ;
2024import org .junit .jupiter .api .Tag ;
2125import org .junit .jupiter .api .Test ;
2226
27+ import java .util .Locale ;
28+ import java .util .Map ;
29+
2330import static com .github .streamshub .systemtests .utils .Utils .getTestCaseConfig ;
2431import static org .junit .jupiter .api .Assertions .assertTrue ;
2532
@@ -31,15 +38,48 @@ public class RebalanceST extends AbstractST {
3138 void testKafkaRebalance () {
3239 final TestCaseConfig tcc = getTestCaseConfig ();
3340 final int imbalancedPartitions = 20 ;
41+ final int scaledBrokersCount = 5 ;
42+ final String rebalanceName = "testrebalance" ;
43+ final String rebalanceTopicName = "rebalance-topic" ;
44+
45+ LOGGER .info ("Create imbalance by creating topics and scaling brokers afterwards" );
46+ KafkaTopicUtils .setupTopicsAndReturn (tcc .namespace (), tcc .kafkaName (), rebalanceTopicName , 5 , true , imbalancedPartitions , 1 , 1 );
47+ KafkaUtils .scaleBrokerReplicasWithWait (tcc .namespace (), tcc .kafkaName (), scaledBrokersCount );
48+
49+ LOGGER .info ("Create basic rebalance CR" );
50+ KubeResourceManager .get ().createOrUpdateResourceWithWait (KafkaSetup .getKafkaRebalance (tcc .namespace (), tcc .kafkaName (), rebalanceName ).build ());
51+ WaitUtils .waitForKafkaRebalanceProposalStatus (tcc .namespace (), rebalanceName , KafkaRebalanceState .PendingProposal );
3452
35- KafkaTopicUtils .setupTopicsAndReturn (tcc .namespace (), tcc .kafkaName (), Constants .REPLICATED_TOPICS_PREFIX , 3 , true , 1 , 1 , 1 );
36- KafkaTopicUtils .setupTopicsAndReturn (tcc .namespace (), tcc .kafkaName (), "rebalance-topic" , 1 , true , imbalancedPartitions , 1 , 1 );
37- KubeResourceManager .get ().createOrUpdateResourceWithWait (KafkaSetup .getKafkaRebalance (tcc .namespace (), tcc .kafkaName ()).build ());
38- LOGGER .info ("Verify rebalance proposals" );
53+ LOGGER .info ("Verify rebalance proposals table" );
3954 tcc .page ().navigate (PwPageUrls .getKafkaRebalancePage (tcc , tcc .kafkaName ()));
4055 PwUtils .waitForLocatorCount (tcc , 1 , NodesPageSelectors .NPS_REBALANCE_TABLE_ITEMS , true );
41- assertTrue (tcc .page ().locator (new CssBuilder (NodesPageSelectors .NPS_REBALANCE_PROPOSAL_NAME ).nth ()));
56+ PwUtils .waitForContainsText (tcc , NodesPageSelectors .NPS_REBALANCE_PROPOSAL_STATUS , KafkaRebalanceState .PendingProposal .name (), true );
57+ assertTrue (tcc .page ().locator (NodesPageSelectors .NPS_REBALANCE_PROPOSAL_NAME ).allInnerTexts ().toString ().contains (rebalanceName ));
58+
59+ LOGGER .info ("Inspect rebalance proposal" );
60+ PwUtils .waitForLocatorAndClick (tcc , NodesPageSelectors .NPS_REBALANCE_PROPOSAL_DROPDOWN_BUTTON );
61+ PwUtils .waitForContainsText (tcc , NodesPageSelectors .NPS_REBALANCE_PROPOSAL_DROPDOWN_AUTO_APPROVAL_ENABLED , "false" , true );
62+ assertTrue (tcc .page ().locator (NodesPageSelectors .NPS_REBALANCE_PROPOSAL_DROPDOWN_MODE ).allInnerTexts ().toString ().toLowerCase (Locale .ENGLISH ).contains (KafkaRebalanceMode .FULL .toValue ()));
63+
64+ LOGGER .info ("Wait for proposal to be in Ready state and check values" );
65+ WaitUtils .waitForKafkaRebalanceProposalStatus (tcc .namespace (), rebalanceName , KafkaRebalanceState .ProposalReady );
66+ PwUtils .waitForLocatorAndClick (tcc , NodesPageSelectors .NPS_REBALANCE_PROPOSAL_NAME );
67+ // table values
68+ Map <String , Object > status = ResourceUtils .getKubeResource (KafkaRebalance .class , tcc .namespace (), rebalanceName ).getStatus ().getOptimizationResult ();
69+ PwUtils .waitForContainsText (tcc , NodesPageSelectors .NPS_PROPOSAL_MODAL_DATA_TO_MOVE , status .get ("dataToMoveMB" ).toString (), false );
70+ PwUtils .waitForContainsText (tcc , NodesPageSelectors .NPS_PROPOSAL_MODAL_DATA_MONITORED_PARTITIONS_PERCENTAGE , status .get ("monitoredPartitionsPercentage" ).toString (), false );
71+ PwUtils .waitForContainsText (tcc , NodesPageSelectors .NPS_PROPOSAL_MODAL_DATA_NUMBER_REPLICA_MOVEMENTS , status .get ("numReplicaMovements" ).toString (), false );
72+ PwUtils .waitForContainsText (tcc , NodesPageSelectors .NPS_PROPOSAL_MODAL_DATA_BALANCEDNESS_BEFORE , status .get ("onDemandBalancednessScoreBefore" ).toString (), false );
73+ PwUtils .waitForContainsText (tcc , NodesPageSelectors .NPS_PROPOSAL_MODAL_DATA_BALANCEDNESS_AFTER , status .get ("onDemandBalancednessScoreAfter" ).toString (), false );
74+ PwUtils .waitForLocatorAndClick (tcc , NodesPageSelectors .NPS_PROPOSAL_MODAL_CLOSE_BUTTON );
75+
76+ LOGGER .info ("Approve rebalance using UI" );
77+ PwUtils .waitForLocatorAndClick (tcc , NodesPageSelectors .NPS_PROPOSAL_ACTION_DROPDOWN_BUTTON );
78+ PwUtils .waitForLocatorAndClick (tcc , NodesPageSelectors .NPS_PROPOSAL_ACTION_APPROVE_BUTTON );
79+ PwUtils .waitForLocatorAndClick (tcc , NodesPageSelectors .NPS_PROPOSAL_MODAL_CONFIRM_BUTTON );
4280
81+ WaitUtils .waitForKafkaRebalanceProposalStatus (tcc .namespace (), rebalanceName , KafkaRebalanceState .Rebalancing );
82+ PwUtils .waitForContainsText (tcc , NodesPageSelectors .NPS_REBALANCE_PROPOSAL_STATUS , KafkaRebalanceState .Rebalancing .name (), true );
4383 }
4484
4585 @ AfterEach
0 commit comments