209 lines
5.9 KiB
Go
209 lines
5.9 KiB
Go
package tests
|
|
|
|
import "testing"
|
|
|
|
import "codit/internal/db"
|
|
import "codit/internal/models"
|
|
|
|
func createTestProject(t *testing.T, store *db.Store, user models.User, slug string) models.Project {
|
|
var project models.Project
|
|
var err error
|
|
|
|
t.Helper()
|
|
project = models.Project{
|
|
Slug: slug,
|
|
Name: slug,
|
|
Description: slug + " project",
|
|
CreatedBy: user.ID,
|
|
UpdatedBy: user.ID,
|
|
HomePage: "info",
|
|
}
|
|
project, err = store.CreateProject(project)
|
|
if err != nil {
|
|
t.Fatalf("create project: %v", err)
|
|
}
|
|
return project
|
|
}
|
|
|
|
func createTestRPMRepo(t *testing.T, store *db.Store, project models.Project, user models.User, name string) models.Repo {
|
|
var repo models.Repo
|
|
var err error
|
|
|
|
t.Helper()
|
|
repo = models.Repo{
|
|
ProjectID: project.ID,
|
|
Name: name,
|
|
Type: "rpm",
|
|
Path: "rpm/test/" + name,
|
|
CreatedBy: user.ID,
|
|
}
|
|
repo, err = store.CreateRepo(repo)
|
|
if err != nil {
|
|
t.Fatalf("create repo: %v", err)
|
|
}
|
|
return repo
|
|
}
|
|
|
|
func createTestRPMMirrorDir(t *testing.T, store *db.Store, repo models.Repo, path string, interval int64) models.RPMRepoDir {
|
|
var item models.RPMRepoDir
|
|
var err error
|
|
|
|
t.Helper()
|
|
item = models.RPMRepoDir{
|
|
RepoID: repo.ID,
|
|
Path: path,
|
|
Mode: "mirror",
|
|
RemoteURL: "https://example.invalid/repo",
|
|
SyncIntervalSec: interval,
|
|
SyncEnabled: true,
|
|
}
|
|
err = store.UpsertRPMRepoDir(item)
|
|
if err != nil {
|
|
t.Fatalf("upsert rpm mirror dir: %v", err)
|
|
}
|
|
item, err = store.GetRPMRepoDir(repo.ID, path)
|
|
if err != nil {
|
|
t.Fatalf("get rpm mirror dir: %v", err)
|
|
}
|
|
return item
|
|
}
|
|
|
|
func TestResetRunningRPMMirrorTasksMarksRunsFailed(t *testing.T) {
|
|
var store *db.Store
|
|
var user models.User
|
|
var project models.Project
|
|
var repo models.Repo
|
|
var dir models.RPMRepoDir
|
|
var runID string
|
|
var started bool
|
|
var runs []models.RPMMirrorRun
|
|
var err error
|
|
|
|
store = openTestStore(t)
|
|
defer store.Close()
|
|
user = createTestUser(t, store, "mirror-reset")
|
|
project = createTestProject(t, store, user, "mirror-reset")
|
|
repo = createTestRPMRepo(t, store, project, user, "repo")
|
|
dir = createTestRPMMirrorDir(t, store, repo, "x86_64", 600)
|
|
runID, started, err = store.TryStartRPMMirrorRun(repo.ID, dir.Path, 1000)
|
|
if err != nil {
|
|
t.Fatalf("try start mirror run: %v", err)
|
|
}
|
|
if !started {
|
|
t.Fatalf("expected mirror run to start")
|
|
}
|
|
err = store.ResetRunningRPMMirrorTasks()
|
|
if err != nil {
|
|
t.Fatalf("reset running mirror tasks: %v", err)
|
|
}
|
|
dir, err = store.GetRPMRepoDir(repo.ID, dir.Path)
|
|
if err != nil {
|
|
t.Fatalf("get rpm repo dir after reset: %v", err)
|
|
}
|
|
if dir.SyncRunning {
|
|
t.Fatalf("expected sync_running=false after reset")
|
|
}
|
|
if dir.SyncStatus != "failed" {
|
|
t.Fatalf("unexpected sync status: got=%s want=failed", dir.SyncStatus)
|
|
}
|
|
if dir.SyncError != "aborted by restart" {
|
|
t.Fatalf("unexpected sync error: got=%q", dir.SyncError)
|
|
}
|
|
runs, err = store.ListRPMMirrorRuns(repo.ID, dir.Path, 10)
|
|
if err != nil {
|
|
t.Fatalf("list mirror runs after reset: %v", err)
|
|
}
|
|
if len(runs) != 1 {
|
|
t.Fatalf("expected one mirror run, got %d", len(runs))
|
|
}
|
|
if runs[0].ID != runID {
|
|
t.Fatalf("unexpected run id: got=%s want=%s", runs[0].ID, runID)
|
|
}
|
|
if runs[0].Status != "failed" {
|
|
t.Fatalf("unexpected run status: got=%s want=failed", runs[0].Status)
|
|
}
|
|
if runs[0].Error != "aborted by restart" {
|
|
t.Fatalf("unexpected run error: got=%q", runs[0].Error)
|
|
}
|
|
if runs[0].FinishedAt <= 0 {
|
|
t.Fatalf("expected finished_at to be set")
|
|
}
|
|
}
|
|
|
|
func TestFinishRPMMirrorTaskRunUpdatesTaskAndRun(t *testing.T) {
|
|
var store *db.Store
|
|
var user models.User
|
|
var project models.Project
|
|
var repo models.Repo
|
|
var dir models.RPMRepoDir
|
|
var runID string
|
|
var started bool
|
|
var runs []models.RPMMirrorRun
|
|
var err error
|
|
|
|
store = openTestStore(t)
|
|
defer store.Close()
|
|
user = createTestUser(t, store, "mirror-finish")
|
|
project = createTestProject(t, store, user, "mirror-finish")
|
|
repo = createTestRPMRepo(t, store, project, user, "repo")
|
|
dir = createTestRPMMirrorDir(t, store, repo, "x86_64", 600)
|
|
runID, started, err = store.TryStartRPMMirrorRun(repo.ID, dir.Path, 1000)
|
|
if err != nil {
|
|
t.Fatalf("try start mirror run: %v", err)
|
|
}
|
|
if !started {
|
|
t.Fatalf("expected mirror run to start")
|
|
}
|
|
err = store.FinishRPMMirrorTaskRun(repo.ID, dir.Path, runID, true, 1700, "done", 4, 4, 0, 0, "rev-1", "")
|
|
if err != nil {
|
|
t.Fatalf("finish mirror task run: %v", err)
|
|
}
|
|
dir, err = store.GetRPMRepoDir(repo.ID, dir.Path)
|
|
if err != nil {
|
|
t.Fatalf("get rpm repo dir after finish: %v", err)
|
|
}
|
|
if dir.SyncRunning {
|
|
t.Fatalf("expected sync_running=false after finish")
|
|
}
|
|
if dir.Dirty {
|
|
t.Fatalf("expected dirty=false after success")
|
|
}
|
|
if dir.SyncStatus != "success" {
|
|
t.Fatalf("unexpected sync status: got=%s want=success", dir.SyncStatus)
|
|
}
|
|
if dir.LastSyncFinishedAt != 1700 {
|
|
t.Fatalf("unexpected last sync finished at: got=%d want=1700", dir.LastSyncFinishedAt)
|
|
}
|
|
if dir.LastSyncSuccessAt != 1700 {
|
|
t.Fatalf("unexpected last sync success at: got=%d want=1700", dir.LastSyncSuccessAt)
|
|
}
|
|
if dir.LastSyncedRevision != "rev-1" {
|
|
t.Fatalf("unexpected last synced revision: got=%s want=rev-1", dir.LastSyncedRevision)
|
|
}
|
|
if dir.NextSyncAt != 2300 {
|
|
t.Fatalf("unexpected next sync at: got=%d want=2300", dir.NextSyncAt)
|
|
}
|
|
runs, err = store.ListRPMMirrorRuns(repo.ID, dir.Path, 10)
|
|
if err != nil {
|
|
t.Fatalf("list mirror runs after finish: %v", err)
|
|
}
|
|
if len(runs) != 1 {
|
|
t.Fatalf("expected one mirror run, got %d", len(runs))
|
|
}
|
|
if runs[0].ID != runID {
|
|
t.Fatalf("unexpected run id: got=%s want=%s", runs[0].ID, runID)
|
|
}
|
|
if runs[0].Status != "success" {
|
|
t.Fatalf("unexpected run status: got=%s want=success", runs[0].Status)
|
|
}
|
|
if runs[0].Step != "done" {
|
|
t.Fatalf("unexpected run step: got=%s want=done", runs[0].Step)
|
|
}
|
|
if runs[0].Revision != "rev-1" {
|
|
t.Fatalf("unexpected run revision: got=%s want=rev-1", runs[0].Revision)
|
|
}
|
|
if runs[0].Done != 4 || runs[0].Total != 4 {
|
|
t.Fatalf("unexpected run counts: total=%d done=%d", runs[0].Total, runs[0].Done)
|
|
}
|
|
}
|