//go:build live package lkgateway // Живой прогон цикла QUIK МНП на боевом модуле (клиент BR859, 1 шт. T). // Запуск: go test -tags live -run TestQuikLiveCycle ./internal/lkgateway/ -v // Требует Quik.WritesEnabled=true в setup.json (тест включает временно и возвращает). import ( "context" "testing" "time" ) func TestQuikLiveCycle(t *testing.T) { rc, err := NewRuntimeConfig("/var/lib/bj/.bj/setup.json") if err != nil { t.Fatal(err) } q := rc.Snapshot().Quik was := q.WritesEnabled q.WritesEnabled = true if err := rc.UpdateQuik(q); err != nil { t.Fatal(err) } defer func() { q := rc.Snapshot().Quik; q.WritesEnabled = was; _ = rc.UpdateQuik(q) }() ctx, cancel := context.WithTimeout(context.Background(), 6*time.Minute) defer cancel() guid := "LIVETEST-" + time.Now().Format("150405") code, contract, err := quikResolveClient(ctx, rc, "4500", "000000") t.Logf("resolve (неизвестный паспорт): code=%q contract=%q err=%v", code, contract, err) in, out, err := quikM2MInstruments(ctx, rc.Snapshot().Quik) t.Logf("инструменты: ввод=%s вывод=%s err=%v", in, out, err) // +1: Ввод ЦБ (M2M) l, err := QuikInDeposit(ctx, rc, guid, "BR859", "БР-859", "RU000A107UL4", 1, "7722061076", "Депозитарий-контрагент (тест M2M)") if err != nil { t.Fatalf("deposit: %v", err) } t.Logf("deposit: state=%s instr=%s steps=%d", l.State, l.InstrNo, len(l.Steps)) // -1: Вывод ЦБ (M2M) → подпись l, err = QuikOutRegister(ctx, rc, guid, "BR859", "БР-859", "RU000A107UL4", 1, "7722061076", "", true) if err != nil { t.Fatalf("register: %v", err) } t.Logf("register: state=%s instr=%s", l.State, l.InstrNo) l, err = QuikOutSign(ctx, rc, guid, "RU000A107UL4", "LIVETEST: подпись") if err != nil { t.Fatalf("sign: %v", err) } t.Logf("sign: state=%s instr=%s", l.State, l.InstrNo) for _, x := range globalQuikLinks.ForGUID(guid) { t.Logf("link %s/%s: %s (%s) steps=%d", x.Direction, x.ISIN, x.State, x.StateRu(), len(x.Steps)) } }