fake.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package fake
  2. import (
  3. "archive/tar"
  4. "bytes"
  5. "github.com/kr/pty"
  6. "io"
  7. "math/rand"
  8. "os/exec"
  9. )
  10. func FakeTar() (io.Reader, error) {
  11. content := []byte("Hello world!\n")
  12. buf := new(bytes.Buffer)
  13. tw := tar.NewWriter(buf)
  14. for _, name := range []string{"/etc/postgres/postgres.conf", "/etc/passwd", "/var/log/postgres/postgres.conf"} {
  15. hdr := new(tar.Header)
  16. hdr.Size = int64(len(content))
  17. hdr.Name = name
  18. if err := tw.WriteHeader(hdr); err != nil {
  19. return nil, err
  20. }
  21. tw.Write([]byte(content))
  22. }
  23. tw.Close()
  24. return buf, nil
  25. }
  26. func WriteFakeTar(dst io.Writer) error {
  27. if data, err := FakeTar(); err != nil {
  28. return err
  29. } else if _, err := io.Copy(dst, data); err != nil {
  30. return err
  31. }
  32. return nil
  33. }
  34. func RandomBytesChanged() uint {
  35. return uint(rand.Int31n(24 * 1024 * 1024))
  36. }
  37. func RandomFilesChanged() uint {
  38. return uint(rand.Int31n(42))
  39. }
  40. func RandomContainerSize() uint {
  41. return uint(rand.Int31n(142 * 1024 * 1024))
  42. }
  43. func ContainerRunning() bool {
  44. return false
  45. }
  46. func StartCommand(cmd *exec.Cmd, interactive bool) (io.WriteCloser, io.ReadCloser, error) {
  47. if interactive {
  48. term, err := pty.Start(cmd)
  49. if err != nil {
  50. return nil, nil, err
  51. }
  52. return term, term, nil
  53. }
  54. stdin, err := cmd.StdinPipe()
  55. if err != nil {
  56. return nil, nil, err
  57. }
  58. stdout, err := cmd.StdoutPipe()
  59. if err != nil {
  60. return nil, nil, err
  61. }
  62. if err := cmd.Start(); err != nil {
  63. return nil, nil, err
  64. }
  65. return stdin, stdout, nil
  66. }