sdk_test: draft in progress
[src/xds/xds-server.git] / test / sdks_test.go
diff --git a/test/sdks_test.go b/test/sdks_test.go
new file mode 100644 (file)
index 0000000..5efd8fc
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2017-2018 "IoT.bzh"
+ * Author Clément Bénier <clement.benier@iot.bzh>
+ *
+ * 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)
+       }
+}