소스 검색

Merge branch 'master' into Setup_for_Qase_test_run

# Conflicts:
#	.github/workflows/e2e-checks.yaml
#	kafka-ui-e2e-checks/README.md
VladSenyuta 2 년 전
부모
커밋
ccc202a04d

+ 3 - 3
.github/workflows/e2e-checks.yaml

@@ -1,7 +1,7 @@
 name: E2E tests
 on:
   pull_request_target:
-    types: [ "opened", "edited", "reopened", "synchronize" ]
+    types: ["opened", "edited", "reopened", "synchronize"]
     paths:
       - "kafka-ui-api/**"
       - "kafka-ui-contract/**"
@@ -33,7 +33,7 @@ jobs:
         id: build_app
         run: |
           ./mvnw -B -ntp versions:set -DnewVersion=${{ github.event.pull_request.head.sha }}
-          ./mvnw -B -V -ntp clean package -Pprod -Dmaven.test.skip=true ${{ github.event.inputs.extraMavenOptions }}
+          ./mvnw -B -V -ntp clean install -Pprod -Dmaven.test.skip=true ${{ github.event.inputs.extraMavenOptions }}
       - name: compose app
         id: compose_app
         # use the following command until #819 will be fixed
@@ -42,7 +42,7 @@ jobs:
       - name: e2e run
         run: |
           ./mvnw -B -ntp versions:set -DnewVersion=${{ github.event.pull_request.head.sha }}
-          ./mvnw -B -V -ntp -DQASEIO_API_TOKEN=${{ secrets.QASEIO_API_TOKEN }} test -f 'kafka-ui-e2e-checks' -Dsurefire.suiteXmlFiles='src/test/resources/smoke.xml' -Pprod
+          ./mvnw -B -V -ntp -DQASEIO_API_TOKEN=${{ secrets.QASEIO_API_TOKEN }} -Dsurefire.suiteXmlFiles='src/test/resources/smoke.xml' -Dsuite=smoke -f 'kafka-ui-e2e-checks' test -Pprod
       - name: Generate allure report
         uses: simple-elf/allure-report-action@master
         if: always()

+ 1 - 0
kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/KafkaClusterFactory.java

@@ -82,6 +82,7 @@ public class KafkaClusterFactory {
     WebClient webClient = new WebClientConfigurator()
         .configureSsl(clusterProperties.getSchemaRegistrySsl())
         .configureBasicAuth(auth.getUsername(), auth.getPassword())
+        .configureBufferSize(maxBuffSize)
         .build();
     return ReactiveFailover.create(
         parseUrlList(clusterProperties.getSchemaRegistry()),

+ 10 - 4
kafka-ui-e2e-checks/README.md

@@ -41,16 +41,22 @@ docker-compose -f documentation/compose/e2e-tests.yaml up -d
 2. Run Smoke test suite using your QaseIO API token as environment variable (put instead %s into command below)
 
 ```
-./mvnw -DQASEIO_API_TOKEN='%s' test -f 'kafka-ui-e2e-checks' -Dsurefire.suiteXmlFiles='src/test/resources/smoke.xml' -Dsuite=smoke -Pprod
+./mvnw -DQASEIO_API_TOKEN='%s' -Dsurefire.suiteXmlFiles='src/test/resources/smoke.xml' -Dsuite=smoke -f 'kafka-ui-e2e-checks' test -Pprod
 ```
 
-3. Run Regression test suite using your QaseIO API token as environment variable (put instead %s into command below)
+3. Run Sanity test suite using your QaseIO API token as environment variable (put instead %s into command below)
 
 ```
-./mvnw -DQASEIO_API_TOKEN='%s' test -f 'kafka-ui-e2e-checks' -Dsurefire.suiteXmlFiles='src/test/resources/regression.xml' -Dsuite=regression -Pprod
+./mvnw -DQASEIO_API_TOKEN='%s' -Dsurefire.suiteXmlFiles='src/test/resources/sanity.xml' -Dsuite=sanity -f 'kafka-ui-e2e-checks' test -Pprod
 ```
 
-4. To run tests on your local Chrome browser just add next VM option to the Run Configuration
+4. Run Regression test suite using your QaseIO API token as environment variable (put instead %s into command below)
+
+```
+./mvnw -DQASEIO_API_TOKEN='%s' -Dsurefire.suiteXmlFiles='src/test/resources/regression.xml' -Dsuite=regression -f 'kafka-ui-e2e-checks' test -Pprod
+```
+
+5. To run tests on your local Chrome browser just add next VM option to the Run Configuration
 
 ```
 -Dbrowser=local

+ 118 - 107
kafka-ui-e2e-checks/src/main/java/com/provectus/kafka/ui/pages/ksqlDb/KsqlQueryForm.java

@@ -1,144 +1,155 @@
 package com.provectus.kafka.ui.pages.ksqlDb;
 
-import static com.codeborne.selenide.Condition.visible;
-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.ElementsCollection;
 import com.codeborne.selenide.SelenideElement;
 import com.provectus.kafka.ui.pages.BasePage;
 import io.qameta.allure.Step;
+
 import java.time.Duration;
 import java.util.ArrayList;
 import java.util.List;
 
+import static com.codeborne.selenide.Condition.visible;
+import static com.codeborne.selenide.Selenide.$$x;
+import static com.codeborne.selenide.Selenide.$x;
+
 public class KsqlQueryForm extends BasePage {
-  protected SelenideElement pageTitle = $x("//h1[text()='Query']");
-  protected SelenideElement clearBtn = $x("//div/button[text()='Clear']");
-  protected SelenideElement executeBtn = $x("//div/button[text()='Execute']");
-  protected SelenideElement stopQueryBtn = $x("//div/button[text()='Stop query']");
-  protected SelenideElement clearResultsBtn = $x("//div/button[text()='Clear results']");
-  protected SelenideElement addStreamPropertyBtn = $x("//button[text()='Add Stream Property']");
-  protected SelenideElement queryAreaValue = $x("//div[@class='ace_content']");
-  protected SelenideElement queryArea = $x("//div[@id='ksql']/textarea[@class='ace_text-input']");
-  protected ElementsCollection ksqlGridItems = $$x("//tbody//tr");
-  protected ElementsCollection keyField = $$x("//input[@aria-label='key']");
-  protected ElementsCollection valueField = $$x("//input[@aria-label='value']");
-
-  @Step
-  public KsqlQueryForm waitUntilScreenReady() {
-    waitUntilSpinnerDisappear();
-    pageTitle.shouldBe(Condition.visible);
-    return this;
-  }
-
-  @Step
-  public KsqlQueryForm clickClearBtn() {
-    clickByJavaScript(clearBtn);
-    return this;
-  }
-
-  @Step
-  public KsqlQueryForm clickExecuteBtn() {
-    clickByJavaScript(executeBtn);
-    if (queryAreaValue.getText().contains("EMIT CHANGES;")) {
-      loadingSpinner.shouldBe(Condition.visible);
-    } else {
-      waitUntilSpinnerDisappear();
+    protected SelenideElement pageTitle = $x("//h1[text()='Query']");
+    protected SelenideElement clearBtn = $x("//div/button[text()='Clear']");
+    protected SelenideElement executeBtn = $x("//div/button[text()='Execute']");
+    protected SelenideElement stopQueryBtn = $x("//div/button[text()='Stop query']");
+    protected SelenideElement clearResultsBtn = $x("//div/button[text()='Clear results']");
+    protected SelenideElement addStreamPropertyBtn = $x("//button[text()='Add Stream Property']");
+    protected SelenideElement queryAreaValue = $x("//div[@class='ace_content']");
+    protected SelenideElement queryArea = $x("//div[@id='ksql']/textarea[@class='ace_text-input']");
+    protected ElementsCollection ksqlGridItems = $$x("//tbody//tr");
+    protected ElementsCollection keyField = $$x("//input[@aria-label='key']");
+    protected ElementsCollection valueField = $$x("//input[@aria-label='value']");
+
+    @Step
+    public KsqlQueryForm waitUntilScreenReady() {
+        waitUntilSpinnerDisappear();
+        pageTitle.shouldBe(Condition.visible);
+        return this;
     }
-    return this;
-  }
-
-  @Step
-  public KsqlQueryForm clickStopQueryBtn() {
-    clickByJavaScript(stopQueryBtn);
-    waitUntilSpinnerDisappear();
-    return this;
-  }
-
-  @Step
-  public KsqlQueryForm clickClearResultsBtn() {
-    clickByJavaScript(clearResultsBtn);
-    waitUntilSpinnerDisappear();
-    return this;
-  }
-
-  @Step
-  public KsqlQueryForm clickAddStreamProperty() {
-    clickByJavaScript(addStreamPropertyBtn);
-    return this;
-  }
-
-  @Step
-  public KsqlQueryForm setQuery(String query) {
-    queryAreaValue.shouldBe(Condition.visible).click();
-    queryArea.setValue(query);
-    return this;
-  }
-
-  private List<KsqlQueryForm.KsqlResponseGridItem> initItems() {
-    List<KsqlQueryForm.KsqlResponseGridItem> gridItemList = new ArrayList<>();
-    ksqlGridItems.shouldHave(CollectionCondition.sizeGreaterThan(0))
-        .forEach(item -> gridItemList.add(new KsqlQueryForm.KsqlResponseGridItem(item)));
-    return gridItemList;
-  }
-
-  @Step
-  public KsqlQueryForm.KsqlResponseGridItem getTableByName(String name) {
-    return initItems().stream()
-        .filter(e -> e.getName().equalsIgnoreCase(name))
-        .findFirst().orElseThrow();
-  }
-
-  public static class KsqlResponseGridItem extends BasePage {
-
-    private final SelenideElement element;
-
-    private KsqlResponseGridItem(SelenideElement element) {
-      this.element = element;
+
+    @Step
+    public KsqlQueryForm clickClearBtn() {
+        clickByJavaScript(clearBtn);
+        return this;
     }
 
     @Step
-    public String getType() {
-      return element.$x("./td[1]").getText().trim();
+    public KsqlQueryForm clickExecuteBtn() {
+        clickByActions(executeBtn);
+        if (queryAreaValue.getText().contains("EMIT CHANGES;")) {
+            loadingSpinner.shouldBe(Condition.visible);
+        } else {
+            waitUntilSpinnerDisappear();
+        }
+        return this;
     }
 
     @Step
-    public String getName() {
-      return element.$x("./td[2]").scrollTo().getText().trim();
+    public KsqlQueryForm clickStopQueryBtn() {
+        clickByActions(stopQueryBtn);
+        waitUntilSpinnerDisappear();
+        return this;
     }
 
     @Step
-    public boolean isVisible() {
-      boolean isVisible = false;
-      try {
-        element.$x("./td[2]").shouldBe(visible, Duration.ofMillis(500));
-        isVisible = true;
-      } catch (Throwable ignored) {
-      }
-      return isVisible;
+    public KsqlQueryForm clickClearResultsBtn() {
+        clickByActions(clearResultsBtn);
+        waitUntilSpinnerDisappear();
+        return this;
     }
 
     @Step
-    public String getTopic() {
-      return element.$x("./td[3]").getText().trim();
+    public KsqlQueryForm clickAddStreamProperty() {
+        clickByJavaScript(addStreamPropertyBtn);
+        return this;
     }
 
     @Step
-    public String getKeyFormat() {
-      return element.$x("./td[4]").getText().trim();
+    public KsqlQueryForm setQuery(String query) {
+        queryAreaValue.shouldBe(Condition.visible).click();
+        queryArea.setValue(query);
+        return this;
     }
 
     @Step
-    public String getValueFormat() {
-      return element.$x("./td[5]").getText().trim();
+    public KsqlQueryForm.KsqlResponseGridItem getTableByName(String name) {
+        return initItems().stream()
+                .filter(e -> e.getName().equalsIgnoreCase(name))
+                .findFirst().orElseThrow();
     }
 
     @Step
-    public String getIsWindowed() {
-      return element.$x("./td[6]").getText().trim();
+    public boolean areResultsVisible() {
+        boolean visible = false;
+        try {
+            visible = initItems().size() > 0;
+        } catch (Throwable ignored) {
+        }
+        return visible;
+    }
+
+    private List<KsqlQueryForm.KsqlResponseGridItem> initItems() {
+        List<KsqlQueryForm.KsqlResponseGridItem> gridItemList = new ArrayList<>();
+        ksqlGridItems.shouldHave(CollectionCondition.sizeGreaterThan(0))
+                .forEach(item -> gridItemList.add(new KsqlQueryForm.KsqlResponseGridItem(item)));
+        return gridItemList;
+    }
+
+    public static class KsqlResponseGridItem extends BasePage {
+
+        private final SelenideElement element;
+
+        private KsqlResponseGridItem(SelenideElement element) {
+            this.element = element;
+        }
+
+        @Step
+        public String getType() {
+            return element.$x("./td[1]").getText().trim();
+        }
+
+        @Step
+        public String getName() {
+            return element.$x("./td[2]").scrollTo().getText().trim();
+        }
+
+        @Step
+        public boolean isVisible() {
+            boolean isVisible = false;
+            try {
+                element.$x("./td[2]").shouldBe(visible, Duration.ofMillis(500));
+                isVisible = true;
+            } catch (Throwable ignored) {
+            }
+            return isVisible;
+        }
+
+        @Step
+        public String getTopic() {
+            return element.$x("./td[3]").getText().trim();
+        }
+
+        @Step
+        public String getKeyFormat() {
+            return element.$x("./td[4]").getText().trim();
+        }
+
+        @Step
+        public String getValueFormat() {
+            return element.$x("./td[5]").getText().trim();
+        }
+
+        @Step
+        public String getIsWindowed() {
+            return element.$x("./td[6]").getText().trim();
+        }
     }
-  }
 }

+ 25 - 1
kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/smokeSuite/ksqlDb/KsqlDbTest.java

@@ -39,7 +39,7 @@ public class KsqlDbTest extends BaseTest {
     @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
     @AutomationStatus(status = Status.AUTOMATED)
     @CaseId(41)
-    @Test
+    @Test(priority = 1)
     public void checkShowTablesRequestExecution() {
         naviSideBar
                 .openSideMenu(KSQL_DB);
@@ -51,8 +51,32 @@ public class KsqlDbTest extends BaseTest {
                 .setQuery(SHOW_TABLES.getQuery())
                 .clickExecuteBtn();
         SoftAssert softly = new SoftAssert();
+        softly.assertTrue(ksqlQueryForm.areResultsVisible(), "areResultsVisible()");
         softly.assertTrue(ksqlQueryForm.getTableByName(FIRST_TABLE.getName()).isVisible(), "getTableName()");
         softly.assertTrue(ksqlQueryForm.getTableByName(SECOND_TABLE.getName()).isVisible(), "getTableName()");
         softly.assertAll();
     }
+
+    @Suite(suiteId = SUITE_ID, title = SUITE_TITLE)
+    @AutomationStatus(status = Status.AUTOMATED)
+    @CaseId(86)
+    @Test(priority = 2)
+    public void clearResultsForExecutedRequest() {
+        naviSideBar
+                .openSideMenu(KSQL_DB);
+        ksqlDbList
+                .waitUntilScreenReady()
+                .clickExecuteKsqlRequestBtn();
+        ksqlQueryForm
+                .waitUntilScreenReady()
+                .setQuery(SHOW_TABLES.getQuery())
+                .clickExecuteBtn();
+        SoftAssert softly = new SoftAssert();
+        softly.assertTrue(ksqlQueryForm.areResultsVisible(), "areResultsVisible()");
+        softly.assertAll();
+        ksqlQueryForm
+                .clickClearResultsBtn();
+        softly.assertFalse(ksqlQueryForm.areResultsVisible(), "areResultsVisible()");
+        softly.assertAll();
+    }
 }

+ 4 - 0
kafka-ui-e2e-checks/src/test/java/com/provectus/kafka/ui/testSuite/TestClass.java

@@ -0,0 +1,4 @@
+package com.provectus.kafka.ui.testSuite;
+
+public class TestClass {
+}

+ 2 - 1
kafka-ui-e2e-checks/src/test/resources/regression.xml

@@ -2,7 +2,8 @@
 <suite name="RegressionSuite">
     <test name="Regression" enabled="true" parallel="classes" thread-count="1">
         <packages>
-            <package name="com.provectus.kafka.ui.regressionSuite.*"/>
+            <package name="com.provectus.kafka.ui.smokeSuite.*"/>
+            <package name="com.provectus.kafka.ui.sanitySuite.*"/>
         </packages>
     </test>
 </suite>

+ 8 - 0
kafka-ui-e2e-checks/src/test/resources/sanity.xml

@@ -0,0 +1,8 @@
+<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
+<suite name="SanitySuite">
+    <test name="Sanity" enabled="true" parallel="classes" thread-count="1">
+        <packages>
+            <package name="com.provectus.kafka.ui.sanitySuite.*"/>
+        </packages>
+    </test>
+</suite>