1. Главная

Ускоряем время в docker на примере docksal

Главные вкладки

ivnish 24 августа 2022 в 15:26
5

Возникла задача с тестированием модуля подписок для drupal commerce. Модуль подписок должен отменять подписку при невозможности списания денег с карты подписчика. Но проблема в том, что после неудачного списания должно пройти 24 часа, прежде чем подписка будет отменена. После недели обычного тестирования я понял, что пора брать управление временем в свои руки.

Существует библиотека libfaketime, которая позволяет обманывать приложения, подсовывая им указанное вами время.

Чтобы использовать её в проекте docksal нужно:

1) Создать в папке проекта .docksal/services/cli/ файл Dockerfile

FROM docksal/cli:php7.4-3.1

RUN git clone https://github.com/wolfcw/libfaketime && cd libfaketime && make && make install

после FROM нужно указать образ от которого вы будете наследоваться

2) В файл docksal.yml нужно дописать


cli:
image: ${COMPOSE_PROJECT_NAME_SAFE}_cli
build: services/cli
environment:
- LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1
- FAKETIME=@2022-08-20 10:00:01

где в FAKETIME можно писать нужное время. Если убрать символ @ то время не будет идти, а замрет на указанном значении

3) Запускаем/перезапускаем проект fin p start и проверяем время, например вызовом

<?php
echo date("Y-m-d H:i:s");
?>

Авторы

ivnish Drupal FullStack Developer
Логотип drupal.ru

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Документация по совместной работе с репозиторием drupal.ru – https://docs.drupal.ru/code

Drupal – торговая марка Дриса Бёйтарта

12+

AltStyle によって変換されたページ (->オリジナル) /