Windows Native Service — Canlı E2E¶
Durum özeti
| Kanıt | Değer |
|---|---|
| IMPLEMENTED | YES |
| AUTOMATED TESTED | YES |
| LIVE E2E VALIDATED | YES |
Kanıt notu: Windows lab, Ağustos 2026. Bu sayfadaki PASS sonuçları o lab ortamında gerçekten çalıştırılmış ve başarılı kabul edilmiştir. Unit/script AUTOMATED PASS sonuçları canlı E2E yerine geçmez; burada listelenen maddeler canlıdır.
Operasyon referansı: Windows servis kurulumu, Güncelleme ve geri alma, Yükleyici doğrulama matrisi.
Canlı E2E sonuçları (45 PASS)¶
| # | Senaryo | Status | Notlar |
|---|---|---|---|
| 1 | Clean install | PASS | |
| 2 | Administrator validation | PASS | |
| 3 | Windows AMD64 validation | PASS | |
| 4 | Repository root detection | PASS | |
| 5 | .env detection/validation |
PASS | |
| 6 | Git prerequisite | PASS | |
| 7 | Go prerequisite | PASS | |
| 8 | MongoDB Windows service Running | PASS | MongoDB yükleyici tarafından kurulmaz |
| 9 | MongoDB TCP 27017 | PASS | |
| 10 | HTTP port availability | PASS | |
| 11 | go mod download / verify | PASS | |
| 12 | go vet | PASS | |
| 13 | go test ./... -count=1 | PASS | |
| 14 | Windows binary build | PASS | |
| 15 | Application check |
PASS | |
| 16 | Runtime backup | PASS | |
| 17 | Runtime binary deployment | PASS | |
| 18 | Runtime config deployment | PASS | |
| 19 | MongoDB migrations | PASS | Migration geri alınmaz |
| 20 | Native Windows Service registration | PASS | |
| 21 | Correct exe/argv ImagePath registration | PASS | |
| 22 | LocalService account | PASS | |
| 23 | Automatic Delayed Start | PASS | |
| 24 | MongoDB service dependency | PASS | |
| 25 | Recovery: 5s / 10s / 30s; reset 86400 | PASS | |
| 26 | Windows Firewall Domain/Private | PASS | |
| 27 | Service start | PASS | |
| 28 | health/live | PASS | |
| 29 | health/ready | PASS | |
| 30 | Deployment metadata | PASS | |
| 31 | Build metadata: version, commit, build UTC, Go version, OS, arch | PASS | |
| 32 | Windows reboot | PASS | Yeniden başlatma sonrası manuel Start-Service olmadan: MongoDB=Running, IQVIntegrationAPI=Running, Port=Listening, health/live=alive, health/ready=ready |
| 33 | NO-OP update | PASS | Aynı deployed/target commit: backup yok, build yok, migration yok, restart yok. Ölçüm: Before backups=2, After backups=2 |
| 34 | ForceRedeploy | PASS | Gerçek deployment; backup +1; servis yeniden başladı; health geçti |
| 35 | Runtime config preservation during update | PASS | SHA256 unchanged |
| 36 | Automatic update rollback | PASS | LAB-only TestFailAt=AfterBinarySwap: Service stopped → Binary swap → Injected failure → Automatic rollback → Binary restored → Config restored → Service automatically restarted → health/live OK → health/ready OK |
| 37 | Rollback process exit code | PASS | Failed deployment + successful rollback → Process ExitCode = 11 (EXIT_SERVICE_UPDATE). Rollback başarılı olsa bile update başarı çıkış kodu 0 dönmedi |
| 38 | Failed deployment metadata preservation | PASS | Başarısız deployment başarılı metadata olarak yazılmadı |
| 39 | status.ps1 | PASS | Service Running, Delayed Auto Start, LocalService, PID, Version, Commit, Port, MongoDB, health/live, health/ready, Firewall, recent error log; ExitCode = 0 |
| 40 | Safe uninstall | PASS | Service removed, Firewall removed, Port closed; Runtime/Binary/Config/Logs/Backups/Metadata preserved; MongoDB untouched |
| 41 | Preserved Runtime Reinstall | PASS | Scenario=PreservedRuntimeReinstall; Config Preserved=True, Copied=False; SHA256 before/after unchanged; Service yeniden kuruldu; Health geçti |
| 42 | ServiceRepair / install idempotency | PASS | Servis Running iken install.ps1 tekrar; Scenario=ServiceRepair; Port ownership: OwningProcess == Win32_Service.ProcessId; Own listener false conflict değil; Service stopped → Port released → Binary deployed → Config preserved → Existing service detected → Duplicate service yok → Firewall duplicate yok → Service yeniden başladı → Health geçti |
| 43 | Firewall idempotency | PASS | Before rules=1, After rules=1 |
| 44 | Config hash preservation ServiceRepair | PASS | Before SHA256 == After SHA256 |
| 45 | Step counter | PASS | Installer [1/29] … [29/29] tutarlı |
Issues Found During Validation¶
Windows lab E2E sırasında tespit edilip düzeltilen gerçek hatalar.
| ID | Problem | Detected | Fixed | Automated regression | Live E2E retest |
|---|---|---|---|---|---|
| A | Git tag olmayan repository: git describe fatal → PowerShell NativeCommandError. Çözüm: tag optional; dev-<sha> fallback |
Yes | Yes | Yes (GitMetadata.Tests.ps1) |
PASS |
| B | Windows ImagePath whole-command quoting: exe+args tek quote. Çözüm: exe ve argv ayrı CreateService parametreleri | Yes | Yes | Yes (imagepath_test.go / related) |
PASS |
| C | Runtime config self-copy: config\.env kendi üzerine Copy-Item. Çözüm: update config preserve + path equality protection |
Yes | Yes | Yes (Install/Update script tests) | PASS |
| D | Update failure sonrası service Stopped; transactional rollback yoktu. Çözüm: automatic rollback | Yes | Yes | Yes (UpdateRollback.Tests.ps1) |
PASS (TestFailAt) |
| E | Duplicate dirty warning. Çözüm: tek merkezi warning | Yes | Yes | Partial / script coverage | PASS |
| F | status.ps1 $PID: PowerShell built-in PID read-only. Çözüm: ServiceProcessId |
Yes | Yes | Yes (Status.Tests.ps1) |
PASS |
| G | Preserved-runtime reinstall ImagePath ERROR_INVALID_PARAMETER: CreateService sonrası redundant UpdateConfig. Çözüm: duplicate ImagePath mutation kaldırıldı |
Yes | Yes | Yes (Install.Tests.ps1) |
PASS |
| H | Reinstall config overwrite. Çözüm: preserve by default; -ReplaceRuntimeConfig explicit |
Yes | Yes | Yes (Install.Tests.ps1) |
PASS |
| I | ServiceRepair own-port false conflict: yalnız “port occupied”. Çözüm: SCM ProcessId == TCP OwningProcess | Yes | Yes | Yes (PortOwnership.Tests.ps1) |
PASS |
| J | Step counter mismatch. Çözüm: 29 Write-Step / 29 denominator |
Yes | Yes | Install script review | PASS |
Çıkış kodları (Windows service betikleri)¶
Kaynak: scripts/windows/service/Common.ps1
| Kod | Sabit | Anlam |
|---|---|---|
| 0 | EXIT_SUCCESS |
Başarılı |
| 1 | EXIT_ADMIN_REQUIRED |
Yönetici gerekli |
| 2 | EXIT_ENV_INVALID |
Ortam geçersiz |
| 3 | EXIT_PREREQUISITE |
Ön gereksinim |
| 4 | EXIT_REPO_DIRTY |
Depo kirli / git hatası |
| 5 | EXIT_DEP_DOWNLOAD |
Bağımlılık indirme |
| 6 | EXIT_VET_TEST |
Vet/test |
| 7 | EXIT_BUILD |
Derleme |
| 8 | EXIT_CHECK_FAILED |
Application check |
| 9 | EXIT_BACKUP |
Yedek |
| 10 | EXIT_MIGRATION |
Migrasyon |
| 11 | EXIT_SERVICE_UPDATE |
Servis güncelleme / status unhealthy install state |
| 12 | EXIT_FIREWALL |
Firewall |
| 13 | EXIT_HEALTH |
Health |
| 14 | EXIT_ROLLBACK |
Rollback başarısız |
| 15 | EXIT_PORT_CONFLICT |
Port çakışması |
| 16 | EXIT_DOCKER_NA |
Docker N/A |
| 17 | EXIT_SYSTEMD_NA |
systemd N/A |