aboutsummaryrefslogtreecommitdiffstats
path: root/appc-config/appc-config-adaptor/provider/src/main/java
diff options
context:
space:
mode:
authorTomek Kaminski <tomasz.kaminski@nokia.com>2018-01-26 13:49:50 +0100
committerPatrick Brady <pb071s@att.com>2018-02-09 23:50:29 +0000
commit31b71128c229a12845e94139108a1696ec26de61 (patch)
treee4b22fec2a629a58606fad17e5cd9a30bb03cf8c /appc-config/appc-config-adaptor/provider/src/main/java
parentf23a0c589f2519947cdeb286a7817bfa20f0b674 (diff)
JUnits for SshJcraftWrapper.java connect
-added coverage for connect methods -extracted channel provider method for connection -fixed and covered closeConnection method -reduced number of unnecessary variables Change-Id: Ibe2b4d0742a0876c2ef18483d93e7510b0b5c7f0 Issue-ID: APPC-523 Signed-off-by: Tomek Kaminski <tomasz.kaminski@nokia.com>
Diffstat (limited to 'appc-config/appc-config-adaptor/provider/src/main/java')
-rw-r--r--appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/ConfigComponentAdaptor.java9
-rw-r--r--appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/SshJcraftWrapper.java169
2 files changed, 82 insertions, 96 deletions
diff --git a/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/ConfigComponentAdaptor.java b/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/ConfigComponentAdaptor.java
index 064d2ba29..0ac7f3e9d 100644
--- a/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/ConfigComponentAdaptor.java
+++ b/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/ConfigComponentAdaptor.java
@@ -198,7 +198,7 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor {
try {
log.debug("CLI: Attempting to login: host={} loginId={} password={} portNumber={}", host, loginId,
password, portNumber);
- sshJcraftWrapper.connect(host, loginId, password, Integer.parseInt(portNumber));
+ sshJcraftWrapper.connect(host, loginId, password); //what about portNum?
log.debug("Sending 'sdc'");
sshJcraftWrapper.send("sdc", ":");
@@ -324,8 +324,7 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor {
SshJcraftWrapper sshJcraftWrapper = new SshJcraftWrapper();
try {
sshJcraftWrapper
- .connect(Host_ip_address, User_name, Password, "]]>]]>", 30000, Integer.parseInt(Port_number),
- "netconf");
+ .connect(Host_ip_address, User_name, Password, 30000, Integer.parseInt(Port_number), "netconf"); // what about prompt "]]>]]>"?
String NetconfHelloCmd = netconfHelloCmd;
NetconfHelloCmd = NetconfHelloCmd + "]]>]]>";
log.debug("Sending the hello command");
@@ -396,8 +395,8 @@ public class ConfigComponentAdaptor implements SvcLogicAdaptor {
try {
String NetconfHelloCmd = netconfHelloCmd;
sshJcraftWrapper
- .connect(Host_ip_address, User_name, Password, "]]>]]>", 30000, Integer.parseInt(Port_number),
- "netconf");
+ .connect(Host_ip_address, User_name, Password, 30000, Integer.parseInt(Port_number),
+ "netconf"); //What about prompt "]]>]]>" here?
NetconfHelloCmd = NetconfHelloCmd + "]]>]]>";
log.debug(":Sending the hello command");
sshJcraftWrapper.send(NetconfHelloCmd);
diff --git a/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/SshJcraftWrapper.java b/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/SshJcraftWrapper.java
index 70b762bc7..acdb87b90 100644
--- a/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/SshJcraftWrapper.java
+++ b/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/SshJcraftWrapper.java
@@ -55,7 +55,6 @@ import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.StringTokenizer;
-import java.util.concurrent.TimeUnit;
import javax.annotation.Nonnull;
import org.apache.commons.lang.StringUtils;
@@ -64,12 +63,16 @@ public class SshJcraftWrapper {
private static final EELFLogger log = EELFManager.getInstance().getLogger(SshJcraftWrapper.class);
private static final int BUFFER_SIZE = 512000;
- private InputStream inputStream = null;
+ static final int DEFAULT_PORT = 22;
+ static final String CHANNEL_SHELL_TYPE = "shell";
+ static final String CHANNEL_SUBSYSTEM_TYPE = "subsystem";
+ private static final String TERMINAL_BASIC_MODE = "vt102";
+ static final String STRICT_HOST_CHECK_KEY = "StrictHostKeyChecking";
+ static final String STRICT_HOST_CHECK_VALUE = "no";
private TelnetListener listener = null;
private String routerLogFileName = null;
private String routerName = null;
private char[] charBuffer = new char[BUFFER_SIZE];
- private DataInputStream dis = null;
private BufferedReader reader = null;
private BufferedWriter out = null;
private File tmpFile = null;
@@ -86,9 +89,17 @@ public class SshJcraftWrapper {
private String passWord = null;
private Runtime runtime = Runtime.getRuntime();
+
+ public SshJcraftWrapper() {
+ this.jsch = new JSch();
+ }
+
+ SshJcraftWrapper(JSch jsch) {
+ this.jsch = jsch;
+ }
+
public void connect(String hostname, String username, String password, String prompt, int timeOut)
throws IOException {
- jsch = new JSch();
log.debug("Attempting to connect to {0} username={1} prompt='{2}' timeOut={3}",
hostname, username, prompt, timeOut);
routerName = hostname;
@@ -96,26 +107,17 @@ public class SshJcraftWrapper {
userName = username;
passWord = password;
try {
- session = jsch.getSession(username, hostname, 22);
- UserInfo ui = new MyUserInfo();
- session.setPassword(password);
- session.setUserInfo(ui);
- session.connect(timeOut);
- channel = session.openChannel("shell");
- session.setServerAliveCountMax(
- 0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
- ((ChannelShell) channel).setPtyType("vt102");
- inputStream = channel.getInputStream();
- dis = new DataInputStream(inputStream);
- reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
+ channel = provideSessionChannel(CHANNEL_SHELL_TYPE, DEFAULT_PORT, timeOut);
+ ((ChannelShell) channel).setPtyType(TERMINAL_BASIC_MODE);
+ reader = new BufferedReader(new InputStreamReader(new DataInputStream(channel.getInputStream())), BUFFER_SIZE);
channel.connect();
log.info("Successfully connected. Flushing input buffer.");
try {
receiveUntil(prompt, 3000, "No cmd was sent, just waiting");
- } catch (Exception e) {
+ } catch (IOException e) {
log.warn("Caught an Exception: Nothing to flush out.", e);
}
- } catch (Exception e) {
+ } catch (JSchException e) {
log.error("Could not connect to host=" + hostname, e);
throw new IOException(e.toString());
}
@@ -130,23 +132,10 @@ public class SshJcraftWrapper {
hostName = hostname;
userName = username;
passWord = password;
- jsch = new JSch();
try {
- session = jsch.getSession(username, hostname, portNum);
- UserInfo ui = new MyUserInfo();
- session.setPassword(password);
- session.setUserInfo(ui);
- session.setConfig("StrictHostKeyChecking", "no");
- log.debug("StrictHostKeyChecking set to 'no'");
-
- session.connect(timeOut);
- session.setServerAliveCountMax(
- 0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
- channel = session.openChannel("shell");
- ((ChannelShell) channel).setPtyType("vt102");
- inputStream = channel.getInputStream();
- dis = new DataInputStream(inputStream);
- reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
+ channel = provideSessionChannel(CHANNEL_SHELL_TYPE, portNum, timeOut);
+ ((ChannelShell) channel).setPtyType(TERMINAL_BASIC_MODE);
+ reader = new BufferedReader(new InputStreamReader(new DataInputStream(channel.getInputStream())), BUFFER_SIZE);
channel.connect();
log.info("Successfully connected. Flushing input buffer.");
try {
@@ -155,10 +144,10 @@ public class SshJcraftWrapper {
} else {
receiveUntil(":~#", 5000, "No cmd was sent, just waiting");
}
- } catch (Exception e) {
+ } catch (IOException e) {
log.warn("Caught an Exception: Nothing to flush out.", e);
}
- } catch (Exception e) {
+ } catch (JSchException e) {
log.error("Could not connect to host=" + hostname, e);
throw new IOException(e.toString());
}
@@ -376,11 +365,25 @@ public class SshJcraftWrapper {
public void closeConnection() {
log.info("Closing connection");
- inputStream = null;
- dis = null;
- charBuffer = null;
- session.disconnect();
- session = null;
+ try {
+ if (reader != null) {
+ reader.close();
+ }
+ } catch(IOException ex) {
+ log.warn("Could not close reader instance", ex);
+ } finally {
+ if(isConnected()) {
+ channel.disconnect();
+ session.disconnect();
+ channel = null;
+ session = null;
+ }
+ reader = null;
+ }
+ }
+
+ boolean isConnected() {
+ return (channel != null && session != null);
}
public void send(String cmd) throws IOException {
@@ -627,7 +630,7 @@ public class SshJcraftWrapper {
public void sftpPutFile(String sourcePath, String destDirectory) throws IOException {
try {
- Session sftpSession = jsch.getSession(userName, hostName, 22);
+ Session sftpSession = jsch.getSession(userName, hostName, DEFAULT_PORT);
UserInfo ui = new MyUserInfo();
sftpSession.setPassword(passWord);
sftpSession.setUserInfo(ui);
@@ -648,7 +651,7 @@ public class SshJcraftWrapper {
public void sftpPutStringData(String stringOfData, String fullPathDest) throws IOException {
try {
- Session sftpSession = jsch.getSession(userName, hostName, 22);
+ Session sftpSession = jsch.getSession(userName, hostName, DEFAULT_PORT);
UserInfo ui = new MyUserInfo();
sftpSession.setPassword(passWord);
sftpSession.setUserInfo(ui);
@@ -670,7 +673,7 @@ public class SshJcraftWrapper {
public String sftpGet(String fullFilePathName) throws IOException {
try {
- Session sftpSession = jsch.getSession(userName, hostName, 22);
+ Session sftpSession = jsch.getSession(userName, hostName, DEFAULT_PORT);
UserInfo ui = new MyUserInfo();
sftpSession.setPassword(passWord);
sftpSession.setUserInfo(ui);
@@ -717,66 +720,40 @@ public class SshJcraftWrapper {
maxMemoryAvailable, usedMemory, memoryLeftOnHeap);
}
- // User specifies the port number, and the subsystem
- public void connect(String hostname, String username, String password, String prompt, int timeOut, int portNum,
+ public void connect(String hostname, String username, String password, int timeOut, int portNum,
String subsystem) throws IOException {
if (log.isDebugEnabled()) {
log.debug(
- "Attempting to connect to {0} username={1} prompt='{2}' timeOut={3} portNum={4} subsystem={5}",
- hostname, username, prompt, timeOut, portNum, subsystem);
+ "Attempting to connect to {0} username={1} timeOut={2} portNum={3} subsystem={4}",
+ hostname, username, timeOut, portNum, subsystem);
}
- routerName = hostname;
- jsch = new JSch();
+ this.routerName = hostname;
+ this.hostName = hostname;
+ this.userName = username;
+ this.passWord = password;
try {
- session = jsch.getSession(username, hostname, portNum);
- UserInfo ui = new MyUserInfo();
- session.setPassword(password);
- session.setUserInfo(ui);
- session.setConfig("StrictHostKeyChecking", "no");
- session.connect(timeOut);
- session.setServerAliveCountMax(
- 0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
- channel = session.openChannel("subsystem");
+ channel = provideSessionChannel(CHANNEL_SUBSYSTEM_TYPE, portNum, timeOut);
((ChannelSubsystem) channel).setSubsystem(subsystem);
((ChannelSubsystem) channel).setPty(true); //expected ptyType vt102
-
- inputStream = channel.getInputStream();
- dis = new DataInputStream(inputStream);
- reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
+ reader = new BufferedReader(new InputStreamReader(new DataInputStream(channel.getInputStream())), BUFFER_SIZE);
channel.connect(5000);
} catch (JSchException e) {
log.error("JschException occurred ", e);
throw new IOException(e.getMessage());
- } catch (TimedOutException e) {
- log.error("TimedOutException occurred", e);
- throw new IOException(e.getMessage());
}
}
- public void connect(String hostName, String username, String password, int portNumber) throws IOException {
- jsch = new JSch();
- log.debug("Attempting to connect to {0} username={1} portNumber={2}", hostName, username, portNumber);
- routerName = hostName;
+ public void connect(String hostName, String username, String password) throws IOException {
+ log.debug("Attempting to connect to {0} username={1} portNumber={2}", hostName, username, DEFAULT_PORT);
+ this.routerName = hostName;
this.hostName = hostName;
- userName = username;
- passWord = password;
+ this.userName = username;
+ this.passWord = password;
try {
- java.util.Properties config = new java.util.Properties();
- config.put("StrictHostKeyChecking", "no");
- session = jsch.getSession(username, hostName, 22);
- UserInfo ui = new MyUserInfo();
- session.setConfig(config);
- session.setPassword(password);
- session.setUserInfo(ui);
- session.connect(30000);
- channel = session.openChannel("shell");
- session.setServerAliveCountMax(
- 0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
- ((ChannelShell) channel).setPtyType("vt102");
- inputStream = channel.getInputStream();
- dis = new DataInputStream(inputStream);
- reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE);
+ channel = provideSessionChannel(CHANNEL_SHELL_TYPE, DEFAULT_PORT, 30000);
+ ((ChannelShell) channel).setPtyType(TERMINAL_BASIC_MODE);
+ reader = new BufferedReader(new InputStreamReader(new DataInputStream(channel.getInputStream())), BUFFER_SIZE);
channel.connect();
try {
receiveUntil(":~#", 9000, "No cmd was sent, just waiting, but we can stop on a '~#'");
@@ -793,7 +770,7 @@ public class SshJcraftWrapper {
public void put(String sourcePath, String destDirectory) throws IOException {
try {
- Session sftpSession = jsch.getSession(userName, hostName, 22);
+ Session sftpSession = jsch.getSession(userName, hostName, DEFAULT_PORT);
UserInfo ui = new MyUserInfo();
sftpSession.setPassword(passWord);
sftpSession.setUserInfo(ui);
@@ -821,7 +798,7 @@ public class SshJcraftWrapper {
jsch = new JSch();
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
- sftpSession = jsch.getSession(userName, hostName, 22);
+ sftpSession = jsch.getSession(userName, hostName, DEFAULT_PORT);
UserInfo ui = new MyUserInfo();
sftpSession.setPassword(passWord);
sftpSession.setUserInfo(ui);
@@ -857,14 +834,13 @@ public class SshJcraftWrapper {
}
}
-
public String get(String fullFilePathName, String hostName, String userName, String passWord) throws IOException {
Session sftpSession = null;
try {
log.debug("Sftp get invoked, connection details: username={1} hostname={2}",
userName, hostName);
jsch = new JSch();
- sftpSession = jsch.getSession(userName, hostName, 22);
+ sftpSession = jsch.getSession(userName, hostName, DEFAULT_PORT);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
UserInfo ui = new MyUserInfo();
@@ -944,4 +920,15 @@ public class SshJcraftWrapper {
}
return originalCommand;
}
+
+ private Channel provideSessionChannel(String channelType, int port, int timeout) throws JSchException {
+ session = jsch.getSession(this.userName, this.hostName, port);
+ session.setPassword(this.passWord);
+ session.setUserInfo(new MyUserInfo()); //needed?
+ session.setConfig(STRICT_HOST_CHECK_KEY, STRICT_HOST_CHECK_VALUE);
+ session.connect(timeout);
+ session.setServerAliveCountMax(
+ 0); // If this is not set to '0', then socket timeout on all reads will not work!!!!
+ return session.openChannel(channelType);
+ }
}