58 lines
1.9 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|