X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=test%2Fsdks_test.go;h=89fdc67f83c7686e07c31b5e170b23619e7cac88;hb=5dc2ff003106f0ced38caadb06033f24c792f9b9;hp=6319542d4642fd8f76ee9fb91bb940110fbcac81;hpb=a70639fb60bfbe5899f580a48222b47f435ca1f8;p=src%2Fxds%2Fxds-server.git diff --git a/test/sdks_test.go b/test/sdks_test.go index 6319542..89fdc67 100644 --- a/test/sdks_test.go +++ b/test/sdks_test.go @@ -17,144 +17,169 @@ package xdsservertest import ( - "fmt" "log" "os" "path" "regexp" - "sync" + "strings" "testing" "time" - "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent/lib/xaapiv1" - "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1" - socketio_client "github.com/sebd71/go-socket.io-client" - "github.com/stretchr/testify/assert" + "gerrit.automotivelinux.org/gerrit/src/xds/xds-server.git/lib/xsapiv1" + "github.com/stretchr/testify/require" ) -var ch chan xsapiv1.SDK - -// Disconnection Channel used to notify XDS Server disconnection -//type Disconnection struct { -// error string -// code int -// svrConf ServerCfg -//} - -// 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), +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 + } } - 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() { - sCli.Connected = true - }) +} - sCli.Conn.On("disconnection", func(err error) { - log.Printf("WS disconnection event with err: %v\n", err) - sCli.Connected = false - }) +func ConnectSDKStateChange(t *testing.T, sCli *IOSockClient, channel chan xsapiv1.SDK) { sCli.Conn.On(xsapiv1.EVTSDKStateChange, func(e xsapiv1.EventMsg) { sdk, _ := e.DecodeSDKEvent() - ch <- sdk + channel <- sdk }) args := xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTSDKStateChange} - if err := HTTPCli.Post("/events/register", args, nil); err != nil { - return sCli, err + 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) + } +} - return sCli, nil +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()) - _, err = NewIoSocketClient(prefixURL, HTTPCli.GetClientID()) - if err != nil { - t.Fatal(err) - } + require.Nil(t, HTTPCli.Get("/sdks", &sdkArray)) + _, err := os.Stat(path.Join(os.Getenv(envXdtSdk), "sdks_latest.json")) + require.Nil(t, err) - ch = make(chan xsapiv1.SDK) + /*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 := <-ch - 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 + 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 + 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 +} + func TestInstallFakeSdk(t *testing.T) { - sdk := xaapiv1.SDKInstallArgs{ + sdk := xsapiv1.SDKInstallArgs{ ID: "", Filename: sdkFileName, Force: false, } - var sdkRes xsapiv1.SDK - assert.Nil(t, HTTPCli.Post("/sdks", sdk, &sdkRes)) - assert.Equal(t, sdkRes.Status, "Installing") - /*waiting for SDKStateChange event from channel*/ - sdkFromEvent := <-ch - t.Log(sdkFromEvent) - assert.Equal(t, sdkRes.ID, sdkFromEvent.ID) - assert.Equal(t, "Installed", sdkFromEvent.Status) + + chSdks := make(chan xsapiv1.SDK) + defer close(chSdks) + ConnectSDKStateChange(t, sCli, chSdks) + installFakeSdk(t, sdk, chSdks) + + /*test force install*/ + sdk.Force = true + sdkRes := installFakeSdk(t, sdk, chSdks) + RemoveSdk(t, sdkRes, chSdks) + DisconnectSDKStateChange(t, sCli) } func TestSdksError(t *testing.T) { - sdk := xaapiv1.SDKInstallArgs{ + sdk := xsapiv1.SDKInstallArgs{ ID: "", 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)) }