mirror of
https://github.com/Awuqing/BackupX.git
synced 2026-05-11 18:10:23 +08:00
77 lines
1.9 KiB
Go
77 lines
1.9 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"backupx/server/internal/model"
|
|
"github.com/glebarez/sqlite"
|
|
"gorm.io/gorm"
|
|
gormlogger "gorm.io/gorm/logger"
|
|
)
|
|
|
|
func openTestNodeDB(t *testing.T) *gorm.DB {
|
|
t.Helper()
|
|
path := filepath.Join(t.TempDir(), "nodes.db")
|
|
db, err := gorm.Open(sqlite.Open(path), &gorm.Config{Logger: gormlogger.Default.LogMode(gormlogger.Silent)})
|
|
if err != nil {
|
|
t.Fatalf("open sqlite: %v", err)
|
|
}
|
|
if err := db.AutoMigrate(&model.Node{}); err != nil {
|
|
t.Fatalf("migrate: %v", err)
|
|
}
|
|
return db
|
|
}
|
|
|
|
func TestFindByTokenFallsBackToPrevToken(t *testing.T) {
|
|
db := openTestNodeDB(t)
|
|
repo := NewNodeRepository(db)
|
|
ctx := context.Background()
|
|
|
|
future := time.Now().UTC().Add(24 * time.Hour)
|
|
node := &model.Node{
|
|
Name: "test", Token: "new-token",
|
|
PrevToken: "old-token", PrevTokenExpires: &future,
|
|
}
|
|
if err := repo.Create(ctx, node); err != nil {
|
|
t.Fatalf("create: %v", err)
|
|
}
|
|
|
|
// 新 token 能查到
|
|
got, err := repo.FindByToken(ctx, "new-token")
|
|
if err != nil || got == nil || got.ID != node.ID {
|
|
t.Fatalf("new token lookup failed: err=%v got=%v", err, got)
|
|
}
|
|
|
|
// 旧 token 也能查到(未过期)
|
|
got, err = repo.FindByToken(ctx, "old-token")
|
|
if err != nil || got == nil || got.ID != node.ID {
|
|
t.Fatalf("prev_token lookup failed: err=%v got=%v", err, got)
|
|
}
|
|
}
|
|
|
|
func TestFindByTokenRejectsExpiredPrevToken(t *testing.T) {
|
|
db := openTestNodeDB(t)
|
|
repo := NewNodeRepository(db)
|
|
ctx := context.Background()
|
|
|
|
past := time.Now().UTC().Add(-1 * time.Hour)
|
|
node := &model.Node{
|
|
Name: "test", Token: "new-token",
|
|
PrevToken: "stale", PrevTokenExpires: &past,
|
|
}
|
|
if err := repo.Create(ctx, node); err != nil {
|
|
t.Fatalf("create: %v", err)
|
|
}
|
|
|
|
got, err := repo.FindByToken(ctx, "stale")
|
|
if err != nil {
|
|
t.Fatalf("err=%v", err)
|
|
}
|
|
if got != nil {
|
|
t.Fatalf("expected stale prev_token rejected, got %v", got)
|
|
}
|
|
}
|