Identica
Живые тесты

Живые тесты

Запуск и написание прохождений игрока для собранного плагина на настоящем прокси.

Модуль identica-testing запускает собранный плагин и провайдеры на настоящем прокси Velocity или BungeeCord с бэкенд-серверами Paper и проводит через них симулированных игроков с помощью Anvil. Модульные тесты остаются в своих модулях, а эти тесты проверяют то, что видит игрок при входе на сервер.

Запуск тестов

Запускайте из корня репозитория; на машине должна быть установлена Java 21:

./gradlew :identica-testing:anvil

Задача запускает все наборы. Она собирает jar-файлы плагина и провайдеров, при первом запуске скачивает дистрибутивы прокси и серверов и для каждого теста поднимает новый прокси. Первый запуск занимает несколько минут; последующие используют уже скачанные файлы и собственные библиотеки Identica. ./gradlew test и pluginJars эти тесты не запускают.

Серверы auth и lobby не входят в то, что проверяет тест, поэтому они запускаются один раз и обслуживают тесты один за другим; новыми в каждом тесте оказываются только прокси — вместе с плагином, своими файлами и своей базой данных. Упавший тест останавливает использованные им серверы и сохраняет их папки рядом со своей, а следующий тест запускает новые.

Несколько тестов выполняются одновременно, каждый в своей сети: по одному на каждые четыре процессора машины, но не больше четырёх. Другое число задаётся через -Pidentica.journeys.parallelism=1. Процессы серверов и прокси работают с пониженным приоритетом, и каждый из них рассчитывает на четыре процессора, так что во время прогона машиной можно продолжать пользоваться.

Наборы

Прохождения разделены на наборы. Каждый набор — это тег JUnit на тестовых классах его пакетов, и у каждого есть своя задача:

НаборЗадачаПакетыЧто проверяет
joinanvilJoinTestjoin, entrypoint, routing, restrictionвход игрока: регистрация, вход в аккаунт, определение премиум-аккаунта, хосты и цели маршрутизации
accountanvilAccountTestcredential, verification, recognition, securityуже созданный аккаунт: смена пароля, двухфакторная проверка, узнанные сессии, защита от злоупотреблений
identityanvilIdentityTestusername, identityники и их конфликты, уникальные идентификаторы, резервирования
operationsanvilOperationsTestadministration, migration, startup, database, exampleперезагрузка, миграции, запуск, бэкенды баз данных, примеры
clusteranvilClusterTestclusterдва прокси с общей базой данных; нужен Docker
upgradeanvilUpgradeTestupgradeзапуск на том, что оставила более ранняя версия Identica
platformanvilPlatformTestplatformпрокси, отличные от Velocity: вход через BungeeCord

./gradlew :identica-testing:anvil запускает все наборы. Pull request'ы запускают все наборы, кроме upgrade, каждый в отдельном job; релизы запускают и upgrade.

Чтобы запустить один пакет, класс или тест набора, используйте --tests:

./gradlew :identica-testing:anvilJoinTest --tests 'me.whereareiam.identica.testing.routing.*'
./gradlew :identica-testing:anvilJoinTest --tests '*CredentialFirstJoinTest'

Новый тестовый класс получает тег набора своего пакета, например @Tag("join"); @IdenticaCluster сам несёт тег cluster. Наборы перечислены в journeySuites сборки модуля. anvilTest запускает то, что не забрал ни один набор, — только JourneySuitesTest: он падает, если прохождение не входит ни в один набор или входит больше чем в один.

Прохождения набора upgrade запускают прокси на том, что оставила более ранняя версия Identica, например на базе данных Identica 2.2.1. Такое прохождение размещает прежние файлы через ProxyConfiguration.seed. Базы данных берутся из EarlierInstallation в тестовых фикстурах владельца каждой схемы, а папки конфигурации — из EarlierConfiguration в тестовых фикстурах identica-common, где перечислены структуры 2.2.1 и сборок для разработки. Прохождение, которое размещает папку конфигурации, исключает документы, которые тестовая сеть иначе записала бы в структуре этой версии.

anvilScenarios перечисляет сценарии, anvilRun --scenario=<name> запускает один из них, чтобы осмотреться, а anvilLogin --account=<id> и anvilLogout --account=<id> управляют аккаунтами, под которыми входит Anvil.

Если тест падает, его сеть сохраняется в identica-testing/build/anvil/<scenario>/<run>/. В папке каждого процесса лежит anvil-console.log, а отладочное логирование Identica включено в каждой тестовой сети.

Дальнейшие шаги

  • Написание прохождений: как объявить сеть, описать игрока и проверить, что он видит
  • Сети: прохождения через несколько прокси и на BungeeCord

На этой странице