Files
Xboard/tests/Feature/Server/ServerHandshakeTest.php
T

132 lines
3.5 KiB
PHP

<?php
namespace Tests\Feature\Server;
use App\Models\Server;
use App\Models\ServerMachine;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Bus;
use Illuminate\Support\Facades\Cache;
use Tests\TestCase;
class ServerHandshakeTest extends TestCase
{
use RefreshDatabase;
protected function setUp(): void
{
parent::setUp();
config()->set('app.key', 'base64:' . base64_encode(str_repeat('a', 32)));
Cache::forever('admin_settings', [
'server_token' => 'server-token',
'server_ws_enable' => 0,
]);
}
public function test_v2_handshake_accepts_token_only_without_node(): void
{
$response = $this->postJson('/api/v2/server/handshake', [
'token' => 'server-token',
]);
$response->assertOk()->assertJsonStructure(['websocket' => ['enabled']]);
}
public function test_v2_handshake_rejects_invalid_token(): void
{
$response = $this->postJson('/api/v2/server/handshake', [
'token' => 'wrong-token',
]);
$response->assertStatus(422);
}
public function test_v2_report_works_without_node_type(): void
{
Bus::fake();
$server = $this->makeServer();
$response = $this->postJson('/api/v2/server/report', [
'token' => 'server-token',
'node_id' => $server->id,
]);
$response->assertOk()->assertJson(['data' => true]);
}
public function test_v2_report_ignores_node_type_field(): void
{
Bus::fake();
$server = $this->makeServer();
// legacy node clients may still send node_type; V2 must accept it as no-op.
$response = $this->postJson('/api/v2/server/report', [
'token' => 'server-token',
'node_id' => $server->id,
'node_type' => 'this-would-be-rejected-by-v1',
]);
$response->assertOk()->assertJson(['data' => true]);
}
public function test_v2_report_rejects_unknown_node(): void
{
$response = $this->postJson('/api/v2/server/report', [
'token' => 'server-token',
'node_id' => 999999,
]);
$response->assertStatus(400);
$response->assertJson(['message' => 'Server does not exist']);
}
public function test_v2_machine_handshake_with_machine_id_and_no_node(): void
{
$machine = ServerMachine::create([
'name' => 'test-machine',
'token' => 'machine-token',
'is_active' => true,
]);
$response = $this->postJson('/api/v2/server/handshake', [
'machine_id' => $machine->id,
'token' => 'machine-token',
]);
$response->assertOk();
}
public function test_v2_machine_report_requires_node_id(): void
{
$machine = ServerMachine::create([
'name' => 'test-machine',
'token' => 'machine-token',
'is_active' => true,
]);
$response = $this->postJson('/api/v2/server/report', [
'machine_id' => $machine->id,
'token' => 'machine-token',
]);
$response->assertStatus(422);
}
private function makeServer(): Server
{
return Server::create([
'name' => 'test-node',
'type' => Server::TYPE_VMESS,
'host' => '127.0.0.1',
'port' => 443,
'server_port' => 443,
'rate' => '1',
'group_id' => [1],
'enabled' => true,
]);
}
}