fix: 接通服务器V2排序链路
- 将排序参数从V2 Handler传递至Service与Repository - 增加仓储分页排序与参数白名单测试
This commit is contained in:
1 parent
09e6271bb4
commit
83662487cb
7 files changed
+98
-41
No files matched your search
@@ -0,0 +1,57 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user