Correct error comparison for sym data load in fs

This commit is contained in:
lash 2023-04-10 08:07:08 +01:00
parent 89deda1268
commit da45ee783b
Signed by untrusted user who does not match committer: lash
GPG Key ID: 21D2E7BB88C2A746
5 changed files with 54 additions and 5 deletions

View File

@ -19,7 +19,7 @@ func main() {
ctx := context.Background() ctx := context.Background()
en := engine.NewDefaultEngine(dir) en := engine.NewDefaultEngine(dir)
err := engine.Loop(root, &en, ctx) err := engine.Loop(&en, root, ctx, os.Stdin, os.Stdout)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "loop exited with error: %v", err) fmt.Fprintf(os.Stderr, "loop exited with error: %v", err)
os.Exit(1) os.Exit(1)

View File

@ -6,6 +6,7 @@ import (
"context" "context"
"fmt" "fmt"
"io" "io"
"log"
"strings" "strings"
) )
@ -23,6 +24,10 @@ func Loop(en *Engine, startSym string, ctx context.Context, reader io.Reader, wr
bufReader := bufio.NewReader(reader) bufReader := bufio.NewReader(reader)
for running { for running {
in, err := bufReader.ReadString('\n') in, err := bufReader.ReadString('\n')
if err == io.EOF {
log.Printf("EOF found, that's all folks")
return nil
}
if err != nil { if err != nil {
return fmt.Errorf("cannot read input: %v\n", err) return fmt.Errorf("cannot read input: %v\n", err)
} }
@ -33,7 +38,6 @@ func Loop(en *Engine, startSym string, ctx context.Context, reader io.Reader, wr
} }
b := bytes.NewBuffer(nil) b := bytes.NewBuffer(nil)
en.WriteResult(b) en.WriteResult(b)
//fmt.Println(b.String())
writer.Write(b.Bytes()) writer.Write(b.Bytes())
writer.Write([]byte{0x0a}) writer.Write([]byte{0x0a})
} }

44
go/engine/loop_test.go Normal file
View File

@ -0,0 +1,44 @@
package engine
import (
"bytes"
"context"
"log"
"strings"
"testing"
"git.defalsify.org/festive/cache"
"git.defalsify.org/festive/resource"
"git.defalsify.org/festive/state"
)
func TestLoopCorrect(t *testing.T) {
generateTestData(t)
ctx := context.TODO()
st := state.NewState(0)
//rs := NewFsWrapper(dataDir, &st)
rs := resource.NewFsResource(dataDir)
ca := cache.NewCache().WithCacheSize(1024)
en := NewEngine(&st, &rs, ca)
err := en.Init("root", ctx)
if err != nil {
t.Fatal(err)
}
input := []string{
"1",
"0",
"1",
"0",
}
inputStr := strings.Join(input, "\n")
inputBuf := bytes.NewBuffer(append([]byte(inputStr), 0x0a))
outputBuf := bytes.NewBuffer(nil)
log.Printf("running with input: %s", inputBuf.Bytes())
err = Loop(&en, "root", ctx, inputBuf, outputBuf)
if err != nil {
t.Fatal(err)
}
}

View File

@ -4,6 +4,7 @@ import (
"context" "context"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"log"
"path" "path"
"path/filepath" "path/filepath"
"strings" "strings"
@ -44,7 +45,7 @@ func(fs FsResource) FuncFor(sym string) (EntryFunc, error) {
return fn, nil return fn, nil
} }
_, err := fs.getFuncNoCtx(sym) _, err := fs.getFuncNoCtx(sym)
if err == nil { if err != nil {
return nil, fmt.Errorf("unknown sym: %s", sym) return nil, fmt.Errorf("unknown sym: %s", sym)
} }
return fs.getFunc, nil return fs.getFunc, nil
@ -61,10 +62,11 @@ func(fs FsResource) getFunc(sym string, ctx context.Context) (string, error) {
func(fs FsResource) getFuncNoCtx(sym string) (string, error) { func(fs FsResource) getFuncNoCtx(sym string) (string, error) {
fb := sym + ".txt" fb := sym + ".txt"
fp := path.Join(fs.Path, fb) fp := path.Join(fs.Path, fb)
log.Printf("getfunc search dir %s %s for %s", fs.Path, fp, sym)
r, err := ioutil.ReadFile(fp) r, err := ioutil.ReadFile(fp)
if err != nil { if err != nil {
return "", fmt.Errorf("failed getting data for sym '%s': %v", sym, err) return "", fmt.Errorf("failed getting data for sym '%s': %v", sym, err)
} }
s := string(r) s := string(r)
return strings.TrimSpace(s), err return strings.TrimSpace(s), nil
} }

View File

@ -266,7 +266,6 @@ func(st *State) Up() (string, error) {
if len(st.execPath) > 0 { if len(st.execPath) > 0 {
sym = st.execPath[len(st.execPath)-1] sym = st.execPath[len(st.execPath)-1]
} }
log.Printf("execpath %v", st.execPath)
st.sizeIdx = 0 st.sizeIdx = 0
return sym, nil return sym, nil
} }