Use go module as dependency tool instead of glide
[src/xds/xds-server.git] / test / sdks_test.go
index 3232fa4..89fdc67 100644 (file)
 package xdsservertest
 
 import (
+       "log"
        "os"
        "path"
        "regexp"
+       "strings"
        "testing"
        "time"
 
-       "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1"
-       "github.com/stretchr/testify/assert"
+       "gerrit.automotivelinux.org/gerrit/src/xds/xds-server.git/lib/xsapiv1"
+       "github.com/stretchr/testify/require"
 )
 
+var cpt int
+
+/*flush channel with timeout*/
+func flushChannelSdk(channel chan xsapiv1.SDK, ms time.Duration) {
+       timeoutB := false
+       for !timeoutB {
+               select {
+               case <-channel:
+               case <-time.After(ms * time.Millisecond):
+                       timeoutB = true
+               }
+       }
+}
+
 func ConnectSDKStateChange(t *testing.T, sCli *IOSockClient, channel chan xsapiv1.SDK) {
 
        sCli.Conn.On(xsapiv1.EVTSDKStateChange, func(e xsapiv1.EventMsg) {
@@ -35,51 +51,96 @@ func ConnectSDKStateChange(t *testing.T, sCli *IOSockClient, channel chan xsapiv
        })
 
        args := xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTSDKStateChange}
-       assert.Nil(t, HTTPCli.Post("/events/register", args, nil))
+       require.Nil(t, HTTPCli.Post("/events/register", args, nil))
+}
+
+func DisconnectSDKStateChange(t *testing.T, sCli *IOSockClient) {
+       args := xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTSDKStateChange}
+       require.Nil(t, HTTPCli.Post("/events/unregister", args, nil))
+}
+
+func InitSdkDir() {
+       /*create sdk dir*/
+       sdkDir := os.Getenv(envXdtSdk)
+       os.MkdirAll(sdkDir, 0755)
+       currentDir, err := os.Getwd()
+       if err != nil {
+               log.Fatal(err)
+       }
+       if err := Copy(path.Join(currentDir, sdkFile), path.Join(sdkDir, sdkFileName)); err != nil {
+               log.Fatal(err)
+       }
+}
+
+func RemoveSdk(t *testing.T, sdk xsapiv1.SDK, chSdks chan xsapiv1.SDK) {
+       Debugf(t, "remove sdk %v", sdk.ID)
+       require.Nil(t, HTTPCli.Delete("/sdks/"+sdk.ID, &sdk))
+       sdkFromEvt := <-chSdks //waiting for event Uninstalling
+       require.Equal(t, sdk.ID, sdkFromEvt.ID)
+       require.Equal(t, sdkFromEvt.Status, "Un-installing")
+       sdkFromEvt = <-chSdks //waiting for event not installed
+       require.Equal(t, sdkFromEvt.Status, "Not Installed")
+       os.RemoveAll(path.Join(os.Getenv(envXdtSdk), sdk.Profile))
+       os.Remove(strings.Replace(sdk.URL, "file://", "", 1))
 }
 
 func TestSdks(t *testing.T) {
+       InitSdkDir()
+       /*get sdk list from sdk_latest.json*/
        var sdkArray []xsapiv1.SDK
-       assert.Nil(t, HTTPCli.Get("/sdks", &sdkArray))
-       _, err := os.Stat(path.Join(sdkDir, "sdks_latest.json"))
-       assert.Nil(t, err)
-       t.Logf("Connect websocket with url=%v clientId=%v\n", prefixURL, HTTPCli.GetClientID())
+       require.Nil(t, HTTPCli.Get("/sdks", &sdkArray))
+       _, err := os.Stat(path.Join(os.Getenv(envXdtSdk), "sdks_latest.json"))
+       require.Nil(t, err)
 
+       /*create channel fro SDK event*/
        chSdks := make(chan xsapiv1.SDK)
        defer close(chSdks)
        ConnectSDKStateChange(t, sCli, chSdks)
 
+       /*checking startup installing of SDKs*/
        for i := 0; i < len(sdkArray); i++ {
                re := regexp.MustCompile("^[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+$")
-               assert.True(t, re.MatchString(sdkArray[i].ID))
-               assert.Equal(t, sdkArray[0].Status, "Not Installed")
+               require.True(t, re.MatchString(sdkArray[i].ID))
+               require.Equal(t, sdkArray[0].Status, "Not Installed")
 
                var sdk xsapiv1.SDK
-               assert.Nil(t, HTTPCli.Get("/sdks/"+sdkArray[i].ID, &sdk))
-               assert.Equal(t, sdkArray[i], sdk)
+               require.Nil(t, HTTPCli.Get("/sdks/"+sdkArray[i].ID, &sdk))
+               require.Equal(t, sdkArray[i], sdk)
 
                var sdkRes xsapiv1.SDK
-               assert.Nil(t, HTTPCli.Post("/sdks", sdk, &sdkRes))
-               assert.Equal(t, sdkRes.Status, "Installing")
-               time.Sleep(1 * time.Millisecond)
-               assert.Nil(t, HTTPCli.Post("/sdks/abortinstall", sdk, &sdkRes))
-               assert.Equal(t, sdkRes.Status, "Not Installed")
-               time.Sleep(1 * time.Millisecond)
-               sdkFromEvent := <-chSdks
-               assert.Equal(t, sdkRes.ID, sdkFromEvent.ID)
-               assert.Equal(t, sdkRes.Status, sdkFromEvent.Status)
+               /*install sdk*/
+               Debugf(t, "install sdk %v", sdk.Name)
+               require.Nil(t, HTTPCli.Post("/sdks", sdk, &sdkRes))
+               require.Equal(t, sdkRes.Status, "Installing")
+               sdkFromEvent := <-chSdks //waiting for installing event
+               require.Equal(t, sdkRes.ID, sdkFromEvent.ID)
+               require.Equal(t, sdkFromEvent.Status, "Installing")
+
+               /*abort sdk install*/
+               Debugf(t, "abort install sdk %v", sdk.Name)
+               require.Nil(t, HTTPCli.Post("/sdks/abortinstall", sdk, &sdkRes))
+               require.Equal(t, sdkRes.Status, "Not Installed")
+               sdkFromEvent = <-chSdks //waiting for not installed status*/
+               require.Equal(t, sdkRes.ID, sdkFromEvent.ID)
+               require.Equal(t, sdkRes.Status, sdkFromEvent.Status)
        }
 }
 
 func installFakeSdk(t *testing.T, sdkInstall xsapiv1.SDKInstallArgs, chSdks chan xsapiv1.SDK) xsapiv1.SDK {
+       InitSdkDir()
        var sdkRes xsapiv1.SDK
-       assert.Nil(t, HTTPCli.Post("/sdks", sdkInstall, &sdkRes))
-       assert.Equal(t, sdkRes.Status, "Installing")
-       /*waiting for SDKStateChange event from channel*/
+       require.Nil(t, HTTPCli.Post("/sdks", sdkInstall, &sdkRes))
+       Debugf(t, "Install fake sdk %v (force=%v)", sdkRes.Name, sdkInstall.Force)
+       require.Equal(t, sdkRes.Status, "Installing")
        sdkFromEvent := <-chSdks
-       t.Log(sdkFromEvent)
-       assert.Equal(t, sdkRes.ID, sdkFromEvent.ID)
-       assert.Equal(t, "Installed", sdkFromEvent.Status)
+       require.Equal(t, sdkRes.ID, sdkFromEvent.ID)
+       require.Equal(t, sdkFromEvent.Status, "Installing")
+       /*waiting for SDKStateChange event from channel*/
+       sdkFromEvent = <-chSdks
+       require.Equal(t, sdkRes.ID, sdkFromEvent.ID)
+       require.Equal(t, "Installed", sdkFromEvent.Status)
+       require.Equal(t, sdkFromEvent.LastError, "")
+       Debugf(t, "Fake sdk %v installed", sdkFromEvent.Name)
        return sdkFromEvent
 }
 
@@ -94,10 +155,12 @@ func TestInstallFakeSdk(t *testing.T) {
        defer close(chSdks)
        ConnectSDKStateChange(t, sCli, chSdks)
        installFakeSdk(t, sdk, chSdks)
-       var sdkRes xsapiv1.SDK
-       assert.NotNil(t, HTTPCli.Post("/sdks", sdk, &sdkRes))
+
+       /*test force install*/
        sdk.Force = true
-       //installFakeSdk(t, sdk, chSdks)
+       sdkRes := installFakeSdk(t, sdk, chSdks)
+       RemoveSdk(t, sdkRes, chSdks)
+       DisconnectSDKStateChange(t, sCli)
 }
 
 func TestSdksError(t *testing.T) {
@@ -106,10 +169,17 @@ func TestSdksError(t *testing.T) {
                Filename: "",
                Force:    false,
        }
+       Debugf(t, "error while installing sdk with no ID and no Filename")
        var sdkRes xsapiv1.SDK
-       assert.NotNil(t, HTTPCli.Post("/sdks", sdk, &sdkRes))
-       sdk.ID = "42885c24-374e-3ef0-9723-0ce8a05191aa"
-       assert.NotNil(t, HTTPCli.Post("/sdks", sdk, &sdkRes))
+       /*error with no ID no filename*/
+       require.NotNil(t, HTTPCli.Post("/sdks", sdk, &sdkRes))
+       sdk.ID = "42885c24-374e-3ef0-9723-0c8a05191aa"
+       Debugf(t, "error while installing sdk with a fake id=%v", sdk.ID)
+       /*error with fake ID*/
+       require.NotNil(t, HTTPCli.Post("/sdks", sdk, &sdkRes))
+       sdk.ID = ""
        sdk.Filename = "fake"
-       assert.NotNil(t, HTTPCli.Post("/sdks", sdk, &sdkRes))
+       Debugf(t, "error while installing sdk with a fake filename=%v", sdk.Filename)
+       /*error with fake filename*/
+       require.NotNil(t, HTTPCli.Post("/sdks", sdk, &sdkRes))
 }