mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 13:59:39 +08:00
318 lines
8.9 KiB
Go
318 lines
8.9 KiB
Go
package minecraftobserver
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"github.com/jinzhu/gorm"
|
|
"testing"
|
|
)
|
|
|
|
func cleanTestData(t *testing.T) {
|
|
err := dbInstance.sdb.Delete(&serverStatus{}).Where("id > 0").Error
|
|
if err != nil {
|
|
t.Fatalf("cleanTestData() error = %v", err)
|
|
}
|
|
err = dbInstance.sdb.Delete(&serverSubscribe{}).Where("id > 0").Error
|
|
if err != nil {
|
|
t.Fatalf("cleanTestData() error = %v", err)
|
|
}
|
|
}
|
|
|
|
func Test_DAO(t *testing.T) {
|
|
initErr := initializeDB("data/minecraftobserver/" + dbPath)
|
|
if initErr != nil {
|
|
t.Fatalf("initializeDB() error = %v", initErr)
|
|
}
|
|
if dbInstance == nil {
|
|
t.Fatalf("initializeDB() got = %v, want not nil", dbInstance)
|
|
}
|
|
t.Run("insert", func(t *testing.T) {
|
|
cleanTestData(t)
|
|
newSS1 := &serverStatus{
|
|
ServerAddr: "dx.zhaomc.net",
|
|
Description: "测试服务器",
|
|
Players: "1/20",
|
|
Version: "1.16.5",
|
|
FaviconMD5: "1234567",
|
|
}
|
|
newSS2 := &serverStatus{
|
|
ServerAddr: "dx.zhaomc.net",
|
|
Description: "测试服务器",
|
|
Players: "1/20",
|
|
Version: "1.16.8",
|
|
FaviconMD5: "1234567",
|
|
}
|
|
err := dbInstance.updateServerStatus(newSS1)
|
|
if err != nil {
|
|
t.Errorf("upsertServerStatus() error = %v", err)
|
|
}
|
|
err = dbInstance.updateServerStatus(newSS2)
|
|
if err != nil {
|
|
t.Errorf("upsertServerStatus() error = %v", err)
|
|
}
|
|
|
|
// check insert
|
|
queryResult, err := dbInstance.getServerStatus("dx.zhaomc.net")
|
|
if err != nil {
|
|
t.Fatalf("getServerStatus() error = %v", err)
|
|
}
|
|
if queryResult == nil {
|
|
t.Fatalf("getServerStatus() got = %v, want not nil", queryResult)
|
|
}
|
|
if queryResult.Version != "1.16.8" {
|
|
t.Fatalf("getServerStatus() got = %v, want 1.16.8", queryResult.Version)
|
|
}
|
|
|
|
err = dbInstance.newSubscribe("dx.zhaomc.net", 123456, targetTypeGroup)
|
|
if err != nil {
|
|
t.Fatalf("getAllServer() error = %v", err)
|
|
}
|
|
err = dbInstance.newSubscribe("dx.zhaomc.net", 123456, targetTypeUser)
|
|
if err != nil {
|
|
t.Fatalf("getAllServer() error = %v", err)
|
|
}
|
|
// check insert
|
|
res, err := dbInstance.getAllSubscribes()
|
|
if err != nil {
|
|
t.Fatalf("getAllServer() error = %v", err)
|
|
}
|
|
if len(res) != 2 {
|
|
t.Fatalf("getAllServer() got = %v, want 2", len(res))
|
|
}
|
|
// 检查是否符合预期
|
|
if res[0].ServerAddr != "dx.zhaomc.net" {
|
|
t.Fatalf("getAllServer() got = %v, want dx.zhaomc.net", res[0].ServerAddr)
|
|
}
|
|
if res[0].TargetType != targetTypeGroup {
|
|
t.Fatalf("getAllServer() got = %v, want %v", res[0].TargetType, targetTypeGroup)
|
|
}
|
|
if res[1].ServerAddr != "dx.zhaomc.net" {
|
|
t.Fatalf("getAllServer() got = %v, want dx.zhaomc.net", res[1].ServerAddr)
|
|
}
|
|
if res[1].TargetType != targetTypeUser {
|
|
t.Fatalf("getAllServer() got = %v, want %v", res[1].TargetType, targetTypeUser)
|
|
}
|
|
|
|
// 顺带验证一下 byTarget
|
|
res2, err := dbInstance.getSubscribesByTarget(123456, targetTypeGroup)
|
|
if err != nil {
|
|
t.Fatalf("getSubscribesByTarget() error = %v", err)
|
|
}
|
|
if len(res2) != 1 {
|
|
t.Fatalf("getSubscribesByTarget() got = %v, want 1", len(res2))
|
|
}
|
|
|
|
})
|
|
// 重复添加订阅
|
|
t.Run("insert dup", func(t *testing.T) {
|
|
cleanTestData(t)
|
|
newSS := &serverStatus{
|
|
ServerAddr: "dx.zhaomc.net",
|
|
Description: "测试服务器",
|
|
Players: "1/20",
|
|
Version: "1.16.5",
|
|
FaviconMD5: "1234567",
|
|
}
|
|
err := dbInstance.updateServerStatus(newSS)
|
|
if err != nil {
|
|
t.Errorf("upsertServerStatus() error = %v", err)
|
|
}
|
|
err = dbInstance.newSubscribe("dx.zhaomc.net", 123456, targetTypeGroup)
|
|
if err != nil {
|
|
t.Fatalf("getAllServer() error = %v", err)
|
|
}
|
|
err = dbInstance.newSubscribe("dx.zhaomc.net", 123456, targetTypeGroup)
|
|
if err == nil {
|
|
t.Fatalf("getAllServer() error = %v", err)
|
|
}
|
|
fmt.Printf("insert dup error: %+v", err)
|
|
})
|
|
|
|
t.Run("update", func(t *testing.T) {
|
|
cleanTestData(t)
|
|
newSS := &serverStatus{
|
|
ServerAddr: "dx.zhaomc.net",
|
|
Description: "测试服务器",
|
|
Players: "1/20",
|
|
Version: "1.16.5",
|
|
FaviconMD5: "1234567",
|
|
}
|
|
err := dbInstance.updateServerStatus(newSS)
|
|
if err != nil {
|
|
t.Errorf("upsertServerStatus() error = %v", err)
|
|
}
|
|
err = dbInstance.updateServerStatus(&serverStatus{
|
|
ServerAddr: "dx.zhaomc.net",
|
|
Description: "更新测试",
|
|
Players: "1/20",
|
|
Version: "1.16.5",
|
|
FaviconMD5: "1234567",
|
|
})
|
|
if err != nil {
|
|
t.Errorf("upsertServerStatus() error = %v", err)
|
|
}
|
|
// check update
|
|
queryResult2, err := dbInstance.getServerStatus("dx.zhaomc.net")
|
|
if err != nil {
|
|
t.Errorf("getAllServer() error = %v", err)
|
|
}
|
|
if queryResult2.Description != "更新测试" {
|
|
t.Errorf("getAllServer() got = %v, want 更新测试", queryResult2.Description)
|
|
}
|
|
})
|
|
t.Run("delete status", func(t *testing.T) {
|
|
cleanTestData(t)
|
|
newSS := &serverStatus{
|
|
ServerAddr: "dx.zhaomc.net",
|
|
Description: "测试服务器",
|
|
Players: "1/20",
|
|
Version: "1.16.5",
|
|
FaviconMD5: "1234567",
|
|
}
|
|
err := dbInstance.updateServerStatus(newSS)
|
|
if err != nil {
|
|
t.Errorf("upsertServerStatus() error = %v", err)
|
|
}
|
|
// check insert
|
|
queryResult, err := dbInstance.getServerStatus("dx.zhaomc.net")
|
|
if err != nil {
|
|
t.Fatalf("getAllServer() error = %v", err)
|
|
}
|
|
if queryResult == nil {
|
|
t.Fatalf("getAllServer() got = %v, want not nil", queryResult)
|
|
}
|
|
err = dbInstance.delServerStatus("dx.zhaomc.net")
|
|
if err != nil {
|
|
t.Fatalf("deleteServerStatus() error = %v", err)
|
|
}
|
|
// check delete
|
|
_, err = dbInstance.getServerStatus("dx.zhaomc.net")
|
|
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
t.Fatalf("getAllServer() error = %v", err)
|
|
}
|
|
|
|
})
|
|
|
|
// 删除订阅
|
|
t.Run("delete subscribe", func(t *testing.T) {
|
|
cleanTestData(t)
|
|
newSS := &serverStatus{
|
|
ServerAddr: "dx.zhaomc.net",
|
|
Description: "测试服务器",
|
|
Players: "1/20",
|
|
Version: "1.16.5",
|
|
FaviconMD5: "1234567",
|
|
}
|
|
err := dbInstance.updateServerStatus(newSS)
|
|
if err != nil {
|
|
t.Errorf("upsertServerStatus() error = %v", err)
|
|
}
|
|
err = dbInstance.newSubscribe("dx.zhaomc.net", 123456, targetTypeGroup)
|
|
if err != nil {
|
|
t.Fatalf("getAllServer() error = %v", err)
|
|
}
|
|
err = dbInstance.deleteSubscribe("dx.zhaomc.net", 123456, targetTypeGroup)
|
|
if err != nil {
|
|
t.Fatalf("deleteSubscribe() error = %v", err)
|
|
}
|
|
// check delete
|
|
_, err = dbInstance.getServerStatus("dx.zhaomc.net")
|
|
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
t.Fatalf("getAllServer() error = %v", err)
|
|
}
|
|
})
|
|
|
|
// 重复删除订阅
|
|
t.Run("delete subscribe dup", func(t *testing.T) {
|
|
cleanTestData(t)
|
|
err := dbInstance.updateServerStatus(&serverStatus{
|
|
ServerAddr: "dx.zhaomc.net",
|
|
Description: "测试服务器",
|
|
Players: "1/20",
|
|
Version: "1.16.5",
|
|
FaviconMD5: "1234567",
|
|
})
|
|
if err != nil {
|
|
t.Errorf("upsertServerStatus() error = %v", err)
|
|
}
|
|
err = dbInstance.newSubscribe("dx.zhaomc.net", 123456, targetTypeGroup)
|
|
if err != nil {
|
|
t.Fatalf("newSubscribe() error = %v", err)
|
|
}
|
|
|
|
err = dbInstance.newSubscribe("dx.zhaomc.net123", 123456, targetTypeGroup)
|
|
if err != nil {
|
|
t.Fatalf("newSubscribe() error = %v", err)
|
|
}
|
|
err = dbInstance.updateServerStatus(&serverStatus{
|
|
ServerAddr: "dx.zhaomc.net123",
|
|
Description: "测试服务器",
|
|
Players: "1/20",
|
|
Version: "1.16.5",
|
|
FaviconMD5: "1234567",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("updateServerStatus() error = %v", err)
|
|
}
|
|
err = dbInstance.newSubscribe("dx.zhaomc.net4567", 123456, targetTypeGroup)
|
|
if err != nil {
|
|
t.Fatalf("newSubscribe() error = %v", err)
|
|
}
|
|
err = dbInstance.updateServerStatus(&serverStatus{
|
|
ServerAddr: "dx.zhaomc.net4567",
|
|
Description: "测试服务器",
|
|
Players: "1/20",
|
|
Version: "1.16.5",
|
|
FaviconMD5: "1234567",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("updateServerStatus() error = %v", err)
|
|
}
|
|
|
|
// 检查是不是3个
|
|
allSub, err := dbInstance.getAllSubscribes()
|
|
if err != nil {
|
|
t.Fatalf("getAllSubscribes() error = %v", err)
|
|
}
|
|
if len(allSub) != 3 {
|
|
t.Fatalf("getAllSubscribes() got = %v, want 3", len(allSub))
|
|
}
|
|
err = dbInstance.deleteSubscribe("dx.zhaomc.net", 123456, targetTypeGroup)
|
|
if err != nil {
|
|
t.Fatalf("deleteSubscribe() error = %v", err)
|
|
}
|
|
err = dbInstance.deleteSubscribe("dx.zhaomc.net", 123456, targetTypeGroup)
|
|
if err == nil {
|
|
t.Fatalf("deleteSubscribe() error = %v", err)
|
|
}
|
|
fmt.Println("delete dup error: ", err)
|
|
|
|
// 检查其他的没有被删
|
|
allSub, err = dbInstance.getAllSubscribes()
|
|
if err != nil {
|
|
t.Fatalf("getAllSubscribes() error = %v", err)
|
|
}
|
|
// 检查是否符合预期
|
|
if len(allSub) != 2 {
|
|
t.Fatalf("getAllSubscribes() got = %v, want 2", len(allSub))
|
|
}
|
|
// 状态
|
|
_, err = dbInstance.getServerStatus("dx.zhaomc.net")
|
|
if !gorm.IsRecordNotFoundError(err) {
|
|
t.Fatalf("getAllServer() error = %v", err)
|
|
}
|
|
status1, err := dbInstance.getServerStatus("dx.zhaomc.net123")
|
|
if err != nil {
|
|
t.Fatalf("getAllServer() error = %v", err)
|
|
}
|
|
status2, err := dbInstance.getServerStatus("dx.zhaomc.net4567")
|
|
if err != nil {
|
|
t.Fatalf("getAllServer() error = %v", err)
|
|
}
|
|
if status1 == nil || status2 == nil {
|
|
t.Fatalf("getAllServer() want not nil")
|
|
}
|
|
|
|
})
|
|
}
|