Netpulse_SasS/server/internal/store/ncm_transport_test.go
byrsapty 452345da32
Some checks are pending
CI / web (push) Waiting to run
CI / server (push) Waiting to run
CI / agent (push) Waiting to run
Транспорт збору конфігу бере доступ хоста, а не профіль моделі
Питання «чому всі профілі ssh» виявило справжню помилку. Список
правильний: ssh — розумний типовий вибір. Але це поле ВИРІШУВАЛО
транспорт, а профіль описує модель, не конкретну коробку.

Хост зі старою прошивкою, де є лише telnet, і з чесно заведеним
telnet-доступом усе одно набирався по SSH — і не збирався ніколи.
inv.credentials.proto вже ніс потрібну відповідь і доїжджав до зонда
невикористаним.

Тепер транспорт бере доступ; профільне поле лишилось підказкою й діє,
поки доступу немає. Логіка винесена в jobTransport() — щоб її можна
було перевірити без бази й без пристрою.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-25 16:45:48 +03:00

64 lines
2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package store
import (
"testing"
npv1 "github.com/netpulse/netpulse/gen/go/netpulse/v1"
)
// Транспорт задає доступ хоста, а не профіль моделі.
//
// Усі 147 вбудованих профілів кажуть «ssh», бо так знімають з
// переважної більшості заліза. Але та сама модель у клієнта може стояти
// зі старою прошивкою, де є лише telnet, — і поки вирішував профіль,
// такий хост набирався по SSH і не збирався ніколи.
func TestTransportComesFromCredential(t *testing.T) {
cases := []struct {
name string
profile string
cred *npv1.Credential
want npv1.Transport
port uint32
}{
{
name: "доступ telnet перемагає профіль ssh",
profile: "ssh",
cred: &npv1.Credential{Transport: npv1.Transport_TRANSPORT_TELNET},
want: npv1.Transport_TRANSPORT_TELNET,
port: 23,
},
{
name: "доступ ssh перемагає профіль telnet",
profile: "telnet",
cred: &npv1.Credential{Transport: npv1.Transport_TRANSPORT_SSH},
want: npv1.Transport_TRANSPORT_SSH,
port: 22,
},
{
name: "порт з доступу перекриває типовий",
profile: "ssh",
cred: &npv1.Credential{Transport: npv1.Transport_TRANSPORT_SSH, Port: 2222},
want: npv1.Transport_TRANSPORT_SSH,
port: 2222,
},
{
name: "без доступу лишається підказка профілю",
profile: "telnet",
cred: nil,
want: npv1.Transport_TRANSPORT_TELNET,
port: 23,
},
}
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
got, port := jobTransport(c.profile, c.cred)
if got != c.want {
t.Fatalf("транспорт: %v, очікував %v", got, c.want)
}
if port != c.port {
t.Fatalf("порт: %d, очікував %d", port, c.port)
}
})
}
}