🇬🇧 English | 🇺🇦 Українська
12. Тестування та локальний сервер¶
Локальний сервер, що йде з плагіном¶
У теці плагіна Server/nats/ лежить готовий набір файлів для Docker Compose — не потрібно
шукати образ і вигадувати конфігурацію самостійно.
Plugins/NatsClient/Server/nats/
├── docker-compose.yml
├── nats.conf ← активна конфігурація (порт 4222, JetStream увімкнено)
├── sample nats.conf ← приклад з автентифікацією та кластером, для довідки
├── start-nats.sh ← запуск на macOS/Linux
└── start-nats.ps1 ← запуск на Windows
Запуск:
cd Plugins/NatsClient/Server/nats
./start-nats.sh # macOS/Linux
# або
.\start-nats.ps1 # Windows (PowerShell)
Обидва скрипти — це просто docker-compose up -d; Docker має бути встановлений заздалегідь.
Сервер піднімається на 127.0.0.1:4222 — саме адреса й порт за замовчуванням у
Project Settings.
Активна конфігурація (nats.conf)¶
| Параметр | Значення |
|---|---|
| Клієнтський порт | 4222 |
| Порт моніторингу | 8222 |
| JetStream | Увімкнено, store_dir: /data (примонтовано як том Docker, дані переживають перезапуск контейнера) |
| Ліміт розміру повідомлення | 1MB (max_payload) |
| Автентифікація | Вимкнено (закоментована в файлі) |
Перевірка, що сервер живий¶
curl http://localhost:8222/varz | grep version
curl http://localhost:8222/jsz
Друга команда покаже статистику JetStream — якщо у відповіді є поле "streams", JetStream
точно увімкнено. Те саме, без термінала, — кнопка Test JetStream у
Project Settings.
Увімкнути автентифікацію локально¶
sample nats.conf — готовий приклад із трьома користувачами й правами доступу по
subject'ах (окремо для «гравця» й «сервера»), а також приклад секції кластера. Щоб
скористатися: скопіюйте потрібні секції в nats.conf (або підмініть файл цілком) і
перезапустіть контейнер:
docker-compose restart
Далі в грі — відповідні Auth Type/Username/Password у
3. Налаштуваннях.
Зупинка та очищення¶
docker-compose down # зупинити
docker-compose down -v # зупинити і стерти дані JetStream
Тестування власної інтеграції¶
Ручна перевірка з окремого термінала¶
Найшвидший спосіб переконатися, що дані на дроті саме такі, як очікуєте, — незалежний клієнт NATS CLI, що не залежить від Unreal чи від плагіна взагалі:
# В одному терміналі — слухати все
nats sub "game.events.>"
# В іншому — опублікувати вручну
nats pub game.events.test "перевірка зв'язку"
Якщо повідомлення з'явилося в підписці CLI, але не в грі — проблема на боці клієнта (subject, підписка, обробник). Якщо не з'явилося ніде — проблема в самій публікації чи в сервері.
Ізольований тестовий актор¶
Для перевірки конкретного сценарію зручно мати окремого, мінімального актора, не пов'язаного з рештою логіки гри, — підписатися, надрукувати все, що прийшло, і легко видалити після перевірки:
// Мінімальний тестовий актор
UCLASS()
class ANatsSmokeTestActor : public AActor
{
GENERATED_BODY()
protected:
virtual void BeginPlay() override
{
Super::BeginPlay();
UNatsClientSubsystem* Nats = GetGameInstance()->GetSubsystem<UNatsClientSubsystem>();
Nats->OnMessageReceived.AddDynamic(this, &ANatsSmokeTestActor::HandleMessage);
Nats->OnConnected.AddDynamic(this, &ANatsSmokeTestActor::HandleConnected);
Nats->ConnectToServer();
}
UFUNCTION()
void HandleConnected()
{
GetGameInstance()->GetSubsystem<UNatsClientSubsystem>()->Subscribe(TEXT(">"));
}
UFUNCTION()
void HandleMessage(const FNatsMessage& Message)
{
UE_LOG(LogTemp, Warning, TEXT("[NATS SMOKE TEST] %s: %s"), *Message.Subject, *Message.Data);
}
};
Підписка на голий > (усе, будь-якої глибини) — навмисно широка, лише для тимчасової
діагностики; для постійного коду завжди підписуйтесь на конкретний subject або вузький
шаблон.
Автоматизовані тести¶
Плагін постачається разом із власним набором автотестів на фреймворку Unreal Automation
(Plugins/NatsClient/Source/NatsClientTests/) — за тим самим принципом можна писати й
регресійні тести для власної інтеграції.
Запуск через редактор: Window → Test Automation (Session Frontend → вкладка
Automation), відфільтрувати за NatsClient, обрати потрібні тести, Start Tests.
Headless, з командного рядка:
UnrealEditor-Cmd "<шлях>/YourProject.uproject" \
-ExecCmds="Automation RunTests NatsClient" \
-TestExit="Automation Test Queue Empty" \
-unattended -nopause -nullrhi
Частина тестів (усе, що безпосередньо перевіряє розбір протоколу та збірку кадрів) не
потребує зовнішнього сервера. Тести, що перевіряють реальний обмін даними з JetStream,
підключаються до 127.0.0.1:4222 — перед запуском піднімайте локальний сервер, як описано
вище.
Далі: 13. Поширені запитання