Модульные тесты Django не проходят через сокет домена - PullRequest
0 голосов
/ 08 октября 2019

У меня Django настроен на использование базы данных с одноранговой аутентификацией через локальный сокет домена Unix вместо аутентификации пользователя / пароля. Вот настройки. Базы данных:

{'default': {'ENGINE': 'django.db.backends.postgresql',
             'NAME': 'mcps',
             'PORT': 5433,
             'TEST': {'ENGINE': 'django.db.backends.postgresql',
                      'NAME': 'mytestdb',
                      'PORT': 5433,
                      'USER': 'mcp'},
             'USER': 'mcp'}
}

Порт настроен правильно, само приложение не имеет проблем с корректной работой.

Тем не менее, когда я пытаюсь запустить pytest, с переменной окружения DJANGO_SETTINGS_MODULEПри заданных выше настройках создается база данных с правильным владельцем «mcp», но перед созданием таблиц я получаю сообщение об ошибке:

django.db.utils.OperationalError: FATAL:  Peer authentication failed for user "mcp"

Что юнит-тесты делают по-разному, и как я могу это исправитьпожалуйста

1 Ответ

0 голосов
/ 10 октября 2019

@ Nader Alexan Нет хоста для установки, связь идет через сокет локального домена Unix. Я попытался добавить

'HOST': '/run/postgresql'

, как я должен был сделать в pgAdmin, но это не решило проблему.

Оказывается, что pytest также пытается получить доступ к базе данных с именем 'postgres'даже если для базы данных обслуживания задано значение template1. Я не смог определить почему, но добавление доступа к этой базе данных явно в pg_hba.conf позволило мне запустить тесты.

Извините, если это объяснение немного шатко, я новичок в формахСама аутентификация PG, отличная от имени пользователя / пароля.

...