Как смоделировать соединение для SFTP Connection - PullRequest
0 голосов
/ 13 мая 2019

Моя программа открывает соединение sftp и подключается к серверу, чтобы получить файл, который затем обрабатывается.Я пишу тестовый пример для этого метода, пытаясь смоделировать соединение.

Мой настоящий класс:

public void getFile() {
    Session session = null;
    Channel channel = null;
    ChannelSftp channelSftp = null;
    String path = ftpurl;
    try {
        JSch jsch = new JSch();
        session = jsch.getSession(username, host, port);
        session.setConfig("StrictHostKeyChecking", "no");session.setPassword(JaspytPasswordEncryptor.getDecryptedString(jaspytEncryptionKey, jaspytEncryptionAlgorithm, password));

        session.connect();
        channel = session.openChannel("sftp");
        channel.connect();
        channelSftp = (ChannelSftp) channel;

        channelSftp.cd(path);

        Vector<ChannelSftp.LsEntry> list = channelSftp.ls("*.csv");
        for (ChannelSftp.LsEntry entry : list) {
            if (entry.getFilename().startsWith("A...")) {
                findByFileName(entry.getFilename());
            }
        }
        channelSftp.exit();
        session.disconnect();
    } catch (JSchException e) {
        LOGGER.error("JSch exception"+e);
    } catch (SftpException e) {
        LOGGER.error("Sftp Exception"+e);
    }
}

Тестовый класс на данный момент:

@Test
public void getNamesTestValid() throws IOException, JSchException { 
    JSch jsch = new JSch();

    Hashtable config = new Hashtable();
    config.put("StrictHostKeyChecking", "no");
    JSch.setConfig(config);

    Session session = jsch.getSession( "remote-username", "localhost", 22999);
    session.setPassword("remote-password");

    session.connect();

    Channel channel = session.openChannel( "sftp" );
    channel.connect();

    ChannelSftp sftpChannel = (ChannelSftp) channel;
        Mockito.when(fileRepository.findByFileName(fileName)).thenReturn(fileDetail);
    scheduler.getCSVFileNames();    
}

При попытке смоделировать соединение, он ищет фактический порт, и ошибка неверна, соединение отказано.Я только хочу издеваться над связью.Мое другое сомнение заключается в том, что после насмешки над соединением я должен прочитать информацию о файле.

1 Ответ

0 голосов
/ 13 мая 2019

Это потому, что вы создаете фактическое соединение с new Jsch(). Вам нужно смоделировать соединение с библиотекой, такой как Mockito. Например:


@RunWith(MockitoJUnitRunner.class)
class Test {

    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private JSch mockJsch;

    ..

    void test() {
        Session mockSession = mockJsch.getSession("username", "localhost", 22999);
        ..
    }
}
...