Bladeren bron

Merge branch 'master' of github.com:provectus/kafka-ui into audit_be

iliax 2 jaren geleden
bovenliggende
commit
60023b6fcc

+ 1 - 1
.github/workflows/aws_publisher.yaml

@@ -24,7 +24,7 @@ jobs:
       - name: Clone infra repo
       - name: Clone infra repo
         run: |
         run: |
           echo "Cloning repo..."
           echo "Cloning repo..."
-          git clone https://kafka-ui-infra:${{ secrets.KAFKA_UI_INFRA_TOKEN }}@gitlab.provectus.com/provectus-internals/kafka-ui-infra.git --branch ${{ github.event.inputs.KafkaUIInfraBranch }}
+          git clone https://infra-tech:${{ secrets.INFRA_USER_ACCESS_TOKEN }}@github.com/provectus/kafka-ui-infra.git --branch ${{ github.event.inputs.KafkaUIInfraBranch }}
           echo "Cd to packer DIR..."
           echo "Cd to packer DIR..."
           cd kafka-ui-infra/ami
           cd kafka-ui-infra/ami
           echo "WORK_DIR=$(pwd)" >> $GITHUB_ENV
           echo "WORK_DIR=$(pwd)" >> $GITHUB_ENV

+ 3 - 3
.github/workflows/branch-deploy.yml

@@ -73,14 +73,14 @@ jobs:
     steps:
     steps:
       - name: clone
       - name: clone
         run: |
         run: |
-          git clone https://kafka-ui-infra:${{ secrets.KAFKA_UI_INFRA_TOKEN }}@gitlab.provectus.com/provectus-internals/kafka-ui-infra.git
+          git clone https://infra-tech:${{ secrets.INFRA_USER_ACCESS_TOKEN }}@github.com/provectus/kafka-ui-infra.git --branch envs
       - name: create deployment
       - name: create deployment
         run: |
         run: |
           cd kafka-ui-infra/aws-infrastructure4eks/argocd/scripts
           cd kafka-ui-infra/aws-infrastructure4eks/argocd/scripts
           echo "Branch:${{ needs.build.outputs.tag }}"
           echo "Branch:${{ needs.build.outputs.tag }}"
           ./kafka-ui-deployment-from-branch.sh ${{ needs.build.outputs.tag }} ${{ github.event.label.name }} ${{ secrets.FEATURE_TESTING_UI_PASSWORD }}
           ./kafka-ui-deployment-from-branch.sh ${{ needs.build.outputs.tag }} ${{ github.event.label.name }} ${{ secrets.FEATURE_TESTING_UI_PASSWORD }}
-          git config --global user.email "kafka-ui-infra@provectus.com"
-          git config --global user.name "kafka-ui-infra"
+          git config --global user.email "infra-tech@provectus.com"
+          git config --global user.name "infra-tech"
           git add ../kafka-ui-from-branch/
           git add ../kafka-ui-from-branch/
           git commit -m "added env:${{ needs.build.outputs.deploy }}" && git push || true
           git commit -m "added env:${{ needs.build.outputs.deploy }}" && git push || true
 
 

+ 3 - 3
.github/workflows/branch-remove.yml

@@ -11,13 +11,13 @@ jobs:
       - uses: actions/checkout@v3
       - uses: actions/checkout@v3
       - name: clone
       - name: clone
         run: |
         run: |
-          git clone https://kafka-ui-infra:${{ secrets.KAFKA_UI_INFRA_TOKEN }}@gitlab.provectus.com/provectus-internals/kafka-ui-infra.git
+          git clone https://infra-tech:${{ secrets.INFRA_USER_ACCESS_TOKEN }}@github.com/provectus/kafka-ui-infra.git --branch envs
       - name: remove env
       - name: remove env
         run: |
         run: |
           cd kafka-ui-infra/aws-infrastructure4eks/argocd/scripts
           cd kafka-ui-infra/aws-infrastructure4eks/argocd/scripts
           ./delete-env.sh pr${{ github.event.pull_request.number }} || true
           ./delete-env.sh pr${{ github.event.pull_request.number }} || true
-          git config --global user.email "kafka-ui-infra@provectus.com"
-          git config --global user.name "kafka-ui-infra"
+          git config --global user.email "infra-tech@provectus.com"
+          git config --global user.name "infra-tech"
           git add ../kafka-ui-from-branch/
           git add ../kafka-ui-from-branch/
           git commit -m "removed env:${{ needs.build.outputs.deploy }}" && git push || true
           git commit -m "removed env:${{ needs.build.outputs.deploy }}" && git push || true
       - name: make comment with deployment link
       - name: make comment with deployment link

+ 3 - 3
.github/workflows/master.yaml

@@ -73,11 +73,11 @@ jobs:
 #################################
 #################################
       - name: update-master-deployment
       - name: update-master-deployment
         run: |
         run: |
-          git clone https://kafka-ui-infra:${{ secrets.KAFKA_UI_INFRA_TOKEN }}@gitlab.provectus.com/provectus-internals/kafka-ui-infra.git --branch master
+          git clone https://infra-tech:${{ secrets.INFRA_USER_ACCESS_TOKEN }}@github.com/provectus/kafka-ui-infra.git --branch master
           cd kafka-ui-infra/aws-infrastructure4eks/argocd/scripts
           cd kafka-ui-infra/aws-infrastructure4eks/argocd/scripts
           echo "Image digest is:${{ steps.docker_build_and_push.outputs.digest }}"
           echo "Image digest is:${{ steps.docker_build_and_push.outputs.digest }}"
           ./kafka-ui-update-master-digest.sh ${{ steps.docker_build_and_push.outputs.digest }}
           ./kafka-ui-update-master-digest.sh ${{ steps.docker_build_and_push.outputs.digest }}
-          git config --global user.email "kafka-ui-infra@provectus.com"
-          git config --global user.name "kafka-ui-infra"
+          git config --global user.email "infra-tech@provectus.com"
+          git config --global user.name "infra-tech"
           git add ../kafka-ui/*
           git add ../kafka-ui/*
           git commit -m "updated master image digest: ${{ steps.docker_build_and_push.outputs.digest }}" && git push
           git commit -m "updated master image digest: ${{ steps.docker_build_and_push.outputs.digest }}" && git push

+ 3 - 3
.github/workflows/separate_env_public_create.yml

@@ -76,14 +76,14 @@ jobs:
     steps:
     steps:
       - name: clone
       - name: clone
         run: |
         run: |
-          git clone https://kafka-ui-infra:${{ secrets.KAFKA_UI_INFRA_TOKEN }}@gitlab.provectus.com/provectus-internals/kafka-ui-infra.git
+          git clone https://infra-tech:${{ secrets.INFRA_USER_ACCESS_TOKEN }}@github.com/provectus/kafka-ui-infra.git --branch envs
 
 
       - name: separate env create
       - name: separate env create
         run: |
         run: |
           cd kafka-ui-infra/aws-infrastructure4eks/argocd/scripts
           cd kafka-ui-infra/aws-infrastructure4eks/argocd/scripts
           bash separate_env_create.sh ${{ github.event.inputs.ENV_NAME }} ${{ secrets.FEATURE_TESTING_UI_PASSWORD }} ${{ needs.build.outputs.tag }}
           bash separate_env_create.sh ${{ github.event.inputs.ENV_NAME }} ${{ secrets.FEATURE_TESTING_UI_PASSWORD }} ${{ needs.build.outputs.tag }}
-          git config --global user.email "kafka-ui-infra@provectus.com"
-          git config --global user.name "kafka-ui-infra"
+          git config --global user.email "infra-tech@provectus.com"
+          git config --global user.name "infra-tech"
           git add -A
           git add -A
           git commit -m "separate env added: ${{ github.event.inputs.ENV_NAME }}" && git push || true
           git commit -m "separate env added: ${{ github.event.inputs.ENV_NAME }}" && git push || true
 
 

+ 3 - 3
.github/workflows/separate_env_public_remove.yml

@@ -13,12 +13,12 @@ jobs:
     steps:
     steps:
       - name: clone
       - name: clone
         run: |
         run: |
-          git clone https://kafka-ui-infra:${{ secrets.KAFKA_UI_INFRA_TOKEN }}@gitlab.provectus.com/provectus-internals/kafka-ui-infra.git
+          git clone https://infra-tech:${{ secrets.INFRA_USER_ACCESS_TOKEN }}@github.com/provectus/kafka-ui-infra.git --branch envs
       - name: separate environment remove
       - name: separate environment remove
         run: |
         run: |
           cd kafka-ui-infra/aws-infrastructure4eks/argocd/scripts
           cd kafka-ui-infra/aws-infrastructure4eks/argocd/scripts
           bash separate_env_remove.sh ${{ github.event.inputs.ENV_NAME }}
           bash separate_env_remove.sh ${{ github.event.inputs.ENV_NAME }}
-          git config --global user.email "kafka-ui-infra@provectus.com"
-          git config --global user.name "kafka-ui-infra"
+          git config --global user.email "infra-tech@provectus.com"
+          git config --global user.name "infra-tech"
           git add -A
           git add -A
           git commit -m "separate env removed: ${{ github.event.inputs.ENV_NAME }}" && git push || true
           git commit -m "separate env removed: ${{ github.event.inputs.ENV_NAME }}" && git push || true

+ 2 - 9
kafka-ui-api/pom.xml

@@ -21,12 +21,6 @@
     </properties>
     </properties>
 
 
     <dependencies>
     <dependencies>
-        <dependency>
-            <!--TODO: remove, when spring-boot fixed dependency to 6.0.8+ (6.0.7 has CVE) -->
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-            <version>6.0.8</version>
-        </dependency>
         <dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-webflux</artifactId>
             <artifactId>spring-boot-starter-webflux</artifactId>
@@ -61,7 +55,7 @@
         <dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
             <artifactId>commons-lang3</artifactId>
-            <version>3.9</version>
+            <version>3.12.0</version>
         </dependency>
         </dependency>
         <dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <groupId>org.projectlombok</groupId>
@@ -97,7 +91,7 @@
         <dependency>
         <dependency>
             <groupId>software.amazon.msk</groupId>
             <groupId>software.amazon.msk</groupId>
             <artifactId>aws-msk-iam-auth</artifactId>
             <artifactId>aws-msk-iam-auth</artifactId>
-            <version>1.1.5</version>
+            <version>1.1.6</version>
         </dependency>
         </dependency>
 
 
         <dependency>
         <dependency>
@@ -115,7 +109,6 @@
             <groupId>io.projectreactor.addons</groupId>
             <groupId>io.projectreactor.addons</groupId>
             <artifactId>reactor-extra</artifactId>
             <artifactId>reactor-extra</artifactId>
         </dependency>
         </dependency>
-<!-- https://github.com/provectus/kafka-ui/pull/3693 -->
         <dependency>
         <dependency>
             <groupId>org.json</groupId>
             <groupId>org.json</groupId>
             <artifactId>json</artifactId>
             <artifactId>json</artifactId>

+ 1 - 0
kafka-ui-api/src/main/resources/application.yml

@@ -17,4 +17,5 @@ logging:
     root: INFO
     root: INFO
     com.provectus: DEBUG
     com.provectus: DEBUG
     reactor.netty.http.server.AccessLog: INFO
     reactor.netty.http.server.AccessLog: INFO
+    org.hibernate.validator: WARN
 
 

+ 5 - 8
kafka-ui-api/src/main/resources/logback-spring.xml

@@ -1,17 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
 <configuration>
 
 
-        <appender name="STDOUT"
-              class="ch.qos.logback.core.ConsoleAppender">
-        <layout class="ch.qos.logback.classic.PatternLayout">
-            <Pattern>
-                %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%c{1}): %msg%n%throwable
-            </Pattern>
-        </layout>
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%c{1}): %msg%n%throwable</pattern>
+        </encoder>
     </appender>
     </appender>
 
 
     <root level="info">
     <root level="info">
-        <appender-ref ref="STDOUT" />
+        <appender-ref ref="STDOUT"/>
     </root>
     </root>
 
 
 </configuration>
 </configuration>

+ 8 - 0
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/BasePage.java

@@ -67,6 +67,14 @@ public abstract class BasePage extends WebUtils {
     clickByJavaScript(submitBtn);
     clickByJavaScript(submitBtn);
   }
   }
 
 
+  protected void clickNextBtn() {
+    clickByJavaScript(nextBtn);
+  }
+
+  protected void clickBackBtn() {
+    clickByJavaScript(backBtn);
+  }
+
   protected void setJsonInputValue(SelenideElement jsonInput, String jsonConfig) {
   protected void setJsonInputValue(SelenideElement jsonInput, String jsonConfig) {
     sendKeysByActions(jsonInput, jsonConfig.replace("  ", ""));
     sendKeysByActions(jsonInput, jsonConfig.replace("  ", ""));
     new Actions(WebDriverRunner.getWebDriver())
     new Actions(WebDriverRunner.getWebDriver())

+ 68 - 5
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/brokers/BrokersConfigTab.java

@@ -3,29 +3,37 @@ package com.provectus.kafka.ui.pages.brokers;
 import static com.codeborne.selenide.Selenide.$$x;
 import static com.codeborne.selenide.Selenide.$$x;
 import static com.codeborne.selenide.Selenide.$x;
 import static com.codeborne.selenide.Selenide.$x;
 
 
+import com.codeborne.selenide.CollectionCondition;
 import com.codeborne.selenide.Condition;
 import com.codeborne.selenide.Condition;
+import com.codeborne.selenide.ElementsCollection;
 import com.codeborne.selenide.SelenideElement;
 import com.codeborne.selenide.SelenideElement;
 import com.provectus.kafka.ui.pages.BasePage;
 import com.provectus.kafka.ui.pages.BasePage;
 import io.qameta.allure.Step;
 import io.qameta.allure.Step;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import java.util.stream.Stream;
 
 
 public class BrokersConfigTab extends BasePage {
 public class BrokersConfigTab extends BasePage {
 
 
-  protected List<SelenideElement> editBtn = $$x("//button[@aria-label='editAction']");
-  protected SelenideElement searchByKeyField = $x("//input[@placeholder='Search by Key']");
+  protected ElementsCollection editBtns = $$x("//button[@aria-label='editAction']");
 
 
   @Step
   @Step
   public BrokersConfigTab waitUntilScreenReady() {
   public BrokersConfigTab waitUntilScreenReady() {
     waitUntilSpinnerDisappear();
     waitUntilSpinnerDisappear();
-    searchByKeyField.shouldBe(Condition.visible);
+    searchFld.shouldBe(Condition.visible);
     return this;
     return this;
   }
   }
 
 
   @Step
   @Step
   public boolean isSearchByKeyVisible() {
   public boolean isSearchByKeyVisible() {
-    return isVisible(searchByKeyField);
+    return isVisible(searchFld);
+  }
+
+  @Step
+  public BrokersConfigTab searchConfig(String key) {
+    searchItem(key);
+    return this;
   }
   }
 
 
   public List<SelenideElement> getColumnHeaders() {
   public List<SelenideElement> getColumnHeaders() {
@@ -35,6 +43,61 @@ public class BrokersConfigTab extends BasePage {
   }
   }
 
 
   public List<SelenideElement> getEditButtons() {
   public List<SelenideElement> getEditButtons() {
-    return editBtn;
+    return editBtns;
+  }
+
+  @Step
+  public BrokersConfigTab clickNextButton() {
+    clickNextBtn();
+    waitUntilSpinnerDisappear(1);
+    return this;
+  }
+
+  private List<BrokersConfigTab.BrokersConfigItem> initGridItems() {
+    List<BrokersConfigTab.BrokersConfigItem> gridItemList = new ArrayList<>();
+    gridItems.shouldHave(CollectionCondition.sizeGreaterThan(0))
+        .forEach(item -> gridItemList.add(new BrokersConfigTab.BrokersConfigItem(item)));
+    return gridItemList;
+  }
+
+  @Step
+  public BrokersConfigTab.BrokersConfigItem getConfig(String key) {
+    return initGridItems().stream()
+        .filter(e -> e.getKey().equals(key))
+        .findFirst().orElseThrow();
+  }
+
+  @Step
+  public List<BrokersConfigTab.BrokersConfigItem> getAllConfigs() {
+    return initGridItems();
+  }
+
+  public static class BrokersConfigItem extends BasePage {
+
+    private final SelenideElement element;
+
+    public BrokersConfigItem(SelenideElement element) {
+      this.element = element;
+    }
+
+    @Step
+    public String getKey() {
+      return element.$x("./td[1]").getText().trim();
+    }
+
+    @Step
+    public String getValue() {
+      return element.$x("./td[2]//span").getText().trim();
+    }
+
+    @Step
+    public void edit() {
+      element.$x("./td[2]//button").shouldBe(Condition.enabled).click();
+    }
+
+    @Step
+    public String getSource() {
+      return element.$x("./td[3]").getText().trim();
+    }
   }
   }
 }
 }

+ 2 - 7
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/brokers/BrokersDetails.java

@@ -1,6 +1,5 @@
 package com.provectus.kafka.ui.pages.brokers;
 package com.provectus.kafka.ui.pages.brokers;
 
 
-import static com.codeborne.selenide.Selenide.$;
 import static com.codeborne.selenide.Selenide.$x;
 import static com.codeborne.selenide.Selenide.$x;
 
 
 import com.codeborne.selenide.Condition;
 import com.codeborne.selenide.Condition;
@@ -8,28 +7,24 @@ import com.codeborne.selenide.SelenideElement;
 import com.provectus.kafka.ui.pages.BasePage;
 import com.provectus.kafka.ui.pages.BasePage;
 import io.qameta.allure.Step;
 import io.qameta.allure.Step;
 import java.util.ArrayList;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import java.util.stream.Stream;
-import org.openqa.selenium.By;
 
 
 public class BrokersDetails extends BasePage {
 public class BrokersDetails extends BasePage {
 
 
-  protected SelenideElement logDirectoriesTab = $x("//a[text()='Log directories']");
-  protected SelenideElement metricsTab = $x("//a[text()='Metrics']");
   protected String brokersTabLocator = "//a[text()='%s']";
   protected String brokersTabLocator = "//a[text()='%s']";
 
 
   @Step
   @Step
   public BrokersDetails waitUntilScreenReady() {
   public BrokersDetails waitUntilScreenReady() {
     waitUntilSpinnerDisappear();
     waitUntilSpinnerDisappear();
-    Arrays.asList(logDirectoriesTab, metricsTab).forEach(element -> element.shouldBe(Condition.visible));
+    $x(String.format(brokersTabLocator, DetailsTab.LOG_DIRECTORIES)).shouldBe(Condition.visible);
     return this;
     return this;
   }
   }
 
 
   @Step
   @Step
   public BrokersDetails openDetailsTab(DetailsTab menu) {
   public BrokersDetails openDetailsTab(DetailsTab menu) {
-    $(By.linkText(menu.toString())).shouldBe(Condition.enabled).click();
+    $x(String.format(brokersTabLocator, menu.toString())).shouldBe(Condition.enabled).click();
     waitUntilSpinnerDisappear();
     waitUntilSpinnerDisappear();
     return this;
     return this;
   }
   }

+ 8 - 8
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/brokers/BrokersList.java

@@ -24,7 +24,7 @@ public class BrokersList extends BasePage {
 
 
   @Step
   @Step
   public BrokersList openBroker(int brokerId) {
   public BrokersList openBroker(int brokerId) {
-    getBrokerItem(brokerId).openItem();
+    getBroker(brokerId).openItem();
     return this;
     return this;
   }
   }
 
 
@@ -59,30 +59,30 @@ public class BrokersList extends BasePage {
     return getEnabledColumnHeaders();
     return getEnabledColumnHeaders();
   }
   }
 
 
-  private List<BrokersList.BrokerGridItem> initGridItems() {
-    List<BrokersList.BrokerGridItem> gridItemList = new ArrayList<>();
+  private List<BrokersGridItem> initGridItems() {
+    List<BrokersGridItem> gridItemList = new ArrayList<>();
     gridItems.shouldHave(CollectionCondition.sizeGreaterThan(0))
     gridItems.shouldHave(CollectionCondition.sizeGreaterThan(0))
-        .forEach(item -> gridItemList.add(new BrokersList.BrokerGridItem(item)));
+        .forEach(item -> gridItemList.add(new BrokersGridItem(item)));
     return gridItemList;
     return gridItemList;
   }
   }
 
 
   @Step
   @Step
-  public BrokerGridItem getBrokerItem(int id) {
+  public BrokersGridItem getBroker(int id) {
     return initGridItems().stream()
     return initGridItems().stream()
         .filter(e -> e.getId() == id)
         .filter(e -> e.getId() == id)
         .findFirst().orElseThrow();
         .findFirst().orElseThrow();
   }
   }
 
 
   @Step
   @Step
-  public List<BrokerGridItem> getAllBrokers() {
+  public List<BrokersGridItem> getAllBrokers() {
     return initGridItems();
     return initGridItems();
   }
   }
 
 
-  public static class BrokerGridItem extends BasePage {
+  public static class BrokersGridItem extends BasePage {
 
 
     private final SelenideElement element;
     private final SelenideElement element;
 
 
-    public BrokerGridItem(SelenideElement element) {
+    public BrokersGridItem(SelenideElement element) {
       this.element = element;
       this.element = element;
     }
     }
 
 

+ 1 - 1
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topics/TopicDetails.java

@@ -186,7 +186,7 @@ public class TopicDetails extends BasePage {
 
 
   @Step
   @Step
   public TopicDetails clickNextButton() {
   public TopicDetails clickNextButton() {
-    nextBtn.shouldBe(Condition.enabled).click();
+    clickNextBtn();
     waitUntilSpinnerDisappear();
     waitUntilSpinnerDisappear();
     return this;
     return this;
   }
   }

+ 11 - 0
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/topics/TopicsList.java

@@ -68,6 +68,17 @@ public class TopicsList extends BasePage {
     return this;
     return this;
   }
   }
 
 
+  @Step
+  public TopicsList goToLastPage() {
+    if (nextBtn.exists()) {
+      while (nextBtn.isEnabled()) {
+        clickNextBtn();
+        waitUntilSpinnerDisappear(1);
+      }
+    }
+    return this;
+  }
+
   @Step
   @Step
   public TopicsList openTopic(String topicName) {
   public TopicsList openTopic(String topicName) {
     getTopicItem(topicName).openItem();
     getTopicItem(topicName).openItem();

+ 12 - 19
kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/manualsuite/backlog/SmokeBacklog.java

@@ -15,94 +15,87 @@ import org.testng.annotations.Test;
 
 
 public class SmokeBacklog extends BaseManualTest {
 public class SmokeBacklog extends BaseManualTest {
 
 
-  @Automation(state = TO_BE_AUTOMATED)
-  @Suite(id = BROKERS_SUITE_ID)
-  @QaseId(330)
-  @Test
-  public void testCaseA() {
-  }
-
   @Automation(state = TO_BE_AUTOMATED)
   @Automation(state = TO_BE_AUTOMATED)
   @Suite(id = BROKERS_SUITE_ID)
   @Suite(id = BROKERS_SUITE_ID)
   @QaseId(331)
   @QaseId(331)
   @Test
   @Test
-  public void testCaseB() {
+  public void testCaseA() {
   }
   }
 
 
   @Automation(state = TO_BE_AUTOMATED)
   @Automation(state = TO_BE_AUTOMATED)
   @Suite(id = BROKERS_SUITE_ID)
   @Suite(id = BROKERS_SUITE_ID)
   @QaseId(332)
   @QaseId(332)
   @Test
   @Test
-  public void testCaseC() {
+  public void testCaseB() {
   }
   }
 
 
   @Automation(state = TO_BE_AUTOMATED)
   @Automation(state = TO_BE_AUTOMATED)
   @Suite(id = TOPICS_PROFILE_SUITE_ID)
   @Suite(id = TOPICS_PROFILE_SUITE_ID)
   @QaseId(335)
   @QaseId(335)
   @Test
   @Test
-  public void testCaseD() {
+  public void testCaseC() {
   }
   }
 
 
   @Automation(state = TO_BE_AUTOMATED)
   @Automation(state = TO_BE_AUTOMATED)
   @Suite(id = TOPICS_PROFILE_SUITE_ID)
   @Suite(id = TOPICS_PROFILE_SUITE_ID)
   @QaseId(336)
   @QaseId(336)
   @Test
   @Test
-  public void testCaseE() {
+  public void testCaseD() {
   }
   }
 
 
   @Automation(state = TO_BE_AUTOMATED)
   @Automation(state = TO_BE_AUTOMATED)
   @Suite(id = TOPICS_PROFILE_SUITE_ID)
   @Suite(id = TOPICS_PROFILE_SUITE_ID)
   @QaseId(343)
   @QaseId(343)
   @Test
   @Test
-  public void testCaseF() {
+  public void testCaseE() {
   }
   }
 
 
   @Automation(state = TO_BE_AUTOMATED)
   @Automation(state = TO_BE_AUTOMATED)
   @Suite(id = SCHEMAS_SUITE_ID)
   @Suite(id = SCHEMAS_SUITE_ID)
   @QaseId(345)
   @QaseId(345)
   @Test
   @Test
-  public void testCaseG() {
+  public void testCaseF() {
   }
   }
 
 
   @Automation(state = TO_BE_AUTOMATED)
   @Automation(state = TO_BE_AUTOMATED)
   @Suite(id = SCHEMAS_SUITE_ID)
   @Suite(id = SCHEMAS_SUITE_ID)
   @QaseId(346)
   @QaseId(346)
   @Test
   @Test
-  public void testCaseH() {
+  public void testCaseG() {
   }
   }
 
 
   @Automation(state = TO_BE_AUTOMATED)
   @Automation(state = TO_BE_AUTOMATED)
   @Suite(id = TOPICS_PROFILE_SUITE_ID)
   @Suite(id = TOPICS_PROFILE_SUITE_ID)
   @QaseId(347)
   @QaseId(347)
   @Test
   @Test
-  public void testCaseI() {
+  public void testCaseH() {
   }
   }
 
 
   @Automation(state = TO_BE_AUTOMATED)
   @Automation(state = TO_BE_AUTOMATED)
   @Suite(id = BROKERS_SUITE_ID)
   @Suite(id = BROKERS_SUITE_ID)
   @QaseId(348)
   @QaseId(348)
   @Test
   @Test
-  public void testCaseJ() {
+  public void testCaseI() {
   }
   }
 
 
   @Automation(state = TO_BE_AUTOMATED)
   @Automation(state = TO_BE_AUTOMATED)
   @Suite(id = BROKERS_SUITE_ID)
   @Suite(id = BROKERS_SUITE_ID)
   @QaseId(350)
   @QaseId(350)
   @Test
   @Test
-  public void testCaseK() {
+  public void testCaseJ() {
   }
   }
 
 
   @Automation(state = NOT_AUTOMATED)
   @Automation(state = NOT_AUTOMATED)
   @Suite(id = TOPICS_SUITE_ID)
   @Suite(id = TOPICS_SUITE_ID)
   @QaseId(50)
   @QaseId(50)
   @Test
   @Test
-  public void testCaseL() {
+  public void testCaseK() {
   }
   }
 
 
   @Automation(state = NOT_AUTOMATED)
   @Automation(state = NOT_AUTOMATED)
   @Suite(id = SCHEMAS_SUITE_ID)
   @Suite(id = SCHEMAS_SUITE_ID)
   @QaseId(351)
   @QaseId(351)
   @Test
   @Test
-  public void testCaseM() {
+  public void testCaseL() {
   }
   }
 }
 }

+ 32 - 1
kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/smokesuite/brokers/BrokersTest.java

@@ -4,12 +4,17 @@ import static com.provectus.kafka.ui.pages.brokers.BrokersDetails.DetailsTab.CON
 
 
 import com.codeborne.selenide.Condition;
 import com.codeborne.selenide.Condition;
 import com.provectus.kafka.ui.BaseTest;
 import com.provectus.kafka.ui.BaseTest;
+import com.provectus.kafka.ui.pages.brokers.BrokersConfigTab;
+import io.qameta.allure.Issue;
 import io.qase.api.annotation.QaseId;
 import io.qase.api.annotation.QaseId;
 import org.testng.Assert;
 import org.testng.Assert;
+import org.testng.annotations.Ignore;
 import org.testng.annotations.Test;
 import org.testng.annotations.Test;
 
 
 public class BrokersTest extends BaseTest {
 public class BrokersTest extends BaseTest {
 
 
+  public static final int DEFAULT_BROKER_ID = 1;
+
   @QaseId(1)
   @QaseId(1)
   @Test
   @Test
   public void checkBrokersOverview() {
   public void checkBrokersOverview() {
@@ -25,7 +30,7 @@ public class BrokersTest extends BaseTest {
     navigateToBrokers();
     navigateToBrokers();
     Assert.assertTrue(brokersList.getAllBrokers().size() > 0, "getAllBrokers()");
     Assert.assertTrue(brokersList.getAllBrokers().size() > 0, "getAllBrokers()");
     brokersList
     brokersList
-        .openBroker(1);
+        .openBroker(DEFAULT_BROKER_ID);
     brokersDetails
     brokersDetails
         .waitUntilScreenReady();
         .waitUntilScreenReady();
     verifyElementsCondition(brokersDetails.getAllVisibleElements(), Condition.visible);
     verifyElementsCondition(brokersDetails.getAllVisibleElements(), Condition.visible);
@@ -38,4 +43,30 @@ public class BrokersTest extends BaseTest {
     verifyElementsCondition(brokersConfigTab.getEditButtons(), Condition.enabled);
     verifyElementsCondition(brokersConfigTab.getEditButtons(), Condition.enabled);
     Assert.assertTrue(brokersConfigTab.isSearchByKeyVisible(), "isSearchByKeyVisible()");
     Assert.assertTrue(brokersConfigTab.isSearchByKeyVisible(), "isSearchByKeyVisible()");
   }
   }
+
+  @Ignore
+  @Issue("https://github.com/provectus/kafka-ui/issues/3347")
+  @QaseId(330)
+  @Test
+  public void brokersConfigSearchCheck() {
+    navigateToBrokersAndOpenDetails(DEFAULT_BROKER_ID);
+    brokersDetails
+        .openDetailsTab(CONFIGS);
+    String anyConfigKey = brokersConfigTab
+        .getAllConfigs().stream()
+        .findAny().orElseThrow()
+        .getKey();
+    brokersConfigTab
+        .clickNextButton();
+    Assert.assertFalse(brokersConfigTab.getAllConfigs().stream()
+            .map(BrokersConfigTab.BrokersConfigItem::getKey)
+            .toList().contains(anyConfigKey),
+        String.format("getAllConfigs().contains(%s)", anyConfigKey));
+    brokersConfigTab
+        .searchConfig(anyConfigKey);
+    Assert.assertTrue(brokersConfigTab.getAllConfigs().stream()
+            .map(BrokersConfigTab.BrokersConfigItem::getKey)
+            .toList().contains(anyConfigKey),
+        String.format("getAllConfigs().contains(%s)", anyConfigKey));
+  }
 }
 }

+ 5 - 4
kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/smokesuite/topics/TopicsTest.java

@@ -365,12 +365,13 @@ public class TopicsTest extends BaseTest {
     navigateToTopics();
     navigateToTopics();
     topicsList
     topicsList
         .setShowInternalRadioButton(true);
         .setShowInternalRadioButton(true);
-    SoftAssert softly = new SoftAssert();
-    softly.assertTrue(topicsList.getInternalTopics().size() > 0, "getInternalTopics()");
-    softly.assertTrue(topicsList.getNonInternalTopics().size() > 0, "getNonInternalTopics()");
-    softly.assertAll();
+    Assert.assertTrue(topicsList.getInternalTopics().size() > 0, "getInternalTopics()");
+    topicsList
+        .goToLastPage();
+    Assert.assertTrue(topicsList.getNonInternalTopics().size() > 0, "getNonInternalTopics()");
     topicsList
     topicsList
         .setShowInternalRadioButton(false);
         .setShowInternalRadioButton(false);
+    SoftAssert softly = new SoftAssert();
     softly.assertEquals(topicsList.getInternalTopics().size(), 0, "getInternalTopics()");
     softly.assertEquals(topicsList.getInternalTopics().size(), 0, "getInternalTopics()");
     softly.assertTrue(topicsList.getNonInternalTopics().size() > 0, "getNonInternalTopics()");
     softly.assertTrue(topicsList.getNonInternalTopics().size() > 0, "getNonInternalTopics()");
     softly.assertAll();
     softly.assertAll();

+ 11 - 3
kafka-ui-react-app/src/components/Version/Version.tsx

@@ -8,14 +8,22 @@ import * as S from './Version.styled';
 
 
 const Version: React.FC = () => {
 const Version: React.FC = () => {
   const { data: latestVersionInfo = {} } = useLatestVersion();
   const { data: latestVersionInfo = {} } = useLatestVersion();
-  const { buildTime, commitId, isLatestRelease } = latestVersionInfo.build;
+  const { buildTime, commitId, isLatestRelease, version } =
+    latestVersionInfo.build;
   const { versionTag } = latestVersionInfo?.latestRelease || '';
   const { versionTag } = latestVersionInfo?.latestRelease || '';
 
 
+  const currentVersion =
+    isLatestRelease && version?.match(versionTag)
+      ? versionTag
+      : formatTimestamp(buildTime);
+
   return (
   return (
     <S.Wrapper>
     <S.Wrapper>
       {!isLatestRelease && (
       {!isLatestRelease && (
         <S.OutdatedWarning
         <S.OutdatedWarning
-          title={`Your app version is outdated. Current latest version is ${versionTag}`}
+          title={`Your app version is outdated. Latest version is ${
+            versionTag || 'UNKNOWN'
+          }`}
         >
         >
           <WarningIcon />
           <WarningIcon />
         </S.OutdatedWarning>
         </S.OutdatedWarning>
@@ -32,7 +40,7 @@ const Version: React.FC = () => {
           </S.CurrentCommitLink>
           </S.CurrentCommitLink>
         </div>
         </div>
       )}
       )}
-      <S.CurrentVersion>{formatTimestamp(buildTime)}</S.CurrentVersion>
+      <S.CurrentVersion>{currentVersion}</S.CurrentVersion>
     </S.Wrapper>
     </S.Wrapper>
   );
   );
 };
 };

+ 3 - 3
pom.xml

@@ -36,15 +36,15 @@
         <protobuf-java.version>3.21.9</protobuf-java.version>
         <protobuf-java.version>3.21.9</protobuf-java.version>
         <scala-lang.library.version>2.13.9</scala-lang.library.version>
         <scala-lang.library.version>2.13.9</scala-lang.library.version>
         <snakeyaml.version>2.0</snakeyaml.version>
         <snakeyaml.version>2.0</snakeyaml.version>
-        <spring-boot.version>3.0.5</spring-boot.version>
+        <spring-boot.version>3.0.6</spring-boot.version>
         <kafka-ui-serde-api.version>1.0.0</kafka-ui-serde-api.version>
         <kafka-ui-serde-api.version>1.0.0</kafka-ui-serde-api.version>
-        <odd-oddrn-generator.version>0.1.15</odd-oddrn-generator.version>
+        <odd-oddrn-generator.version>0.1.17</odd-oddrn-generator.version>
         <odd-oddrn-client.version>0.1.23</odd-oddrn-client.version>
         <odd-oddrn-client.version>0.1.23</odd-oddrn-client.version>
         <org.json.version>20230227</org.json.version>
         <org.json.version>20230227</org.json.version>
 
 
         <!-- Test dependency versions -->
         <!-- Test dependency versions -->
         <junit.version>5.9.1</junit.version>
         <junit.version>5.9.1</junit.version>
-        <mockito.version>5.3.0</mockito.version>
+        <mockito.version>5.3.1</mockito.version>
         <okhttp3.mockwebserver.version>4.10.0</okhttp3.mockwebserver.version>
         <okhttp3.mockwebserver.version>4.10.0</okhttp3.mockwebserver.version>
         <testcontainers.version>1.17.5</testcontainers.version>
         <testcontainers.version>1.17.5</testcontainers.version>