Первичная настройка, повторная проверка: копии без ключевых носителей СКЗИ (--one-file-system, без keymedia), без отпечатка железа и списка компонентов; восстановление на новый сервер — пароль базы bj из копии, база и пользователь ИШ; ключ для контура без канала запоминается и подключается при настройке канала; первый настроенный канал становится рабочим контуром; справочник сертификатов перечитывается после ключа и смены контура; шлюз НРД — шаг 7, ключ — шаг 8 (ключ ставится в профиль ИШ); подсказка контура ключа по сертификату; ИШ: параметры работающего шлюза не перезаписываются; без чужого кода отправителя и получателя по умолчанию; прокси для выхода в интернет; установка с образа без интернета; HTTPS — новый сертификат при смене адреса; bj-network — без cloud-init; проверка готовности: справочник участников, сетевые доступы, учётные записи, последний обмен с НРД
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package lkgateway
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
@@ -144,3 +146,52 @@ func TestHTTPSSelfSignedAndRedirect(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestReceiverUnknownRejected(t *testing.T) {
|
||||
if !handbookLoaded() {
|
||||
t.Skip("справочник участников не вшит")
|
||||
}
|
||||
svc := &Service{defaultSender: "MC0413600000", defaultReceiver: "MC0010300000"}
|
||||
if _, err := svc.BuildRequest(context.Background(), CreateClaimRequest{ReceivingDepositoryINN: "0000000001"}); err == nil || !errors.Is(err, errReceiverUnknown) {
|
||||
t.Fatalf("неизвестный депозитарий получателя должен давать errReceiverUnknown, а не чужой код: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildRequestNeedsOrganization(t *testing.T) {
|
||||
svc := &Service{}
|
||||
if _, err := svc.BuildRequest(context.Background(), CreateClaimRequest{}); err == nil || !strings.Contains(err.Error(), "организация не задана") {
|
||||
t.Fatalf("без кода отправителя перевод не должен формироваться: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestProxyBypass(t *testing.T) {
|
||||
for host, want := range map[string]bool{"localhost": true, "10.10.10.21": true, "192.168.1.5": true, "127.0.0.1": true, "sql002": true, "bj.local": true,
|
||||
"lic.zetit.ru": false, "www.nsd.ru": false, "8.8.8.8": false, "corp.example.ru": true, "a.corp.example.ru": true} {
|
||||
if got := proxyBypass(host, "corp.example.ru"); got != want {
|
||||
t.Errorf("proxyBypass(%s)=%v, want %v", host, got, want)
|
||||
}
|
||||
}
|
||||
p := ProxySettings{Address: "proxy.example.ru:3128", User: "u", Password: "p@ss"}
|
||||
if u := p.url(); u == nil || u.String() != "http://u:p%40ss@proxy.example.ru:3128" {
|
||||
t.Errorf("url: %v", u)
|
||||
}
|
||||
}
|
||||
|
||||
func TestKeyArchiveContour(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
raw, err := nsdCertsFS.ReadFile("nsd-certs/nsd-test-gost-petrov-20240924.cer")
|
||||
if err != nil {
|
||||
t.Skip(err)
|
||||
}
|
||||
_ = os.MkdirAll(filepath.Join(dir, "spr1"), 0o755)
|
||||
_ = os.WriteFile(filepath.Join(dir, "spr1", "user.cer"), raw, 0o644)
|
||||
if c, iss := keyArchiveContour(dir); c != "test3" || iss == "" {
|
||||
t.Fatalf("тестовый сертификат: %q %q", c, iss)
|
||||
}
|
||||
raw, _ = nsdCertsFS.ReadFile("nsd-certs/nsd-prod-gost-shlyappo-20260821.cer")
|
||||
dir2 := t.TempDir()
|
||||
_ = os.WriteFile(filepath.Join(dir2, "user.cer"), raw, 0o644)
|
||||
if c, _ := keyArchiveContour(dir2); c != "prod" {
|
||||
t.Fatalf("боевой сертификат: %q", c)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user