Тестване
| Вид | Команда | Бележки |
|---|---|---|
| Модулни | make test (Go хранилища), pnpm test (приложения, entrosity-ui) | Бързи; без Docker. |
| Интеграционни | make test-integration (бекенди) | //go:build integration; testcontainers за Postgres, MinIO и Samba AD. Базата данни се мигрира веднъж за всеки пакет; където е възможно, тестовете се изпълняват в транзакции, които се връщат назад (rollback). |
| LDAP | make test-ldap (entrosity-axis-connector) | LDAPS, StartTLS, странициране, включване/изключване на OU, кодове на грешки срещу Samba. |
| Smoke тест на конектора | make smoke-connector (entrosity-infra) | Реален конектор + Samba + Entrosity Hub + бекенд: регистриране, тест на връзката, синхронизация, устройства само от AD, push, който достига до конектора. |
| От край до край | make e2e (entrosity-infra) | Двата комплекта Playwright тестове — на Axis (entrosity-axis.frontend/e2e/) и на Hub (entrosity-hub.frontend/e2e/) — срещу един временен стек от Entrosity Hub и Axis. |
| Windows | CI (ci.yml на агента и конектора, integration.yml на entrosity-infra) | Тестове с //go:build windows, инсталиране/деинсталиране на MSI, реален агент, който внедрява 7-Zip. |
Тестове за контрол на достъпа
- Всеки маршрут на портала има запис в
entrosity-axis.backend/internal/http/portal/access.go.TestEveryRouteHasAccessRuleсе проваля за маршрут без такъв запис, а некласифицираните маршрути се отказват по време на работа. entrosity-axis.backend/internal/http/rbac_matrix_test.goе таблица с всеки маршрут × извикващ (анонимен, глобален администратор, администратор на тенанта, техник, наблюдател, администратор на друг тенант). Добавяйте ред всеки път, когато добавяте маршрут; тестът се проваля, ако даден маршрут няма ред.- Fuzz тест за оторизация покрива 82 случая между различни тенанти.
- Матрицата и fuzz тестът извикват Axis с продуктови токени, подписани от фалшивия Hub на тестовата среда, както в продукция.
- Entrosity Hub има собствена матрица,
entrosity-hub.backend/internal/http/rbac_matrix_integration_test.go: всеки маршрут × анонимен, администратор на платформата, администратор на организация, член и администратор на друга организация (маршрутите на организацията отговарят с 404 на външни лица). Правилата се намират вentrosity-hub.backend/internal/http/api/access.go.
Помощни средства за интеграционните тестове
testutil.NewServer(t, pg) изгражда реалното приложение (internal/app)
със свързването от продукцията зад фалшив Entrosity Hub и прихваща
имейлите в srv.Mail:
srv.Platformподписва продуктови токени и step-up токени с ключ, на който сървърът има доверие, аsrv.PlatformData.Setпубликува моментна снимка на правата за достъп заsrv.App.PlatformSync.Sync. Помощните функции за начални данни вseed.go(CreateTenant,CreateUser,AddMembership) записват потребители, тенанти и роли така, както би го направила синхронизацията, аsrv.Login(email, …)връща продуктов токен за създаден потребител.- Опции:
WithStorage,WithReleaseSigning,WithClock,WithMinAgentVersion,WithRemoteTiming,WithRemoteSweep. - Тестовата среда на Hub (
entrosity-hub.backend/internal/testutil) има същата форма:NewServer, клиенти, подобни на браузър, с хранилище за бисквитки (srv.NewClient().MustLogin(email)), прихваната поща, настройваем часовник и помощни функции за начални данни за потребители, организации и членства.
Без Docker
Насочете тестовете към съществуващ PostgreSQL 16 (URL на собственик или суперпотребител) и MinIO вместо към контейнери. Всеки тестов изпълним файл създава и изтрива собствена база данни; изпълнявайте пакетите един по един:
TEST_POSTGRES_URL='postgres://postgres:secret@localhost:5432/postgres?sslmode=disable' \
TEST_MINIO_URL='http://minioadmin:[email protected]:9000' \
go test -p 1 -tags integration ./... # in entrosity-axis.backend or entrosity-hub.backend
Bucket-ите на външен MinIO се изпразват веднъж за всеки тестов изпълним файл.
Спецификации от край до край
| Спецификация | Покрива |
|---|---|
phase1.spec.ts | Администратор на платформата създава организации с Axis в Hub; администраторът на тенанта, въведен там, е ограничен до своя тенант в Axis. |
phase2.spec.ts | Създава токен за регистриране в UI, стартира rmm-simagent (изграден от entrosity-axis.backend) и следи устройствата на живо. |
phase3.spec.ts | Инсталира симулиран конектор, минава през AD съветника, синхронизира и изпълнява push с напредък на живо за всяка цел. |
phase4.spec.ts | Качва тестовия MSI, внедрява го в симулирани агенти и следи напредъка. |
phase5.spec.ts | Изпълнява параметризиран скрипт на три устройства с изход на живо; правило за малко свободно дисково пространство отваря аларми, които се потвърждават и се разрешават, когато правилото бъде облекчено. |
scripts/e2e.sh (make e2e) в entrosity-infra подготвя един стек и за
двата комплекта: Postgres, mailpit и MinIO (bucket rmm-e2e, опресняването
на winget е изключено); временни бази данни platform_e2e и rmm_e2e;
миграциите на Hub и първия администратор на платформата
(E2E_ADMIN_EMAIL, E2E_ADMIN_PASSWORD); API на Hub на :8092 (вътрешно на
:8093) и API на Axis на :8082, което се синхронизира от Hub на всеки 2 s.
Всеки комплект сам стартира двата Vite сървъра: Axis на :5177 и Hub на
:5176, който е произходът (origin) за браузъра (Hub на /, Axis на
/axis, както в продукция). Двата комплекта се изпълняват дори когато
първият се провали; журналите са dist/e2e-hub.log и dist/e2e-axis.log.
Споделените помощни функции в entrosity-axis.frontend/e2e/hub.ts влизат в
Hub и създават тенанти като организации в Hub. Аргументите се подават и на
двете изпълнения на playwright test.
| Спецификация на Hub | Покрива |
|---|---|
entrosity-hub.frontend/e2e/hub.spec.ts | Администратор на платформата създава организация с Axis и поканва нейния администратор (и отваря администрирането на Axis); администраторът създава акаунт от имейла, отваря Axis за организацията от списъка с продукти, установява, че страниците за потребителите сочат към Hub, и излиза в Axis, което прекратява сесията в Hub. |
Фокусирани комплекти тестове
- Механизъм за внедряване:
entrosity-axis.backend/internal/deploy/scheduler_integration_test.goсимулира парк от устройства в различни часови зони, прозорци за поддръжка, повторни опити и повторни свързвания;targets_integration_test.goпокрива определянето на целите. Тестовете за метаданни на MSI използватentrosity-axis.backend/internal/deploy/testdata/rmm-test.msi. - Агент:
entrosity-axis-agent/internal/testserverе фалшив бекенд (регистриране, WebSocket, HTTP резервни варианти) за тестване на пълния цикъл на агента. Парсерите на колекторите за Windows се тестват срещу записан изход от PowerShell вentrosity-axis-agent/internal/inventory/testdata/.GOOS=windows go vet ./agent/...проверява кода само за Windows на всяка ОС.