Skip to content

Commit

Permalink
add ssh test
Browse files Browse the repository at this point in the history
  • Loading branch information
anh-bolt committed Aug 12, 2024
1 parent a52e8d6 commit 466581f
Show file tree
Hide file tree
Showing 2 changed files with 143 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ 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
ssh-keygen -t rsa -N "123456" -f ~/.ssh/sftptest
ssh-copy-id -i ~/.ssh/sftptest.pub usr@localhost
cat ~/.ssh/sftptest.pub >> /home/usr/.ssh/authorized_keys
- name: Setup Maven
uses: stCarolas/setup-maven@v5
Expand Down
Original file line number Diff line number Diff line change
@@ -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.
*
* <p>The test can either be run<ul>
* <li>in the Designer IDE ( <code>right click > run as > JUnit Test </code> )</li>
* <li>or in a Maven continuous integration build pipeline ( <code>mvn clean verify</code> )</li>
* </ul></p>
*
* <p>Detailed guidance on writing these kind of tests can be found in our
* <a href="https://developer.axonivy.com/doc/9.2/concepts/testing/process-testing.html">Process Testing docs</a>
* </p>
*/
@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<FileData> 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);
// }
}

0 comments on commit 466581f

Please sign in to comment.