fix(emulators): подмена личности в НРД гаснет по окончании dev-режима
disableEmulatorsIfDevOff сбрасывал только LK.EmulateNSD / Quik.Emulate / Quik.RealWrite, но не LK.RealNSDTest.Enabled (тест «боевой ЛК → TEST3»). Из-за этого после истечения dev-режима подмена инвестора оставалась включённой, а клиент без доступа к dev-вкладкам не мог вернуть стандартный режим. Теперь сброс LK объединён в одно обновление и гасит и подмену (список паспортов сохраняется). + тест TestDisableEmulatorsIfDevOffRealNSD. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -186,26 +186,36 @@ func emuOutcomeRu(outcome string) string {
|
|||||||
return "подтверждение"
|
return "подтверждение"
|
||||||
}
|
}
|
||||||
|
|
||||||
// disableEmulatorsIfDevOff — безопасность: эмуляторы НРД/МНП действуют только в режиме
|
// disableEmulatorsIfDevOff — безопасность: эмуляторы НРД/МНП и подмена личности в НРД
|
||||||
// разработки; когда он заканчивается (по времени dev_until или снят на сервере лицензий),
|
// («боевой ЛК → тестовый контур») действуют только в режиме разработки; когда он
|
||||||
// флаги сбрасываются из настроек — иначе при следующей выдаче dev-режима эмуляция
|
// заканчивается (по времени dev_until или снят на сервере лицензий), флаги сбрасываются из
|
||||||
// молча оживёт. Вызывается при старте и в цикле продления лицензии.
|
// настроек — иначе при следующей выдаче dev-режима эмуляция/подмена молча оживёт, а клиент
|
||||||
|
// без доступа к dev-вкладкам не смог бы вернуть стандартный режим. Вызывается при старте и в
|
||||||
|
// цикле продления лицензии.
|
||||||
func disableEmulatorsIfDevOff(rc *RuntimeConfig) {
|
func disableEmulatorsIfDevOff(rc *RuntimeConfig) {
|
||||||
if rc == nil || devMode(rc) {
|
if rc == nil || devMode(rc) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
s := rc.Snapshot()
|
s := rc.Snapshot()
|
||||||
if !s.LK.EmulateNSD && !s.Quik.Emulate && !s.Quik.RealWrite {
|
if !s.LK.EmulateNSD && !s.LK.RealNSDTest.Enabled && !s.Quik.Emulate && !s.Quik.RealWrite {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var off []string
|
var off []string
|
||||||
if s.LK.EmulateNSD {
|
// Эмулятор НРД и подмена личности («боевой ЛК → тестовый контур НРД») — оба в настройках LK;
|
||||||
|
// сбрасываем одним обновлением, чтобы без режима разработки заявки шли под своими данными.
|
||||||
|
if s.LK.EmulateNSD || s.LK.RealNSDTest.Enabled {
|
||||||
lk := s.LK
|
lk := s.LK
|
||||||
lk.EmulateNSD = false
|
lk.EmulateNSD = false
|
||||||
|
lk.RealNSDTest.Enabled = false
|
||||||
if err := rc.UpdateLK(lk); err != nil {
|
if err := rc.UpdateLK(lk); err != nil {
|
||||||
log.Printf("lk-gateway: авто-сброс эмулятора НРД: %v", err)
|
log.Printf("lk-gateway: авто-сброс эмулятора/подмены НРД: %v", err)
|
||||||
} else {
|
} else {
|
||||||
off = append(off, "эмулятор НРД (заявки ЛК)")
|
if s.LK.EmulateNSD {
|
||||||
|
off = append(off, "эмулятор НРД (заявки ЛК)")
|
||||||
|
}
|
||||||
|
if s.LK.RealNSDTest.Enabled {
|
||||||
|
off = append(off, "подмена личности в НРД (тест «боевой ЛК → TEST3»)")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if s.Quik.Emulate || s.Quik.RealWrite {
|
if s.Quik.Emulate || s.Quik.RealWrite {
|
||||||
|
|||||||
@@ -302,6 +302,43 @@ func TestDisableEmulatorsIfDevOffNoOp(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Подмена личности в НРД («боевой ЛК → TEST3») тоже гаснет по окончании dev-режима:
|
||||||
|
// иначе клиент без доступа к dev-вкладкам не вернул бы стандартный режим.
|
||||||
|
func TestDisableEmulatorsIfDevOffRealNSD(t *testing.T) {
|
||||||
|
rc := rcWithExpiredDev(t)
|
||||||
|
s := rc.Snapshot()
|
||||||
|
s.LK.RealNSDTest.Enabled = true
|
||||||
|
s.LK.RealNSDTest.Docs = "1110 754503"
|
||||||
|
if err := rc.UpdateLK(s.LK); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
disableEmulatorsIfDevOff(rc)
|
||||||
|
if rc.Snapshot().LK.RealNSDTest.Enabled {
|
||||||
|
t.Fatal("подмена личности не сброшена")
|
||||||
|
}
|
||||||
|
// Паспорта клиентов сохраняем — сбрасываем только включатель.
|
||||||
|
if rc.Snapshot().LK.RealNSDTest.Docs != "1110 754503" {
|
||||||
|
t.Errorf("список паспортов не должен затираться: %q", rc.Snapshot().LK.RealNSDTest.Docs)
|
||||||
|
}
|
||||||
|
// На диске тоже выключено — при следующем dev-режиме подмена сама не оживёт.
|
||||||
|
rc2, err := NewRuntimeConfig(rc.path)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if rc2.Snapshot().LK.RealNSDTest.Enabled {
|
||||||
|
t.Fatal("в setup.json подмена осталась включённой")
|
||||||
|
}
|
||||||
|
found := false
|
||||||
|
for _, n := range rc.Snapshot().News.Items {
|
||||||
|
if strings.Contains(n.Title, "Эмуляторы отключены") && strings.Contains(n.Body, "подмена личности") {
|
||||||
|
found = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !found {
|
||||||
|
t.Error("в новости не упомянуто отключение подмены личности")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Режимы МНП взаимоисключающие: хендлер выставляет Emulate/RealWrite по выбранному режиму.
|
// Режимы МНП взаимоисключающие: хендлер выставляет Emulate/RealWrite по выбранному режиму.
|
||||||
func TestEmulatorsQuikModes(t *testing.T) {
|
func TestEmulatorsQuikModes(t *testing.T) {
|
||||||
devModeForced = true
|
devModeForced = true
|
||||||
|
|||||||
Reference in New Issue
Block a user