From f11d3cf8420fe82023f0f085dfbbd3d5ed3b8506 Mon Sep 17 00:00:00 2001 From: Henry Whitaker Date: Tue, 25 Aug 2020 21:29:12 +0100 Subject: [PATCH] Updated files to v1.9.4 --- README.md | 2 +- conf/site/README.md | 2 +- conf/site/app/Helpers/SettingsHelper.php | 21 +++ conf/site/app/Helpers/SpeedtestHelper.php | 29 ++- .../Controllers/IntegrationsController.php | 10 +- .../Http/Controllers/SpeedtestController.php | 1 + .../Providers/IntegrationsServiceProvider.php | 24 +-- conf/site/changelog.json | 10 ++ conf/site/config/speedtest.php | 2 +- .../Commands/AcceptEULACommandTest.php | 21 +++ .../tests/Feature/Commands/AppVersionTest.php | 21 +++ .../Commands/AuthenticationCommandTest.php | 73 ++++++++ .../Commands/ClearOldSessionCommandTest.php | 24 +++ .../Commands/ClearQueueCommandTest.php | 23 +++ .../Feature/Commands/GetConfigCommandTest.php | 27 +++ .../Commands/SetSlackWebhookCommandTest.php | 29 +++ .../SetTelegramOptionsCommandTest.php | 33 ++++ .../Commands/SpeedtestOverviewCommandTest.php | 23 +++ .../Commands/TestNotificationCommandTest.php | 23 +++ .../HealthcheckTest.php | 94 ++++++++++ .../NotificationTest.php | 35 ++++ .../SpeedtestController/DeleteTest.php | 66 +++++++ .../SpeedtestController/FailTest.php | 43 +++++ .../SpeedtestController/IndexTest.php | 34 ++++ .../SpeedtestController/LatestTest.php | 58 ++++++ .../SpeedtestController/RunTest.php | 42 +++++ .../SpeedtestController/TimeTest.php | 43 +++++ .../ThresholdMessageTest.php | 59 ++++++ .../SettingsHelper/SettingsGetTest.php | 38 ++++ .../SettingsLoadIntegrationsConfigTest.php | 35 ++++ .../SettingsHelper/SettingsSetTest.php | 25 +++ .../SpeedtestHelper/AbsoluteThresholdTest.php | 170 ++++++++++++++++++ .../SpeedtestHelper/CheckOutputTest.php | 59 ++++++ .../SpeedtestHelper/FailureRateTest.php | 46 +++++ .../SpeedtestHelper/ParseUnitsTest.php | 69 +++++++ .../PercentageThresholdTest.php | 72 ++++++++ .../Helpers/SpeedtestHelper/SpeedtestTest.php | 76 ++++++++ .../SpeedtestCompleteListener/SlackTest.php | 127 +++++++++++++ .../TelegramTest.php | 107 +++++++++++ .../SpeedtestFailedListener/SlackTest.php | 42 +++++ .../SpeedtestFailedListener/TelegramTest.php | 44 +++++ .../SpeedtestOverviewListener/SlackTest.php | 40 +++++ .../TelegramTest.php | 44 +++++ .../TestNotificationListener/SlackTest.php | 39 ++++ .../TestNotificationListener/TelegramTest.php | 41 +++++ 45 files changed, 1903 insertions(+), 43 deletions(-) create mode 100644 conf/site/tests/Feature/Commands/AcceptEULACommandTest.php create mode 100644 conf/site/tests/Feature/Commands/AppVersionTest.php create mode 100644 conf/site/tests/Feature/Commands/AuthenticationCommandTest.php create mode 100644 conf/site/tests/Feature/Commands/ClearOldSessionCommandTest.php create mode 100644 conf/site/tests/Feature/Commands/ClearQueueCommandTest.php create mode 100644 conf/site/tests/Feature/Commands/GetConfigCommandTest.php create mode 100644 conf/site/tests/Feature/Commands/SetSlackWebhookCommandTest.php create mode 100644 conf/site/tests/Feature/Commands/SetTelegramOptionsCommandTest.php create mode 100644 conf/site/tests/Feature/Commands/SpeedtestOverviewCommandTest.php create mode 100644 conf/site/tests/Feature/Commands/TestNotificationCommandTest.php create mode 100644 conf/site/tests/Unit/Controllers/IntegrationsController/HealthcheckTest.php create mode 100644 conf/site/tests/Unit/Controllers/IntegrationsController/NotificationTest.php create mode 100644 conf/site/tests/Unit/Controllers/SpeedtestController/DeleteTest.php create mode 100644 conf/site/tests/Unit/Controllers/SpeedtestController/FailTest.php create mode 100644 conf/site/tests/Unit/Controllers/SpeedtestController/IndexTest.php create mode 100644 conf/site/tests/Unit/Controllers/SpeedtestController/LatestTest.php create mode 100644 conf/site/tests/Unit/Controllers/SpeedtestController/RunTest.php create mode 100644 conf/site/tests/Unit/Controllers/SpeedtestController/TimeTest.php create mode 100644 conf/site/tests/Unit/Helpers/NotificationsHelper/ThresholdMessageTest.php create mode 100644 conf/site/tests/Unit/Helpers/SettingsHelper/SettingsGetTest.php create mode 100644 conf/site/tests/Unit/Helpers/SettingsHelper/SettingsLoadIntegrationsConfigTest.php create mode 100644 conf/site/tests/Unit/Helpers/SettingsHelper/SettingsSetTest.php create mode 100644 conf/site/tests/Unit/Helpers/SpeedtestHelper/AbsoluteThresholdTest.php create mode 100644 conf/site/tests/Unit/Helpers/SpeedtestHelper/CheckOutputTest.php create mode 100644 conf/site/tests/Unit/Helpers/SpeedtestHelper/FailureRateTest.php create mode 100644 conf/site/tests/Unit/Helpers/SpeedtestHelper/ParseUnitsTest.php create mode 100644 conf/site/tests/Unit/Helpers/SpeedtestHelper/PercentageThresholdTest.php create mode 100644 conf/site/tests/Unit/Helpers/SpeedtestHelper/SpeedtestTest.php create mode 100644 conf/site/tests/Unit/Listeners/SpeedtestCompleteListener/SlackTest.php create mode 100644 conf/site/tests/Unit/Listeners/SpeedtestCompleteListener/TelegramTest.php create mode 100644 conf/site/tests/Unit/Listeners/SpeedtestFailedListener/SlackTest.php create mode 100644 conf/site/tests/Unit/Listeners/SpeedtestFailedListener/TelegramTest.php create mode 100644 conf/site/tests/Unit/Listeners/SpeedtestOverviewListener/SlackTest.php create mode 100644 conf/site/tests/Unit/Listeners/SpeedtestOverviewListener/TelegramTest.php create mode 100644 conf/site/tests/Unit/Listeners/TestNotificationListener/SlackTest.php create mode 100644 conf/site/tests/Unit/Listeners/TestNotificationListener/TelegramTest.php diff --git a/README.md b/README.md index 62039d69..5ddcb921 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Speedtest Tracker -[![Docker pulls](https://img.shields.io/docker/pulls/henrywhitaker3/speedtest-tracker?style=flat-square)](https://hub.docker.com/r/henrywhitaker3/speedtest-tracker) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/henrywhitaker3/Speedtest-Tracker/Stable?label=master&logo=github&style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/henrywhitaker3/Speedtest-Tracker/Dev?label=dev&logo=github&style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [![last_commit](https://img.shields.io/github/last-commit/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) [![issues](https://img.shields.io/github/issues/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/issues) [![commit_freq](https://img.shields.io/github/commit-activity/m/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) ![version](https://img.shields.io/badge/version-v1.9.3-success?style=flat-square) [![license](https://img.shields.io/github/license/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/blob/master/LICENSE) +[![Docker pulls](https://img.shields.io/docker/pulls/henrywhitaker3/speedtest-tracker?style=flat-square)](https://hub.docker.com/r/henrywhitaker3/speedtest-tracker) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/henrywhitaker3/Speedtest-Tracker/Stable?label=master&logo=github&style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/henrywhitaker3/Speedtest-Tracker/Dev?label=dev&logo=github&style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [![last_commit](https://img.shields.io/github/last-commit/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) [![issues](https://img.shields.io/github/issues/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/issues) [![commit_freq](https://img.shields.io/github/commit-activity/m/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) ![version](https://img.shields.io/badge/version-v1.9.4-success?style=flat-square) [![license](https://img.shields.io/github/license/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/blob/master/LICENSE) This program runs a speedtest check every hour and graphs the results. The back-end is written in [Laravel](https://laravel.com/) and the front-end uses [React](https://reactjs.org/). It uses [Ookla's Speedtest cli](https://www.speedtest.net/apps/cli) to get the data and uses [Chart.js](https://www.chartjs.org/) to plot the results. diff --git a/conf/site/README.md b/conf/site/README.md index bc851f6a..ee05a2ba 100644 --- a/conf/site/README.md +++ b/conf/site/README.md @@ -1,6 +1,6 @@ # Speedtest Tracker -[![Docker pulls](https://img.shields.io/docker/pulls/henrywhitaker3/speedtest-tracker?style=flat-square)](https://hub.docker.com/r/henrywhitaker3/speedtest-tracker) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/henrywhitaker3/Speedtest-Tracker/Stable?label=master&logo=github&style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/henrywhitaker3/Speedtest-Tracker/Dev?label=dev&logo=github&style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [![last_commit](https://img.shields.io/github/last-commit/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) [![issues](https://img.shields.io/github/issues/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/issues) [![commit_freq](https://img.shields.io/github/commit-activity/m/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) ![version](https://img.shields.io/badge/version-v1.9.3-success?style=flat-square) [![license](https://img.shields.io/github/license/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/blob/master/LICENSE) +[![Docker pulls](https://img.shields.io/docker/pulls/henrywhitaker3/speedtest-tracker?style=flat-square)](https://hub.docker.com/r/henrywhitaker3/speedtest-tracker) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/henrywhitaker3/Speedtest-Tracker/Stable?label=master&logo=github&style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/henrywhitaker3/Speedtest-Tracker/Dev?label=dev&logo=github&style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/actions) [![last_commit](https://img.shields.io/github/last-commit/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) [![issues](https://img.shields.io/github/issues/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/issues) [![commit_freq](https://img.shields.io/github/commit-activity/m/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/commits) ![version](https://img.shields.io/badge/version-v1.9.4-success?style=flat-square) [![license](https://img.shields.io/github/license/henrywhitaker3/Speedtest-Tracker?style=flat-square)](https://github.com/henrywhitaker3/Speedtest-Tracker/blob/master/LICENSE) This program runs a speedtest check every hour and graphs the results. The back-end is written in [Laravel](https://laravel.com/) and the front-end uses [React](https://reactjs.org/). It uses the [Ookla's speedtest cli](https://www.speedtest.net/apps/cli) package to get the data and uses [Chart.js](https://www.chartjs.org/) to plot the results. diff --git a/conf/site/app/Helpers/SettingsHelper.php b/conf/site/app/Helpers/SettingsHelper.php index cf1e2df4..5c44084e 100644 --- a/conf/site/app/Helpers/SettingsHelper.php +++ b/conf/site/app/Helpers/SettingsHelper.php @@ -172,4 +172,25 @@ class SettingsHelper { return false; } + + public static function loadIntegrationConfig() + { + $settings = [ + 'healthchecks_enabled' => (bool)SettingsHelper::get('healthchecks_enabled')->value, + 'healthchecks_uuid' => SettingsHelper::get('healthchecks_uuid')->value, + 'slack_webhook' => SettingsHelper::get('slack_webhook')->value, + 'telegram_bot_token' => SettingsHelper::get('telegram_bot_token')->value, + 'telegram_chat_id' => SettingsHelper::get('telegram_chat_id')->value, + ]; + + foreach($settings as $key => $value) { + $key = 'integrations.' . $key; + + if($value === "") { + $value = null; + } + + config()->set([ $key => $value ]); + } + } } diff --git a/conf/site/app/Helpers/SpeedtestHelper.php b/conf/site/app/Helpers/SpeedtestHelper.php index ffd77891..10bf8628 100644 --- a/conf/site/app/Helpers/SpeedtestHelper.php +++ b/conf/site/app/Helpers/SpeedtestHelper.php @@ -263,8 +263,12 @@ class SpeedtestHelper { if(env('DB_CONNECTION') === 'sqlite') { if(env('DB_DATABASE') !== null) { $current = env('DB_DATABASE'); - if(File::copy($current, $current . '.bak')) { - return true; + try { + if(File::copy($current, $current . '.bak')) { + return true; + } + }catch(Exception $e) { + return false; } } @@ -283,23 +287,18 @@ class SpeedtestHelper { { Cache::flush(); - if(SpeedtestHelper::dbBackup() !== false) { - if(sizeof(Speedtest::whereNotNull('id')->get()) > 0) { - if(Speedtest::whereNotNull('id')->delete()) { - return [ - 'success' => true, - ]; - } - } + SpeedtestHelper::dbBackup(); - return [ - 'success' => true, - ]; + if(sizeof(Speedtest::whereNotNull('id')->get()) > 0) { + if(Speedtest::whereNotNull('id')->delete()) { + return [ + 'success' => true, + ]; + } } return [ - 'success' => false, - 'msg' => 'There was an error backing up the database. No speedtests have been deleted.' + 'success' => true, ]; } diff --git a/conf/site/app/Http/Controllers/IntegrationsController.php b/conf/site/app/Http/Controllers/IntegrationsController.php index 3aa9a243..854168f1 100644 --- a/conf/site/app/Http/Controllers/IntegrationsController.php +++ b/conf/site/app/Http/Controllers/IntegrationsController.php @@ -30,17 +30,17 @@ class IntegrationsController extends Controller $methodResp = 'test healthchecks \'' . $method . '\' endpoint'; try { - $hc = new Healthchecks(config('integrations.healthchecks_uuid')); + // SettingsHelper::loadIntegrationConfig(); if($method == 'success') { - $hc->success(); + Healthcheck::success(); } if($method == 'fail') { - $hc->fail(); + Healthcheck::fail(); } if($method == 'start') { - $hc->start(); + Healthcheck::start(); } return response()->json([ @@ -78,7 +78,7 @@ class IntegrationsController extends Controller SettingsHelper::testNotification(); return response()->json([ - 'method' => 'test notificaiton agents' + 'method' => 'test notification agents' ], 200); } } diff --git a/conf/site/app/Http/Controllers/SpeedtestController.php b/conf/site/app/Http/Controllers/SpeedtestController.php index 544024cf..aacf870b 100644 --- a/conf/site/app/Http/Controllers/SpeedtestController.php +++ b/conf/site/app/Http/Controllers/SpeedtestController.php @@ -144,6 +144,7 @@ class SpeedtestController extends Controller public function run() { try { + SettingsHelper::loadIntegrationConfig(); $data = SpeedtestJob::dispatch(false, config('integrations')); return response()->json([ 'method' => 'run speedtest', diff --git a/conf/site/app/Providers/IntegrationsServiceProvider.php b/conf/site/app/Providers/IntegrationsServiceProvider.php index b7dd11fe..e896ef13 100644 --- a/conf/site/app/Providers/IntegrationsServiceProvider.php +++ b/conf/site/app/Providers/IntegrationsServiceProvider.php @@ -37,28 +37,12 @@ class IntegrationsServiceProvider extends ServiceProvider { if(File::exists(env('DB_DATABASE'))) { if(Schema::hasTable('settings')) { - $settings = [ - 'healthchecks_enabled' => (bool)SettingsHelper::get('healthchecks_enabled')->value, - 'healthchecks_uuid' => SettingsHelper::get('healthchecks_uuid')->value, - 'slack_webhook' => SettingsHelper::get('slack_webhook')->value, - 'telegram_bot_token' => SettingsHelper::get('telegram_bot_token')->value, - 'telegram_chat_id' => SettingsHelper::get('telegram_chat_id')->value, - ]; + $setting = SettingsHelper::get('healthchecks_uuid'); - foreach($settings as $key => $value) { - $key = 'integrations.' . $key; - - if($value === "") { - $value = null; - } - - config()->set([ $key => $value ]); - } - - if($settings['healthchecks_enabled']) { + if($setting !== false) { try { - App::bind('healthcheck', function() use ($settings) { - return new Healthchecks($settings['healthchecks_uuid']); + App::bind('healthcheck', function() use ($setting) { + return new Healthchecks($setting->value); }); } catch(InvalidUuidStringException $e) { Log::error('Invalid healthchecks UUID'); diff --git a/conf/site/changelog.json b/conf/site/changelog.json index 07b1eac5..f22433c4 100644 --- a/conf/site/changelog.json +++ b/conf/site/changelog.json @@ -1,4 +1,14 @@ { + "1.9.4": [ + { + "description": "Changed integration config loading.", + "link": "" + }. + { + "description": "Added more tests.", + "link": "" + } + ], "1.9.3": [ { "description": "Updated dependencies.", diff --git a/conf/site/config/speedtest.php b/conf/site/config/speedtest.php index edf7eb04..9abbff5f 100644 --- a/conf/site/config/speedtest.php +++ b/conf/site/config/speedtest.php @@ -7,7 +7,7 @@ return [ |-------------------------------------------------------------------------- */ - 'version' => '1.9.3', + 'version' => '1.9.4', /* |-------------------------------------------------------------------------- diff --git a/conf/site/tests/Feature/Commands/AcceptEULACommandTest.php b/conf/site/tests/Feature/Commands/AcceptEULACommandTest.php new file mode 100644 index 00000000..3c0debbc --- /dev/null +++ b/conf/site/tests/Feature/Commands/AcceptEULACommandTest.php @@ -0,0 +1,21 @@ +artisan('speedtest:eula') + ->assertExitCode(0); + } +} diff --git a/conf/site/tests/Feature/Commands/AppVersionTest.php b/conf/site/tests/Feature/Commands/AppVersionTest.php new file mode 100644 index 00000000..2c02aef1 --- /dev/null +++ b/conf/site/tests/Feature/Commands/AppVersionTest.php @@ -0,0 +1,21 @@ +artisan('speedtest:version') + ->expectsOutput('Speedtest Tracker v' . config('speedtest.version')); + } +} diff --git a/conf/site/tests/Feature/Commands/AuthenticationCommandTest.php b/conf/site/tests/Feature/Commands/AuthenticationCommandTest.php new file mode 100644 index 00000000..f50343d6 --- /dev/null +++ b/conf/site/tests/Feature/Commands/AuthenticationCommandTest.php @@ -0,0 +1,73 @@ +assertEquals(Artisan::call('speedtest:auth', [ '--enable' => true ]), 0); + + $this->assertTrue((bool)SettingsHelper::get('auth')->value); + } + + /** + * Disable app auth + * + * @return void + */ + public function testDisableAuth() + { + SettingsHelper::set('auth', true); + + $this->assertEquals(Artisan::call('speedtest:auth', [ '--disable' => true ]), 0); + + $this->assertFalse((bool)SettingsHelper::get('auth')->value); + } + + /** + * Test invalid params for command + * + * @return void + */ + // public function testAuthBothOptions() + // { + // $command = new AuthenticationCommand(); + // $command->setLaravel($this->app); + // $tester = new CommandTester($command); + // $tester->setInputs([]); + // $tester->execute([ '--enable' => true, '--disable' => true ]); + // } + + /** + * Test invalid params for command + * + * @return void + */ + // public function testAuthNoOptions() + // { + // $command = new AuthenticationCommand(); + // $command->setLaravel($this->app); + // $tester = new CommandTester($command); + // $tester->setInputs([]); + // $tester->execute([]); + // } +} diff --git a/conf/site/tests/Feature/Commands/ClearOldSessionCommandTest.php b/conf/site/tests/Feature/Commands/ClearOldSessionCommandTest.php new file mode 100644 index 00000000..ad28e1d7 --- /dev/null +++ b/conf/site/tests/Feature/Commands/ClearOldSessionCommandTest.php @@ -0,0 +1,24 @@ +artisan('speedtest:clear-sessions') + ->expectsOutput('Invalidated expired sessions') + ->assertExitCode(0); + } +} diff --git a/conf/site/tests/Feature/Commands/ClearQueueCommandTest.php b/conf/site/tests/Feature/Commands/ClearQueueCommandTest.php new file mode 100644 index 00000000..66146089 --- /dev/null +++ b/conf/site/tests/Feature/Commands/ClearQueueCommandTest.php @@ -0,0 +1,23 @@ +artisan('queue:clear') + ->assertExitCode(0); + } +} diff --git a/conf/site/tests/Feature/Commands/GetConfigCommandTest.php b/conf/site/tests/Feature/Commands/GetConfigCommandTest.php new file mode 100644 index 00000000..32dc8934 --- /dev/null +++ b/conf/site/tests/Feature/Commands/GetConfigCommandTest.php @@ -0,0 +1,27 @@ +artisan('speedtest:config') + ->expectsOutput($configJson) + ->assertExitCode(0); + } +} diff --git a/conf/site/tests/Feature/Commands/SetSlackWebhookCommandTest.php b/conf/site/tests/Feature/Commands/SetSlackWebhookCommandTest.php new file mode 100644 index 00000000..6ecd0f09 --- /dev/null +++ b/conf/site/tests/Feature/Commands/SetSlackWebhookCommandTest.php @@ -0,0 +1,29 @@ +artisan('speedtest:slack', [ 'webhook' => 'test' ]) + ->expectsOutput('Slack webhook updated') + ->assertExitCode(0); + + $this->assertEquals(SettingsHelper::get('slack_webhook')->value, 'test'); + } +} diff --git a/conf/site/tests/Feature/Commands/SetTelegramOptionsCommandTest.php b/conf/site/tests/Feature/Commands/SetTelegramOptionsCommandTest.php new file mode 100644 index 00000000..d3edf2ac --- /dev/null +++ b/conf/site/tests/Feature/Commands/SetTelegramOptionsCommandTest.php @@ -0,0 +1,33 @@ +artisan('speedtest:telegram', [ + '--bot' => 'test-bot', + '--chat' => 'test-chat' + ])->expectsOutput('Telegram options updated') + ->assertExitCode(0); + + $this->assertEquals(SettingsHelper::get('telegram_bot_token')->value, 'test-bot'); + $this->assertEquals(SettingsHelper::get('telegram_chat_id')->value, 'test-chat'); + } +} diff --git a/conf/site/tests/Feature/Commands/SpeedtestOverviewCommandTest.php b/conf/site/tests/Feature/Commands/SpeedtestOverviewCommandTest.php new file mode 100644 index 00000000..361c5032 --- /dev/null +++ b/conf/site/tests/Feature/Commands/SpeedtestOverviewCommandTest.php @@ -0,0 +1,23 @@ +artisan('speedtest:overview') + ->assertExitCode(0); + } +} diff --git a/conf/site/tests/Feature/Commands/TestNotificationCommandTest.php b/conf/site/tests/Feature/Commands/TestNotificationCommandTest.php new file mode 100644 index 00000000..b2d43598 --- /dev/null +++ b/conf/site/tests/Feature/Commands/TestNotificationCommandTest.php @@ -0,0 +1,23 @@ +artisan('speedtest:notification') + ->assertExitCode(0); + } +} diff --git a/conf/site/tests/Unit/Controllers/IntegrationsController/HealthcheckTest.php b/conf/site/tests/Unit/Controllers/IntegrationsController/HealthcheckTest.php new file mode 100644 index 00000000..13e055a7 --- /dev/null +++ b/conf/site/tests/Unit/Controllers/IntegrationsController/HealthcheckTest.php @@ -0,0 +1,94 @@ +controller = new IntegrationsController(); + + $this->uuid = env('HEALTHCHECKS_UUID'); + $this->bindFacade($this->uuid); + } + + public function testStartPing() + { + $resp = $this->controller->testHealthchecks('start')->original; + + $this->assertEquals([ + 'method' => 'test healthchecks \'start\' endpoint', + 'success' => true + ], $resp); + } + + public function testSuccessPing() + { + $resp = $this->controller->testHealthchecks('success')->original; + + $this->assertEquals([ + 'method' => 'test healthchecks \'success\' endpoint', + 'success' => true + ], $resp); + } + + public function testFailPing() + { + $resp = $this->controller->testHealthchecks('fail')->original; + + $this->assertEquals([ + 'method' => 'test healthchecks \'fail\' endpoint', + 'success' => true + ], $resp); + } + + public function testInvalidUUID() + { + $this->bindFacade('test'); + + $resp = $this->controller->testHealthchecks('start')->original; + + $this->assertEquals([ + 'method' => 'test healthchecks \'start\' endpoint', + 'success' => false, + 'error' => 'Invalid UUID' + ], $resp); + + $this->bindFacade($this->uuid); + } + + /** + * As clean install before setting up, there is no healthchecks + * uuid in the db, so the facade doesn't get created during boot, + * now just bind it in the container on test setup + * + * @param String $uuid + * @return void + */ + private function bindFacade(String $uuid) + { + App::bind('healthcheck', function() use ($uuid) { + return new Healthchecks($uuid); + }); + } +} diff --git a/conf/site/tests/Unit/Controllers/IntegrationsController/NotificationTest.php b/conf/site/tests/Unit/Controllers/IntegrationsController/NotificationTest.php new file mode 100644 index 00000000..f8efa1bc --- /dev/null +++ b/conf/site/tests/Unit/Controllers/IntegrationsController/NotificationTest.php @@ -0,0 +1,35 @@ +controller = new IntegrationsController(); + } + + public function testNotificationsTest() + { + $resp = $this->controller->testNotification()->original; + + $this->assertEquals([ + 'method' => 'test notification agents' + ], $resp); + } +} diff --git a/conf/site/tests/Unit/Controllers/SpeedtestController/DeleteTest.php b/conf/site/tests/Unit/Controllers/SpeedtestController/DeleteTest.php new file mode 100644 index 00000000..00e1ed95 --- /dev/null +++ b/conf/site/tests/Unit/Controllers/SpeedtestController/DeleteTest.php @@ -0,0 +1,66 @@ +controller = new SpeedtestController(); + } + + public function testDeleteAll() + { + for($i = 0; $i < 5; $i++) { + Speedtest::create([ + 'download' => 5, + 'upload' => 5, + 'ping' => 5 + ]); + } + + $this->assertEquals(5, Speedtest::count()); + + $resp = $this->controller->deleteAll()->original; + + $this->assertArrayHasKey('method', $resp); + $this->assertArrayHasKey('success', $resp); + + $this->assertEquals(0, Speedtest::count()); + } + + public function testDeleteSpecific() + { + $test = Speedtest::create([ + 'download' => 5, + 'upload' => 5, + 'ping' => 5 + ]); + $id = $test->id; + + $this->assertNotNull(Speedtest::find($id)); + + $resp = $this->controller->delete($test)->original; + + $this->assertArrayHasKey('method', $resp); + $this->assertArrayHasKey('success', $resp); + + $this->assertNull(Speedtest::find($id)); + } +} diff --git a/conf/site/tests/Unit/Controllers/SpeedtestController/FailTest.php b/conf/site/tests/Unit/Controllers/SpeedtestController/FailTest.php new file mode 100644 index 00000000..b8fd70c5 --- /dev/null +++ b/conf/site/tests/Unit/Controllers/SpeedtestController/FailTest.php @@ -0,0 +1,43 @@ +controller = new SpeedtestController(); + } + + public function testFail() + { + $resp = $this->controller->fail(5)->original; + + $this->assertArrayHasKey('method', $resp); + $this->assertArrayHasKey('data', $resp); + $this->assertArrayHasKey('days', $resp); + } + + public function testFailInvalidInput() + { + $resp = $this->controller->fail('test')->original; + + $this->assertArrayHasKey('method', $resp); + $this->assertArrayHasKey('error', $resp); + } +} diff --git a/conf/site/tests/Unit/Controllers/SpeedtestController/IndexTest.php b/conf/site/tests/Unit/Controllers/SpeedtestController/IndexTest.php new file mode 100644 index 00000000..02a34f1d --- /dev/null +++ b/conf/site/tests/Unit/Controllers/SpeedtestController/IndexTest.php @@ -0,0 +1,34 @@ +controller = new SpeedtestController(); + } + + public function testIndex() + { + $resp = $this->controller->index()->original; + + $this->assertArrayHasKey('method', $resp); + $this->assertArrayHasKey('data', $resp); + } +} diff --git a/conf/site/tests/Unit/Controllers/SpeedtestController/LatestTest.php b/conf/site/tests/Unit/Controllers/SpeedtestController/LatestTest.php new file mode 100644 index 00000000..0b6189c3 --- /dev/null +++ b/conf/site/tests/Unit/Controllers/SpeedtestController/LatestTest.php @@ -0,0 +1,58 @@ +controller = new SpeedtestController(); + } + + public function testLatestNoEntries() + { + DB::table('speedtests')->delete(); + + $resp = $this->controller->latest(); + $resp = $resp->original; + + $this->assertEquals([ + 'method' => 'get latest speedtest', + 'error' => 'no speedtests have been run' + ], $resp); + } + + public function testLatest() + { + $test = Speedtest::create([ + 'download' => 5, + 'upload' => 5, + 'ping' => 5 + ]); + $test = $test->attributesToArray(); + + $resp = $this->controller->latest(); + $resp = $resp->original; + + $this->assertArrayHasKey('data', $resp); + $this->assertArrayHasKey('average', $resp); + $this->assertArrayHasKey('max', $resp); + } +} diff --git a/conf/site/tests/Unit/Controllers/SpeedtestController/RunTest.php b/conf/site/tests/Unit/Controllers/SpeedtestController/RunTest.php new file mode 100644 index 00000000..aa156184 --- /dev/null +++ b/conf/site/tests/Unit/Controllers/SpeedtestController/RunTest.php @@ -0,0 +1,42 @@ +controller = new SpeedtestController(); + } + + public function testRun() + { + Queue::fake(); + + $resp = $this->controller->run()->original; + + $this->assertArrayHasKey('method', $resp); + $this->assertArrayHasKey('data', $resp); + + Queue::assertPushed(SpeedtestJob::class, function($job) { + return true; + }); + } +} diff --git a/conf/site/tests/Unit/Controllers/SpeedtestController/TimeTest.php b/conf/site/tests/Unit/Controllers/SpeedtestController/TimeTest.php new file mode 100644 index 00000000..04e58e69 --- /dev/null +++ b/conf/site/tests/Unit/Controllers/SpeedtestController/TimeTest.php @@ -0,0 +1,43 @@ +controller = new SpeedtestController(); + } + + public function testTime() + { + $resp = $this->controller->time(5)->original; + + $this->assertArrayHasKey('method', $resp); + $this->assertArrayHasKey('data', $resp); + $this->assertArrayHasKey('days', $resp); + } + + public function testTimeInvalidInput() + { + $resp = $this->controller->time('test')->original; + + $this->assertArrayHasKey('method', $resp); + $this->assertArrayHasKey('error', $resp); + } +} diff --git a/conf/site/tests/Unit/Helpers/NotificationsHelper/ThresholdMessageTest.php b/conf/site/tests/Unit/Helpers/NotificationsHelper/ThresholdMessageTest.php new file mode 100644 index 00000000..7bd9f695 --- /dev/null +++ b/conf/site/tests/Unit/Helpers/NotificationsHelper/ThresholdMessageTest.php @@ -0,0 +1,59 @@ +assertEquals('For the latest speedtest, the ping, upload values exceeded the absolute threshold', $msg); + } + + /** + * Test absolute message + * + * @return void + */ + public function testAbsoluteMessageSingleField() + { + $msg = NotificationsHelper::formatAbsoluteThresholdMessage([ 'ping' ]); + + $this->assertEquals('For the latest speedtest, the ping value exceeded the absolute threshold', $msg); + } + + /** + * Test absolute message + * + * @return void + */ + public function testPercentageMessageMultiField() + { + $msg = NotificationsHelper::formatPercentageThresholdMessage([ 'ping', 'upload' ]); + + $this->assertEquals('For the latest speedtest, the ping, upload values exceeded the percentage threshold', $msg); + } + + /** + * Test absolute message + * + * @return void + */ + public function testPercentageMessageSingleField() + { + $msg = NotificationsHelper::formatPercentageThresholdMessage([ 'ping' ]); + + $this->assertEquals('For the latest speedtest, the ping value exceeded the percentage threshold', $msg); + } +} diff --git a/conf/site/tests/Unit/Helpers/SettingsHelper/SettingsGetTest.php b/conf/site/tests/Unit/Helpers/SettingsHelper/SettingsGetTest.php new file mode 100644 index 00000000..ab1b5f4c --- /dev/null +++ b/conf/site/tests/Unit/Helpers/SettingsHelper/SettingsGetTest.php @@ -0,0 +1,38 @@ +assertNotFalse($response); + $this->assertFalse((bool)$response->value); + } + + /** + * A basic feature test example. + * + * @return void + */ + public function testInvalidSetting() + { + $response = SettingsHelper::get('test'); + + $this->assertFalse($response); + } +} diff --git a/conf/site/tests/Unit/Helpers/SettingsHelper/SettingsLoadIntegrationsConfigTest.php b/conf/site/tests/Unit/Helpers/SettingsHelper/SettingsLoadIntegrationsConfigTest.php new file mode 100644 index 00000000..896ad51d --- /dev/null +++ b/conf/site/tests/Unit/Helpers/SettingsHelper/SettingsLoadIntegrationsConfigTest.php @@ -0,0 +1,35 @@ + false, + "healthchecks_uuid" => null, + "slack_webhook" => null, + "telegram_bot_token" => null, + "telegram_chat_id" => null, + ]; + + SettingsHelper::set('slack_webhook', 'test'); + + SettingsHelper::loadIntegrationConfig(); + + $this->assertEquals(config('integrations.slack_webhook'), 'test'); + } +} diff --git a/conf/site/tests/Unit/Helpers/SettingsHelper/SettingsSetTest.php b/conf/site/tests/Unit/Helpers/SettingsHelper/SettingsSetTest.php new file mode 100644 index 00000000..ef08059c --- /dev/null +++ b/conf/site/tests/Unit/Helpers/SettingsHelper/SettingsSetTest.php @@ -0,0 +1,25 @@ +assertEquals('hello', $response->value); + } +} diff --git a/conf/site/tests/Unit/Helpers/SpeedtestHelper/AbsoluteThresholdTest.php b/conf/site/tests/Unit/Helpers/SpeedtestHelper/AbsoluteThresholdTest.php new file mode 100644 index 00000000..f257f6ff --- /dev/null +++ b/conf/site/tests/Unit/Helpers/SpeedtestHelper/AbsoluteThresholdTest.php @@ -0,0 +1,170 @@ + $dl, + 'upload' => 11, + 'ping' => 5 + ]); + + $result = SpeedtestHelper::testIsLowerThanThreshold('absolute', $test); + + $this->assertEquals([ 'download' ], $result); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testAbsoluteDownloadThresholdNotExceeded() + { + $threshold = 1; + $dl = 5; + + SettingsHelper::set('threshold_alert_absolute_download', $threshold); + + $test = Speedtest::create([ + 'download' => $dl, + 'upload' => 11, + 'ping' => 5 + ]); + + $result = SpeedtestHelper::testIsLowerThanThreshold('absolute', $test); + + $this->assertEquals([], $result); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testAbsoluteUploadThresholdExceeded() + { + $threshold = 10; + $ul = 5; + + SettingsHelper::set('threshold_alert_absolute_upload', $threshold); + + $test = Speedtest::create([ + 'download' => 11, + 'upload' => $ul, + 'ping' => 5 + ]); + + $result = SpeedtestHelper::testIsLowerThanThreshold('absolute', $test); + + $this->assertEquals([ 'upload' ], $result); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testAbsoluteUploadThresholdNotExceeded() + { + $threshold = 1; + $ul = 5; + + SettingsHelper::set('threshold_alert_absolute_upload', $threshold); + + $test = Speedtest::create([ + 'download' => 11, + 'upload' => $ul, + 'ping' => 5 + ]); + + $result = SpeedtestHelper::testIsLowerThanThreshold('absolute', $test); + + $this->assertEquals([], $result); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testAbsolutePingThresholdExceeded() + { + $threshold = 10; + $ping = 11; + + SettingsHelper::set('threshold_alert_absolute_ping', $threshold); + + $test = Speedtest::create([ + 'download' => 10, + 'upload' => 10, + 'ping' => $ping + ]); + + $result = SpeedtestHelper::testIsLowerThanThreshold('absolute', $test); + + $this->assertEquals([ 'ping' ], $result); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testAbsolutePingThresholdNotExceeded() + { + $threshold = 10; + $ping = 9; + + SettingsHelper::set('threshold_alert_absolute_ping', $threshold); + + $test = Speedtest::create([ + 'download' => 10, + 'upload' => 10, + 'ping' => $ping + ]); + + $result = SpeedtestHelper::testIsLowerThanThreshold('absolute', $test); + + $this->assertEquals([], $result); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testInvalidArgument() + { + try { + SpeedtestHelper::testIsLowerThanThreshold('test', new Speedtest()); + } catch(InvalidArgumentException $e) { + $this->assertTrue(true); + return true; + } + + $this->assertTrue(false); + } +} diff --git a/conf/site/tests/Unit/Helpers/SpeedtestHelper/CheckOutputTest.php b/conf/site/tests/Unit/Helpers/SpeedtestHelper/CheckOutputTest.php new file mode 100644 index 00000000..ccedf32a --- /dev/null +++ b/conf/site/tests/Unit/Helpers/SpeedtestHelper/CheckOutputTest.php @@ -0,0 +1,59 @@ + 'result', + 'download' => [ 'bandwidth' => '*' ], + 'upload' => [ 'bandwidth' => '*' ], + 'ping' => [ 'latency' => '*' ], + 'server' => [ + 'id' => '*', + 'name' => '*', + 'host' => '*', + 'port' => '*', + ], + 'result' => [ + 'url' => '*', + ] + ]; + + $this->assertTrue(SpeedtestHelper::checkOutputIsComplete($expected)); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testBadOutput() + { + $expected = [ + 'type' => 'result', + 'download' => [ 'bandwidth' => '*' ], + 'server' => [ + 'id' => '*', + 'name' => '*', + 'host' => '*', + 'port' => '*', + ], + 'result' => [ + 'url' => '*', + ] + ]; + + $this->assertFalse(SpeedtestHelper::checkOutputIsComplete($expected)); + } +} diff --git a/conf/site/tests/Unit/Helpers/SpeedtestHelper/FailureRateTest.php b/conf/site/tests/Unit/Helpers/SpeedtestHelper/FailureRateTest.php new file mode 100644 index 00000000..fe32692e --- /dev/null +++ b/conf/site/tests/Unit/Helpers/SpeedtestHelper/FailureRateTest.php @@ -0,0 +1,46 @@ + 5, + 'download' => 5, + 'upload' => 5 + ]); + } + + for($i = 0; $i < $failed; $i++) { + Speedtest::create([ + 'ping' => 5, + 'download' => 5, + 'upload' => 5, + 'failed' => true + ]); + } + + $output = SpeedtestHelper::failureRate(1); + + $this->assertEquals($output[0]['success'], $success); + $this->assertEquals($output[0]['failure'], $failed); + } +} diff --git a/conf/site/tests/Unit/Helpers/SpeedtestHelper/ParseUnitsTest.php b/conf/site/tests/Unit/Helpers/SpeedtestHelper/ParseUnitsTest.php new file mode 100644 index 00000000..7771d35c --- /dev/null +++ b/conf/site/tests/Unit/Helpers/SpeedtestHelper/ParseUnitsTest.php @@ -0,0 +1,69 @@ +assertEquals($expected, $result['val']); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testKbitToMb() + { + $initial = '80 Kbit'; + $expected = 0.08; + + $result = SpeedtestHelper::parseUnits($initial); + + $this->assertEquals($expected, $result['val']); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testKbyteToMb() + { + $initial = '80 Kbyte'; + $expected = 0.64; + + $result = SpeedtestHelper::parseUnits($initial); + + $this->assertEquals($expected, $result['val']); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testMbToMb() + { + $initial = '80 Mbit'; + $expected = 80; + + $result = SpeedtestHelper::parseUnits($initial); + + $this->assertEquals($expected, $result['val']); + } +} diff --git a/conf/site/tests/Unit/Helpers/SpeedtestHelper/PercentageThresholdTest.php b/conf/site/tests/Unit/Helpers/SpeedtestHelper/PercentageThresholdTest.php new file mode 100644 index 00000000..2ac63c27 --- /dev/null +++ b/conf/site/tests/Unit/Helpers/SpeedtestHelper/PercentageThresholdTest.php @@ -0,0 +1,72 @@ +createAverageOf5(); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testPercentageThresholdDownloadExceeded() + { + SettingsHelper::set('threshold_alert_percentage', 15); + + $test = Speedtest::create([ + 'download' => 5 * 0.8, + 'upload' => 5, + 'ping' => 5 + ]); + + $result = SpeedtestHelper::testIsLowerThanThreshold('percentage', $test); + + $this->assertEquals([ 'download' ], $result); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testThresholdNotSet() + { + SettingsHelper::set('threshold_alert_percentage', ''); + + $test = Speedtest::create([ + 'download' => 5 * 0.9, + 'upload' => 5, + 'ping' => 5 + ]); + + $result = SpeedtestHelper::testIsLowerThanThreshold('percentage', $test); + + $this->assertEquals([], $result); + } + + private function createAverageOf5() + { + for($i = 0; $i < 5; $i++) { + Speedtest::create([ + 'download' => 5, + 'upload' => 5, + 'ping' => 5 + ]); + } + } +} diff --git a/conf/site/tests/Unit/Helpers/SpeedtestHelper/SpeedtestTest.php b/conf/site/tests/Unit/Helpers/SpeedtestHelper/SpeedtestTest.php new file mode 100644 index 00000000..8ec152e9 --- /dev/null +++ b/conf/site/tests/Unit/Helpers/SpeedtestHelper/SpeedtestTest.php @@ -0,0 +1,76 @@ +output = SpeedtestHelper::output(); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testOutputFunction() + { + $this->assertJson($this->output); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testRunSpeedtestWithExistingOutput() + { + $output = json_decode($this->output, true); + + $test = SpeedtestHelper::runSpeedtest($this->output); + + $this->assertEquals($output['ping']['latency'], $test->ping); + $this->assertEquals(SpeedtestHelper::convert($output['download']['bandwidth']), $test->download); + $this->assertEquals(SpeedtestHelper::convert($output['upload']['bandwidth']), $test->upload); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testInvaidJson() + { + $json = '{hi: hi}'; + + $o = SpeedtestHelper::runSpeedtest($json); + + $this->assertFalse($o); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testIncompleteJson() + { + $json = '{"hi": "hi"}'; + + $o = SpeedtestHelper::runSpeedtest($json); + + $this->assertFalse($o); + } +} diff --git a/conf/site/tests/Unit/Listeners/SpeedtestCompleteListener/SlackTest.php b/conf/site/tests/Unit/Listeners/SpeedtestCompleteListener/SlackTest.php new file mode 100644 index 00000000..65708a8e --- /dev/null +++ b/conf/site/tests/Unit/Listeners/SpeedtestCompleteListener/SlackTest.php @@ -0,0 +1,127 @@ + 5, 'upload' => 5, 'ping' => 5 ]); + + $event = new stdClass(); + $event->speedtest = $test; + + try { + $l->handle($event); + } catch(Exception $e) { + $this->assertTrue(false); + return false; + } + + $this->assertTrue(true); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testInvalidSlackWebhook() + { + SettingsHelper::set('speedtest_notifications', true); + SettingsHelper::set('slack_webhook', 'invalid'); + + $l = new SpeedtestCompleteListener(); + $test = Speedtest::create([ 'download' => 5, 'upload' => 5, 'ping' => 5 ]); + + $event = new stdClass(); + $event->speedtest = $test; + + try { + $l->handle($event); + } catch(Exception $e) { + $this->assertTrue(false); + return false; + } + + $this->assertTrue(true); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testSlackPercentageThresholdNotification() + { + SettingsHelper::set('speedtest_notifications', false); + SettingsHelper::set('slack_webhook', env('SLACK_WEBHOOK')); + SettingsHelper::set('threshold_alert_percentage_notifications', 1); + Speedtest::create([ 'download' => 50, 'upload' => 50, 'ping' => 1 ]); + + $l = new SpeedtestCompleteListener(); + $test = Speedtest::create([ 'download' => 5, 'upload' => 5, 'ping' => 5 ]); + + $event = new stdClass(); + $event->speedtest = $test; + + try { + $l->handle($event); + } catch(Exception $e) { + $this->assertTrue(false); + return false; + } + + $this->assertTrue(true); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testSlackAbsoluteThresholdNotification() + { + SettingsHelper::set('speedtest_notifications', false); + SettingsHelper::set('slack_webhook', env('SLACK_WEBHOOK')); + SettingsHelper::set('threshold_alert_absolute_notifications', 1); + SettingsHelper::set('threshold_alert_absolute_download', 50); + SettingsHelper::set('threshold_alert_absolute_upload', 50); + SettingsHelper::set('threshold_alert_absolute_ping', 1); + + + $l = new SpeedtestCompleteListener(); + $test = Speedtest::create([ 'download' => 5, 'upload' => 5, 'ping' => 5 ]); + + $event = new stdClass(); + $event->speedtest = $test; + + try { + $l->handle($event); + } catch(Exception $e) { + $this->assertTrue(false); + return false; + } + + $this->assertTrue(true); + } +} diff --git a/conf/site/tests/Unit/Listeners/SpeedtestCompleteListener/TelegramTest.php b/conf/site/tests/Unit/Listeners/SpeedtestCompleteListener/TelegramTest.php new file mode 100644 index 00000000..8c37051b --- /dev/null +++ b/conf/site/tests/Unit/Listeners/SpeedtestCompleteListener/TelegramTest.php @@ -0,0 +1,107 @@ + 5, 'upload' => 5, 'ping' => 5 ]); + + $event = new stdClass(); + $event->speedtest = $test; + + try { + $l->handle($event); + } catch(Exception $e) { + $this->assertTrue(false); + return false; + } + + $this->assertTrue(true); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testTelegramPercentageThresholdNotification() + { + SettingsHelper::set('speedtest_notifications', false); + SettingsHelper::set('telegram_bot_token', env('TELEGRAM_BOT_TOKEN')); + SettingsHelper::set('telegram_chat_id', env('TELEGRAM_CHAT_ID')); + SettingsHelper::set('slack_webhook', false); + SettingsHelper::set('threshold_alert_percentage_notifications', 1); + Speedtest::create([ 'download' => 50, 'upload' => 50, 'ping' => 1 ]); + + $l = new SpeedtestCompleteListener(); + $test = Speedtest::create([ 'download' => 5, 'upload' => 5, 'ping' => 5 ]); + + $event = new stdClass(); + $event->speedtest = $test; + + try { + $l->handle($event); + } catch(Exception $e) { + $this->assertTrue(false); + return false; + } + + $this->assertTrue(true); + } + + /** + * A basic unit test example. + * + * @return void + */ + public function testTelegramAbsoluteThresholdNotification() + { + SettingsHelper::set('speedtest_notifications', false); + SettingsHelper::set('telegram_bot_token', env('TELEGRAM_BOT_TOKEN')); + SettingsHelper::set('telegram_chat_id', env('TELEGRAM_CHAT_ID')); + SettingsHelper::set('slack_webhook', false); + SettingsHelper::set('threshold_alert_absolute_notifications', 1); + SettingsHelper::set('threshold_alert_absolute_download', 50); + SettingsHelper::set('threshold_alert_absolute_upload', 50); + SettingsHelper::set('threshold_alert_absolute_ping', 1); + + + $l = new SpeedtestCompleteListener(); + $test = Speedtest::create([ 'download' => 5, 'upload' => 5, 'ping' => 5 ]); + + $event = new stdClass(); + $event->speedtest = $test; + + try { + $l->handle($event); + } catch(Exception $e) { + $this->assertTrue(false); + return false; + } + + $this->assertTrue(true); + } +} diff --git a/conf/site/tests/Unit/Listeners/SpeedtestFailedListener/SlackTest.php b/conf/site/tests/Unit/Listeners/SpeedtestFailedListener/SlackTest.php new file mode 100644 index 00000000..fea50dc1 --- /dev/null +++ b/conf/site/tests/Unit/Listeners/SpeedtestFailedListener/SlackTest.php @@ -0,0 +1,42 @@ + 0, 'upload' => 0, 'ping' => 0, 'failed' => true ]); + + $event = new stdClass(); + $event->speedtest = $test; + + try { + $l->handle($event); + } catch(Exception $e) { + $this->assertTrue(false); + return false; + } + + $this->assertTrue(true); + } +} diff --git a/conf/site/tests/Unit/Listeners/SpeedtestFailedListener/TelegramTest.php b/conf/site/tests/Unit/Listeners/SpeedtestFailedListener/TelegramTest.php new file mode 100644 index 00000000..2e273738 --- /dev/null +++ b/conf/site/tests/Unit/Listeners/SpeedtestFailedListener/TelegramTest.php @@ -0,0 +1,44 @@ + 5, 'upload' => 5, 'ping' => 5, 'failed' => true ]); + + $event = new stdClass(); + $event->speedtest = $test; + + try { + $l->handle($event); + } catch(Exception $e) { + $this->assertTrue(false); + return false; + } + + $this->assertTrue(true); + } +} diff --git a/conf/site/tests/Unit/Listeners/SpeedtestOverviewListener/SlackTest.php b/conf/site/tests/Unit/Listeners/SpeedtestOverviewListener/SlackTest.php new file mode 100644 index 00000000..8e471aa0 --- /dev/null +++ b/conf/site/tests/Unit/Listeners/SpeedtestOverviewListener/SlackTest.php @@ -0,0 +1,40 @@ +handle($event); + } catch(Exception $e) { + $this->assertTrue(false); + return false; + } + + $this->assertTrue(true); + } +} diff --git a/conf/site/tests/Unit/Listeners/SpeedtestOverviewListener/TelegramTest.php b/conf/site/tests/Unit/Listeners/SpeedtestOverviewListener/TelegramTest.php new file mode 100644 index 00000000..fb841e03 --- /dev/null +++ b/conf/site/tests/Unit/Listeners/SpeedtestOverviewListener/TelegramTest.php @@ -0,0 +1,44 @@ + 5, 'upload' => 5, 'ping' => 5, 'failed' => true ]); + + $event = new stdClass(); + $event->speedtest = $test; + + try { + $l->handle($event); + } catch(Exception $e) { + $this->assertTrue(false); + return false; + } + + $this->assertTrue(true); + } +} diff --git a/conf/site/tests/Unit/Listeners/TestNotificationListener/SlackTest.php b/conf/site/tests/Unit/Listeners/TestNotificationListener/SlackTest.php new file mode 100644 index 00000000..08527b1c --- /dev/null +++ b/conf/site/tests/Unit/Listeners/TestNotificationListener/SlackTest.php @@ -0,0 +1,39 @@ +agents = [ 'slack' ]; + + try { + $l->handle($event); + } catch(Exception $e) { + $this->assertTrue(false); + return false; + } + + $this->assertTrue(true); + } +} diff --git a/conf/site/tests/Unit/Listeners/TestNotificationListener/TelegramTest.php b/conf/site/tests/Unit/Listeners/TestNotificationListener/TelegramTest.php new file mode 100644 index 00000000..27b94c60 --- /dev/null +++ b/conf/site/tests/Unit/Listeners/TestNotificationListener/TelegramTest.php @@ -0,0 +1,41 @@ +agents = [ 'telegram' ]; + + try { + $l->handle($event); + } catch(Exception $e) { + $this->assertTrue(false); + return false; + } + + $this->assertTrue(true); + } +}