重构代码

This commit is contained in:
2026-03-19 16:37:57 +08:00
parent 51608601cf
commit 8023bfe328
75 changed files with 13325 additions and 394 deletions
+88
View File
@@ -0,0 +1,88 @@
package archivex
import (
"context"
"os"
"b612.me/starlog/internal/runtimex"
)
type FileRecord struct {
FullPath string
Pointer *os.File
}
type Runner struct {
Cancel context.CancelFunc
Done chan struct{}
}
type Store struct {
files runtimex.MapKV
runners runtimex.MapKV
}
func NewStore() *Store {
return &Store{
files: runtimex.NewMapKV(),
runners: runtimex.NewMapKV(),
}
}
func (store *Store) SetFile(id string, record FileRecord) error {
if store == nil {
return nil
}
return store.files.Store(id, record)
}
func (store *Store) GetFile(id string) (FileRecord, bool) {
if store == nil {
return FileRecord{}, false
}
val := store.files.MustGet(id)
if val == nil {
return FileRecord{}, false
}
record, ok := val.(FileRecord)
if !ok {
return FileRecord{}, false
}
return record, true
}
func (store *Store) DeleteFile(id string) error {
if store == nil {
return nil
}
return store.files.Delete(id)
}
func (store *Store) SetRunner(id string, runner *Runner) error {
if store == nil {
return nil
}
return store.runners.Store(id, runner)
}
func (store *Store) GetRunner(id string) (*Runner, bool) {
if store == nil {
return nil, false
}
val := store.runners.MustGet(id)
if val == nil {
return nil, false
}
runner, ok := val.(*Runner)
if !ok || runner == nil {
return nil, false
}
return runner, true
}
func (store *Store) DeleteRunner(id string) error {
if store == nil {
return nil
}
return store.runners.Delete(id)
}
+58
View File
@@ -0,0 +1,58 @@
package archivex
import (
"context"
"io/ioutil"
"os"
"testing"
)
func TestStoreFileLifecycle(t *testing.T) {
store := NewStore()
tmp, err := ioutil.TempFile("", "starlog-archivex-*.log")
if err != nil {
t.Fatalf("TempFile failed: %v", err)
}
defer os.Remove(tmp.Name())
defer tmp.Close()
rec := FileRecord{FullPath: tmp.Name(), Pointer: tmp}
if err := store.SetFile("id-1", rec); err != nil {
t.Fatalf("SetFile failed: %v", err)
}
got, ok := store.GetFile("id-1")
if !ok {
t.Fatalf("GetFile should return stored record")
}
if got.FullPath != rec.FullPath || got.Pointer != rec.Pointer {
t.Fatalf("unexpected file record: %+v", got)
}
if err := store.DeleteFile("id-1"); err != nil {
t.Fatalf("DeleteFile failed: %v", err)
}
if _, ok := store.GetFile("id-1"); ok {
t.Fatalf("record should not exist after DeleteFile")
}
}
func TestStoreRunnerLifecycle(t *testing.T) {
store := NewStore()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
runner := &Runner{Cancel: cancel, Done: make(chan struct{})}
if err := store.SetRunner("r-1", runner); err != nil {
t.Fatalf("SetRunner failed: %v", err)
}
got, ok := store.GetRunner("r-1")
if !ok || got != runner {
t.Fatalf("GetRunner should return stored runner")
}
if err := store.DeleteRunner("r-1"); err != nil {
t.Fatalf("DeleteRunner failed: %v", err)
}
if _, ok := store.GetRunner("r-1"); ok {
t.Fatalf("runner should not exist after DeleteRunner")
}
_ = ctx
}