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