2023-11-21 23:40:15 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Tests\Feature;
|
|
|
|
|
|
|
|
use Carbon\Carbon;
|
|
|
|
use Illuminate\Contracts\Filesystem\FileNotFoundException;
|
|
|
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
|
|
use Tests\TestCase;
|
|
|
|
|
|
|
|
use App\Classes\FTN\Tic;
|
|
|
|
use App\Models\{Address,Filearea};
|
|
|
|
use App\Exceptions\{InvalidCRCException,
|
|
|
|
InvalidPasswordException,
|
|
|
|
NodeNotSubscribedException,
|
|
|
|
NoWriteSecurityException};
|
|
|
|
use App\Exceptions\TIC\{NoFileAreaException,NotToMeException,SizeMismatchException};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Test TIC processing
|
|
|
|
*
|
|
|
|
* + TIC file with no file
|
|
|
|
* + TIC file with file wrong size
|
|
|
|
* + TIC file with file wrong CRC
|
|
|
|
* + TIC file from host with no write
|
|
|
|
* + TIC file not to me
|
|
|
|
* + TIC file no filearea here
|
|
|
|
* + TIC file from host no area
|
|
|
|
* + TIC file from host no exports
|
|
|
|
* + TIC file invalid password
|
|
|
|
* + TIC export
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
class TicProcessingTest extends TestCase
|
|
|
|
{
|
|
|
|
use DatabaseTransactions;
|
|
|
|
|
|
|
|
public function test_tic_nofile(): void
|
|
|
|
{
|
|
|
|
$this->expectException(FileNotFoundException::class);
|
|
|
|
|
|
|
|
$tic = new Tic;
|
2023-12-13 02:29:16 +00:00
|
|
|
$tic->load('file/000E-1700545740-no_file.tic');
|
2023-11-21 23:40:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function test_tic_invalidcrc(): void
|
|
|
|
{
|
|
|
|
$this->expectException(InvalidCRCException::class);
|
|
|
|
|
|
|
|
$tic = new Tic;
|
2023-12-13 02:29:16 +00:00
|
|
|
$tic->load('file/000E-1700545740-invalid_crc.tic');
|
2023-11-21 23:40:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function test_tic_nofilearea(): void
|
|
|
|
{
|
|
|
|
$this->expectException(NoFileAreaException::class);
|
|
|
|
|
|
|
|
$tic = new Tic;
|
2023-12-13 02:29:16 +00:00
|
|
|
$tic->load('file/000E-1700545740-no_area.tic');
|
2023-11-21 23:40:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function test_tic_bad_size(): void
|
|
|
|
{
|
|
|
|
$this->expectException(SizeMismatchException::class);
|
|
|
|
|
|
|
|
$tic = new Tic;
|
2023-12-13 02:29:16 +00:00
|
|
|
$tic->load('file/000E-1700545740-bad_size.tic');
|
2023-11-21 23:40:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function test_tic_not_to_me(): void
|
|
|
|
{
|
|
|
|
$this->expectException(NotToMeException::class);
|
|
|
|
|
|
|
|
$tic = new Tic;
|
2023-12-13 02:29:16 +00:00
|
|
|
$tic->load('file/000E-1700545740-not_to_me.tic');
|
2023-11-21 23:40:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function test_tic_wrong_password(): void
|
|
|
|
{
|
|
|
|
// Configure a node address
|
|
|
|
$ao = Address::findFTN('100:1/0@a');
|
|
|
|
$ao->system->sessions()->attach($ao->zone_id,['ticpass'=>'PASSWORD']);
|
|
|
|
|
|
|
|
$this->expectException(InvalidPasswordException::class);
|
|
|
|
|
|
|
|
$tic = new Tic;
|
2023-12-13 02:29:16 +00:00
|
|
|
$tic->load('file/000E-1700545740-wrong_password.tic');
|
2023-11-21 23:40:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function test_tic_node_not_subscribed(): void
|
|
|
|
{
|
|
|
|
// Configure a node address
|
|
|
|
$ao = Address::findFTN('100:1/0@a');
|
|
|
|
$ao->system->sessions()->attach($ao->zone_id,['ticpass'=>'PASSWORD']);
|
|
|
|
|
|
|
|
$this->expectException(NodeNotSubscribedException::class);
|
|
|
|
|
|
|
|
$tic = new Tic;
|
2023-12-13 02:29:16 +00:00
|
|
|
$tic->load('file/000E-1700545740-file.tic');
|
2023-11-21 23:40:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function test_tic_node_no_write(): void
|
|
|
|
{
|
|
|
|
// Configure a node address
|
|
|
|
$ao = Address::findFTN('100:1/0@a');
|
|
|
|
$ao->system->sessions()->attach($ao->zone_id,['ticpass'=>'PASSWORD']);
|
|
|
|
$ao->fileareas()->syncWithPivotValues(Filearea::where('name','FILE_AREA')->single()->id,['subscribed'=>Carbon::now()]);
|
|
|
|
|
|
|
|
$this->expectException(NoWriteSecurityException::class);
|
|
|
|
|
|
|
|
$tic = new Tic;
|
2023-12-13 02:29:16 +00:00
|
|
|
$tic->load('file/000E-1700545740-file.tic');
|
2023-11-21 23:40:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function test_tic_good(): void
|
|
|
|
{
|
|
|
|
// Configure a node address
|
|
|
|
$ao = Address::findFTN('100:1/0@a');
|
|
|
|
$ao->system->sessions()->attach($ao->zone_id,['ticpass'=>'PASSWORD']);
|
|
|
|
$ao->fileareas()->syncWithPivotValues(Filearea::where('name','FILE_AREA')->single()->id,['subscribed'=>Carbon::now()]);
|
|
|
|
$ao->unguard();
|
|
|
|
$ao->update(['security'=>1]);
|
|
|
|
|
|
|
|
$tic = new Tic;
|
2023-12-13 02:29:16 +00:00
|
|
|
$file = $tic->load('file/000E-1700545740-file.tic');
|
2023-11-21 23:40:15 +00:00
|
|
|
|
|
|
|
$tic->save();
|
|
|
|
|
|
|
|
$this->assertModelExists($file);
|
|
|
|
|
|
|
|
$file->refresh();
|
|
|
|
$this->assertEquals('100:1/0',$file->fftn->ftn3d);
|
|
|
|
$this->assertEquals('100:10/11',$file->origin->ftn3d);
|
2024-11-25 02:46:16 +00:00
|
|
|
$this->assertCount(7,$file->seenby);
|
2023-11-21 23:40:15 +00:00
|
|
|
$this->assertCount(4,$file->path);
|
|
|
|
}
|
|
|
|
}
|