@Override public B from(Map<String,?> props) { super.from(props); sshExecutable = getOptionalVal(props, PROP_SSH_EXECUTABLE); sshFlags = getOptionalVal(props, PROP_SSH_FLAGS); scpExecutable = getOptionalVal(props, PROP_SCP_EXECUTABLE); return self(); } public B sshExecutable(String val) {
@Override public Integer apply(ShellTool ssh) { return ((SshTool)ssh).copyToServer(props, src, destination); }}); }
public B password(String val) { this.password = val; return self(); } public B port(int val) {
@Test public void testCustomOneOffResponse() throws Exception { RecordingSshTool.setCustomOneOffResponse(".*mycmd.*", new CustomResponse(1, "mystdout", "mystderr")); ExecResult result1 = execScript(machine, "mycmd"); ExecResult result2 = execScript(machine, "mycmd"); assertEquals(result1, new ExecResult(1, "mystdout", "mystderr")); assertEquals(result2, new ExecResult(0, "", "")); }
@Override public void run() { tool = newSshTool(MutableMap.of("host", "localhost")); tool.connect(); tool.disconnect(); } };
@Override public B from(Map<String,?> props) { super.from(props); sshTries = getOptionalVal(props, PROP_SSH_TRIES); sshTriesTimeout = getOptionalVal(props, PROP_SSH_TRIES_TIMEOUT); sshRetryDelay = getOptionalVal(props, PROP_SSH_RETRY_DELAY); connectTimeout = getOptionalVal(props, PROP_CONNECT_TIMEOUT); sessionTimeout = getOptionalVal(props, PROP_SESSION_TIMEOUT); return self(); } public B connectTimeout(int val) {
@Override public int exec(ShellTool ssh, Map<String, ?> flags, List<String> cmds, Map<String, ?> env) { return ssh.execScript(flags, cmds, env); }}); }
@Override public int exec(ShellTool tool, Map<String,?> flags, List<String> cmds, Map<String,?> env) { return tool.execCommands(flags, cmds, env); }}); }
protected static void connect(ShellTool tool) { if (tool instanceof SshTool) ((SshTool)tool).connect(); }
public static void assertExecSatisfies(ExecCmd actual, Predicate<? super ExecCmd> expected) { assertExecSatisfies(actual, expected, null); }
/** * The given response will be used the first time the cmdRegex matches, and not again. * (However if concurrent executions are happening, multiple may match and use this generator). */ public static void setCustomOneOffResponse(String cmdRegex, CustomResponse response) { setCustomOneOffResponse(cmdRegex, checkNotNull(response, "response").toGenerator()); }
@Override public boolean apply(SshTool input) { return input != null && input.isConnected(); }}) .closer(new Function<SshTool,Void>() {
protected String getSummary() { String summary = getOptionalVal(props, PROP_SUMMARY); return (summary != null) ? summary : scriptPath; }
public void imposeBackoffExponentialDelay(int failureCount, String commandDescription) { imposeBackoffExponentialDelay(delayStart, 2, failureCount, retryCountLimit, commandDescription); }
private void runExecManyCommands(final List<String> cmds, final boolean captureOutAndErr, String context, int iterations) throws Exception { Runnable task = new Runnable() { @Override public void run() { execScript(cmds, captureOutAndErr); }}; runMany(task, context, iterations); }
@Override protected SshTool newTool(Map<String,?> flags) { return (SshTool) super.newTool(flags); }
public static void assertExecsNotContains(List<? extends ExecCmd> actuals, List<String> expectedNotCmdRegexs) { for (ExecCmd actual : actuals) { assertExecNotContains(actual, expectedNotCmdRegexs); } }
public B port(int val) { this.port = val; return self(); } public B privateKeyPassphrase(String val) {
public B privateKeyPassphrase(String val) { this.privateKeyPassphrase = val; return self(); } /** @deprecated 1.4.0, use privateKeyData */
public B localTempDir(File val) { this.localTempDir = val; return self(); } public abstract T build();