Browse Source

Add schemes to turn:delete OCC command

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>
pull/7498/head
Daniel Calviño Sánchez 4 years ago
parent
commit
b00cf0e38c
  1. 11
      lib/Command/Turn/Delete.php
  2. 70
      tests/php/Command/Turn/DeleteTest.php

11
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

70
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]);
}
}
Loading…
Cancel
Save