Package com.kurento.kmf.test.services

Source Code of com.kurento.kmf.test.services.RemoteHost

/*
* (C) Copyright 2014 Kurento (http://kurento.org/)
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser General Public License
* (LGPL) version 2.1 which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-2.1.html
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
*/
package com.kurento.kmf.test.services;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.nio.file.Files;
import java.nio.file.Paths;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.io.CharStreams;
import com.xebialabs.overthere.CmdLine;
import com.xebialabs.overthere.ConnectionOptions;
import com.xebialabs.overthere.OperatingSystemFamily;
import com.xebialabs.overthere.Overthere;
import com.xebialabs.overthere.OverthereConnection;
import com.xebialabs.overthere.OverthereFile;
import com.xebialabs.overthere.OverthereProcess;
import com.xebialabs.overthere.ssh.SshConnectionBuilder;
import com.xebialabs.overthere.ssh.SshConnectionType;

/**
* SSH connection to a remote host.
*
* @author Boni Garcia (bgarcia@gsyc.es)
* @since 4.2.5
*/
public class RemoteHost {

  public static Logger log = LoggerFactory.getLogger(RemoteHost.class);
  public static final String DEFAULT_TMP_FOLDER = "/tmp";

  private static final int NODE_INITIAL_PORT = 5555;
  private static final int PING_TIMEOUT = 1; // seconds

  private String host;
  private String login;
  private String passwd;

  private OverthereConnection connection;

  public RemoteHost(String host, String login, String passwd) {
    this.host = host;
    this.login = login;
    this.passwd = passwd;
  }

  public String createTmpFolder() {
    String remoteFolder;
    try {
      do {
        remoteFolder = DEFAULT_TMP_FOLDER + "/" + System.nanoTime();
      } while (exists(remoteFolder));
      execAndWaitCommand("mkdir", remoteFolder);
    } catch (IOException e) {
      remoteFolder = DEFAULT_TMP_FOLDER;
    }

    log.debug("Remote folder to store temporal files in node {}: {} ",
        host, remoteFolder);
    return remoteFolder;
  }

  public void getFile(String targetFile, String origFile) {
    OverthereFile motd = connection.getFile(origFile);
    InputStream is = motd.getInputStream();
    try {
      Files.copy(is, Paths.get(targetFile));
      is.close();
    } catch (IOException e) {
      log.error("Exception getting file: {} to {} ()", origFile,
          targetFile, e.getMessage());
    }
  }

  public void scp(String origFile, String targetFile) throws IOException {
    OverthereFile motd = connection.getFile(targetFile);
    OutputStream w = motd.getOutputStream();

    byte[] origBytes = Files.readAllBytes(Paths.get(origFile));
    w.write(origBytes);
    w.close();
  }

  public void start() {
    ConnectionOptions options = new ConnectionOptions();
    options.set(ConnectionOptions.USERNAME, login);
    options.set(ConnectionOptions.PASSWORD, passwd);
    options.set(ConnectionOptions.ADDRESS, host);
    options.set(ConnectionOptions.OPERATING_SYSTEM,
        OperatingSystemFamily.UNIX);
    options.set(SshConnectionBuilder.CONNECTION_TYPE, SshConnectionType.SCP);

    connection = Overthere.getConnection(SshConnectionBuilder.SSH_PROTOCOL,
        options);

  }

  public void stop() {
    if (connection != null) {
      connection.close();
    }
  }

  public void execCommand(String... command) throws IOException {
    connection.startProcess(CmdLine.build(command));
  }

  public int runAndWaitCommand(String... command) throws IOException {
    return connection.execute(CmdLine.build(command));
  }

  public String execAndWaitCommand(String... command) throws IOException {
    OverthereProcess process = connection.startProcess(CmdLine
        .build(command));
    return CharStreams.toString(new InputStreamReader(process.getStdout(),
        "UTF-8"));
  }

  public String execAndWaitCommandNoBr(String... command) throws IOException {
    return execAndWaitCommand(command).replace("\n", "").replace("\r", "");
  }

  public boolean exists(String fileOrFolder) throws IOException {
    String output = execAndWaitCommand("file", fileOrFolder);
    return !output.contains("ERROR");
  }

  public int getFreePort() throws IOException {
    int port = NODE_INITIAL_PORT - 1;
    String output;
    do {
      port++;
      output = execAndWaitCommand("netstat", "-auxn");
    } while (output.contains(":" + port));
    return port;
  }

  public static boolean ping(String ipAddress) {
    return ping(ipAddress, RemoteHost.PING_TIMEOUT);
  }

  public static boolean ping(String ipAddress, int timeout) {
    boolean result = false;
    InetAddress inet;
    try {
      inet = InetAddress.getByName(ipAddress);
      result = inet.isReachable(timeout * 1000);
    } catch (Exception e) {
      log.error("Exception making ping to {} : {}", ipAddress,
          e.getClass());
    }
    return result;
  }
}
TOP

Related Classes of com.kurento.kmf.test.services.RemoteHost

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.