You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@submarine.apache.org by li...@apache.org on 2021/05/03 12:28:03 UTC

[submarine] branch master updated: SUBMARINE-802. Refactor environment list

This is an automated email from the ASF dual-hosted git repository.

liuxun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/submarine.git


The following commit(s) were added to refs/heads/master by this push:
     new d821cfd  SUBMARINE-802. Refactor environment list
d821cfd is described below

commit d821cfdad3789558312037d6946d37086eb683e0
Author: KUAN-HSUN-LI <b0...@ntu.edu.tw>
AuthorDate: Thu Apr 29 09:00:41 2021 +0800

    SUBMARINE-802. Refactor environment list
    
    ### What is this PR for?
    * Refactor the environment list.
    * Add the preview environment spec button.
    * Download button for environment spec.
    
    ### What type of PR is it?
    [Refactoring]
    
    ### Todos
    
    ### What is the Jira issue?
    https://issues.apache.org/jira/browse/SUBMARINE-802
    
    ### How should this be tested?
    Test download case is created in e2e test.
    
    ### Screenshots (if appropriate)
    ![ezgif com-gif-maker](https://user-images.githubusercontent.com/38066413/116445882-f1c26680-a888-11eb-8a78-3665d81073f3.gif)
    
    ### Questions:
    * Do the license files need updating? No
    * Are there breaking changes for older versions? No
    * Does this need new documentation? No
    
    Author: KUAN-HSUN-LI <b0...@ntu.edu.tw>
    
    Signed-off-by: Liu Xun <li...@apache.org>
    
    Closes #572 from KUAN-HSUN-LI/SUBMARINE-802 and squashes the following commits:
    
    3f6a44d [KUAN-HSUN-LI] SUBMARINE-802. Delete useless folder
    93e3a92 [KUAN-HSUN-LI] SUBMARINE-802. Add download environment spec test
    cc25ced [KUAN-HSUN-LI] SUBMARINE-802. Refactor environment form
---
 .../apache/submarine/ChromeWebDriverProvider.java  |  7 ++++-
 .../apache/submarine/FirefoxWebDriverProvider.java |  5 ++--
 .../org/apache/submarine/WebDriverManager.java     |  9 ++++--
 .../org/apache/submarine/WebDriverProvider.java    |  2 +-
 .../submarine/integration/environmentIT.java       | 21 +++++++++++--
 submarine-workbench/workbench-web/package.json     |  2 +-
 .../environment-list.component.html                | 34 ++++++++++++++--------
 .../environment-list.component.scss                | 12 ++++++++
 .../environment-list/environment-list.component.ts |  8 +++++
 9 files changed, 78 insertions(+), 22 deletions(-)

diff --git a/submarine-test/test-e2e/src/test/java/org/apache/submarine/ChromeWebDriverProvider.java b/submarine-test/test-e2e/src/test/java/org/apache/submarine/ChromeWebDriverProvider.java
index c9c4c54..927062b 100644
--- a/submarine-test/test-e2e/src/test/java/org/apache/submarine/ChromeWebDriverProvider.java
+++ b/submarine-test/test-e2e/src/test/java/org/apache/submarine/ChromeWebDriverProvider.java
@@ -32,6 +32,7 @@ import java.io.IOException;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.util.HashMap;
 
 public class ChromeWebDriverProvider implements WebDriverProvider {
 
@@ -93,9 +94,13 @@ public class ChromeWebDriverProvider implements WebDriverProvider {
   }
 
   @Override
-  public WebDriver createWebDriver(String webDriverPath) {
+  public WebDriver createWebDriver(String webDriverPath, String downloadPath) {
     System.setProperty("webdriver.chrome.driver", webDriverPath);
+    HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
+    chromePrefs.put("download.default_directory", downloadPath);
     ChromeOptions chromeOptions = new ChromeOptions();
+    chromeOptions.setExperimentalOption("prefs", chromePrefs);
+    LOG.info("Set default download directory: " + downloadPath);
     chromeOptions.addArguments("--headless");
     return new ChromeDriver(chromeOptions);
   }
diff --git a/submarine-test/test-e2e/src/test/java/org/apache/submarine/FirefoxWebDriverProvider.java b/submarine-test/test-e2e/src/test/java/org/apache/submarine/FirefoxWebDriverProvider.java
index 7b4a135..e9e692a 100644
--- a/submarine-test/test-e2e/src/test/java/org/apache/submarine/FirefoxWebDriverProvider.java
+++ b/submarine-test/test-e2e/src/test/java/org/apache/submarine/FirefoxWebDriverProvider.java
@@ -98,7 +98,7 @@ public class FirefoxWebDriverProvider implements WebDriverProvider {
   }
 
   @Override
-  public WebDriver createWebDriver(String webDriverPath) {
+  public WebDriver createWebDriver(String webDriverPath, String downloadPath) {
     FirefoxBinary ffox = new FirefoxBinary();
     if ("true".equals(System.getenv("TRAVIS"))) {
       // xvfb is supposed to run with DISPLAY 99
@@ -108,8 +108,7 @@ public class FirefoxWebDriverProvider implements WebDriverProvider {
 
     FirefoxProfile profile = new FirefoxProfile();
     profile.setPreference("browser.download.folderList", 2);
-    profile.setPreference("browser.download.dir",
-        FileUtils.getTempDirectory().toString() + "/firefox/");
+    profile.setPreference("browser.download.dir", downloadPath);
     profile.setPreference("browser.helperApps.alwaysAsk.force", false);
     profile.setPreference("browser.download.manager.showWhenStarting", false);
     profile.setPreference("browser.download.manager.showAlertOnComplete", false);
diff --git a/submarine-test/test-e2e/src/test/java/org/apache/submarine/WebDriverManager.java b/submarine-test/test-e2e/src/test/java/org/apache/submarine/WebDriverManager.java
index 3122fb7..d0f17e1 100644
--- a/submarine-test/test-e2e/src/test/java/org/apache/submarine/WebDriverManager.java
+++ b/submarine-test/test-e2e/src/test/java/org/apache/submarine/WebDriverManager.java
@@ -19,6 +19,7 @@ package org.apache.submarine;
 
 import static org.junit.Assert.fail;
 
+import java.nio.file.Paths;
 import java.util.concurrent.TimeUnit;
 import org.apache.commons.lang3.StringUtils;
 import org.openqa.selenium.By;
@@ -34,7 +35,7 @@ public class WebDriverManager {
 
   public final static Logger LOG = LoggerFactory.getLogger(WebDriverManager.class);
 
-  private static String downLoadsDir = "";
+  private static String downloadPath = Paths.get(System.getProperty("user.dir"), "src", "test", "resources", "downloads").toString();
 
   private static boolean webDriverIsDownloaded = false;
 
@@ -102,6 +103,10 @@ public class WebDriverManager {
     return driver;
   }
 
+  public static String getDownloadPath() {
+      return downloadPath;
+  }
+
   private static WebDriver generateWebDriver(WebDriverProvider provide) {
     if (!webDriverIsDownloaded) {
       String webDriverVersion = provide.getWebDriverVersion();
@@ -110,7 +115,7 @@ public class WebDriverManager {
         webDriverIsDownloaded = true;
       }
     }
-    WebDriver driver = provide.createWebDriver(webDriverPath);
+    WebDriver driver = provide.createWebDriver(webDriverPath, downloadPath);
     return driver;
   }
 }
diff --git a/submarine-test/test-e2e/src/test/java/org/apache/submarine/WebDriverProvider.java b/submarine-test/test-e2e/src/test/java/org/apache/submarine/WebDriverProvider.java
index c6d645d..82609a2 100644
--- a/submarine-test/test-e2e/src/test/java/org/apache/submarine/WebDriverProvider.java
+++ b/submarine-test/test-e2e/src/test/java/org/apache/submarine/WebDriverProvider.java
@@ -38,5 +38,5 @@ public interface WebDriverProvider {
    * @param webDriverPath
    * @return a new web driver
    */
-  public WebDriver createWebDriver(String webDriverPath);
+  public WebDriver createWebDriver(String webDriverPath, String downloadPath);
 }
diff --git a/submarine-test/test-e2e/src/test/java/org/apache/submarine/integration/environmentIT.java b/submarine-test/test-e2e/src/test/java/org/apache/submarine/integration/environmentIT.java
index 3711279..04665a1 100644
--- a/submarine-test/test-e2e/src/test/java/org/apache/submarine/integration/environmentIT.java
+++ b/submarine-test/test-e2e/src/test/java/org/apache/submarine/integration/environmentIT.java
@@ -17,15 +17,24 @@
 
 package org.apache.submarine.integration;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.submarine.AbstractSubmarineIT;
 import org.apache.submarine.WebDriverManager;
 import org.openqa.selenium.By;
+import org.openqa.selenium.support.ui.FluentWait;
+import org.openqa.selenium.support.ui.Wait;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.testng.Assert;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
-import org.testng.Assert;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Paths;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
 
 
 public class environmentIT extends AbstractSubmarineIT {
@@ -39,7 +48,9 @@ public class environmentIT extends AbstractSubmarineIT {
   }
 
   @AfterClass
-  public static void tearDown(){
+  public static void tearDown() throws IOException {
+    File dir = new File(WebDriverManager.getDownloadPath());
+    FileUtils.cleanDirectory(dir);
     driver.quit();
   }
 
@@ -68,6 +79,12 @@ public class environmentIT extends AbstractSubmarineIT {
     Assert.assertEquals(pollingWait(By.xpath("//button[@id='btn-submit']"), MAX_BROWSER_TIMEOUT_SEC).isDisplayed(), true);
     pollingWait(By.xpath("//button[@id='btn-submit']"), MAX_BROWSER_TIMEOUT_SEC).click();
     Assert.assertEquals(pollingWait(By.xpath("//button[@id='btn-newEnvironment']"), MAX_BROWSER_TIMEOUT_SEC).isDisplayed(), true);
+
+    // Test download environment spec
+    pollingWait(By.xpath("//a[@id='btn-downloadEnvironmentSpec0']"), MAX_BROWSER_TIMEOUT_SEC).click();
+    File fileToCheck = Paths.get(WebDriverManager.getDownloadPath()).resolve("environmentSpec.json").toFile();
+    Wait wait = new FluentWait(driver).withTimeout(MAX_BROWSER_TIMEOUT_SEC, SECONDS);
+    wait.until(WebDriver -> fileToCheck.exists());
     LOG.info("Test done.");
   }
 }
diff --git a/submarine-workbench/workbench-web/package.json b/submarine-workbench/workbench-web/package.json
index 1044930..35827fa 100644
--- a/submarine-workbench/workbench-web/package.json
+++ b/submarine-workbench/workbench-web/package.json
@@ -27,7 +27,7 @@
     "lodash": "^4.17.19",
     "md5": "^2.2.1",
     "nanoid": "^3.1.12",
-    "ng-zorro-antd": "8.1.2",
+    "ng-zorro-antd": "8.5.2",
     "rxjs": "~6.4.0",
     "tslib": "^1.10.0",
     "yaml": "^1.10.2",
diff --git a/submarine-workbench/workbench-web/src/app/pages/workbench/environment/environment-home/environment-list/environment-list.component.html b/submarine-workbench/workbench-web/src/app/pages/workbench/environment/environment-home/environment-list/environment-list.component.html
index 81b3af7..0b5e75e 100644
--- a/submarine-workbench/workbench-web/src/app/pages/workbench/environment/environment-home/environment-list/environment-list.component.html
+++ b/submarine-workbench/workbench-web/src/app/pages/workbench/environment/environment-home/environment-list/environment-list.component.html
@@ -22,9 +22,7 @@
     <tr>
       <th>Environment Name</th>
       <th>Docker image</th>
-      <th>Kernel name</th>
-      <th>Kernel channel</th>
-      <th>Kernel dependencies</th>
+      <th>Preview</th>
       <th>Action</th>
     </tr>
   </thead>
@@ -32,18 +30,30 @@
     <tr *ngFor="let data of basicTable.data; let i = index">
       <td>{{ data.environmentSpec.name }}</td>
       <td>{{ data.environmentSpec.dockerImage }}</td>
-      <td>{{ data.environmentSpec.kernelSpec.name }}</td>
       <td>
-        <dl *ngFor="let channel of data.environmentSpec.kernelSpec.channels">
-          <dt>{{ channel }}</dt>
-        </dl>
-      </td>
-      <td>
-        <dl *ngFor="let dependency of data.environmentSpec.kernelSpec.dependencies">
-          <dt>{{ dependency }}</dt>
-        </dl>
+        <a
+          id="anchor-preview{{ i }}"
+          class="anchor-preview"
+          nz-popover
+          nzPopoverTrigger="click"
+          nzPopoverTitle="Preview environment Spec"
+          nzPopoverPlacement="left"
+          nzType="dashed"
+          [nzPopoverContent]="contentTemplate"
+        >
+          <i nz-icon id="icon-preview{{ i }}" class="icon-preview" nzType="eye" nzTheme="fill"></i>
+        </a>
+        <ng-template #contentTemplate id="test">
+          <div style="white-space: pre-wrap">
+            {{ data.environmentSpec | json }}
+          </div>
+        </ng-template>
       </td>
       <td>
+        <a id="btn-downloadEnvironmentSpec{{ i }}" (click)="onDownloadEnvironmentSpec(data.environmentSpec)">
+          Download
+        </a>
+        <nz-divider nzType="vertical"></nz-divider>
         <a
           id="btn-deleteEnvironment{{ i }}"
           nz-popconfirm
diff --git a/submarine-workbench/workbench-web/src/app/pages/workbench/environment/environment-home/environment-list/environment-list.component.scss b/submarine-workbench/workbench-web/src/app/pages/workbench/environment/environment-home/environment-list/environment-list.component.scss
index 3d56d22..2da1fc2 100644
--- a/submarine-workbench/workbench-web/src/app/pages/workbench/environment/environment-home/environment-list/environment-list.component.scss
+++ b/submarine-workbench/workbench-web/src/app/pages/workbench/environment/environment-home/environment-list/environment-list.component.scss
@@ -16,3 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+
+.anchor-preview{
+    color: black
+}
+.anchor-preview:hover{
+    color: #1890FF;
+}
+
+.icon-preview{
+   font-size: 2rem; display: block
+}
+
diff --git a/submarine-workbench/workbench-web/src/app/pages/workbench/environment/environment-home/environment-list/environment-list.component.ts b/submarine-workbench/workbench-web/src/app/pages/workbench/environment/environment-home/environment-list/environment-list.component.ts
index ad68320..cb288db 100644
--- a/submarine-workbench/workbench-web/src/app/pages/workbench/environment/environment-home/environment-list/environment-list.component.ts
+++ b/submarine-workbench/workbench-web/src/app/pages/workbench/environment/environment-home/environment-list/environment-list.component.ts
@@ -36,4 +36,12 @@ export class EnvironmentListComponent implements OnInit {
   onDeleteEnvironment(name: string) {
     this.deleteEnvironment.emit(name);
   }
+
+  onDownloadEnvironmentSpec = (data) => {
+    var spec = 'data:text/json;charset=utf-8,' + encodeURIComponent(JSON.stringify(data, null, '\t'));
+    var downloader = document.createElement('a');
+    downloader.setAttribute('href', spec);
+    downloader.setAttribute('download', 'environmentSpec.json');
+    downloader.click();
+  };
 }

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@submarine.apache.org
For additional commands, e-mail: dev-help@submarine.apache.org