Access Hub Collector
Đồng bộ từ mã nguồn lúc 10:57, 03/10/2026
Skip to content

Chiến lược kiểm thử ​

7 phút đọcCập nhật 02/10/2026access-hub-collector, docs/12-testing.md

1. Nguyên tắc ​

  • Kim tự tháp: nhiều kiểm thử đơn vị nhanh, ít hơn kiểm thử tích hợp, vài kịch bản end-to-end và tải.
  • Mọi lỗi tìm thấy ở môi trường thật phải có kiểm thử tái hiện trước khi sửa.
  • Kiểm thử cô lập tenant và bảo mật là bắt buộc, không phải tùy chọn (NFR-12).
  • Kiểm thử phải chạy được cục bộ chỉ với Docker (Redis, VictoriaMetrics) và mock Access Hub.

2. Các tầng kiểm thử của Collector ​

TầngCông cụNội dung
Đơn vịgo test -raceGiải mã và kiểm tra payload, giới hạn, đặt nhãn, băm token, backoff, máy trạng thái cảnh báo, gom nhóm, chọn nguồn rollup
Bảng quyết định cảnh báoBảng test (table-driven)Các đường vào PENDING, đủ for, hysteresis, no_data, flapping, silence, bảo trì
Phát lại xác địnhTệp chuỗi mẫu ghi sẵnCùng chuỗi mẫu cho ra cùng chuỗi sự kiện, kể cả sau khởi động lại giữa chừng
Tích hợptestcontainersRedis thật, VictoriaMetrics thật, bus in-process và JetStream (GĐ 3), luồng enroll đến ghi TSDB đến truy vấn
Hợp đồng với Access HubOpenAPI + mẫu tests/ApiSamplesCollector gọi mock sinh từ OpenAPI của Access Hub. Bản chạy hằng đêm gọi Access Hub thật ở môi trường thử. Ngược lại phía Access Hub có kiểm thử dùng mẫu payload collector thật
Giao thứcbuf breaking, golden protobufKhông phá vỡ tương thích, tệp golden cho mỗi phiên bản giao thức
Fuzzgo test -fuzz, make fuzz (FUZZTIME, mặc định 30s mỗi đích), CI chạy 20s mỗi đíchĐã có (COL-12): FuzzMetricsEndpoint (thân bất kỳ với mọi Content-Encoding, kể cả zip bomb: chỉ 200, 400, 413, 503; lô lên bus luôn mang danh tính của token, tên trong catalog, nhãn hợp lệ, giá trị tối đa 128 byte UTF-8), FuzzValidator (chấp nhận cộng bỏ bằng tổng điểm), FuzzCompile (JSON luật bất kỳ từ Access Hub), FuzzSeriesQuery (query string bất kỳ của API series: chỉ 200 hoặc 400, công ty khác không đọc được dữ liệu), internal/checks:FuzzCompile (JSON check bất kỳ từ Access Hub: không panic, không bao giờ cho URL có thông tin đăng nhập, cổng ngoài miền, hoặc trường sai loại, COL-20)
Bảo mậtBộ kiểm thử riêngHai tenant (đọc, ghi, truy vấn, purge chéo), token thu hồi, token hết hạn, nhãn giả mạo, giới hạn tốc độ, redaction log, admin token. Ma trận hai tenant (COL-12) ở internal/app/tenant_test.go: TestTwoTenantIsolationThroughIngestAndAdminAPI, TestTenantMatrixCrossCompanyCallsSeeNothing (mọi đường admin gọi chéo công ty, kiểm kê mang danh tính token), TestPurgeDropsSamplesInFlightAndForgetsAlerts, TestSeriesHonoursPlanRetentionPerCompany, TestCentralChecksReachOnlyTheirOwnCompany (cùng id máy ở hai công ty, check chỉ tới đúng công ty, tắt và xóa check đổi ETag, COL-20), TestCentralChecksAreServedFromTheSnapshotWhileTheHubIsDown; luật, silence, nhóm có kiểm thử hai tenant trong gói riêng (TestTenantIsolation, TestForgetTenantDropsGroupsOfThePurgedCompanyOnly, ...)
Retention (Q17)Đơn vị, tích hợp với VictoriaMetrics thậtinternal/retention (chính sách, ân hạn, janitor, lưới an toàn, hai tenant), TestRetentionJanitorPerCompany, TestSeriesDuringRetentionGraceReadsThePreviousRetention, TestSamplesOlderThanTheCompanyFloorAreNeverWritten, deploy/dev/vmcheck (TestVictoriaMetricsRetention, đo TestBenchRetention)
TảiagentsimXem mục 4
Hỗn loạnagentsim + công cụ ngắt (toxiproxy)Mất Redis, TSDB, Access Hub, node ingest, độ trễ mạng, mất gói

3. Kiểm thử cho Access Hub (theo quy ước dự án) ​

  • Pest, chạy php artisan test --compact với bộ lọc, chạy toàn bộ suite trước khi báo xong (lưu ý bài học về helper toàn cục Pest).
  • Mỗi endpoint mới có kiểm thử: quyền, cô lập công ty (CompanyScope), xác thực đầu vào, đường thành công, idempotency (events), phân trang since.
  • Kịch bản mẫu tests/ApiSamples/NN_monitoring.php để sinh ví dụ chạy thật cho trang /docs/api-endpoints, API_SAMPLES_WRITE=1 để làm mới.
  • Kiểm thử job purge, dọn dẹp, thông báo, và queue:restart sau khi sửa job.
  • PHPStan và Pint, ESLint, vue-tsc cho các trang giao diện.
  • Kiểm thử thực tế trình duyệt cho các trang mới (Tổng quan, Agents, Luật, tab sức khỏe), gồm trạng thái "Không có dữ liệu" khi collector không sẵn sàng.

4. Kiểm thử tải với agentsim ​

Công cụ nằm trong repo collector (cmd/agentsim, đã có từ 02/10/2026). Mô phỏng N agent với hành vi thật: enroll một lần (License sim-license-NNNNN do mockhub -sim-licenses N đăng ký), gửi metrics theo chu kỳ với pha xác định, tôn trọng Retry-After, backoff khi 5xx, in báo cáo JSON (độ trễ p50 đến p99, mã trạng thái, mẫu nhận và bỏ). Chưa có: gọi config định kỳ, mô phỏng lỗi mạng. Chỉ chạy vào collector dùng mockhub. Kết quả lưu ở docs/perf/.

Kịch bảnMô tảTiêu chí đạt
Tăng bậc1k, 5k, 10k, 20k agentp99 ingest dưới 250 ms ở 10k trên 3 node 4 vCPU (NFR-01), không mất mẫu đã ack
Soak 24 giờ10k agentKhông rò rỉ bộ nhớ, độ sâu bus và outbox ổn định
Khởi động đồng loạtTất cả agent bật cùng lúcHệ thống hấp thụ nhờ jitter, không sập, không alert giả nhờ ân hạn
Mất RedisTắt Redis 10 phútIngest tiếp tục, agent_down tạm dừng, phục hồi không bão alert
Mất TSDBTắt TSDB 30 phút (GĐ 1 kiểm 5 phút)Bus giữ (GĐ 3: 2 giờ), ghi bù đủ khi hồi phục
Mất Access HubTắt 1 giờIngest chạy bằng cache, outbox giữ, giao lại đầy đủ và đúng thứ tự khi hồi phục
Thu hồi hàng loạtThu hồi 1.000 agentHiệu lực trong 60 giây (FR-03)
Bão thử lạiCho 5% agent gửi lỗi liên tụcBackoff hoạt động, không tăng tải
CardinalityMột nhóm agent gửi nhãn lạBị bỏ, không tăng series tổng, có cảnh báo
Sự cố diện rộng500 agent cùng mấtĐúng một sự kiện group_down

Kết quả từng lần chạy lưu vào docs/perf/ (thiết bị, số liệu, kết luận) và cập nhật bảng cỡ tải ở 08.

5. Môi trường kiểm thử ​

Môi trườngMục đích
Cục bộ (Docker Compose)Phát triển hằng ngày, kiểm thử tích hợp
CIKiểm thử đơn vị, tích hợp, hợp đồng, bảo mật, fuzz ngắn
Thử nghiệm (staging)Access Hub thật + collector + máy ảo thật: Ubuntu 20.04/22.04/24.04, Debian 10/11/12, Rocky 8/9, CentOS 7, Amazon Linux 2, Windows 10, 11, Server 2016/2019/2022
Hằng đêmTải rút gọn (1k agent), fuzz dài, quét phụ thuộc

6. Kiểm thử chấp nhận cho từng giai đoạn ​

Giai đoạnKịch bản chấp nhận
1Cài agent trên máy Ubuntu bằng lệnh sinh từ giao diện, sau 1 phút thấy máy online, ngắt mạng 10 phút rồi nối lại thì dữ liệu bù, tắt agent thì trong 2 phút có alert agent.down đến chuông và email, thu hồi agent thì bị từ chối trong 60 giây
2Cài MSI im lặng trên Windows Server, biểu đồ CPU và đĩa đúng so với công cụ hệ điều hành, luật đĩa 90% mở và đóng đúng, purge công ty xóa hết dữ liệu, 5k agent đạt tiêu chí
3Rút một node ingest giữa tải không mất mẫu, cập nhật agent theo đợt 5% rồi 100%, quay lui tự động khi bản mới lỗi, chuyển agent sang collector khác không cần cài lại

7. Chất lượng mã ​

  • gofmt, go vet, staticcheck, golangci-lint, govulncheck.
  • Độ phủ mục tiêu: 80% cho các gói lõi (alert, ingest, registry, protocol), không đặt mục tiêu máy móc cho phần còn lại.
  • Rà soát mã bắt buộc, hai người duyệt cho thay đổi bảo mật, giao thức, khóa ký.
Trang này có giúp được bạn không?
Sửa trang này

Nội dung đồng bộ từ kho mã access-hub-collector lúc 10:57, 03/10/2026. Khi tài liệu và mã khác nhau, mã thắng.