Files
3x-ui-web-src/internal/database/model/host_test.go
T
Sanaei f727d04f65
CI / go-test (push) Canceled after 0s
CI / postgres-durable-first (push) Canceled after 0s
CI / codegen (push) Canceled after 0s
CI / govulncheck (push) Canceled after 0s
CI / race (push) Canceled after 0s
CI / fuzz-smoke (push) Canceled after 0s
CI / golangci (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CodeQL Advanced / Analyze (go) (push) Canceled after 0s
CodeQL Advanced / Analyze (actions) (push) Canceled after 0s
CodeQL Advanced / Analyze (javascript-typescript) (push) Canceled after 0s
Docs CI / build (push) Canceled after 0s
Docs Deploy (GitHub Pages) / build (push) Canceled after 0s
Release 3X-UI / build (386) (push) Canceled after 0s
Release 3X-UI / build (amd64) (push) Canceled after 0s
Release 3X-UI / build (arm64) (push) Canceled after 0s
Release 3X-UI / build (armv5) (push) Canceled after 0s
Release 3X-UI / build (armv6) (push) Canceled after 0s
Release 3X-UI / build (armv7) (push) Canceled after 0s
Release 3X-UI / build (s390x) (push) Canceled after 0s
Release 3X-UI / Build for Windows (amd64) (push) Canceled after 0s
Deploy Smoke Tests / noninteractive-install (ubuntu-24.04-arm) (push) Canceled after 0s
Deploy Smoke Tests / noninteractive-install (ubuntu-latest) (push) Canceled after 0s
Deploy Smoke Tests / release-tag-install (ubuntu-24.04-arm) (push) Canceled after 0s
Deploy Smoke Tests / release-tag-install (ubuntu-latest) (push) Canceled after 0s
Docs Deploy (GitHub Pages) / deploy (push) Canceled after 0s
Release 3X-UI / Publish rolling dev release (push) Canceled after 0s
v3.7.0
2026-08-24 15:07:15 +02:00

46 lines
1.4 KiB
Go

package model
import (
"strings"
"testing"
"github.com/go-playground/validator/v10"
)
// TestHostTableName locks the table name the rest of the feature (queries,
// prune, migration) keys off.
func TestHostTableName(t *testing.T) {
if got := (Host{}).TableName(); got != "hosts" {
t.Fatalf("Host.TableName() = %q, want hosts", got)
}
}
// TestHostValidation locks the struct-tag constraints enforced by the request
// binder (middleware.BindAndValidate -> validate.Struct).
func TestHostValidation(t *testing.T) {
v := validator.New(validator.WithRequiredStructEnabled())
valid := Host{InboundId: 1, Remark: "cdn-front", Port: 8443, Security: "tls", MihomoIpVersion: "dual"}
if err := v.Struct(valid); err != nil {
t.Fatalf("valid host rejected: %v", err)
}
bad := []struct {
name string
h Host
}{
{"missing inbound", Host{Remark: "ok"}},
{"empty remark", Host{InboundId: 1, Remark: ""}},
{"remark too long", Host{InboundId: 1, Remark: strings.Repeat("x", 257)}},
{"port too high", Host{InboundId: 1, Remark: "ok", Port: 70000}},
{"port negative", Host{InboundId: 1, Remark: "ok", Port: -1}},
{"bad security", Host{InboundId: 1, Remark: "ok", Security: "bogus"}},
{"bad mihomo ip version", Host{InboundId: 1, Remark: "ok", MihomoIpVersion: "nope"}},
}
for _, tc := range bad {
if err := v.Struct(tc.h); err == nil {
t.Fatalf("%s: expected validation error, got nil", tc.name)
}
}
}