diff --git a/app/Actions/CheckForScheduledSpeedtests.php b/app/Actions/CheckForScheduledSpeedtests.php index 47098bf34..37a59cf61 100644 --- a/app/Actions/CheckForScheduledSpeedtests.php +++ b/app/Actions/CheckForScheduledSpeedtests.php @@ -18,10 +18,28 @@ public function handle(): void return; } - RunSpeedtest::runIf( - $this->isSpeedtestDue(schedule: $schedule), - scheduled: true, - ); + if (! $this->isSpeedtestDue(schedule: $schedule)) { + return; + } + + if (config('speedtest.mode', 'random') === 'sequential') { + $servers = array_filter( + array_map('trim', explode(',', (string) config('speedtest.servers'))) + ); + + if (count($servers)) { + foreach ($servers as $serverId) { + RunSpeedtest::run( + scheduled: true, + serverId: (int) $serverId, + ); + } + + return; + } + } + + RunSpeedtest::run(scheduled: true); } /** diff --git a/config/speedtest.php b/config/speedtest.php index 4c185f690..02f7984f6 100644 --- a/config/speedtest.php +++ b/config/speedtest.php @@ -25,6 +25,8 @@ 'servers' => env('SPEEDTEST_SERVERS'), + 'mode' => env('SPEEDTEST_MODE', 'random'), + 'blocked_servers' => env('SPEEDTEST_BLOCKED_SERVERS'), 'interface' => env('SPEEDTEST_INTERFACE'), diff --git a/tests/Feature/ScheduledSpeedtestModeTest.php b/tests/Feature/ScheduledSpeedtestModeTest.php new file mode 100644 index 000000000..9b152ecfe --- /dev/null +++ b/tests/Feature/ScheduledSpeedtestModeTest.php @@ -0,0 +1,35 @@ +set('speedtest.schedule', '* * * * *'); + config()->set('speedtest.mode', 'random'); + config()->set('speedtest.servers', '1,2'); + + CheckForScheduledSpeedtests::run(); + + expect(Result::count())->toBe(1); +}); + +test('runs sequential speedtests when mode sequential', function () { + config()->set('speedtest.schedule', '* * * * *'); + config()->set('speedtest.mode', 'sequential'); + config()->set('speedtest.servers', '1,2'); + + CheckForScheduledSpeedtests::run(); + + expect(Result::count())->toBe(2); + expect(Result::orderBy('id')->pluck('data->server->id')->toArray())->toBe([ + 1, + 2, + ]); +});