Интерактивный вход в режим включения с Java и ожидаем

Я выполняю техническое обслуживание некоторых сетевых устройств и использую Expectit для навигации по меню. Однако я добился успеха только тогда, когда устройства предоставляют ожидаемые мной подсказки. Например, некоторые устройства уже находятся в режиме включения, когда я вхожу в систему, но некоторые нет.

Я хотел бы сделать эквивалент:

Expect expect = new ExpectBuilder()
        .withOutput(channel.getOutputStream())
        .withInputs(channel.getInputStream(), channel.getExtInputStream())
        .withEchoOutput(wholeBuffer)
        .withEchoInput(wholeBuffer)
        .withExceptionOnFailure()
        .build();

channel.connect();
if (expect.expect(contains(">")) {
    expect.sendLine("enable");
    expect.expect("assword:");
    expect.sendLine(password);
}
expect.expect(contains("#"));

но я знаю, что это неправильно и не работает. Было бы желательно получить некоторую помощь в реализации реакции на определенную подсказку и другую реакцию на другие подсказки. Спасибо!

1 ответ

Решение

Вы можете попробовать ExpectIt# взаимодействовать, но, похоже, он не работает в версии 0.8.0, поэтому попробуйте последнюю версию 0.8.1.

Без interact Вы можете использовать anyOf сопоставлять и иметь логику, основанную на условии отдельных результатов. Это в основном как interact работает. Вот пример:

MultiResult multiResult = expect.expect(anyOf(contains(">"), contains("#")));
if (multiResult.getResults().get(0).isSuccessful()) {
    expect.sendLine("enable");
    expect.expect(contains("assword:"));
    expect.sendLine(password);
} else if (multiResult.getResults().get(1).isSuccessful()) {
   expect.expect(contains("#"));
}

Надеюсь, поможет.

Другие вопросы по тегам