Initial commit: DSH Web Manager

This commit is contained in:
2026-10-13 09:34:47 +08:00
commit 85332bbc56
135 changed files with 19712 additions and 0 deletions
+94
View File
@@ -0,0 +1,94 @@
package store
import (
"errors"
"path/filepath"
"sync"
"testing"
)
func TestIntentReservationConcurrencyAndRestart(t *testing.T) {
path := filepath.Join(t.TempDir(), "store.db")
s, err := Open(path)
if err != nil {
t.Fatal(err)
}
if err = s.EnsureIntents(); err != nil {
t.Fatal(err)
}
var wg sync.WaitGroup
result := make(chan error, 30)
for n := 0; n < 30; n++ {
wg.Add(1)
go func(n int) {
defer wg.Done()
if n%2 == 0 {
result <- s.ReserveIntent(Intent{ID: ID(), UID: "u", Name: "test", Version: "1.2.3"})
} else {
result <- s.ReserveInstance(Instance{ID: ID(), UID: "u"})
}
}(n)
}
wg.Wait()
close(result)
ok := 0
for err := range result {
if err == nil {
ok++
} else if !errors.Is(err, ErrInstanceLimit) {
t.Fatal(err)
}
}
if ok != 2 {
t.Fatalf("reserved %d", ok)
}
s.Close()
s, err = Open(path)
if err != nil {
t.Fatal(err)
}
defer s.Close()
if err = s.ReserveIntent(Intent{ID: ID(), UID: "u"}); !errors.Is(err, ErrInstanceLimit) {
t.Fatalf("restart lost reservation: %v", err)
}
}
func TestIntentClaimCancelAndVersion(t *testing.T) {
s, err := Open(filepath.Join(t.TempDir(), "store.db"))
if err != nil {
t.Fatal(err)
}
defer s.Close()
if err = s.EnsureIntents(); err != nil {
t.Fatal(err)
}
in := Intent{ID: ID(), UID: "u", Version: "1.2.3"}
if err = s.ReserveIntent(in); err != nil {
t.Fatal(err)
}
i := Instance{ID: ID(), UID: "u", Version: "1.2.4"}
if err = s.ClaimIntent(in.ID, i); !errors.Is(err, ErrIntentState) {
t.Fatal(err)
}
if err = s.CancelIntent(in.ID, "other"); !errors.Is(err, ErrIntentState) {
t.Fatal(err)
}
i.Version = in.Version
if err = s.ClaimIntent(in.ID, i); err != nil {
t.Fatal(err)
}
if err = s.CancelIntent(in.ID, in.UID); !errors.Is(err, ErrIntentState) {
t.Fatal(err)
}
if err = s.ReserveIntent(Intent{ID: "second", UID: "u"}); err != nil {
t.Fatal(err)
}
if err = s.ReserveIntent(Intent{ID: "third", UID: "u"}); !errors.Is(err, ErrInstanceLimit) {
t.Fatal(err)
}
if err = s.CancelIntent("second", "u"); err != nil {
t.Fatal(err)
}
if err = s.ReserveIntent(Intent{ID: "third", UID: "u"}); err != nil {
t.Fatal(err)
}
}