docker_utils.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package main
  2. import (
  3. "fmt"
  4. "os/exec"
  5. "strconv"
  6. "strings"
  7. "testing"
  8. )
  9. func deleteContainer(container string) error {
  10. container = strings.Replace(container, "\n", " ", -1)
  11. container = strings.Trim(container, " ")
  12. rmArgs := fmt.Sprintf("rm %v", container)
  13. rmSplitArgs := strings.Split(rmArgs, " ")
  14. rmCmd := exec.Command(dockerBinary, rmSplitArgs...)
  15. exitCode, err := runCommand(rmCmd)
  16. // set error manually if not set
  17. if exitCode != 0 && err == nil {
  18. err = fmt.Errorf("failed to remove container: `docker rm` exit is non-zero")
  19. }
  20. return err
  21. }
  22. func getAllContainers() (string, error) {
  23. getContainersCmd := exec.Command(dockerBinary, "ps", "-q", "-a")
  24. out, exitCode, err := runCommandWithOutput(getContainersCmd)
  25. if exitCode != 0 && err == nil {
  26. err = fmt.Errorf("failed to get a list of containers: %v\n", out)
  27. }
  28. return out, err
  29. }
  30. func deleteAllContainers() error {
  31. containers, err := getAllContainers()
  32. if err != nil {
  33. fmt.Println(containers)
  34. return err
  35. }
  36. if err = deleteContainer(containers); err != nil {
  37. return err
  38. }
  39. return nil
  40. }
  41. func deleteImages(images string) error {
  42. rmiCmd := exec.Command(dockerBinary, "rmi", images)
  43. exitCode, err := runCommand(rmiCmd)
  44. // set error manually if not set
  45. if exitCode != 0 && err == nil {
  46. err = fmt.Errorf("failed to remove image: `docker rmi` exit is non-zero")
  47. }
  48. return err
  49. }
  50. func cmd(t *testing.T, args ...string) (string, int, error) {
  51. out, status, err := runCommandWithOutput(exec.Command(dockerBinary, args...))
  52. errorOut(err, t, fmt.Sprintf("'%s' failed with errors: %v (%v)", strings.Join(args, " "), err, out))
  53. return out, status, err
  54. }
  55. func findContainerIp(t *testing.T, id string) string {
  56. cmd := exec.Command(dockerBinary, "inspect", "--format='{{ .NetworkSettings.IPAddress }}'", id)
  57. out, _, err := runCommandWithOutput(cmd)
  58. if err != nil {
  59. t.Fatal(err, out)
  60. }
  61. return strings.Trim(out, " \r\n'")
  62. }
  63. func getContainerCount() (int, error) {
  64. const containers = "Containers:"
  65. cmd := exec.Command(dockerBinary, "info")
  66. out, _, err := runCommandWithOutput(cmd)
  67. if err != nil {
  68. return 0, err
  69. }
  70. lines := strings.Split(out, "\n")
  71. for _, line := range lines {
  72. if strings.Contains(line, containers) {
  73. output := stripTrailingCharacters(line)
  74. output = strings.TrimLeft(output, containers)
  75. output = strings.Trim(output, " ")
  76. containerCount, err := strconv.Atoi(output)
  77. if err != nil {
  78. return 0, err
  79. }
  80. return containerCount, nil
  81. }
  82. }
  83. return 0, fmt.Errorf("couldn't find the Container count in the output")
  84. }