From 8c22a0c4f26acf153cabd776ea7cd2f565fec5ac Mon Sep 17 00:00:00 2001 From: "anh.phamtu" Date: Sun, 11 Aug 2024 08:04:40 +0700 Subject: [PATCH] add ssh test --- .github/workflows/ci.yml | 4 + .../sftp/test/SftpProcessSSHTest.java | 140 ++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 sftp-connector-test/src_test/com/axonivy/connector/sftp/test/SftpProcessSSHTest.java diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 24865a5..b2e0571 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,6 +42,10 @@ jobs: sshGroup=${sshGroupRaw%:x*} echo "adding user to group ${sshGroup}" sudo useradd -s /bin/bash -d /home/usr -m -g ${sshGroup} -p $(echo pwd | openssl passwd -1 -stdin) usr + sudo -u usr ssh-keygen -t rsa -N "123456" -f /home/usr/.ssh/sftptest + sudo -u usr sh -c 'cat /home/usr/.ssh/sftptest.pub >> /home/usr/.ssh/authorized_keys' + sudo chmod 700 /home/usr/.ssh + sudo cp /home/usr/.ssh/sftptest ~/.ssh/sftptest - name: Setup Maven uses: stCarolas/setup-maven@v5 diff --git a/sftp-connector-test/src_test/com/axonivy/connector/sftp/test/SftpProcessSSHTest.java b/sftp-connector-test/src_test/com/axonivy/connector/sftp/test/SftpProcessSSHTest.java new file mode 100644 index 0000000..a2bf2b9 --- /dev/null +++ b/sftp-connector-test/src_test/com/axonivy/connector/sftp/test/SftpProcessSSHTest.java @@ -0,0 +1,140 @@ +package com.axonivy.connector.sftp.test; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.util.List; +import java.util.Locale; + +import org.apache.commons.io.FileUtils; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; + +import com.axonivy.connector.sftp.service.SftpClientService; +import com.axonivy.connector.sftp.service.SftpClientService.FileData; + +import ch.ivyteam.ivy.bpm.engine.client.BpmClient; +import ch.ivyteam.ivy.bpm.engine.client.element.BpmElement; +import ch.ivyteam.ivy.bpm.engine.client.element.BpmProcess; +import ch.ivyteam.ivy.bpm.engine.client.sub.SubProcessCallResult; +import ch.ivyteam.ivy.bpm.exec.client.IvyProcessTest; +import ch.ivyteam.ivy.cm.ContentObjectValue; +import ch.ivyteam.ivy.cm.IContentObject; +import ch.ivyteam.ivy.environment.Ivy; + + +/** + * This SftpProcessTest simulates SFTP operations by calling the sub processes: + * SftpUploadFile and SftpDownloadFile. + * + *

The test can either be run

+ * + *

Detailed guidance on writing these kind of tests can be found in our + * Process Testing docs + *

+ */ +@IvyProcessTest(enableWebServer = true) +public class SftpProcessSSHTest { + + private static final BpmProcess TEST_HELPER_PROCESS = BpmProcess.path("Sftp/SftpHelper"); + private static final BpmProcess TEST_UPLOAD_FILE_PROCESS = BpmProcess.path("Sftp/SftpUploadFile"); + private static final BpmProcess TEST_DOWNLOAD_FILE_PROCESS = BpmProcess.path("Sftp/SftpDownloadFile"); + + private static final String TEST_FILE_NAME = "market_market_connector_sftp.pdf"; + private static final long TEST_FILE_SIZE = 207569L; + + + @Test + @Order(1) + public void callOpenConnection(BpmClient bpmClient) { + String prefix = "com_axonivy_connector_sftp_server_"; + Ivy.var().set(prefix+"auth", "ssh"); + Ivy.var().set(prefix+"password", ""); + + String keyString = Files.readString("~/.ssh/sftptest"); + Ivy.var().set(prefix+"secret_sshkey", keyString); + Ivy.var().set(prefix+"secret_sshpassphrase", "123456"); + + BpmElement startable = TEST_HELPER_PROCESS.elementName("openConnection()"); + + SubProcessCallResult result = bpmClient.start() + .subProcess(startable) + .execute() // Callable sub process input arguments + .subResult(); + + SftpClientService sftpClient = result.param("sftpClient", SftpClientService.class); + assertThat(sftpClient).isNotNull(); + sftpClient.close(); + } + + // @Test + // @Order(2) + // public void callUploadFile(BpmClient bpmClient) { + // InputStream fileToBeUploaded = getClass().getResourceAsStream(TEST_FILE_NAME); + + // BpmElement startable = TEST_UPLOAD_FILE_PROCESS.elementName("uploadFile(InputStream,String)"); + + // SubProcessCallResult result = bpmClient.start() + // .subProcess(startable) + // .execute(fileToBeUploaded, TEST_FILE_NAME) // Callable sub process input arguments + // .subResult(); + + // Boolean isSuccess = result.param("isSuccess", Boolean.class); + // assertThat(isSuccess).isTrue(); + // } + + // @Test + // @Order(3) + // public void callUploadIvyFile(BpmClient bpmClient) throws IOException { + // InputStream fileToBeUploaded = getClass().getResourceAsStream(TEST_FILE_NAME); + // java.io.File javaFile = new java.io.File(TEST_FILE_NAME); + // FileUtils.copyInputStreamToFile(fileToBeUploaded, javaFile); + + // File ivyFile = new File(TEST_FILE_NAME, true); + // FileUtils.moveFile(javaFile, ivyFile.getJavaFile()); + + // BpmElement startable = TEST_UPLOAD_FILE_PROCESS.elementName("uploadFile(File)"); + + // SubProcessCallResult result = bpmClient.start() + // .subProcess(startable) + // .execute(ivyFile) // Callable sub process input arguments + // .subResult(); + + // Boolean isSuccess = result.param("isSuccess", Boolean.class); + // assertThat(isSuccess).isTrue(); + // } + + // @Test + // @Order(4) + // public void callListAllFiles(BpmClient bpmClient) { + // BpmElement startable = TEST_DOWNLOAD_FILE_PROCESS.elementName("listAllFiles(String)"); + + // SubProcessCallResult result = bpmClient.start() + // .subProcess(startable) + // .execute(".") // Callable sub process input arguments + // .subResult(); + // List listFiles = result.param("listFiles", List.class); + // assertThat(listFiles.size()).isGreaterThanOrEqualTo(1); + // assertThat(listFiles).anyMatch(f -> f.getName().equals(TEST_FILE_NAME)); + // } + + // @Test + // @Order(5) + // public void callDownloadFile(BpmClient bpmClient) { + // BpmElement startable = TEST_DOWNLOAD_FILE_PROCESS.elementName("downloadFile(String)"); + + // SubProcessCallResult result = bpmClient.start() + // .subProcess(startable) + // .execute(TEST_FILE_NAME) // Callable sub process input arguments + // .subResult(); + // java.io.File downloadedFile = result.param("toFile", java.io.File.class); + // assertThat(downloadedFile.length()).isEqualTo(TEST_FILE_SIZE); + // assertThat(downloadedFile.getName()).isEqualTo(TEST_FILE_NAME); + // } +}