apache - How do I open a session using JSch, close that session, and then open a new one using the same credentials? -
i having trouble getting session using jsch, closing session, , opening new 1 same credentials amount of time later. please take @ explanation below , offer suggestions? thank much.
i unsure if problem test setup or code, problem having unable open, close, , open new ssh session using jsch same credentials. test class contains 2 tests, both of test production code below:
def transferfiles(string filepath, closure fileaction) { def securechannel = new jsch() def session = securechannel.getsession(sftpuser, sftphost, sftpport) session.setconfig('stricthostkeychecking', 'no') session.password = sftppass session.connect() try { def sftpchannel = (channelsftp) session.openchannel('sftp') sftpchannel.connect() try { processfiles(sftpchannel, filepath, fileaction) } { sftpchannel.exit() } } { session.disconnect() } } if run 1 test pass, if run whole spec @ once, whichever test runs first pass , whichever test runs second fail following exception:
com.jcraft.jsch.jschexception: java.net.connectexception: connection refused @ com.jcraft.jsch.util.createsocket(util.java:349) @ com.jcraft.jsch.session.connect(session.java:215) @ com.jcraft.jsch.session.connect(session.java:183) @ com.simplify.acquirer.evo.service.filetransferringservice.transferfiles(filetransferringservice.groovy:32) @ com.simplify.acquirer.evo.service.depositservice.processdeposits(depositservice.groovy:8) @ com.simplify.acquirer.evo.service.fileprocessingintegrationspec.deposits processed(fileprocessingintegrationspec.groovy:127) caused by: java.net.connectexception: connection refused @ java.net.abstractplainsocketimpl.doconnect(abstractplainsocketimpl.java:339) @ java.net.abstractplainsocketimpl.connecttoaddress(abstractplainsocketimpl.java:200) @ java.net.abstractplainsocketimpl.connect(abstractplainsocketimpl.java:182) @ java.net.sockssocketimpl.connect(sockssocketimpl.java:392) @ java.net.socket.connect(socket.java:579) @ java.net.socket.connect(socket.java:528) @ java.net.socket.<init>(socket.java:425) @ java.net.socket.<init>(socket.java:208) @ com.jcraft.jsch.util.createsocket(util.java:343) ... 5 more this test setup (with blocks removed tests since should not relevant):
import com.jcraft.jsch.channelsftp import com.jcraft.jsch.jsch import com.jcraft.jsch.session import com.jcraft.jsch.userinfo import org.apache.sshd.sshserver import org.apache.sshd.server.command import org.apache.sshd.server.commandfactory import org.apache.sshd.server.passwordauthenticator import org.apache.sshd.server.command.scpcommandfactory import org.apache.sshd.server.keyprovider.simplegeneratorhostkeyprovider import org.apache.sshd.server.session.serversession import org.apache.sshd.server.sftp.sftpsubsystem import spock.lang.shared import spock.lang.specification class fileprocessingintegrationspec extends specification { @shared sshserver sshd def setupspec() { filetransferringservice.sftpuser = 'remote-username' filetransferringservice.sftppass = 'remote-password' filetransferringservice.sftphost = 'localhost' filetransferringservice.sftpport = 22999 sshd = sshserver.setupdefaultserver() sshd.port = filetransferringservice.sftpport sshd.keypairprovider = new simplegeneratorhostkeyprovider('hostkey.ser') sshd.passwordauthenticator = new passwordauthenticator() { public boolean authenticate(string username, string password, serversession session) { true } } sshd.commandfactory = new scpcommandfactory(new commandfactory() { public command createcommand(string command) { system.out.println("command: $command") null } }) sshd.subsystemfactories = [new sftpsubsystem.factory()] sshd.start() jsch sch = new jsch(); session session = sch.getsession("sshd", filetransferringservice.sftphost, filetransferringservice.sftpport); session.userinfo = new userinfo() { public string getpassphrase() { null } public string getpassword() { 'sshd' } public boolean promptpassword(string message) { true } public boolean promptpassphrase(string message) { false } public boolean promptyesno(string message) { true } public void showmessage(string message) { } } session.connect() channelsftp c = (channelsftp) session.openchannel("sftp") c.connect() c.put(new fileinputstream('src/integrationtest/resources/file1.xls'), 'file1.xls') c.put(new fileinputstream('src/integrationtest/resources/file2.csv'), 'file2.csv') c.disconnect() } def cleanup() { sshd.stop() } def "files processed"() { when: def result = new fileprocessingservice().processfile('file1.xls') then: ... } def "more files processed"() { when: def result = new fileprocessingservice().processfile('file2.csv') then: ... } } if more information needed, strive provide best can. thank again.
you need use cleanupspec instead of cleanup. way code works right now, sshd server create in setupspec stopped after first test, explains why second test subsequently fails.
this oversight, completeness sake, here fixture method definitions:
def setup() {} // run before every feature method def cleanup() {} // run after every feature method def setupspec() {} // run before first feature method def cleanupspec() {} // run after last feature method
Comments
Post a Comment