Files
aiops/backend/repository/server_sort_test.go
T
Logan.Li 83662487cb fix: 接通服务器V2排序链路
- 将排序参数从V2 Handler传递至Service与Repository

- 增加仓储分页排序与参数白名单测试
2026-07-26 23:38:06 +08:00

58 lines
1.9 KiB
Go

package repository
import (
"testing"
"ezops/model"
"github.com/glebarez/sqlite"
"gorm.io/gorm"
)
// TestServerRepositoryListHostnameOrder 验证实际服务器仓储按主机名分页排序。 // Logan.Li
func TestServerRepositoryListHostnameOrder(t *testing.T) {
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
if err != nil {
t.Fatalf("打开测试数据库失败: %v", err)
}
if err := db.AutoMigrate(&model.Server{}, &model.Region{}, &model.Cloud{}); err != nil {
t.Fatalf("迁移测试表失败: %v", err)
}
for _, hostname := range []string{"test-win", "c-windows", "alpha-host"} {
if err := db.Create(&model.Server{Hostname: hostname, IP: "127.0.0.1"}).Error; err != nil {
t.Fatalf("创建测试服务器失败: %v", err)
}
}
repo := NewServerRepository(db)
servers, total, err := repo.List("", "", "", "hostname", "asc", 1, 10)
if err != nil {
t.Fatalf("查询测试服务器失败: %v", err)
}
if total != 3 || len(servers) != 3 {
t.Fatalf("服务器数量异常 total=%d len=%d", total, len(servers))
}
if servers[0].Hostname != "alpha-host" || servers[2].Hostname != "test-win" {
t.Fatalf("主机名升序结果异常: %q, %q, %q", servers[0].Hostname, servers[1].Hostname, servers[2].Hostname)
}
}
// TestServerOrderClause 验证非法排序参数无法进入 SQL 表达式。 // Logan.Li
func TestServerOrderClause(t *testing.T) {
tests := []struct {
sortField string
sortOrder string
want string
}{
{want: "created_at DESC"},
{sortField: "hostname", sortOrder: "asc", want: "LOWER(hostname) ASC, id ASC"},
{sortField: "hostname", sortOrder: "desc", want: "LOWER(hostname) DESC, id DESC"},
{sortField: "hostname; DROP TABLE asset_servers", sortOrder: "asc", want: "created_at DESC"},
}
for _, tt := range tests {
if got := serverOrderClause(tt.sortField, tt.sortOrder); got != tt.want {
t.Fatalf("serverOrderClause(%q, %q) = %q, want %q", tt.sortField, tt.sortOrder, got, tt.want)
}
}
}