github.com/angryronald/go-kit@v0.0.0-20240505173814-ff2bd9c79dbf/test/docker/rabbitmq/rabbitmq.docker.go (about) 1 package rabbitmq 2 3 import ( 4 "fmt" 5 "os" 6 "os/exec" 7 "sync" 8 "time" 9 10 "github.com/sirupsen/logrus" 11 12 "github.com/angryronald/go-kit/test/docker" 13 ) 14 15 var mu sync.Mutex 16 var upFlag bool 17 var port string 18 var host string 19 20 func init() { 21 port = docker.GetAvailablePort(5672) 22 host = "localhost" 23 upFlag = false 24 } 25 26 // StartRabbitMQ starting rabbitmq in docker and returning active port being used by rabbitmq container 27 func StartRabbitMQ() string { 28 mu.Lock() 29 if !upFlag { 30 // availablePort := docker.GetAvailablePort(1080) 31 // Define the command you want to run 32 cmd := exec.Command("docker", "run", "-d", "--rm", "-p", fmt.Sprintf("%s:5672", port), "--name", "rabbitmq", "-e", "RABBITMQ_DEFAULT_USER=user", "-e", "RABBITMQ_DEFAULT_PASS=password", "rabbitmq:3-management") 33 34 // Set the working directory to the location of your docker-compose.yml file 35 cmd.Dir = "." 36 37 // Capture and print the command's output 38 output, err := cmd.CombinedOutput() 39 if err != nil { 40 StopRabbitMQWithoutLock() 41 logrus.Debug("Error:", err) 42 os.Exit(1) 43 } 44 45 logrus.Debug("Command Output:", string(output)) 46 47 time.Sleep(2 * time.Second) 48 49 cmd = exec.Command("docker", "ps", "-a") 50 51 // Capture and print the command's output 52 output, err = cmd.CombinedOutput() 53 if err != nil { 54 logrus.Debug("Error:", err) 55 os.Exit(1) 56 } 57 58 logrus.Debug("Command Output:", string(output)) 59 60 upFlag = true 61 62 time.Sleep(3 * time.Second) 63 } 64 mu.Unlock() 65 return port 66 } 67 68 func StopRabbitMQWithoutLock() { 69 // Define the command you want to run 70 cmd := exec.Command("docker", "stop", "rabbitmq") 71 72 // Set the working directory to the location of your docker-compose.yml file 73 cmd.Dir = "." 74 75 // Capture and print the command's output 76 output, err := cmd.CombinedOutput() 77 if err != nil { 78 logrus.Debug("Error:", err) 79 os.Exit(1) 80 } 81 82 logrus.Debug("Command Output:", string(output)) 83 } 84 85 func StopRabbitMQ() { 86 mu.Lock() 87 if upFlag { 88 StopRabbitMQWithoutLock() 89 upFlag = false 90 } 91 mu.Unlock() 92 }