Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/spreed.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'tests/php/Chat/Command/ShellExecutorTest.php')
-rw-r--r--tests/php/Chat/Command/ShellExecutorTest.php92
1 files changed, 54 insertions, 38 deletions
diff --git a/tests/php/Chat/Command/ShellExecutorTest.php b/tests/php/Chat/Command/ShellExecutorTest.php
index 3d8b429d7..ae88dacf7 100644
--- a/tests/php/Chat/Command/ShellExecutorTest.php
+++ b/tests/php/Chat/Command/ShellExecutorTest.php
@@ -38,29 +38,57 @@ use Test\TestCase;
class ShellExecutorTest extends TestCase {
- /** @var EventDispatcherInterface|MockObject */
- protected $dispatcher;
-
- /** @var ShellExecutor|MockObject */
- protected $shellExecutor;
-
- /** @var CommandService|MockObject */
- protected $commandService;
-
- /** @var ILogger|MockObject */
- protected $logger;
+ public function dataExecShellRun(): array {
+ return [
+ ['admin', 'token', 'echo {ARGUMENTS}', '$PATH', '$PATH'],
+ ['admin', 'token', 'echo {ARGUMENTS}', '$(pwd)', '$(pwd)'],
+ ['admin', 'token', __DIR__ . '/echo-argument.sh {ARGUMENTS}', '$(pwd)', '$(pwd)'],
+ ['admin', 'token', __DIR__ . '/echo-argument.sh {ARGUMENTS}', '$PATH', '$PATH'],
+ ['admin', 'token', __DIR__ . '/echo-option.sh -a {ARGUMENTS}', '$(pwd)', '$(pwd)'],
+ ['admin', 'token', __DIR__ . '/echo-option.sh -a {ARGUMENTS}', '$PATH', '$PATH'],
+
+ ['admin', 'token', 'echo {ARGUMENTS}', '\\$PATH', '\\$PATH'],
+ ['admin', 'token', 'echo {ARGUMENTS}', '\\$(pwd)', '\\$(pwd)'],
+ ['admin', 'token', __DIR__ . '/echo-argument.sh {ARGUMENTS}', '\\$(pwd)', '\\$(pwd)'],
+ ['admin', 'token', __DIR__ . '/echo-argument.sh {ARGUMENTS}', '\\$PATH', '\\$PATH'],
+ ['admin', 'token', __DIR__ . '/echo-option.sh -a {ARGUMENTS}', '\\$(pwd)', '\\$(pwd)'],
+ ['admin', 'token', __DIR__ . '/echo-option.sh -a {ARGUMENTS}', '\\$PATH', '\\$PATH'],
+
+ ['admin', 'token', 'echo {ARGUMENTS}', '`echo $PATH`', '`echo $PATH`'],
+ ['admin', 'token', 'echo {ARGUMENTS}', '`pwd`', '`pwd`'],
+ ['admin', 'token', __DIR__ . '/echo-argument.sh {ARGUMENTS}', '`pwd`', '`pwd`'],
+ ['admin', 'token', __DIR__ . '/echo-argument.sh {ARGUMENTS}', '`echo $PATH`', '`echo $PATH`'],
+ ['admin', 'token', __DIR__ . '/echo-option.sh -a {ARGUMENTS}', '`pwd`', '`pwd`'],
+ ['admin', 'token', __DIR__ . '/echo-option.sh -a {ARGUMENTS}', '`echo $PATH`', '`echo $PATH`'],
+
+ ['admin', 'token', 'echo {ARGUMENTS}', '\\`echo $PATH\\`', '\\`echo $PATH\\`'],
+ ['admin', 'token', 'echo {ARGUMENTS}', '\\`pwd \\`', '\\`pwd \\`'],
+ ['admin', 'token', __DIR__ . '/echo-argument.sh {ARGUMENTS}', '\\`pwd \\`', '\\`pwd \\`'],
+ ['admin', 'token', __DIR__ . '/echo-argument.sh {ARGUMENTS}', '\\`echo $PATH\\`', '\\`echo $PATH\\`'],
+ ['admin', 'token', __DIR__ . '/echo-option.sh -a {ARGUMENTS}', '\\`pwd \\`', '\\`pwd \\`'],
+ ['admin', 'token', __DIR__ . '/echo-option.sh -a {ARGUMENTS}', '\\`echo $PATH\\`', '\\`echo $PATH\\`'],
+ ];
+ }
- /** @var IL10N|MockObject */
- protected $l10n;
+ /**
+ * @dataProvider dataExecShellRun
+ * @param string|null $actorId
+ * @param string $roomToken
+ * @param string $cmd
+ * @param string $arguments
+ * @param string $output
+ */
+ public function testExecShellRun(?string $actorId, string $roomToken, string $cmd, string $arguments, string $output): void {
+ $executor = new ShellExecutor();
+ $this->assertSame($output, $executor->execShell($cmd, $arguments, $roomToken, $actorId));
- /** @var Executor */
- protected $executor;
+ }
public function dataExecShell(): array {
return [
['admin', 'token', '', '', '', ''],
- ['admin', 'token', '/var/www/nextcloud/script.sh {USER} {ROOM} {ARGUMENTS}', 'foo bar "hello bear"', "/var/www/nextcloud/script.sh 'admin' 'token' 'foo' 'bar' \"hello bear\"", 'output1'],
- ['admin', 'token', '/var/www/nextcloud/script.sh {USER} {ROOM} --arguments="{ARGUMENTS_DOUBLEQUOTE_ESCAPED}"', 'foo bar "hello bear"', "/var/www/nextcloud/script.sh 'admin' 'token' --arguments=\"foo bar \\\"hello bear\\\"\"", "out\nput\n2"],
+ ['admin', 'token', '/var/www/nextcloud/script.sh {USER} {ROOM} {ARGUMENTS}', 'foo bar "hello bear"', "/var/www/nextcloud/script.sh 'admin' 'token' 'foo bar \"hello bear\"'", 'output1'],
+ ['admin', 'token', '/var/www/nextcloud/script.sh {USER} {ROOM} --arguments {ARGUMENTS}', 'foo bar "hello bear"', "/var/www/nextcloud/script.sh 'admin' 'token' --arguments 'foo bar \"hello bear\"'", "out\nput\n2"],
];
}
@@ -84,29 +112,17 @@ class ShellExecutorTest extends TestCase {
->willReturn($output);
$this->assertSame($output, self::invokePrivate($executor, 'execShell', [$cmd, $arguments, $roomToken, $actorId]));
-
}
- public function dataEscapeArguments(): array {
- return [
- ['foobar', "'foobar'"],
- ['foo bar', "'foo' 'bar'"],
- ['"foo" bar', "\"foo\" 'bar'"],
- ['"foo"bar', "'\"foo\"bar'"],
- ['"foo bar"', '"foo bar"'],
- ['"foo foo"bar bar"', '"foo foo\\"bar bar"'],
- ['"foo foo\"bar bar"', '"foo foo\\\\"bar bar"'],
- ['" foo bar "', '" foo bar "'],
- ['" foo bar ', "'\" foo bar '"],
- ];
- }
+ public function testLegacyArguments(): void {
+ $executor = $this->getMockBuilder(ShellExecutor::class)
+ ->setMethods(['wrapExec'])
+ ->getMock();
- /**
- * @dataProvider dataEscapeArguments
- * @param string $arguments
- * @param string $expected
- */
- public function testEscapeArguments(string $arguments, string $expected): void {
- $this->assertSame($expected, self::invokePrivate(new ShellExecutor(), 'escapeArguments', [$arguments]));
+ $executor->expects($this->never())
+ ->method('wrapExec');
+
+ $this->expectException(\InvalidArgumentException::class);
+ self::invokePrivate($executor, 'execShell', ['echo "{ARGUMENTS_DOUBLEQUOTE_ESCAPED}"', 'arguments', '', '']);
}
}