go-vise

Constrained Size Output Virtual Machine
Info | Log | Files | Refs | README | LICENSE

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 }