xiangzihao
3 years ago
committed by
GitHub
6 changed files with 338 additions and 5 deletions
@ -0,0 +1,187 @@ |
|||||||
|
/* |
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one |
||||||
|
* or more contributor license agreements. See the NOTICE file |
||||||
|
* distributed with this work for additional information |
||||||
|
* regarding copyright ownership. The ASF licenses this file |
||||||
|
* to you under the Apache License, Version 2.0 (the |
||||||
|
* "License"); you may not use this file except in compliance |
||||||
|
* with the License. You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, |
||||||
|
* software distributed under the License is distributed on an |
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
||||||
|
* KIND, either express or implied. See the License for the |
||||||
|
* specific language governing permissions and limitations |
||||||
|
* under the License. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.e2e.cases; |
||||||
|
|
||||||
|
import lombok.SneakyThrows; |
||||||
|
import static org.assertj.core.api.Assertions.assertThat; |
||||||
|
import static org.awaitility.Awaitility.await; |
||||||
|
|
||||||
|
import org.apache.dolphinscheduler.e2e.core.Constants; |
||||||
|
import org.apache.dolphinscheduler.e2e.core.DolphinScheduler; |
||||||
|
import org.apache.dolphinscheduler.e2e.pages.LoginPage; |
||||||
|
import org.apache.dolphinscheduler.e2e.pages.resource.FunctionManagePage; |
||||||
|
import org.apache.dolphinscheduler.e2e.pages.resource.ResourcePage; |
||||||
|
import org.apache.dolphinscheduler.e2e.pages.resource.UdfManagePage; |
||||||
|
import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage; |
||||||
|
import org.apache.dolphinscheduler.e2e.pages.security.TenantPage; |
||||||
|
import org.apache.dolphinscheduler.e2e.pages.security.UserPage; |
||||||
|
|
||||||
|
import java.io.File; |
||||||
|
import java.io.FileOutputStream; |
||||||
|
import java.io.InputStream; |
||||||
|
import java.net.URL; |
||||||
|
import java.net.URLConnection; |
||||||
|
import java.nio.file.Files; |
||||||
|
import java.nio.file.Path; |
||||||
|
import java.time.Duration; |
||||||
|
import java.util.Comparator; |
||||||
|
|
||||||
|
import org.junit.jupiter.api.AfterAll; |
||||||
|
import org.junit.jupiter.api.BeforeAll; |
||||||
|
import org.junit.jupiter.api.Order; |
||||||
|
import org.junit.jupiter.api.Test; |
||||||
|
import org.openqa.selenium.By; |
||||||
|
import org.openqa.selenium.WebElement; |
||||||
|
import org.openqa.selenium.remote.RemoteWebDriver; |
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions; |
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait; |
||||||
|
|
||||||
|
@DolphinScheduler(composeFiles = "docker/file-manage/docker-compose.yaml") |
||||||
|
public class FunctionManageE2ETest { |
||||||
|
private static RemoteWebDriver browser; |
||||||
|
|
||||||
|
private static final String tenant = System.getProperty("user.name"); |
||||||
|
|
||||||
|
private static final String user = "admin"; |
||||||
|
|
||||||
|
private static final String password = "dolphinscheduler123"; |
||||||
|
|
||||||
|
private static final String email = "admin@gmail.com"; |
||||||
|
|
||||||
|
private static final String phone = "15800000000"; |
||||||
|
|
||||||
|
private static final String testUdfFunctionName = "test_function"; |
||||||
|
|
||||||
|
private static final String testRenameUdfFunctionName = "test_rename_function"; |
||||||
|
|
||||||
|
private static final String testUploadUdfFileName = "hive-jdbc-3.1.2.jar"; |
||||||
|
|
||||||
|
private static final String testClassName = "org.dolphinscheduler.UdfTest"; |
||||||
|
|
||||||
|
private static final String testDescription = "test_description"; |
||||||
|
|
||||||
|
private static final Path testUploadUdfFilePath = Constants.HOST_TMP_PATH.resolve(testUploadUdfFileName); |
||||||
|
|
||||||
|
@BeforeAll |
||||||
|
@SneakyThrows |
||||||
|
public static void setup() { |
||||||
|
TenantPage tenantPage = new LoginPage(browser) |
||||||
|
.login(user, password) |
||||||
|
.create(tenant); |
||||||
|
|
||||||
|
await().untilAsserted(() -> assertThat(tenantPage.tenantList()) |
||||||
|
.as("Tenant list should contain newly-created tenant") |
||||||
|
.extracting(WebElement::getText) |
||||||
|
.anyMatch(it -> it.contains(tenant))); |
||||||
|
|
||||||
|
downloadFile("https://repo1.maven.org/maven2/org/apache/hive/hive-jdbc/3.1.2/hive-jdbc-3.1.2.jar", testUploadUdfFilePath.toFile().getAbsolutePath()); |
||||||
|
|
||||||
|
UdfManagePage udfManagePage = tenantPage.goToNav(SecurityPage.class) |
||||||
|
.goToTab(UserPage.class) |
||||||
|
.update(user, user, password, email, phone) |
||||||
|
.goToNav(ResourcePage.class) |
||||||
|
.goToTab(UdfManagePage.class) |
||||||
|
.uploadFile(testUploadUdfFilePath.toFile().getAbsolutePath()); |
||||||
|
|
||||||
|
new WebDriverWait(browser, 10).until(ExpectedConditions.invisibilityOfElementLocated(By.id("fileUpdateDialog"))); |
||||||
|
|
||||||
|
udfManagePage.goToNav(ResourcePage.class) |
||||||
|
.goToTab(FunctionManagePage.class); |
||||||
|
} |
||||||
|
|
||||||
|
@AfterAll |
||||||
|
@SneakyThrows |
||||||
|
public static void cleanup() { |
||||||
|
Files.walk(Constants.HOST_CHROME_DOWNLOAD_PATH) |
||||||
|
.sorted(Comparator.reverseOrder()) |
||||||
|
.map(Path::toFile) |
||||||
|
.forEach(File::delete); |
||||||
|
|
||||||
|
Files.deleteIfExists(testUploadUdfFilePath); |
||||||
|
} |
||||||
|
|
||||||
|
static void downloadFile(String downloadUrl, String filePath) throws Exception { |
||||||
|
int byteRead; |
||||||
|
|
||||||
|
URL url = new URL(downloadUrl); |
||||||
|
|
||||||
|
URLConnection conn = url.openConnection(); |
||||||
|
InputStream inStream = conn.getInputStream(); |
||||||
|
FileOutputStream fs = new FileOutputStream(filePath); |
||||||
|
|
||||||
|
byte[] buffer = new byte[1024]; |
||||||
|
while ((byteRead = inStream.read(buffer)) != -1) { |
||||||
|
fs.write(buffer, 0, byteRead); |
||||||
|
} |
||||||
|
|
||||||
|
inStream.close(); |
||||||
|
fs.close(); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
@Order(10) |
||||||
|
void testCreateUdfFunction() { |
||||||
|
FunctionManagePage page = new FunctionManagePage(browser); |
||||||
|
|
||||||
|
new WebDriverWait(page.driver(), 10) |
||||||
|
.until(ExpectedConditions.urlContains("/#/resource/func")); |
||||||
|
|
||||||
|
page.createUdfFunction(testUdfFunctionName, testClassName, testUploadUdfFileName, testDescription); |
||||||
|
|
||||||
|
await().untilAsserted(() -> assertThat(page.functionList()) |
||||||
|
.as("Function list should contain newly-created file") |
||||||
|
.extracting(WebElement::getText) |
||||||
|
.anyMatch(it -> it.contains(testUdfFunctionName))); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
@Order(20) |
||||||
|
void testRenameUdfFunction() { |
||||||
|
FunctionManagePage page = new FunctionManagePage(browser); |
||||||
|
|
||||||
|
browser.navigate().refresh(); |
||||||
|
|
||||||
|
page.renameUdfFunction(testUdfFunctionName, testRenameUdfFunctionName); |
||||||
|
|
||||||
|
await().pollDelay(Duration.ofSeconds(2)).untilAsserted(() -> assertThat(page.functionList()) |
||||||
|
.as("Function list should contain newly-created file") |
||||||
|
.extracting(WebElement::getText) |
||||||
|
.anyMatch(it -> it.contains(testRenameUdfFunctionName))); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
@Order(30) |
||||||
|
void testDeleteUdfFunction() { |
||||||
|
FunctionManagePage page = new FunctionManagePage(browser); |
||||||
|
|
||||||
|
page.deleteUdfFunction(testRenameUdfFunctionName); |
||||||
|
|
||||||
|
await().untilAsserted(() -> { |
||||||
|
browser.navigate().refresh(); |
||||||
|
|
||||||
|
assertThat( |
||||||
|
page.functionList() |
||||||
|
).noneMatch( |
||||||
|
it -> it.getText().contains(testRenameUdfFunctionName) |
||||||
|
); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue