Перейти к содержанию

Регрессионный тест прав API для pull request в GitHub Actions

Регрессионный тест должен упасть, если убрать проверку владельца, и остаться зелёным, когда оба пользователя могут читать только свои записи. Проверьте сам тест на намеренно уязвимом варианте: это отличает защиту от всегда проходящего сценария.

Редакция Scantelio ·

Что подготовить

Сохраните authorization-contract.py и access-fixture.py рядом в каталоге ci/, скачайте workflow в .github/workflows/. Пример использует стандартную библиотеку Python и временный порт на loopback, без внешнего сервиса и токенов.

Порядок проверки

Сравните два варианта локально

В фиксированном режиме тест проверяет обе пары «владелец → свой документ» и оба перекрёстных запроса. В уязвимом режиме первый чужой маркер завершает тест с кодом 1. Ошибка загрузки стенда или неожиданное поведение дают код 2.

Перенесите контракт на собственное приложение

В job поднимите своё тестовое приложение, создайте две сессии штатным способом и замените адаптер чтения. Ожидаемый отказ должен соответствовать вашему API: например, согласованный 404 вместо 403. Не ослабляйте проверку содержимого.

Выполните из корня репозитория с файлами в ci/

python3 ci/authorization-contract.py --mode fixed
python3 ci/authorization-contract.py --mode vulnerable

Критерий результата и ограничения

Приложенный workflow проверяет именно код 1 для сломанного режима. Отсутствующий файл или упавший сервер не должны считаться успешно обнаруженной регрессией.

Что остаётся непроверенным

Пока тест вызывает только учебный сервер, зелёная job ничего не говорит о вашем продукте. После адаптации разделите тесты чтения, записи и экспорта.

Материалы и первоисточники

Скачать для своего проекта

Документация