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
46 lines
1.4 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|