package org.ovirt.engine.core.utils.hostinstall;
import java.io.IOException;
import java.net.ServerSocket;
import junit.framework.TestCase;
import org.apache.sshd.SshServer;
import org.apache.sshd.server.Command;
import org.apache.sshd.server.CommandFactory;
import org.apache.sshd.server.command.ScpCommandFactory;
import org.apache.sshd.server.shell.ProcessShellFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.IConfigUtilsInterface;
public class MinaInstallWrapperTest extends TestCase {
private int port = 54321;
private SshServer sshd;
private boolean WinOS = false;
private static String[] hostKstore = new String[] { "src/test/resources/.hostKstore" };
private static String[] factoryLin = new String[] { "/bin/bash", "-i", "-l" };
private static String[] factoryWin = new String[] { "cmd.exe" };
@Before
public void setup() throws IOException {
WinOS = System.getProperty("os.name").startsWith("Win");
ServerSocket s = new ServerSocket(0);
port = s.getLocalPort();
s.close();
sshd = SshServer.setUpDefaultServer();
sshd.setPort(port);
sshd.setKeyPairProvider(new KeystoreKeyPairProvider(hostKstore, "NoSoup4U", "engine"));
if (WinOS) {
sshd.setShellFactory(new ProcessShellFactory(factoryWin));
} else {
sshd.setShellFactory(new ProcessShellFactory(factoryLin));
}
sshd.setCommandFactory(new ScpCommandFactory(new CommandFactory() {
public Command createCommand(String command) {
return new ProcessShellFactory(command.split(" ")).create();
}
}));
sshd.setPasswordAuthenticator(new DummyPasswordAuthenticator());
sshd.setPublickeyAuthenticator(new DummyPublickeyAuthenticator());
sshd.start();
System.out.println("Finished setup !!! ");
}
@Test
public void testMinaInstallWrapper() throws Exception {
this.setup();
IConfigUtilsInterface confInstance = new DefaultValuesConfigUtil();
Config.setConfigUtils(confInstance);
System.out.println("Testing password auth.");
MinaInstallWrapper mina = new MinaInstallWrapper();
mina.setPort(port);
System.out.println("Server port=" + port);
assertTrue(mina.ConnectToServer("127.0.0.1", "root"));
String cmd = "ls -l /tmp";
if (WinOS) {
cmd = "cmd.exe /c dir c:\\";
}
assertTrue(mina.RunSSHCommand(cmd));
mina.wrapperShutdown();
mina = null;
System.out.println("Testing public key auth.");
mina = new MinaInstallWrapper();
mina.setPort(port);
assertTrue(mina.ConnectToServer("127.0.0.1", "src/test/resources/.keystore", "NoSoup4U"));
mina.wrapperShutdown();
mina = null;
}
@After
public void tearDown() throws Exception {
System.out.println("Stopping....");
if (sshd != null) {
sshd.stop(true);
Thread.sleep(50);
}
}
}