Files
NianAIGC/backend/internal/orchestration/artifacts_test.go

52 lines
1.6 KiB
Go

package orchestration
import (
"context"
"errors"
"reflect"
"testing"
"git.nianxx.cn/wangxuming/NianAIGC/backend/internal/assets"
"git.nianxx.cn/wangxuming/NianAIGC/backend/internal/jobs"
)
func TestAssetArtifactsDeletesUniqueOutputsAndIgnoresAlreadyMissingAssets(t *testing.T) {
deletions := &recordingAssetDeleter{missing: map[string]bool{"asset-missing": true}}
adapter := NewAssetArtifacts(deletions)
deleted, err := adapter.DeleteOutputs(context.Background(), jobs.Job{
OwnerID: "account-1", OutputAssetIDs: []string{"asset-1", "asset-missing", "asset-1", "asset-2"},
})
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(deleted, []string{"asset-1", "asset-2"}) || !reflect.DeepEqual(deletions.ids, []string{"asset-1", "asset-missing", "asset-2"}) {
t.Fatalf("deleted=%#v calls=%#v", deleted, deletions.ids)
}
}
func TestAssetArtifactsFailsClosedOnStorageError(t *testing.T) {
deletions := &recordingAssetDeleter{failure: errors.New("storage unavailable")}
_, err := NewAssetArtifacts(deletions).DeleteOutputs(context.Background(), jobs.Job{OwnerID: "account-1", OutputAssetIDs: []string{"asset-1"}})
if err == nil || err.Error() != "delete generation output assets" {
t.Fatalf("err=%v", err)
}
}
type recordingAssetDeleter struct {
ids []string
missing map[string]bool
failure error
}
func (d *recordingAssetDeleter) Delete(_ context.Context, _ assets.Scope, id string) (assets.Asset, error) {
d.ids = append(d.ids, id)
if d.failure != nil {
return assets.Asset{}, d.failure
}
if d.missing[id] {
return assets.Asset{}, assets.ErrNotFound
}
return assets.Asset{ID: id}, nil
}