diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 24865a5..2c16969 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,7 +42,13 @@ 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 -R 600 /home/usr/.ssh/ + sudo chmod 700 /home/usr/.ssh/authorized_keys + sudo cp /home/usr/.ssh/sftptest ${GITHUB_WORKSPACE}/sftp-connector-test/src_test/com/axonivy/connector/sftp/test/sftptest + sudo ssh-keygen -p -P "123456" -N "123456" -m pem -f ${GITHUB_WORKSPACE}/sftp-connector-test/src_test/com/axonivy/connector/sftp/test/sftptest + sudo chmod 700 ${GITHUB_WORKSPACE}/sftp-connector-test/src_test/com/axonivy/connector/sftp/test/sftptest - name: Setup Maven uses: stCarolas/setup-maven@v5 with: diff --git a/sftp-connector-test/cms/Files/rsa4096 b/sftp-connector-test/cms/Files/rsa4096 deleted file mode 100644 index 6bd6830..0000000 --- a/sftp-connector-test/cms/Files/rsa4096 +++ /dev/null @@ -1,3 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -YOUR_KEY_HERE ------END RSA PRIVATE KEY----- diff --git a/sftp-connector-test/cms/Files/rsa4096.pub b/sftp-connector-test/cms/Files/rsa4096.pub deleted file mode 100644 index f874b64..0000000 --- a/sftp-connector-test/cms/Files/rsa4096.pub +++ /dev/null @@ -1,4 +0,0 @@ ----- BEGIN SSH2 PUBLIC KEY ---- -Comment: "YOUR_KEY_COMMENT_HERE" -YOUR_KEY_HERE ----- END SSH2 PUBLIC KEY ---- 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..65580e3 --- /dev/null +++ b/sftp-connector-test/src_test/com/axonivy/connector/sftp/test/SftpProcessSSHTest.java @@ -0,0 +1,143 @@ +package com.axonivy.connector.sftp.test; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Paths; +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) +@Disabled +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) throws Exception { + String prefix = "com_axonivy_connector_sftp_server_"; + Ivy.var().set(prefix+"auth", "ssh"); + Ivy.var().set(prefix+"password", ""); + + String keyString = Files.readString(Paths.get(getClass().getResource("sftptest").toURI())); + 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); + // } +} diff --git a/sftp-connector-test/src_test/com/axonivy/connector/sftp/test/SftpProcessTest.java b/sftp-connector-test/src_test/com/axonivy/connector/sftp/test/SftpProcessTest.java index baf08c2..3b48e93 100644 --- a/sftp-connector-test/src_test/com/axonivy/connector/sftp/test/SftpProcessTest.java +++ b/sftp-connector-test/src_test/com/axonivy/connector/sftp/test/SftpProcessTest.java @@ -5,10 +5,8 @@ import java.io.IOException; import java.io.InputStream; 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; @@ -20,9 +18,6 @@ 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; import ch.ivyteam.ivy.scripting.objects.File;