@micham/sftp-mock-server

sftp-mock-server

license codecov Build Status

This repository is aimed to provide you with the means to setup and interact with a small sftp server that you can use to run end to end tests in an application using ssh2-sftp-client or another node based sftp client. The package is mostly tested against ssh2-sftp-client.

You can check out the API reference here

Why should I use this library?

  • Written in typescript (fully typed) for seamless integration in typescript based applications and libraries
  • Will allow you to run e2e tests using your favorite test framework without the need to setup a real sftp server in your local and CI infrastructure

Use cases

Mostly e2e tests but you could also run the server as a standalone service in a dev cluster. Just know that the files will be kept in memory so try not to go overboard

Installation

Using NPM

npm install --save-dev @micham/sftp-mock-server

Using Yarn

yarn add -D @micham/sftp-mock-server

API

Usage

Create a new SFTP server

const mockServer = await createSftpMockServer({
port: '9999',
hostname: '127.0.0.1',
debug: (msg: string) => logger.debug(msg),
});

Connect using a private key

const mockServer = await createSftpMockServer({
port: '9999',
hostname: '127.0.0.1',
debug: (msg: string) => logger.debug(msg),
users: {
alice: {
publicKey: clientPublicKey,
},
},
});

await data.client.connect({
host: '127.0.0.1',
port: 9999,
username: 'test',
privateKey: clientPrivateKey,
});

Write/Read a file to the SFTP server

import Client from 'ssh2-sftp-client';

const mockServer = await createSftpMockServer({
port: '9999',
hostname: '127.0.0.1',
debug: (msg: string) => logger.debug(msg),
users: {
alice: {
password: 'password',
publicKey: clientPublicKey,
},
},
});

const client = new Client();
await client.connect({
host: '127.0.0.1',
port: 9999,
username: 'test',
password: 'test',
});

await client.put(Buffer.from('File content'), 'tmp/data.txt');
const content = await client.get('tmp/data.txt');

Generated using TypeDoc