Code Monkey home page Code Monkey logo

fake-sftp-server-extension's Introduction

Fake SFTP Server Extension

Maven Central Quality Gate Status Coverage Maintainability Rating

Fake SFTP Server Extension is a JUnit extension that runs an in-memory SFTP server while your tests are running. It uses the SFTP server of the Apache SSHD project.

Fake SFTP Server Extension is published under the MIT license. It requires at least Java 11. Please open an issue if you want to use it with an older version of Java.

This repository is based on the Fake SFTP Server Rule by @stefanbirkner.

There is an alternative to Fake SFTP Server Extension that is independent of the test framework. Its name is Fake SFTP Server Lambda.

Installation

Fake SFTP Server Extension is available from Maven Central.

<dependency>
  <groupId>de.ppi</groupId>
  <artifactId>fake-sftp-server-extension</artifactId>
  <version>1.0.3</version>
  <scope>test</scope>
</dependency>

Usage

The Fake SFTP Server Extension is used by adding it to your test class.

import FakeSftpServerExtension;

public class TestClass {

  @RegisterExtension
  public final FakeSftpServerExtension sftpServer = new FakeSftpServerExtension();

  // ...
}

This extension starts a server before your test and stops it afterwards.

By default, the SFTP server listens on an auto-allocated port. During the test this port can be obtained by sftpServer.getPort(). It can be changed by calling setManualPort(int). If you do this from within a test then the server gets restarted. The time-consuming restart can be avoided by setting the port immediately after creating the extension.

public class TestClass {

  @RegisterExtension
  public final FakeSftpServerExtension sftpServer = new FakeSftpServerExtension()
      .setManualPort(1234);

  // ...
}

You can interact with the SFTP server by using the SFTP protocol with password authentication. By default, the server accepts every pair of username and password, but you can restrict it to specific pairs.

public class TestClass {

  @RegisterExtension
  public final FakeSftpServerExtension sftpServer = new FakeSftpServerExtension()
      .addUser("username", "password");

  // ...
}

It is also possible to do this during the test using the same method.

Testing code that reads files

If you test code that reads files from an SFTP server then you need a server that provides these files. Fake SFTP Server Extension provides a shortcut for uploading files to the server.

@Test
public void testTextFile() {
  sftpServer.putFile("/directory/file.txt", "content of file", UTF_8);

  // now you can download the file, just connect via SFTP
}

@Test
public void testBinaryFile() {
  byte[] content = createContent();
  sftpServer.putFile("/directory/file.bin", content);

  // now you can download the file, just connect via SFTP
}

Test data that is provided as an input stream can be uploaded directly from that input stream. This is very handy if your test data is available as a resource.

@Test
public void testFileFromInputStream() {
  InputStream is = getClass().getResourceAsStream("data.bin");
  sftpServer.putFile("/directory/file.bin", is);

  // now you can download the file, just connect via SFTP
}

If you need an empty directory then you can use the method createDirectory(String).

@Test
public void testDirectory() {
  sftpServer.createDirectory("/a/directory");

  // code that reads from or writes to that directory
}

You may create multiple directories at once with createDirectories(String...).

@Test
public void testDirectories() {
  sftpServer.createDirectories(
    "/a/directory",
    "/another/directory"
  );

  // code that reads from or writes to that directories
}

Testing code that writes files

If you test code that writes files to an SFTP server then you need to verify the upload. Fake SFTP Server Extension provides a shortcut for getting the file's content from the server.

@Test
public void testTextFile() {
  // code that uploads the file

  String fileContent = sftpServer.getFileContent("/directory/file.txt", UTF_8);
  ...
}

@Test
public void testBinaryFile() {
  // code that uploads the file

  byte[] fileContent = sftpServer.getFileContent("/directory/file.bin");
  ...
}

Testing existence of files

If you want to check whether a file hast been created or deleted then you can verify that it exists or not.

@Test
public void testFile() {
  // code that uploads or deletes the file

  boolean exists = sftpServer.existsFile("/directory/file.txt");
  ...
}

The method returns true iff the file exists, and it is not a directory.

Delete all files

If you want to reuse the SFTP server then you can delete all files and directories on the SFTP server. (This is rarely necessary because the extension itself takes care that every test starts and ends with a clean SFTP server.)

sftpServer.deleteAllFilesAndDirectories()

Contributing

You have three options if you have a feature request, found a bug or simply have a question about Fake SFTP Server Extension.

Development Guide

Fake SFTP Server Extension is build with Maven. If you want to contribute code then

  • Please write a test for your change.
  • Ensure that you didn't break the build by running mvn verify -Dgpg.skip.
  • Fork the repo and create a pull request. (See Understanding the GitHub Flow)

The basic coding style is described in the EditorConfig file .editorconfig.

Release Guide

  • Select a new version according to the Semantic Versioning 2.0.0 Standard.
  • Set the new version in pom.xml and in the Installation section of this readme.
  • Commit the modified pom.xml and README.md.
  • Run mvn clean deploy with JDK 8.
  • Add a tag for the release: git tag fake-sftp-server-extension-X.X.X

fake-sftp-server-extension's People

Contributors

andrekoepke avatar dependabot[bot] avatar stefanbirkner avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

fake-sftp-server-extension's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.