Преминете към основното съдържание

Тестване

ВидКомандаБележки
Модулниmake test (Go хранилища), pnpm test (приложения, entrosity-ui)Бързи; без Docker.
Интеграционниmake test-integration (бекенди)//go:build integration; testcontainers за Postgres, MinIO и Samba AD. Базата данни се мигрира веднъж за всеки пакет; където е възможно, тестовете се изпълняват в транзакции, които се връщат назад (rollback).
LDAPmake 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.
WindowsCI (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 на всяка ОС.