sdk_test: draft in progress
[src/xds/xds-server.git] / test / sdks_test.go
1 /*
2  * Copyright (C) 2017-2018 "IoT.bzh"
3  * Author Clément Bénier <clement.benier@iot.bzh>
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *   http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 package xdsservertest
18
19 import (
20         "fmt"
21         "log"
22         "regexp"
23         "sync"
24         "testing"
25         "time"
26
27         "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1"
28         socketio_client "github.com/sebd71/go-socket.io-client"
29         "github.com/stretchr/testify/assert"
30 )
31
32 // Disconnection Channel used to notify XDS Server disconnection
33 //type Disconnection struct {
34 //      error   string
35 //      code    int
36 //      svrConf ServerCfg
37 //}
38
39 // IOSockClient .
40 type IOSockClient struct {
41         URL       string
42         Conn      *socketio_client.Client
43         Options   *socketio_client.Options
44         EmitMutex *sync.Mutex
45         Connected bool
46         //ServerDiscoChan chan Disconnection
47         EscapeKeys []byte
48 }
49
50 func NewIoSocketClient(url, clientID string) (*IOSockClient, error) {
51
52         var err error
53
54         sCli := &IOSockClient{
55                 URL:       url,
56                 EmitMutex: &sync.Mutex{},
57                 Options: &socketio_client.Options{
58                         Transport: "websocket",
59                         Header:    make(map[string][]string),
60                 },
61                 //ServerDiscoChan: make(chan Disconnection, 1),
62         }
63         sCli.Options.Header["XDS-SID"] = []string{clientID}
64
65         sCli.Conn, err = socketio_client.NewClient(url, sCli.Options)
66         if err != nil {
67                 return nil, fmt.Errorf("IO.socket connection error: " + err.Error())
68         }
69
70         sCli.Conn.On("connection", func() {
71                 log.Printf("BBBBBBBBBBBBBBBB:::WS connection event")
72                 sCli.Connected = true
73         })
74
75         sCli.Conn.On("disconnection", func(err error) {
76                 log.Printf("AAAAAAAAAAAA:::WS disconnection event with err: %v\n", err)
77                 sCli.Connected = false
78         })
79
80         sCli.Conn.On(xsapiv1.EVTSDKManagement, func(data interface{}) {
81                 log.Printf("WS disconnection event with err: %v\n", data)
82         })
83
84         args := xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTSDKManagement}
85         if err := HTTPCli.Post("/events/register", args, nil); err != nil {
86                 return sCli, err
87         }
88
89         return sCli, nil
90 }
91
92 func TestSdks(t *testing.T) {
93         var sdkArray []xsapiv1.SDK
94         assert.Nil(t, HTTPCli.Get("/sdks", &sdkArray))
95         t.Log(sdkArray[0])
96
97         t.Logf("Connect websocket with url=%v clientId=%v\n", prefixURL, HTTPCli.GetClientID())
98         IOSkClient, err := NewIoSocketClient(prefixURL, HTTPCli.GetClientID())
99         if err != nil {
100                 t.Fatal(err)
101         }
102         t.Log(IOSkClient)
103
104         //for i := 0; i < len(sdkArray); i++ {
105         for i := 0; i < 1; i++ {
106                 re := regexp.MustCompile("^[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+$")
107                 assert.True(t, re.MatchString(sdkArray[i].ID))
108                 assert.Equal(t, sdkArray[0].Status, "Not Installed")
109
110                 var sdk xsapiv1.SDK
111                 assert.Nil(t, HTTPCli.Get("/sdks/"+sdkArray[i].ID, &sdk))
112                 assert.Equal(t, sdkArray[i], sdk)
113
114                 var sdkRes xsapiv1.SDK
115                 assert.Nil(t, HTTPCli.Post("/sdks", sdk, &sdkRes))
116                 assert.Equal(t, sdkRes.Status, "Installing")
117                 //t.Log(sdkRes)
118                 time.Sleep(1 * time.Second)
119         }
120 }