Wpis z mikrobloga

Siema murki. Mam problem z #php #symfony #devops. Chodzi o uruchamianie testów. Skorzystałem z gotowego dockera od dunglasa https://github.com/dunglas/symfony-docker

Uruchamiam projekt

docker-compose up -d
uruchamiana jest migracja i tworzona baza danych "app". Wszystko jest ok jeśli używam np. postmana. Ale wolę napisać testy żeby nie testować ręcznie.

Użyłem behat (test rejestracji użytkownika), odpalam komendą:

docker compose exec php vendor/bin/behat
i dostaję to:

[critical] Uncaught PHP Exception Doctrine\DBAL\Exception\ConnectionException: "An exception occurred in the driver: SQLSTATE[HY000] [1044] Access denied for user 'app'@'%' to database 'app_test'" at /srv/app/vendor/doctrine/dbal/src/Driver/API/MySQL/ExceptionConverter.php line 101
Jak widać, kod próbuje użyć bazy danych "apptest" - co jest ok bo nie chcę testować na "produkcyjnej" (app) bazie danych. Pytanie tylko jak to ograć, jak stworzyć bazę pod testy podczas uruchamiania?

Próbowałem

docker-compose exec php bin/console --env=test doctrine:database:create
ale dostaje:

Could not create database apptest for connection named default
An exception occurred while executing a query: SQLSTATE[42000]: Syntax error or access violation: 1044 Access denied for user 'app'@'%' to database 'app_test'

Macie jakieś hinty? Co robię źle?

https://pastebin.com/0E4cpk3Q - docker-compose.yml
https://pastebin.com/SvjEgcgz - docker-compose.prod.yml
https://pastebin.com/nF5VBjBH - docker-compose.override.yml
https://pastebin.com/vi1LQQb4 - docker-compose.dev.yml

Dodam, że chcę później te testy odpalać np. w github actions czy innym CI/CD.

A może macie jakieś hinty związane z testowaniem, stawianiem środowiska pod to itd.
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@mirunek: nie wiem :P Spróbuj uruchomić testy na bazie 'app'

Kiedyś chyba miałem ten sam problem i go nie rozwiązałem. Po prostu uruchamiałem testy na głównej bazie i za każdym razem przed uruchomieniem testów dump'owałem bazę. Jeśli znalazłbyś przyczynę/rozwiązanie to daj znać :)
  • Odpowiedz
@mirunek: A gdzie masz zdefiniowaną bazę danych apptest? Widzę że masz jedną bazę danych, więc przy okazji testów masz bazę danych "app", czy "apptest", czy może obie?

Moje rozwiązanie to dodatkowa baza
  • Odpowiedz
@mirunek: Jak masz kontener z pustą bazą, wystawioną na 3307 dla Twojej maszyny, to ja bym sprawdzał czy mogę się zalogować i wykonać ręcznie migracje (tworzyć tabele itd.).
Jak Ci się uda to wszystko zrobić a skryptowi nie, sprawdzasz czy skrypt na pewno używa tych samych danych do logowania.
Ewentualnie kwestia potwierdzenia, że w MySQL masz użytkownika app do bazy app_test z dostępem z odpowiednich hostów (najlepiej wildcard %).
Możesz też dać migrację
  • Odpowiedz