diff options
author | Daniel Calviño Sánchez <danxuliu@gmail.com> | 2022-06-29 16:01:44 +0300 |
---|---|---|
committer | Daniel Calviño Sánchez <danxuliu@gmail.com> | 2022-06-29 17:08:57 +0300 |
commit | b00cf0e38ce18e5aed46919f0bf3cee04f6e585e (patch) | |
tree | e48cf3ffdb591658da1f20a88efbd38ef50b2bdc | |
parent | 4d3dcf866d44a4f5b5a5ee072bb2bda5f58785a8 (diff) |
Add schemes to turn:delete OCC commandadd-schemes-to-turn-commands
As no scheme could be set when deleting a TURN server all TURN servers
matching the server and protocols were deleted regardless of their
scheme.
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
-rw-r--r-- | lib/Command/Turn/Delete.php | 11 | ||||
-rw-r--r-- | tests/php/Command/Turn/DeleteTest.php | 70 |
2 files changed, 75 insertions, 6 deletions
diff --git a/lib/Command/Turn/Delete.php b/lib/Command/Turn/Delete.php index 7a0e93073..22db99827 100644 --- a/lib/Command/Turn/Delete.php +++ b/lib/Command/Turn/Delete.php @@ -44,6 +44,10 @@ class Delete extends Base { ->setName('talk:turn:delete') ->setDescription('Remove an existing TURN server.') ->addArgument( + 'schemes', + InputArgument::REQUIRED, + 'Schemes, can be turn or turns or turn,turns' + )->addArgument( 'server', InputArgument::REQUIRED, 'A domain name, ex. turn.nextcloud.com' @@ -55,6 +59,7 @@ class Delete extends Base { } protected function execute(InputInterface $input, OutputInterface $output): int { + $schemes = $input->getArgument('schemes'); $server = $input->getArgument('server'); $protocols = $input->getArgument('protocols'); @@ -66,9 +71,9 @@ class Delete extends Base { } $count = count($servers); - // remove all occurrences which math $server and $protocols - $servers = array_filter($servers, function ($s) use ($server, $protocols) { - return $s['server'] !== $server || $s['protocols'] !== $protocols; + // remove all occurrences which match $schemes, $server and $protocols + $servers = array_filter($servers, function ($s) use ($schemes, $server, $protocols) { + return $s['schemes'] !== $schemes || $s['server'] !== $server || $s['protocols'] !== $protocols; }); $servers = array_values($servers); // reindex diff --git a/tests/php/Command/Turn/DeleteTest.php b/tests/php/Command/Turn/DeleteTest.php index 3617e3341..d57d6d1d3 100644 --- a/tests/php/Command/Turn/DeleteTest.php +++ b/tests/php/Command/Turn/DeleteTest.php @@ -56,7 +56,9 @@ class DeleteTest extends TestCase { public function testDeleteIfEmpty() { $this->input->method('getArgument') ->willReturnCallback(function ($arg) { - if ($arg === 'server') { + if ($arg === 'schemes') { + return 'turn,turns'; + } elseif ($arg === 'server') { return 'turn.example.com'; } elseif ($arg === 'protocols') { return 'udp,tcp'; @@ -84,7 +86,9 @@ class DeleteTest extends TestCase { public function testDelete() { $this->input->method('getArgument') ->willReturnCallback(function ($arg) { - if ($arg === 'server') { + if ($arg === 'schemes') { + return 'turn,turns'; + } elseif ($arg === 'server') { return 'turn2.example.com'; } elseif ($arg === 'protocols') { return 'udp,tcp'; @@ -96,6 +100,7 @@ class DeleteTest extends TestCase { ->with('spreed', 'turn_servers') ->willReturn(json_encode([ [ + 'schemes' => 'turn,turns', 'server' => 'turn1.example.com', 'secret' => 'my-test-secret-1', 'protocols' => 'udp,tcp' @@ -108,6 +113,7 @@ class DeleteTest extends TestCase { $this->equalTo('turn_servers'), $this->equalTo(json_encode([ [ + 'schemes' => 'turn,turns', 'server' => 'turn1.example.com', 'secret' => 'my-test-secret-1', 'protocols' => 'udp,tcp' @@ -124,7 +130,9 @@ class DeleteTest extends TestCase { public function testNothingToDelete() { $this->input->method('getArgument') ->willReturnCallback(function ($arg) { - if ($arg === 'server') { + if ($arg === 'schemes') { + return 'turn,turns'; + } elseif ($arg === 'server') { return 'turn4.example.com'; } elseif ($arg === 'protocols') { return 'udp,tcp'; @@ -136,16 +144,19 @@ class DeleteTest extends TestCase { ->with('spreed', 'turn_servers') ->willReturn(json_encode([ [ + 'schemes' => 'turn,turns', 'server' => 'turn1.example.com', 'secret' => 'my-test-secret-1', 'protocols' => 'udp,tcp' ], [ + 'schemes' => 'turn,turns', 'server' => 'turn2.example.com', 'secret' => 'my-test-secret-2', 'protocols' => 'udp,tcp' ], [ + 'schemes' => 'turn,turns', 'server' => 'turn3.example.com', 'secret' => 'my-test-secret-3', 'protocols' => 'udp,tcp' @@ -158,16 +169,19 @@ class DeleteTest extends TestCase { $this->equalTo('turn_servers'), $this->equalTo(json_encode([ [ + 'schemes' => 'turn,turns', 'server' => 'turn1.example.com', 'secret' => 'my-test-secret-1', 'protocols' => 'udp,tcp' ], [ + 'schemes' => 'turn,turns', 'server' => 'turn2.example.com', 'secret' => 'my-test-secret-2', 'protocols' => 'udp,tcp' ], [ + 'schemes' => 'turn,turns', 'server' => 'turn3.example.com', 'secret' => 'my-test-secret-3', 'protocols' => 'udp,tcp' @@ -180,4 +194,54 @@ class DeleteTest extends TestCase { $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]); } + + public function testDeleteMatchingSchemes() { + $this->input->method('getArgument') + ->willReturnCallback(function ($arg) { + if ($arg === 'schemes') { + return 'turn,turns'; + } elseif ($arg === 'server') { + return 'turn.example.com'; + } elseif ($arg === 'protocols') { + return 'udp,tcp'; + } + throw new \Exception(); + }); + $this->config->expects($this->once()) + ->method('getAppValue') + ->with('spreed', 'turn_servers') + ->willReturn(json_encode([ + [ + 'schemes' => 'turn,turns', + 'server' => 'turn.example.com', + 'secret' => 'my-test-secret-1', + 'protocols' => 'udp,tcp' + ], + [ + 'schemes' => 'turn', + 'server' => 'turn.example.com', + 'secret' => 'my-test-secret-1', + 'protocols' => 'udp,tcp' + ] + ])); + $this->config->expects($this->once()) + ->method('setAppValue') + ->with( + $this->equalTo('spreed'), + $this->equalTo('turn_servers'), + $this->equalTo(json_encode([ + [ + 'schemes' => 'turn', + 'server' => 'turn.example.com', + 'secret' => 'my-test-secret-1', + 'protocols' => 'udp,tcp' + ] + ])) + ); + $this->output->expects($this->once()) + ->method('writeln') + ->with($this->equalTo('<info>Deleted turn.example.com.</info>')); + + $this->invokePrivate($this->command, 'execute', [$this->input, $this->output]); + } } |