hs-test: retry command on test setup failure

Type: test

Change-Id: Iad744c4b3f79820e8bd0dd2ef9f18e4f7718e845
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
diff --git a/extras/hs-test/container.go b/extras/hs-test/container.go
index 76d08c7..812198d 100644
--- a/extras/hs-test/container.go
+++ b/extras/hs-test/container.go
@@ -6,6 +6,7 @@
 	"os/exec"
 	"strings"
 	"text/template"
+	"time"
 
 	"github.com/edwarnicke/exechelper"
 )
@@ -137,6 +138,18 @@
 	return args
 }
 
+func (c *Container) runWithRetry(cmd string) error {
+	nTries := 5
+	for i := 0; i < nTries; i++ {
+		err := exechelper.Run(cmd)
+		if err == nil {
+			return nil
+		}
+		time.Sleep(1 * time.Second)
+	}
+	return fmt.Errorf("failed to run container command")
+}
+
 func (c *Container) create() error {
 	cmd := "docker create " + c.getContainerArguments()
 	c.suite.log(cmd)
@@ -146,7 +159,7 @@
 func (c *Container) start() error {
 	cmd := "docker start " + c.name
 	c.suite.log(cmd)
-	return exechelper.Run(cmd)
+	return c.runWithRetry(cmd)
 }
 
 func (c *Container) prepareCommand() (string, error) {
@@ -179,8 +192,7 @@
 	if err != nil {
 		return err
 	}
-
-	return exechelper.Run(cmd)
+	return c.runWithRetry(cmd)
 }
 
 func (c *Container) addVolume(hostDir string, containerDir string, isDefaultWorkDir bool) {