diff --git a/raft/diff_test.go b/raft/diff_test.go new file mode 100644 index 000000000..d8173cd0a --- /dev/null +++ b/raft/diff_test.go @@ -0,0 +1,51 @@ +package raft + +import ( + "fmt" + "io" + "io/ioutil" + "os" + "os/exec" + "strings" +) + +func diffu(a, b string) string { + if a == b { + return "" + } + aname, bname := mustTemp("base", a), mustTemp("other", b) + defer os.Remove(aname) + defer os.Remove(bname) + cmd := exec.Command("diff", "-u", aname, bname) + buf, err := cmd.CombinedOutput() + if err != nil { + if _, ok := err.(*exec.ExitError); ok { + // do nothing + return string(buf) + } + panic(err) + } + return string(buf) +} + +func mustTemp(pre, body string) string { + f, err := ioutil.TempFile("", pre) + if err != nil { + panic(err) + } + _, err = io.Copy(f, strings.NewReader(body)) + if err != nil { + panic(err) + } + f.Close() + return f.Name() +} + +func ltoa(l *log) string { + s := fmt.Sprintf("committed: %d\n", l.committed) + s += fmt.Sprintf("applied: %d\n", l.applied) + for i, e := range l.ents { + s += fmt.Sprintf("#%d: %+v\n", i, e) + } + return s +}