Repository: zeppelin
Updated Branches:
  refs/heads/master ab9e114c5 -> c456967d4


[ZEPPELIN-1065] Flaky Test - ParagraphActionsIT.testRemoveButton

### What is this PR for?
This is fix for fixing flaky CI failing test

```
testRemoveButton(org.apache.zeppelin.integration.ParagraphActionsIT)  Time 
elapsed: 9.641 sec  <<< FAILURE!
java.lang.AssertionError: After Remove : Number of paragraphs are
Expected: <2>
     but: was <1>
        at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
        at org.junit.Assert.assertThat(Assert.java:865)
        at org.junit.rules.ErrorCollector$1.call(ErrorCollector.java:65)
        at org.junit.rules.ErrorCollector.checkSucceeds(ErrorCollector.java:78)
        at org.junit.rules.ErrorCollector.checkThat(ErrorCollector.java:63)
        at 
org.apache.zeppelin.integration.ParagraphActionsIT.testRemoveButton(ParagraphActionsIT.java:161)
```

### What type of PR is it?
[Bug Fix]

### Todos
* [x] - Add delay after paragraph delete.

### What is the Jira issue?
* [ZEPPELIN-1065](https://issues.apache.org/jira/browse/ZEPPELIN-1065)

### How should this be tested?
CI should be green

### Questions:
* Does the licenses files need update? n/a
* Is there breaking changes for older versions? n/a
* Does this needs documentation? n/a

Author: Prabhjyot Singh <[email protected]>

Closes #1091 from prabhjyotsingh/ZEPPELIN-1065 and squashes the following 
commits:

f1b42b9 [Prabhjyot Singh] - refactor sleep into ZeppelinITUtils  - use 
clickAndWait before reading any WebElement
c70709f [Prabhjyot Singh] add delay after deleting paragraph.


Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/c456967d
Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/c456967d
Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/c456967d

Branch: refs/heads/master
Commit: c456967d494ec4c7e87f18e623bb671328fc7045
Parents: ab9e114
Author: Prabhjyot Singh <[email protected]>
Authored: Mon Jun 27 14:13:40 2016 +0530
Committer: Prabhjyot Singh <[email protected]>
Committed: Mon Jun 27 16:49:10 2016 +0530

----------------------------------------------------------------------
 .../org/apache/zeppelin/AbstractZeppelinIT.java | 27 +++-------
 .../zeppelin/integration/AuthenticationIT.java  | 10 ++--
 .../integration/ParagraphActionsIT.java         | 52 +++++++++++---------
 .../apache/zeppelin/integration/ZeppelinIT.java |  9 ++--
 4 files changed, 47 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zeppelin/blob/c456967d/zeppelin-server/src/test/java/org/apache/zeppelin/AbstractZeppelinIT.java
----------------------------------------------------------------------
diff --git 
a/zeppelin-server/src/test/java/org/apache/zeppelin/AbstractZeppelinIT.java 
b/zeppelin-server/src/test/java/org/apache/zeppelin/AbstractZeppelinIT.java
index e78c992..4e08a89 100644
--- a/zeppelin-server/src/test/java/org/apache/zeppelin/AbstractZeppelinIT.java
+++ b/zeppelin-server/src/test/java/org/apache/zeppelin/AbstractZeppelinIT.java
@@ -38,9 +38,6 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
-import static org.openqa.selenium.Keys.ENTER;
-import static org.openqa.selenium.Keys.SHIFT;
-
 abstract public class AbstractZeppelinIT {
   protected static WebDriver driver;
 
@@ -49,21 +46,6 @@ abstract public class AbstractZeppelinIT {
   protected static final long MAX_BROWSER_TIMEOUT_SEC = 30;
   protected static final long MAX_PARAGRAPH_TIMEOUT_SEC = 60;
 
-  protected void sleep(long millis, boolean logOutput) {
-    if (logOutput) {
-      LOG.info("Starting sleeping for " + (millis / 1000) + " seconds...");
-      LOG.info("Caller: " + Thread.currentThread().getStackTrace()[2]);
-    }
-    try {
-      Thread.sleep(millis);
-    } catch (InterruptedException e) {
-      e.printStackTrace();
-    }
-    if (logOutput) {
-      LOG.info("Finished.");
-    }
-  }
-
   protected void setTextOfParagraph(int paragraphNo, String text) {
     String editorId = 
driver.findElement(By.xpath(getParagraphXPath(paragraphNo) + 
"//div[contains(@class, 'editor')]")).getAttribute("id");
     if (driver instanceof JavascriptExecutor) {
@@ -147,10 +129,15 @@ abstract public class AbstractZeppelinIT {
   protected void deleteTestNotebook(final WebDriver driver) {
     
driver.findElement(By.xpath(".//*[@id='main']//button[@ng-click='removeNote(note.id)']"))
         .sendKeys(Keys.ENTER);
-    sleep(1000, true);
+    ZeppelinITUtils.sleep(1000, true);
     
driver.findElement(By.xpath("//div[@class='modal-dialog'][contains(.,'delete 
this notebook')]" +
         "//div[@class='modal-footer']//button[contains(.,'OK')]")).click();
-    sleep(100, true);
+    ZeppelinITUtils.sleep(100, true);
+  }
+
+  protected void clickAndWait(final By locator) {
+    driver.findElement(locator).click();
+    ZeppelinITUtils.sleep(1000, true);
   }
 
   protected void handleException(String message, Exception e) throws Exception 
{

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/c456967d/zeppelin-server/src/test/java/org/apache/zeppelin/integration/AuthenticationIT.java
----------------------------------------------------------------------
diff --git 
a/zeppelin-server/src/test/java/org/apache/zeppelin/integration/AuthenticationIT.java
 
b/zeppelin-server/src/test/java/org/apache/zeppelin/integration/AuthenticationIT.java
index dd11a54..5f17b03 100644
--- 
a/zeppelin-server/src/test/java/org/apache/zeppelin/integration/AuthenticationIT.java
+++ 
b/zeppelin-server/src/test/java/org/apache/zeppelin/integration/AuthenticationIT.java
@@ -109,22 +109,22 @@ public class AuthenticationIT extends AbstractZeppelinIT {
     pollingWait(By.xpath(
         "//div[contains(@class, 
'navbar-collapse')]//li//button[contains(.,'Login')]"),
         MAX_BROWSER_TIMEOUT_SEC).click();
-    sleep(1000, false);
+    ZeppelinITUtils.sleep(1000, false);
     pollingWait(By.xpath("//*[@id='userName']"), 
MAX_BROWSER_TIMEOUT_SEC).sendKeys(userName);
     pollingWait(By.xpath("//*[@id='password']"), 
MAX_BROWSER_TIMEOUT_SEC).sendKeys(password);
     
pollingWait(By.xpath("//*[@id='NoteImportCtrl']//button[contains(.,'Login')]"),
         MAX_BROWSER_TIMEOUT_SEC).click();
-    sleep(1000, false);
+    ZeppelinITUtils.sleep(1000, false);
   }
 
   private void logoutUser(String userName) {
-    sleep(500, false);
+    ZeppelinITUtils.sleep(500, false);
     driver.findElement(By.xpath("//div[contains(@class, 
'navbar-collapse')]//li[contains(.,'" +
         userName + "')]")).click();
-    sleep(500, false);
+    ZeppelinITUtils.sleep(500, false);
     driver.findElement(By.xpath("//div[contains(@class, 
'navbar-collapse')]//li[contains(.,'" +
         userName + "')]//a[@ng-click='logout()']")).click();
-    sleep(5000, false);
+    ZeppelinITUtils.sleep(5000, false);
   }
 
   //  @Test

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/c456967d/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ParagraphActionsIT.java
----------------------------------------------------------------------
diff --git 
a/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ParagraphActionsIT.java
 
b/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ParagraphActionsIT.java
index e07cdba..93d255e 100644
--- 
a/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ParagraphActionsIT.java
+++ 
b/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ParagraphActionsIT.java
@@ -28,7 +28,9 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ErrorCollector;
-import org.openqa.selenium.*;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebElement;
 import org.openqa.selenium.interactions.Actions;
 import org.openqa.selenium.support.ui.Select;
 import org.slf4j.Logger;
@@ -57,6 +59,7 @@ public class ParagraphActionsIT extends AbstractZeppelinIT {
 
     driver.quit();
   }
+
   @Test
   public void testCreateNewButton() throws Exception {
     if (!endToEndTestEnabled()) {
@@ -146,21 +149,26 @@ public class ParagraphActionsIT extends 
AbstractZeppelinIT {
 
       waitForParagraph(1, "READY");
       driver.findElement(By.xpath(getParagraphXPath(1) + 
"//span[@class='icon-settings']")).click();
-      driver.findElement(By.xpath(getParagraphXPath(1) + 
"//ul/li/a[@ng-click='insertNew()']")).click();
+      driver.findElement(By.xpath(getParagraphXPath(1) + 
"//ul/li/a[@ng-click='insertNew()']"))
+          .click();
       waitForParagraph(2, "READY");
-      Integer oldNosOfParas = 
driver.findElements(By.xpath("//div[@ng-controller=\"ParagraphCtrl\"]")).size();
+      Integer oldNosOfParas = driver.findElements(By.xpath
+          ("//div[@ng-controller=\"ParagraphCtrl\"]")).size();
       collector.checkThat("Before Remove : Number of paragraphs are ",
           oldNosOfParas,
           CoreMatchers.equalTo(2));
       driver.findElement(By.xpath(getParagraphXPath(1) + 
"//span[@class='icon-settings']")).click();
-      driver.findElement(By.xpath(getParagraphXPath(1) + 
"//ul/li/a[@ng-click='removeParagraph()']")).click();
-      sleep(1000, true);
-      
driver.findElement(By.xpath("//div[@class='modal-dialog'][contains(.,'delete 
this paragraph')]" +
-          "//div[@class='modal-footer']//button[contains(.,'OK')]")).click();
-      Integer newNosOfParas = 
driver.findElements(By.xpath("//div[@ng-controller=\"ParagraphCtrl\"]")).size();
+
+      clickAndWait(By.xpath(getParagraphXPath(1) + 
"//ul/li/a[@ng-click='removeParagraph()']"));
+
+      clickAndWait(By.xpath("//div[@class='modal-dialog'][contains(.,'delete 
this paragraph')" +
+          "]//div[@class='modal-footer']//button[contains(.,'OK')]"));
+
+      Integer newNosOfParas = driver.findElements(By.xpath
+          ("//div[@ng-controller=\"ParagraphCtrl\"]")).size();
       collector.checkThat("After Remove : Number of paragraphs are",
-          oldNosOfParas-1,
-          CoreMatchers.equalTo(newNosOfParas));
+          newNosOfParas,
+          CoreMatchers.equalTo(oldNosOfParas - 1));
       ZeppelinITUtils.sleep(1000, false);
       deleteTestNotebook(driver);
 
@@ -198,7 +206,7 @@ public class ParagraphActionsIT extends AbstractZeppelinIT {
       driver.findElement(By.xpath(getParagraphXPath(1) + 
"//span[@class='icon-settings']")).click();
       driver.findElement(By.xpath(getParagraphXPath(1) + 
"//ul/li/a[@ng-click='moveDown()']")).click();
 
-      ZeppelinITUtils.sleep(1000,false);
+      ZeppelinITUtils.sleep(1000, false);
 
       collector.checkThat("The paragraph1 value contains",
           driver.findElement(By.xpath(getParagraphXPath(1) + 
"//div[contains(@class, 'editor')]")).getText(),
@@ -210,7 +218,7 @@ public class ParagraphActionsIT extends AbstractZeppelinIT {
       driver.findElement(By.xpath(getParagraphXPath(2) + 
"//span[@class='icon-settings']")).click();
       driver.findElement(By.xpath(getParagraphXPath(2) + 
"//ul/li/a[@ng-click='moveUp()']")).click();
 
-      ZeppelinITUtils.sleep(1000,false);
+      ZeppelinITUtils.sleep(1000, false);
 
       collector.checkThat("The paragraph1 value contains",
           driver.findElement(By.xpath(getParagraphXPath(1) + 
"//div[contains(@class, 'editor')]")).getText(),
@@ -218,7 +226,7 @@ public class ParagraphActionsIT extends AbstractZeppelinIT {
       collector.checkThat("The paragraph1 value contains",
           driver.findElement(By.xpath(getParagraphXPath(2) + 
"//div[contains(@class, 'editor')]")).getText(),
           CoreMatchers.equalTo("2"));
-      ZeppelinITUtils.sleep(1000,false);
+      ZeppelinITUtils.sleep(1000, false);
       deleteTestNotebook(driver);
 
     } catch (Exception e) {
@@ -245,10 +253,10 @@ public class ParagraphActionsIT extends 
AbstractZeppelinIT {
       );
 
       
driver.findElement(By.xpath(".//*[@id='main']//button[@ng-click='runNote()']")).sendKeys(Keys.ENTER);
-      sleep(1000, true);
+      ZeppelinITUtils.sleep(1000, true);
       
driver.findElement(By.xpath("//div[@class='modal-dialog'][contains(.,'Run all 
paragraphs?')]" +
           "//div[@class='modal-footer']//button[contains(.,'OK')]")).click();
-      sleep(2000, false);
+      ZeppelinITUtils.sleep(2000, false);
 
       collector.checkThat("Paragraph status is ",
           getParagraphStatus(1), CoreMatchers.equalTo("READY")
@@ -272,7 +280,7 @@ public class ParagraphActionsIT extends AbstractZeppelinIT {
       createNewNote();
 
       waitForParagraph(1, "READY");
-      String xpathToOutputField=getParagraphXPath(1) + 
"//div[contains(@ng-if,'getResultType()')]";
+      String xpathToOutputField = getParagraphXPath(1) + 
"//div[contains(@ng-if,'getResultType()')]";
       setTextOfParagraph(1, "println (\"abcd\")");
       collector.checkThat("Before Run Output field contains ",
           driver.findElement(By.xpath(xpathToOutputField)).getText(),
@@ -291,7 +299,7 @@ public class ParagraphActionsIT extends AbstractZeppelinIT {
       deleteTestNotebook(driver);
 
     } catch (Exception e) {
-      handleException("Exception in ParagraphActionsIT while 
testClearOutputButton ",e);
+      handleException("Exception in ParagraphActionsIT while 
testClearOutputButton ", e);
     }
 
   }
@@ -335,8 +343,8 @@ public class ParagraphActionsIT extends AbstractZeppelinIT {
 
       String xpathToTitle = getParagraphXPath(1) + "//div[contains(@class, 
'title')]/div";
       String xpathToSettingIcon = getParagraphXPath(1) + 
"//span[@class='icon-settings']";
-      String xpathToShowTitle=getParagraphXPath(1) + 
"//ul/li/a[@ng-click='showTitle()']";
-      String xpathToHideTitle=getParagraphXPath(1) + 
"//ul/li/a[@ng-click='hideTitle()']";
+      String xpathToShowTitle = getParagraphXPath(1) + 
"//ul/li/a[@ng-click='showTitle()']";
+      String xpathToHideTitle = getParagraphXPath(1) + 
"//ul/li/a[@ng-click='hideTitle()']";
 
       collector.checkThat("Before Show Title : The title field contains",
           driver.findElement(By.xpath(xpathToTitle)).getText(),
@@ -391,9 +399,9 @@ public class ParagraphActionsIT extends AbstractZeppelinIT {
       createNewNote();
 
       waitForParagraph(1, "READY");
-      String xpathToLineNumberField=getParagraphXPath(1) + 
"//div[contains(@class, 'ace_gutter-layer')]";
-      String xpathToShowLineNumberButton=getParagraphXPath(1) + 
"//ul/li/a[@ng-click='showLineNumbers()']";
-      String xpathToHideLineNumberButton=getParagraphXPath(1) + 
"//ul/li/a[@ng-click='hideLineNumbers()']";
+      String xpathToLineNumberField = getParagraphXPath(1) + 
"//div[contains(@class, 'ace_gutter-layer')]";
+      String xpathToShowLineNumberButton = getParagraphXPath(1) + 
"//ul/li/a[@ng-click='showLineNumbers()']";
+      String xpathToHideLineNumberButton = getParagraphXPath(1) + 
"//ul/li/a[@ng-click='hideLineNumbers()']";
 
       collector.checkThat("Before \"Show line number\" the Line Number is 
Enabled ",
           driver.findElement(By.xpath(xpathToLineNumberField)).isDisplayed(),

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/c456967d/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java
----------------------------------------------------------------------
diff --git 
a/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java 
b/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java
index 50b67b3..6494dc5 100644
--- 
a/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java
+++ 
b/zeppelin-server/src/test/java/org/apache/zeppelin/integration/ZeppelinIT.java
@@ -19,6 +19,7 @@ package org.apache.zeppelin.integration;
 
 import org.apache.zeppelin.AbstractZeppelinIT;
 import org.apache.zeppelin.WebDriverManager;
+import org.apache.zeppelin.ZeppelinITUtils;
 import org.hamcrest.CoreMatchers;
 import org.junit.After;
 import org.junit.Before;
@@ -178,10 +179,10 @@ public class ZeppelinIT extends AbstractZeppelinIT {
 
       
driver.findElement(By.xpath(".//*[@id='main']//button[@ng-click='removeNote(note.id)']"))
           .sendKeys(Keys.ENTER);
-      sleep(1000, true);
+      ZeppelinITUtils.sleep(1000, true);
       
driver.findElement(By.xpath("//div[@class='modal-dialog'][contains(.,'delete 
this notebook')]" +
           "//div[@class='modal-footer']//button[contains(.,'OK')]")).click();
-      sleep(100, true);
+      ZeppelinITUtils.sleep(100, true);
 
       LOG.info("testCreateNotebook Test executed");
     } catch (Exception e) {
@@ -234,7 +235,7 @@ public class ZeppelinIT extends AbstractZeppelinIT {
 
       //delete created notebook for cleanup.
       deleteTestNotebook(driver);
-      sleep(1000, false);
+      ZeppelinITUtils.sleep(1000, false);
 
       // reset dependency
       settingButton.click();
@@ -306,7 +307,7 @@ public class ZeppelinIT extends AbstractZeppelinIT {
 
       //delete created notebook for cleanup.
       deleteTestNotebook(driver);
-      sleep(1000, true);
+      ZeppelinITUtils.sleep(1000, true);
 
       LOG.info("testAngularRunParagraph Test executed");
     }  catch (Exception e) {

Reply via email to