phpseclib/tests/Functional/Net/SSH2Test.php

176 lines
4.3 KiB
PHP
Raw Normal View History

<?php
/**
* @author Andreas Fischer <bantu@phpbb.com>
* @copyright 2014 Andreas Fischer
* @license http://www.opensource.org/licenses/mit-license.html MIT License
*/
2014-12-10 01:31:41 +00:00
use phpseclib\Net\SSH2;
2014-06-01 19:13:20 +00:00
class Functional_Net_SSH2Test extends PhpseclibFunctionalTestCase
{
public function testConstructor()
{
2014-12-10 01:31:41 +00:00
$ssh = new SSH2($this->getEnv('SSH_HOSTNAME'));
2017-12-07 20:08:19 +00:00
$this->assertInternalType(
'object',
$ssh,
'Could not construct NET_SSH2 object.'
);
return $ssh;
}
/**
2015-03-29 16:07:17 +00:00
* @depends testConstructor
* @group github408
* @group github412
*/
2014-07-20 20:58:24 +00:00
public function testPreLogin($ssh)
{
$this->assertFalse(
$ssh->isConnected(),
'Failed asserting that SSH2 is not connected after construction.'
);
$this->assertFalse(
$ssh->isAuthenticated(),
'Failed asserting that SSH2 is not authenticated after construction.'
);
2014-07-20 20:58:24 +00:00
$this->assertNotEmpty(
$ssh->getServerPublicHostKey(),
'Failed asserting that a non-empty public host key was fetched.'
);
$this->assertTrue(
$ssh->isConnected(),
'Failed asserting that SSH2 is connected after public key fetch.'
);
$this->assertNotEmpty(
$ssh->getServerIdentification(),
'Failed asserting that the server identifier was set after connect.'
);
return $ssh;
}
/**
2015-03-29 16:07:17 +00:00
* @depends testPreLogin
*/
public function testBadPassword($ssh)
{
$username = $this->getEnv('SSH_USERNAME');
$password = $this->getEnv('SSH_PASSWORD');
$this->assertFalse(
$ssh->login($username, 'zzz' . $password),
'SSH2 login using password succeeded.'
);
$this->assertTrue(
$ssh->isConnected(),
'Failed asserting that SSH2 is connected after bad login attempt.'
);
$this->assertFalse(
$ssh->isAuthenticated(),
'Failed asserting that SSH2 is not authenticated after bad login attempt.'
);
return $ssh;
}
/**
* @depends testBadPassword
*/
public function testPasswordLogin($ssh)
{
$username = $this->getEnv('SSH_USERNAME');
$password = $this->getEnv('SSH_PASSWORD');
$this->assertTrue(
$ssh->login($username, $password),
'SSH2 login using password failed.'
);
2014-03-06 10:35:54 +00:00
$this->assertTrue(
$ssh->isAuthenticated(),
'Failed asserting that SSH2 is authenticated after good login attempt.'
);
2014-03-06 10:35:54 +00:00
return $ssh;
}
/**
2015-03-29 16:07:17 +00:00
* @depends testPasswordLogin
* @group github280
*/
2014-03-06 10:35:54 +00:00
public function testExecWithMethodCallback($ssh)
{
2017-12-14 06:31:32 +00:00
$callbackObject = $this->getMockBuilder('stdClass')
->setMethods(array('callbackMethod'))
->getMock();
2014-03-06 10:35:54 +00:00
$callbackObject
->expects($this->atLeastOnce())
->method('callbackMethod')
->will($this->returnValue(true));
2017-11-27 08:30:14 +00:00
$ssh->exec('pwd', [$callbackObject, 'callbackMethod']);
2017-05-28 13:58:00 +00:00
return $ssh;
}
public function testGetServerPublicHostKey()
{
2014-12-10 01:31:41 +00:00
$ssh = new SSH2($this->getEnv('SSH_HOSTNAME'));
$this->assertInternalType('string', $ssh->getServerPublicHostKey());
}
public function testOpenSocketConnect()
{
$fsock = fsockopen($this->getEnv('SSH_HOSTNAME'), 22);
$ssh = new SSH2($fsock);
$username = $this->getEnv('SSH_USERNAME');
$password = $this->getEnv('SSH_PASSWORD');
$this->assertTrue(
$ssh->login($username, $password),
'SSH2 login using an open socket failed.'
);
}
2017-05-28 13:58:00 +00:00
/**
* @depends testExecWithMethodCallback
* @group github1009
*/
public function testDisablePTY($ssh)
{
$ssh->enablePTY();
$ssh->exec('ls -latr');
$ssh->disablePTY();
$ssh->exec('pwd');
2017-09-06 05:27:07 +00:00
return $ssh;
}
/**
* @depends testDisablePTY
* @group github1167
*/
public function testChannelDataAfterOpen($ssh)
{
$ssh->write("ping 127.0.0.1\n");
$ssh->enablePTY();
$ssh->exec('bash');
$ssh->write("ls -latr\n");
$ssh->setTimeout(1);
$ssh->read();
2017-05-28 13:58:00 +00:00
}
}