File: SCPSSH2UserStoryTest.php

package info (click to toggle)
php-phpseclib 2.0.50-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,756 kB
  • sloc: php: 12,020; sh: 66; xml: 49; makefile: 23
file content (134 lines) | stat: -rw-r--r-- 4,021 bytes parent folder | download
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;
    }
}