From fe50a6cdacc11d5cffa17f11d60b34f125fd53b0 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 2 Apr 2014 16:23:22 +0200 Subject: [PATCH] A few functional tests for Net_SFTP. --- tests/Net/SFTPFunctionalTest.php | 209 +++++++++++++++++++++++++++++++ travis/run-phpunit.sh | 1 + 2 files changed, 210 insertions(+) create mode 100644 tests/Net/SFTPFunctionalTest.php diff --git a/tests/Net/SFTPFunctionalTest.php b/tests/Net/SFTPFunctionalTest.php new file mode 100644 index 00000000..30ee027e --- /dev/null +++ b/tests/Net/SFTPFunctionalTest.php @@ -0,0 +1,209 @@ + + * @copyright MMXIV Andreas Fischer + * @license http://www.opensource.org/licenses/mit-license.html MIT License + */ + +class Net_SFTPFunctionalTest extends PhpseclibFunctionalTestCase +{ + static protected $scratchDir; + static protected $exampleData; + static protected $exampleDataLength; + + static public function setUpBeforeClass() + { + if (getenv('TRAVIS') && version_compare(PHP_VERSION, '5.3.3', '<=')) { + self::markTestIncomplete( + 'This test hangs on Travis CI on PHP 5.3.3 and below.' + ); + } + parent::setUpBeforeClass(); + + self::$scratchDir = uniqid('phpseclib-sftp-scratch-'); + + self::$exampleData = str_repeat('abcde12345', 1000); + self::$exampleDataLength = 10000; + } + + public function testConstructor() + { + $sftp = new Net_SFTP($this->getEnv('SSH_HOSTNAME')); + + $this->assertTrue( + is_object($sftp), + 'Could not construct NET_SFTP object.' + ); + + return $sftp; + } + + /** + * @depends testConstructor + */ + public function testPasswordLogin($sftp) + { + $username = $this->getEnv('SSH_USERNAME'); + $password = $this->getEnv('SSH_PASSWORD'); + $this->assertTrue( + $sftp->login($username, $password), + 'SSH2/SFTP login using password failed.' + ); + + return $sftp; + } + + /** + * @depends testPasswordLogin + */ + public function testPwdHome($sftp) + { + $this->assertEquals( + $this->getEnv('SSH_HOME'), + $sftp->pwd(), + 'Failed asserting that pwd() returns home directory after login.' + ); + + return $sftp; + } + + /** + * @depends testPwdHome + */ + public function testMkDirScratch($sftp) + { + $dirname = self::$scratchDir; + + $this->assertTrue( + $sftp->mkdir($dirname), + "Failed asserting that a new scratch directory $dirname could " . + 'be created.' + ); + + $this->assertFalse( + $sftp->mkdir($dirname), + "Failed asserting that a new scratch directory $dirname could " . + 'not be created (because it already exists).' + ); + + return $sftp; + } + + /** + * @depends testMkDirScratch + */ + public function testChDirScratch($sftp) + { + $this->assertTrue( + $sftp->chdir(self::$scratchDir), + sprintf( + 'Failed asserting that working directory could be changed ' . + 'to scratch directory %s.', + self::$scratchDir + ) + ); + + $pwd = $sftp->pwd(); + + $this->assertStringStartsWith( + $this->getEnv('SSH_HOME'), + $pwd, + 'Failed asserting that the home directory is a prefix of the ' . + 'current working directory.' + ); + + $this->assertStringEndsWith( + self::$scratchDir, + $pwd, + 'Failed asserting that the scratch directory name is a suffix ' . + 'of the current working directory.' + ); + + return $sftp; + } + + /** + * @depends testChDirScratch + */ + public function testPutSizeGetFile($sftp) + { + $this->assertTrue( + $sftp->put('file1.txt', self::$exampleData), + 'Failed asserting that example data could be successfully put().' + ); + + $this->assertSame( + self::$exampleDataLength, + $sftp->size('file1.txt'), + 'Failed asserting that put example data has the expected length' + ); + + $this->assertSame( + self::$exampleData, + $sftp->get('file1.txt'), + 'Failed asserting that get() returns expected example data.' + ); + + return $sftp; + } + + /** + * @depends testPutSizeGetFile + */ + public function testChDirUpHome($sftp) + { + $this->assertTrue( + $sftp->chdir('../'), + 'Failed asserting that directory could be changed one level up.' + ); + + $this->assertEquals( + $this->getEnv('SSH_HOME'), + $sftp->pwd(), + 'Failed asserting that pwd() returns home directory.' + ); + + return $sftp; + } + + /** + * @depends testChDirUpHome + */ + public function testRmDirScratch($sftp) + { + $this->assertFalse( + $sftp->rmdir(self::$scratchDir), + 'Failed asserting that non-empty scratch directory could ' . + 'not be deleted using rmdir().' + ); + + return $sftp; + } + + /** + * @depends testRmDirScratch + */ + public function testDeleteRecursiveScratch($sftp) + { + $this->assertTrue( + $sftp->delete(self::$scratchDir), + 'Failed asserting that non-empty scratch directory could ' . + 'be deleted using recursive delete().' + ); + + return $sftp; + } + + /** + * @depends testDeleteRecursiveScratch + */ + public function testRmDirScratchNonexistent($sftp) + { + $this->assertFalse( + $sftp->rmdir(self::$scratchDir), + 'Failed asserting that nonexistent scratch directory could ' . + 'not be deleted using rmdir().' + ); + } +} diff --git a/travis/run-phpunit.sh b/travis/run-phpunit.sh index 35b16aee..11ac817c 100755 --- a/travis/run-phpunit.sh +++ b/travis/run-phpunit.sh @@ -5,6 +5,7 @@ set -x export PHPSECLIB_SSH_HOSTNAME='localhost' export PHPSECLIB_SSH_USERNAME='phpseclib' export PHPSECLIB_SSH_PASSWORD='EePoov8po1aethu2kied1ne0' +export PHPSECLIB_SSH_HOME='/home/phpseclib' phpunit \ --verbose \