feat(nsd-adapter): REST-клиент ИШ НРД + маршрутизация типов пакетов
- internal/nsdadapter/igw/client.go: REST-клиент ИШ (SendPackage, GetStatus, ListIncoming) с base64-JSON, ретраями на 5xx, 4xx без ретраев - internal/nsdadapter/router.go: маршрутизация MessageKind -> PackageType ЭДО (#M2MTR, #M2MTD, #M2MER, SUBBR/SUBER/SUB16, Assets_investment) - internal/nsdadapter/sender.go: реализация m2mcore.NSDSender (Send/SendDecision) через REST ИШ, сериализация Request/Decision в windows-1251 - internal/nsdadapter/config.go: профили guest/test3/prod × gost/rsa (URL ИШ, канал, контейнер ключа, retry) - internal/nsdadapter/onyx/onyx.go: скелет резервного канала WS ONYX (ждёт PR-6 crypto-service для подписи) - cmd/nsd-adapter/main.go: HTTP /healthz + фоновый поллер входящих по типам ЭДО; idle-режим без BJ_NSD_PROFILE make ci зелёный. Без внешних Go-зависимостей. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package nsdadapter_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.zetit.ru/zuevav/Bridge-and-Join-s/internal/nsdadapter"
|
||||
)
|
||||
|
||||
func TestRouteToPackageType(t *testing.T) {
|
||||
cases := []struct {
|
||||
kind nsdadapter.MessageKind
|
||||
want nsdadapter.PackageType
|
||||
}{
|
||||
{nsdadapter.KindTransferRequest, nsdadapter.PackageM2MTransferRequest},
|
||||
{nsdadapter.KindTransferDecision, nsdadapter.PackageM2MTransferDecision},
|
||||
{nsdadapter.KindTransferResponse, nsdadapter.PackageM2MTransferError},
|
||||
}
|
||||
for _, c := range cases {
|
||||
got, err := nsdadapter.RouteToPackageType(c.kind)
|
||||
if err != nil {
|
||||
t.Errorf("kind=%s ошибка: %v", c.kind, err)
|
||||
continue
|
||||
}
|
||||
if got != c.want {
|
||||
t.Errorf("kind=%s: получено %s, ожидалось %s", c.kind, got, c.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestRouteToPackageTypeUnknown(t *testing.T) {
|
||||
if _, err := nsdadapter.RouteToPackageType("unknown"); err == nil {
|
||||
t.Error("ожидалась ошибка на неизвестный kind")
|
||||
}
|
||||
}
|
||||
|
||||
func TestIncomingPackageKindsContainsExpected(t *testing.T) {
|
||||
kinds := nsdadapter.IncomingPackageKinds()
|
||||
want := map[nsdadapter.PackageType]bool{
|
||||
nsdadapter.PackageM2MTransferDecision: true,
|
||||
nsdadapter.PackageSUB16: true,
|
||||
}
|
||||
for _, k := range kinds {
|
||||
delete(want, k)
|
||||
}
|
||||
if len(want) > 0 {
|
||||
t.Errorf("в IncomingPackageKinds не хватает: %v", want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLookupProfile(t *testing.T) {
|
||||
for _, name := range []string{"guest-gost", "test3-rsa", "prod-gost"} {
|
||||
p, err := nsdadapter.LookupProfile(name)
|
||||
if err != nil {
|
||||
t.Errorf("LookupProfile(%s): %v", name, err)
|
||||
continue
|
||||
}
|
||||
if p.Name != name {
|
||||
t.Errorf("LookupProfile(%s).Name = %s", name, p.Name)
|
||||
}
|
||||
}
|
||||
if _, err := nsdadapter.LookupProfile("unknown"); err == nil {
|
||||
t.Error("ожидалась ошибка на неизвестный профиль")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user