persist_test.go (3012B)
1 package engine 2 3 import ( 4 "context" 5 "io/ioutil" 6 "os" 7 "testing" 8 9 "git.defalsify.org/vise.git/cache" 10 "git.defalsify.org/vise.git/persist" 11 "git.defalsify.org/vise.git/state" 12 ) 13 14 func TestRunPersist(t *testing.T) { 15 generateTestData(t) 16 cfg := Config{ 17 OutputSize: 83, 18 SessionId: "xyzzy", 19 Root: "root", 20 } 21 rs := NewFsWrapper(dataDir, nil) 22 23 persistDir, err := ioutil.TempDir("", "vise_engine_persist") 24 if err != nil { 25 t.Fatal(err) 26 } 27 28 st := state.NewState(3) 29 ca := cache.NewCache().WithCacheSize(1024) 30 pr := persist.NewFsPersister(persistDir).WithContent(&st, ca) 31 32 w := os.Stdout 33 ctx := context.TODO() 34 35 st = state.NewState(cfg.FlagCount) 36 ca = cache.NewCache() 37 ca = ca.WithCacheSize(cfg.CacheSize) 38 pr = persist.NewFsPersister(persistDir).WithContent(&st, ca) 39 err = pr.Save(cfg.SessionId) 40 if err != nil { 41 t.Fatal(err) 42 } 43 44 pr = persist.NewFsPersister(persistDir) 45 inputs := []string{ 46 "", // trigger init, will not exec 47 "1", 48 "2", 49 "00", 50 } 51 for _, v := range inputs { 52 err = RunPersisted(cfg, rs, pr, []byte(v), w, ctx) 53 if err != nil { 54 t.Fatal(err) 55 } 56 } 57 58 pr = persist.NewFsPersister(persistDir) 59 err = pr.Load(cfg.SessionId) 60 if err != nil { 61 t.Fatal(err) 62 } 63 64 stAfter := pr.GetState() 65 location, idx := stAfter.Where() 66 if location != "long" { 67 t.Fatalf("expected 'long', got %s", location) 68 } 69 if idx != 1 { 70 t.Fatalf("expected '1', got %v", idx) 71 } 72 } 73 74 func TestEnginePersist(t *testing.T) { 75 generateTestData(t) 76 cfg := Config{ 77 OutputSize: 83, 78 SessionId: "xyzzy", 79 Root: "root", 80 } 81 rs := NewFsWrapper(dataDir, nil) 82 83 persistDir, err := ioutil.TempDir("", "vise_engine_persist") 84 if err != nil { 85 t.Fatal(err) 86 } 87 88 st := state.NewState(3) 89 ca := cache.NewCache().WithCacheSize(1024) 90 pr := persist.NewFsPersister(persistDir).WithContent(&st, ca) 91 92 //w := os.Stdout 93 ctx := context.TODO() 94 95 st = state.NewState(cfg.FlagCount) 96 ca = cache.NewCache() 97 ca = ca.WithCacheSize(cfg.CacheSize) 98 pr = persist.NewFsPersister(persistDir).WithContent(&st, ca) 99 err = pr.Save(cfg.SessionId) 100 if err != nil { 101 t.Fatal(err) 102 } 103 104 en, err := NewPersistedEngine(ctx, cfg, pr, rs) 105 if err != nil { 106 t.Fatal(err) 107 } 108 109 _, err = en.Init(ctx) 110 if err != nil { 111 t.Fatal(err) 112 } 113 114 _, err = en.Exec(ctx, []byte("1")) 115 if err != nil { 116 t.Fatal(err) 117 } 118 119 _, err = en.Exec(ctx, []byte("2")) 120 if err != nil { 121 t.Fatal(err) 122 } 123 _, err = en.Exec(ctx, []byte("00")) 124 if err != nil { 125 t.Fatal(err) 126 } 127 location, idx := st.Where() 128 if location != "long" { 129 t.Fatalf("expected location 'long', got %s", location) 130 } 131 if idx != 1 { 132 t.Fatalf("expected index '1', got %v", idx) 133 } 134 135 pr = persist.NewFsPersister(persistDir) 136 en, err = NewPersistedEngine(ctx, cfg, pr, rs) 137 if err != nil { 138 t.Fatal(err) 139 } 140 st_loaded := pr.GetState() 141 location, _ = st_loaded.Where() 142 if location != "long" { 143 t.Fatalf("expected location 'long', got %s", location) 144 } 145 if idx != 1 { 146 t.Fatalf("expected index '1', got %v", idx) 147 } 148 149 _, err = en.Exec(ctx, []byte("11")) 150 if err != nil { 151 t.Fatal(err) 152 } 153 }