feat: restart to apply update, privileged helper, rollback

This commit is contained in:
fsylvain committed 2026-10-01 21:36:40 +02:00
1 parent 70460e4170
commit 54e8fd5fed
63 files changed
+8635 -164

No files matched your search

+10 -4
View File
@@ -305,6 +305,8 @@ type downloadRig struct {
store *fakeUpdateStore
jobs *fakeJobStore
helper *fakeHelperDetector
results *fakeResultStore
requests *fakeRestartRequestStore
fetcher *fakeAssetFetcher
runner *fakeStagedRunner
backup *fakeDatabaseBackup
@@ -337,6 +339,8 @@ func newDownloadRigFor(t *testing.T, platform update.Platform, binary []byte) *d
store: &fakeUpdateStore{},
jobs: &fakeJobStore{},
helper: &fakeHelperDetector{installed: true},
results: &fakeResultStore{},
requests: &fakeRestartRequestStore{},
fetcher: &fakeAssetFetcher{
files: map[string][]byte{},
errors: map[string]error{},
@@ -369,6 +373,8 @@ func (r *downloadRig) rebuild() {
Store: r.store,
Jobs: r.jobs,
Helper: r.helper,
Results: r.results,
Requests: r.requests,
Fetcher: r.fetcher,
Verifier: verifier,
Runner: r.runner,
@@ -380,7 +386,7 @@ func (r *downloadRig) rebuild() {
FeedURL: downloadFeedURL,
Now: func() time.Time { return updateTestCheckedAt },
})
r.status = useCases.NewGetUpdateStatusUseCase(r.store, r.jobs, r.helper, updateRunning)
r.status = useCases.NewGetUpdateStatusUseCase(r.store, r.jobs, r.helper, r.results, r.requests, updateRunning, time.Now)
}
func (r *downloadRig) checksumsFor(name string, content []byte) string {
@@ -690,7 +696,7 @@ func TestJSONJobStorePersistence(t *testing.T) {
path := filepath.Join(dir, "update-job.json")
_ = infraUpdate.NewJSONJobStore(path).Save(update.Job{Tag: downloadTag, State: update.StateReady, StartedAt: startedAt, StagedBinary: binary})
status := useCases.NewGetUpdateStatusUseCase(&fakeUpdateStore{result: newStoredUpdateResult(), found: true}, infraUpdate.NewJSONJobStore(path), &fakeHelperDetector{}, updateRunning).GetStatus(true)
status := newUpdateStatusUseCase(&fakeUpdateStore{result: newStoredUpdateResult(), found: true}, infraUpdate.NewJSONJobStore(path), &fakeHelperDetector{}, updateRunning).GetStatus(true)
if status.State != update.StateReady {
t.Errorf("state = %q", status.State)
@@ -702,7 +708,7 @@ func TestJSONJobStorePersistence(t *testing.T) {
path := filepath.Join(t.TempDir(), "update-job.json")
_ = infraUpdate.NewJSONJobStore(path).Save(update.Job{Tag: downloadTag, State: state, StartedAt: startedAt, DownloadedBytes: 4, TotalBytes: 9})
status := useCases.NewGetUpdateStatusUseCase(&fakeUpdateStore{result: newStoredUpdateResult(), found: true}, infraUpdate.NewJSONJobStore(path), &fakeHelperDetector{}, updateRunning).GetStatus(true)
status := newUpdateStatusUseCase(&fakeUpdateStore{result: newStoredUpdateResult(), found: true}, infraUpdate.NewJSONJobStore(path), &fakeHelperDetector{}, updateRunning).GetStatus(true)
if status.State != update.StateFailed || status.Error == nil || *status.Error != "download" || status.Progress != nil {
t.Errorf("%s: status = %+v", state, status)
@@ -714,7 +720,7 @@ func TestJSONJobStorePersistence(t *testing.T) {
path := filepath.Join(t.TempDir(), "update-job.json")
_ = infraUpdate.NewJSONJobStore(path).Save(update.Job{Tag: downloadTag, State: update.StateReady, StartedAt: startedAt, StagedBinary: filepath.Join(t.TempDir(), "missing")})
status := useCases.NewGetUpdateStatusUseCase(&fakeUpdateStore{result: newStoredUpdateResult(), found: true}, infraUpdate.NewJSONJobStore(path), &fakeHelperDetector{}, updateRunning).GetStatus(true)
status := newUpdateStatusUseCase(&fakeUpdateStore{result: newStoredUpdateResult(), found: true}, infraUpdate.NewJSONJobStore(path), &fakeHelperDetector{}, updateRunning).GetStatus(true)
if status.State != update.StateIdle || status.StartedAt != nil {
t.Errorf("status = %+v", status)