1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
<?php
/**
* @author Andreas Fischer <bantu@phpbb.com>
* @copyright 2014 Andreas Fischer
* @license http://www.opensource.org/licenses/mit-license.html MIT License
*/
use phpseclib\Net\SCP;
use phpseclib\Net\SSH2;
use PHPUnit\Framework\Attributes\Depends;
class Functional_Net_SCPSSH2UserStoryTest extends PhpseclibFunctionalTestCase
{
protected static $remoteFile;
protected static $exampleData;
protected static $exampleDataLength;
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::$remoteFile = uniqid('phpseclib-scp-ssh2-') . '.txt';
self::$exampleData = str_repeat('abscp12345', 1000);
self::$exampleDataLength = 10000;
}
public function testConstructSSH2()
{
$ssh = new SSH2($this->getEnv('SSH_HOSTNAME'));
$this->assertTrue(
$ssh->login(
$this->getEnv('SSH_USERNAME'),
$this->getEnv('SSH_PASSWORD')
)
);
return $ssh;
}
/**
* @depends testConstructSSH2
* @param \phpseclib\Net\SSH2 $ssh
*/
#[Depends('testConstructSSH2')]
public function testConstructor($ssh)
{
$scp = new SCP($ssh);
$this->assertTrue(
is_object($scp),
'Could not construct \phpseclib\Net\SCP object.'
);
return $scp;
}
/**
* @depends testConstructor
* @param \phpseclib\Net\SCP $scp
*/
#[Depends('testConstructor')]
public function testPutGetString($scp)
{
$this->assertTrue(
$scp->put(self::$remoteFile, self::$exampleData),
'Failed asserting that data could successfully be put() into file.'
);
$content = $scp->get(self::$remoteFile);
$this->assertSame(
strlen($content),
self::$exampleDataLength,
'Failed asserting that string length matches expected length.'
);
$this->assertSame(
$content,
self::$exampleData,
'Failed asserting that string content matches expected content.'
);
return $scp;
}
/**
* @depends testPutGetString
* @param \phpseclib\Net\SCP $scp
*/
#[Depends('testPutGetString')]
public function testGetFile($scp)
{
$localFilename = $this->createTempFile();
$this->assertTrue(
$scp->get(self::$remoteFile, $localFilename),
'Failed asserting that get() into file was successful.'
);
$this->assertContains(
filesize($localFilename),
array(self::$exampleDataLength, self::$exampleDataLength + 1),
'Failed asserting that filesize matches expected data size.'
);
$this->assertContains(
file_get_contents($localFilename),
array(self::$exampleData, self::$exampleData . "\0"),
'Failed asserting that file content matches expected content.'
);
return $scp;
}
/**
* @depends testGetFile
* @group github873
*/
#[Depends('testGetFile')]
public function testGetBadFilePutGet($scp)
{
$scp->ssh->exec('rm ' . self::$remoteFile);
$this->assertFalse(
$scp->get(self::$remoteFile),
'Failed asserting that get() on a non-existant file failed'
);
$this->assertCount(1, $scp->getSCPErrors());
$this->assertTrue(
$scp->put(self::$remoteFile, self::$exampleData),
'Failed asserting that put() succeeded'
);
$content = $scp->get(self::$remoteFile);
$this->assertSame(
strlen($content),
self::$exampleDataLength,
'Failed asserting that string length matches expected length.'
);
$this->assertSame(
$content,
self::$exampleData,
'Failed asserting that string content matches expected content.'
);
return $scp;
}
}
|