hs-test: manage containers and volumes within test suite

Type: test
Signed-off-by: Maros Ondrejicka <maros.ondrejicka@pantheon.tech>
Change-Id: I614111814af5a99dcaa22c8581ea2d339572ae1c
diff --git a/extras/hs-test/vcl_test.go b/extras/hs-test/vcl_test.go
index b68385a..9febe8b 100755
--- a/extras/hs-test/vcl_test.go
+++ b/extras/hs-test/vcl_test.go
@@ -4,7 +4,6 @@
 	"fmt"
 	"time"
 
-	"github.com/edwarnicke/exechelper"
 )
 
 func (s *VethsSuite) TestVclEchoQuic() {
@@ -22,67 +21,48 @@
 }
 
 func (s *VethsSuite) testVclEcho(proto string) {
-	t := s.T()
+	serverVolume := "echo-srv-vol"
+	s.NewVolume(serverVolume)
 
-	exechelper.Run("docker volume create --name=echo-srv-vol")
-	exechelper.Run("docker volume create --name=echo-cln-vol")
+	clientVolume := "echo-cln-vol"
+	s.NewVolume(clientVolume)
 
-	srvInstance := "vpp-echo-srv"
-	clnInstance := "vpp-echo-cln"
+	srvInstance := "vpp-vcl-test-srv"
+	serverVppContainer, err := s.NewContainer(srvInstance)
+	s.assertNil(err)
+	serverVppContainer.addVolume(serverVolume, "/tmp/Configure2Veths")
+	serverVppContainer.run()
+
+	clnInstance := "vpp-vcl-test-cln"
+	clientVppContainer, err := s.NewContainer(clnInstance)
+	s.assertNil(err)
+	clientVppContainer.addVolume(clientVolume, "/tmp/Configure2Veths")
+	clientVppContainer.run();
+
 	echoSrv := "echo-srv"
+	serverEchoContainer, err := s.NewContainer(echoSrv)
+	s.assertNil(err)
+	serverEchoContainer.addVolume(serverVolume, "/tmp/" + echoSrv)
+	serverEchoContainer.run()
+
 	echoCln := "echo-cln"
-
-	err := dockerRun(srvInstance, "-v echo-srv-vol:/tmp/Configure2Veths")
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + srvInstance) }()
-
-	err = dockerRun(clnInstance, "-v echo-cln-vol:/tmp/Configure2Veths")
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + clnInstance) }()
-
-	err = dockerRun(echoSrv, fmt.Sprintf("-v echo-srv-vol:/tmp/%s", echoSrv))
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + echoSrv) }()
-
-	err = dockerRun(echoCln, fmt.Sprintf("-v echo-cln-vol:/tmp/%s", echoCln))
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + echoCln) }()
+	clientEchoContainer, err := s.NewContainer(echoCln)
+	s.assertNil(err)
+	clientEchoContainer.addVolume(clientVolume, "/tmp/" + echoCln)
+	clientEchoContainer.run()
 
 	_, err = hstExec("Configure2Veths srv", srvInstance)
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
+	s.assertNil(err)
 
 	_, err = hstExec("Configure2Veths cln", clnInstance)
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
+	s.assertNil(err)
 
 	// run server app
 	_, err = hstExec("RunEchoServer "+proto, echoSrv)
-	if err != nil {
-		t.Errorf("echo server: %v", err)
-		return
-	}
+	s.assertNil(err)
 
 	o, err := hstExec("RunEchoClient "+proto, echoCln)
-	if err != nil {
-		t.Errorf("echo client: %v", err)
-	}
+	s.assertNil(err)
 	fmt.Println(o)
 }
 
@@ -92,99 +72,68 @@
 }
 
 func (s *VethsSuite) testRetryAttach(proto string) {
-	t := s.T()
+	serverVolume := "echo-srv-vol"
+	s.NewVolume(serverVolume)
 
-	exechelper.Run("docker volume create --name=echo-srv-vol")
-	exechelper.Run("docker volume create --name=echo-cln-vol")
+	clientVolume := "echo-cln-vol"
+	s.NewVolume(clientVolume)
 
 	srvInstance := "vpp-vcl-test-srv"
+	serverVppContainer, err := s.NewContainer(srvInstance)
+	s.assertNil(err)
+	serverVppContainer.addVolume(serverVolume, "/tmp/Configure2Veths")
+	serverVppContainer.run()
+
 	clnInstance := "vpp-vcl-test-cln"
+	clientVppContainer, err := s.NewContainer(clnInstance)
+	s.assertNil(err)
+	clientVppContainer.addVolume(clientVolume, "/tmp/Configure2Veths")
+	clientVppContainer.run();
+
 	echoSrv := "echo-srv"
+	serverEchoContainer, err := s.NewContainer(echoSrv)
+	s.assertNil(err)
+	serverEchoContainer.addVolume(serverVolume, "/tmp/" + echoSrv)
+	serverEchoContainer.run()
+
 	echoCln := "echo-cln"
-
-	err := dockerRun(srvInstance, "-v echo-srv-vol:/tmp/Configure2Veths")
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + srvInstance) }()
-
-	err = dockerRun(clnInstance, "-v echo-cln-vol:/tmp/Configure2Veths")
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + clnInstance) }()
-
-	err = dockerRun(echoSrv, fmt.Sprintf("-v echo-srv-vol:/tmp/%s", echoSrv))
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + echoSrv) }()
-
-	err = dockerRun(echoCln, fmt.Sprintf("-v echo-cln-vol:/tmp/%s", echoCln))
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + echoCln) }()
+	clientEchoContainer, err := s.NewContainer(echoCln)
+	s.assertNil(err)
+	clientEchoContainer.addVolume(clientVolume, "/tmp/" + echoCln)
+	clientEchoContainer.run()
 
 	_, err = hstExec("Configure2Veths srv-with-preset-hw-addr", srvInstance)
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
+	s.assertNil(err)
 
 	_, err = hstExec("Configure2Veths cln", clnInstance)
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
+	s.assertNil(err)
 
 	_, err = hstExec("RunVclEchoServer "+proto, echoSrv)
-	if err != nil {
-		t.Errorf("vcl test server: %v", err)
-		return
-	}
+	s.assertNil(err)
 
 	fmt.Println("This whole test case can take around 3 minutes to run. Please be patient.")
 	fmt.Println("... Running first echo client test, before disconnect.")
 	_, err = hstExec("RunVclEchoClient "+proto, echoCln)
-	if err != nil {
-		t.Errorf("vcl test client: %v", err)
-		return
-	}
+	s.assertNil(err)
 	fmt.Println("... First test ended. Stopping VPP server now.")
 
 	// Stop server-vpp-instance, start it again and then run vcl-test-client once more
 	stopVppCommand := "/bin/bash -c 'ps -C vpp_main -o pid= | xargs kill -9'"
 	_, err = dockerExec(stopVppCommand, srvInstance)
-	if err != nil {
-		t.Errorf("error while stopping vpp: %v", err)
-		return
-	}
+	s.assertNil(err)
 	time.Sleep(5 * time.Second) // Give parent process time to reap the killed child process
 	stopVppCommand = "/bin/bash -c 'ps -C hs-test -o pid= | xargs kill -9'"
 	_, err = dockerExec(stopVppCommand, srvInstance)
-	if err != nil {
-		t.Errorf("error while stopping hs-test: %v", err)
-		return
-	}
+	s.assertNil(err)
 	_, err = hstExec("Configure2Veths srv-with-preset-hw-addr", srvInstance)
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
+	s.assertNil(err)
 
 	fmt.Println("... VPP server is starting again, so waiting for a bit.")
 	time.Sleep(30 * time.Second) // Wait a moment for the re-attachment to happen
 
 	fmt.Println("... Running second echo client test, after disconnect and re-attachment.")
 	_, err = hstExec("RunVclEchoClient "+proto, echoCln)
-	if err != nil {
-		t.Errorf("vcl test client: %v", err)
-	}
+	s.assertNil(err)
 	fmt.Println("Done.")
 }