diff_test.go 902 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package raft
  2. import (
  3. "fmt"
  4. "io"
  5. "io/ioutil"
  6. "os"
  7. "os/exec"
  8. "strings"
  9. )
  10. func diffu(a, b string) string {
  11. if a == b {
  12. return ""
  13. }
  14. aname, bname := mustTemp("base", a), mustTemp("other", b)
  15. defer os.Remove(aname)
  16. defer os.Remove(bname)
  17. cmd := exec.Command("diff", "-u", aname, bname)
  18. buf, err := cmd.CombinedOutput()
  19. if err != nil {
  20. if _, ok := err.(*exec.ExitError); ok {
  21. // do nothing
  22. return string(buf)
  23. }
  24. panic(err)
  25. }
  26. return string(buf)
  27. }
  28. func mustTemp(pre, body string) string {
  29. f, err := ioutil.TempFile("", pre)
  30. if err != nil {
  31. panic(err)
  32. }
  33. _, err = io.Copy(f, strings.NewReader(body))
  34. if err != nil {
  35. panic(err)
  36. }
  37. f.Close()
  38. return f.Name()
  39. }
  40. func ltoa(l *raftLog) string {
  41. s := fmt.Sprintf("committed: %d\n", l.committed)
  42. s += fmt.Sprintf("applied: %d\n", l.applied)
  43. for i, e := range l.ents {
  44. s += fmt.Sprintf("#%d: %+v\n", i, e)
  45. }
  46. return s
  47. }