2015-12-28 4 views
1

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

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

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#interact, но он, кажется, сломан в версии 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("#")); 
} 

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

+0

Спасибо за помощь здесь. AnyOf делает именно то, что мне нужно. –