/* * 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 ( "fmt" "log" "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 //} // 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.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 } func TestSdks(t *testing.T) { var sdkArray []xsapiv1.SDK assert.Nil(t, HTTPCli.Get("/sdks", &sdkArray)) t.Log(sdkArray[0]) 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++ { 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") //t.Log(sdkRes) time.Sleep(1 * time.Second) } }