test exec: waiting for events and timeout while building
authorClément Bénier <clement.benier@iot.bzh>
Tue, 14 Aug 2018 14:44:47 +0000 (16:44 +0200)
committerClément Bénier <clement.benier@iot.bzh>
Tue, 21 Aug 2018 09:08:36 +0000 (11:08 +0200)
Change-Id: I4caf0dd3e59f920f602131638c58e11beb9f3e08
Signed-off-by: Clément Bénier <clement.benier@iot.bzh>
test/exec_test.go

index abe23b5..5d4c106 100644 (file)
@@ -28,6 +28,17 @@ import (
        "github.com/stretchr/testify/assert"
 )
 
+/*flush channel with timeout*/
+func flushChannelExec(channel chan xsapiv1.ExecOutMsg, ms time.Duration) {
+       timeoutB := false
+       for !timeoutB {
+               select {
+               case <-channel:
+               case <-time.After(ms * time.Millisecond):
+                       timeoutB = true
+               }
+       }
+}
 func TestExec(t *testing.T) {
        cloneRepo := "https://github.com/iotbzh/helloworld-service.git"
        cloneDir := path.Join(os.Getenv(envRootCfgDir), "testExec")
@@ -72,6 +83,12 @@ func TestExec(t *testing.T) {
        assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg))
        assert.NotNil(t, cfg)
 
+       chExec := make(chan xsapiv1.ExecOutMsg)
+       defer close(chExec)
+       sCli.Conn.On(xsapiv1.ExecOutEvent, func(ev xsapiv1.ExecOutMsg) {
+               chExec <- ev
+       })
+
        cmd := "export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig/"
        cmd = cmd + " && "
        cmd = cmd + "cd " + fPrj.ClientPath
@@ -88,7 +105,7 @@ func TestExec(t *testing.T) {
        }
        var execRes xsapiv1.ExecArgs
        assert.Nil(t, HTTPCli.Post("/exec", exec, &execRes))
-       time.Sleep(3 * time.Second) //maybe waiting for an event would be better
+       flushChannelExec(chExec, 1000)
 
        cmd = "export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig/"
        cmd = cmd + "&&"
@@ -99,7 +116,7 @@ func TestExec(t *testing.T) {
        cmd = cmd + "make"
        exec.Cmd = cmd
        assert.Nil(t, HTTPCli.Post("/exec", exec, &execRes))
-       time.Sleep(3 * time.Second) //maybe waiting for an event would be better
+       flushChannelExec(chExec, 1000)
 
        /*check afb-helloworld.so exists*/
        _, err = os.Stat(path.Join(fPrj.ClientPath, "build/helloworld-afb/afb-helloworld.so"))