appkr / timemachine
Laravel/Lumen application-level time setter for testing
Requires
- php: >=7.0.0
- illuminate/support: ^5.0,<5.6
Requires (Dev)
- laravel/laravel: ^5.0,<5.6
- mockery/mockery: 0.9.*
- phpunit/phpunit: 4.*|5.*|6.*
This package is not auto-updated.
Last update: 2024-11-09 00:41:47 UTC
README
Timemachine
Manipulates application(Laravel/Lumen) server's time arbitrarily for a given minutes.
CAVEAT
USE THIS ONLY FOR TEST PURPOSE. DO NOT MAKE THIS AVAILABLE IN PUBLICLY ACCESSIBLE SERVICES.
- Provided apis are not protected by authz.
- While setting is alive, it affects all time related functions of the application. e.g.
created_at
written in the DB tables.
1. Install
Pull the library to your project.
composer install appkr/timemachine
Append service provider in the providers array.
<?php // config/app.php (Laravel) return [ 'providers' => [ Appkr\Timemachine\TimemachineServiceProvider::class, ], ]; // boostrap/app.php (Lumen) $app->register(Appkr\Timemachine\TimemachineServiceProvider::class);
Optionally publish config.
php artisan vendor:publish --provider="Appkr\Timemachine\TimemachineServiceProvider"
2. How to use
There are three APIs. For conveniences, a Postman collection is provided.
2.1. GET /timemachine
Returns time diff from current server time when target_server_time
parameter is given. Or print current server time when nothing is given.
GET /timemachine Accept: application/json Content-Type: application/json
HTTP/1.1 200 OK Content-Type: application/json Date: Thu, 01 Jun 2017 12:00:00 +0900 { "current_server_time": "2017-06-01T12:00:00+0900", "target_server_time": "2017-06-01T12:05:00+0900", "add_days": 0, "add_minutes": 5, "sub_days": null, "sub_minutes": null }
2.2. PUT /timemachine
Manipulates server's time for the given ttl.
PUT /timemachine Accept: application/json Content-Type: application/json { "add_minutes": 5, "ttl": 5 }
HTTP/1.1 200 OK Content-Type: application/json Date: Thu, 01 Jun 2017 12:00:00 +0900 { "current_server_time": "2017-06-01T12:00:00+0900", "message": "Success. The settings will be effective from next request on for 5 minutes." }
2.3. DELETE /timemachine
Removes time setting and restore back to the machine time.
DELETE /timemachine Accept: application/json Content-Type: application/json
HTTP/1.1 200 OK Content-Type: application/json Date: Thu, 01 Jun 2017 12:00:00 +0900 { "current_server_time": "2017-06-01T12:00:00+0900", "message": "Success. Settings removed." }
3. Sponsors
This library is a by-product of a company project. Thanks MeshKorea.
Open source version was created using IntelliJ IDE sponsored by JetBrains.
4. Note on HTTP Date response header
In Nginx, Date
header can be settable from application side. So the following was possible:
<?php header('Date: ' . Carbon\Carbon::now()->addMinutes(5)->toRfc2822String()); echo $httpResponseBody;
While in Apache, it is not doable. https://laracasts.com/discuss/channels/servers/how-can-i-override-http-date-response-header-under-apache24