test sdks: close channels
[src/xds/xds-server.git] / test / sdks_test.go
index 5efd8fc..3232fa4 100644 (file)
 package xdsservertest
 
 import (
-       "fmt"
-       "log"
+       "os"
+       "path"
        "regexp"
-       "sync"
        "testing"
        "time"
 
        "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1"
-       socketio_client "github.com/sebd71/go-socket.io-client"
        "github.com/stretchr/testify/assert"
 )
 
-// Disconnection Channel used to notify XDS Server disconnection
-//type Disconnection struct {
-//     error   string
-//     code    int
-//     svrConf ServerCfg
-//}
+func ConnectSDKStateChange(t *testing.T, sCli *IOSockClient, channel chan xsapiv1.SDK) {
 
-// IOSockClient .
-type IOSockClient struct {
-       URL       string
-       Conn      *socketio_client.Client
-       Options   *socketio_client.Options
-       EmitMutex *sync.Mutex
-       Connected bool
-       //ServerDiscoChan chan Disconnection
-       EscapeKeys []byte
-}
-
-func NewIoSocketClient(url, clientID string) (*IOSockClient, error) {
-
-       var err error
-
-       sCli := &IOSockClient{
-               URL:       url,
-               EmitMutex: &sync.Mutex{},
-               Options: &socketio_client.Options{
-                       Transport: "websocket",
-                       Header:    make(map[string][]string),
-               },
-               //ServerDiscoChan: make(chan Disconnection, 1),
-       }
-       sCli.Options.Header["XDS-SID"] = []string{clientID}
-
-       sCli.Conn, err = socketio_client.NewClient(url, sCli.Options)
-       if err != nil {
-               return nil, fmt.Errorf("IO.socket connection error: " + err.Error())
-       }
-
-       sCli.Conn.On("connection", func() {
-               log.Printf("BBBBBBBBBBBBBBBB:::WS connection event")
-               sCli.Connected = true
-       })
-
-       sCli.Conn.On("disconnection", func(err error) {
-               log.Printf("AAAAAAAAAAAA:::WS disconnection event with err: %v\n", err)
-               sCli.Connected = false
+       sCli.Conn.On(xsapiv1.EVTSDKStateChange, func(e xsapiv1.EventMsg) {
+               sdk, _ := e.DecodeSDKEvent()
+               channel <- sdk
        })
 
-       sCli.Conn.On(xsapiv1.EVTSDKManagement, func(data interface{}) {
-               log.Printf("WS disconnection event with err: %v\n", data)
-       })
-
-       args := xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTSDKManagement}
-       if err := HTTPCli.Post("/events/register", args, nil); err != nil {
-               return sCli, err
-       }
-
-       return sCli, nil
+       args := xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTSDKStateChange}
+       assert.Nil(t, HTTPCli.Post("/events/register", args, nil))
 }
 
 func TestSdks(t *testing.T) {
        var sdkArray []xsapiv1.SDK
        assert.Nil(t, HTTPCli.Get("/sdks", &sdkArray))
-       t.Log(sdkArray[0])
-
+       _, 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())
-       IOSkClient, err := NewIoSocketClient(prefixURL, HTTPCli.GetClientID())
-       if err != nil {
-               t.Fatal(err)
-       }
-       t.Log(IOSkClient)
 
-       //for i := 0; i < len(sdkArray); i++ {
-       for i := 0; i < 1; i++ {
+       chSdks := make(chan xsapiv1.SDK)
+       defer close(chSdks)
+       ConnectSDKStateChange(t, sCli, chSdks)
+
+       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")
@@ -114,7 +61,55 @@ func TestSdks(t *testing.T) {
                var sdkRes xsapiv1.SDK
                assert.Nil(t, HTTPCli.Post("/sdks", sdk, &sdkRes))
                assert.Equal(t, sdkRes.Status, "Installing")
-               //t.Log(sdkRes)
-               time.Sleep(1 * time.Second)
+               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)
+       }
+}
+
+func installFakeSdk(t *testing.T, sdkInstall xsapiv1.SDKInstallArgs, chSdks chan xsapiv1.SDK) xsapiv1.SDK {
+       var sdkRes xsapiv1.SDK
+       assert.Nil(t, HTTPCli.Post("/sdks", sdkInstall, &sdkRes))
+       assert.Equal(t, sdkRes.Status, "Installing")
+       /*waiting for SDKStateChange event from channel*/
+       sdkFromEvent := <-chSdks
+       t.Log(sdkFromEvent)
+       assert.Equal(t, sdkRes.ID, sdkFromEvent.ID)
+       assert.Equal(t, "Installed", sdkFromEvent.Status)
+       return sdkFromEvent
+}
+
+func TestInstallFakeSdk(t *testing.T) {
+       sdk := xsapiv1.SDKInstallArgs{
+               ID:       "",
+               Filename: sdkFileName,
+               Force:    false,
+       }
+
+       chSdks := make(chan xsapiv1.SDK)
+       defer close(chSdks)
+       ConnectSDKStateChange(t, sCli, chSdks)
+       installFakeSdk(t, sdk, chSdks)
+       var sdkRes xsapiv1.SDK
+       assert.NotNil(t, HTTPCli.Post("/sdks", sdk, &sdkRes))
+       sdk.Force = true
+       //installFakeSdk(t, sdk, chSdks)
+}
+
+func TestSdksError(t *testing.T) {
+       sdk := xsapiv1.SDKInstallArgs{
+               ID:       "",
+               Filename: "",
+               Force:    false,
        }
+       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))
+       sdk.Filename = "fake"
+       assert.NotNil(t, HTTPCli.Post("/sdks", sdk, &sdkRes))
 }