/* * Copyright (C) 2017-2018 "IoT.bzh" * Author Clément Bénier * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package xdsservertest import ( "os" "path" "regexp" "testing" "time" "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1" "github.com/stretchr/testify/assert" ) func ConnectSDKStateChange(t *testing.T, sCli *IOSockClient, channel chan xsapiv1.SDK) { sCli.Conn.On(xsapiv1.EVTSDKStateChange, func(e xsapiv1.EventMsg) { sdk, _ := e.DecodeSDKEvent() channel <- sdk }) 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)) _, 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()) chSdks := make(chan xsapiv1.SDK) 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") var sdk xsapiv1.SDK assert.Nil(t, HTTPCli.Get("/sdks/"+sdkArray[i].ID, &sdk)) assert.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) } } 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) 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)) }