88 lines
2.8 KiB
Go
Executable File
88 lines
2.8 KiB
Go
Executable File
package state
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestOpenAndJournal(t *testing.T) {
|
|
mgr, err := Open(filepath.Join(t.TempDir(), "state.db"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer mgr.Close()
|
|
|
|
if err := mgr.RecordJournal(JournalEntry{
|
|
SpellName: "wget", Variant: "v1",
|
|
Status: StateCasting,
|
|
}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
got, err := mgr.GetJournal("wget", "v1")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got == nil || got.Status != StateCasting {
|
|
t.Fatalf("unexpected journal entry: %+v", got)
|
|
}
|
|
}
|
|
|
|
func TestTablet(t *testing.T) {
|
|
mgr, _ := Open(filepath.Join(t.TempDir(), "state.db"))
|
|
defer mgr.Close()
|
|
|
|
if _, ok := mgr.GetTablet("wget", "ssl"); ok {
|
|
t.Fatal("tablet should be empty initially")
|
|
}
|
|
if err := mgr.SaveTablet("wget", "ssl", true); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
val, ok := mgr.GetTablet("wget", "ssl")
|
|
if !ok || !val {
|
|
t.Fatalf("expected ssl=true, got %v (%v)", val, ok)
|
|
}
|
|
answers := mgr.ListTablet("wget")
|
|
if len(answers) != 1 || !answers["ssl"] {
|
|
t.Fatalf("ListTablet: %+v", answers)
|
|
}
|
|
}
|
|
|
|
func TestManifestAndWhoOwns(t *testing.T) {
|
|
mgr, _ := Open(filepath.Join(t.TempDir(), "state.db"))
|
|
defer mgr.Close()
|
|
|
|
files := []string{"/usr/bin/wget", "/usr/share/man/wget.1"}
|
|
if err := mgr.SaveManifest("wget", "v1", files); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
got, err := mgr.GetManifest("wget", "v1")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(got) != 2 {
|
|
t.Fatalf("expected 2 files, got %d", len(got))
|
|
}
|
|
spell, variant, err := mgr.WhoOwns("/usr/bin/wget")
|
|
if err != nil || spell != "wget" || variant != "v1" {
|
|
t.Fatalf("WhoOwns: %s %s %v", spell, variant, err)
|
|
}
|
|
}
|
|
|
|
func TestRecover(t *testing.T) {
|
|
mgr, _ := Open(filepath.Join(t.TempDir(), "state.db"))
|
|
defer mgr.Close()
|
|
|
|
_ = mgr.RecordJournal(JournalEntry{SpellName: "a", Variant: "v", Status: StateCasting})
|
|
_ = mgr.RecordJournal(JournalEntry{SpellName: "b", Variant: "v", Status: StateInstalled})
|
|
_ = mgr.RecordJournal(JournalEntry{SpellName: "c", Variant: "v", Status: StateFailed})
|
|
|
|
pending, err := mgr.Recover()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
// Only "a" should be pending (Casting). "b" is Installed, "c" is Failed.
|
|
if len(pending) != 1 || pending[0].SpellName != "a" {
|
|
t.Fatalf("Recover: %+v", pending)
|
|
}
|
|
}
|