tests: add comments and logs
[src/xds/xds-server.git] / test / xdsserver_test.go
index 5722d31..b8e98b5 100644 (file)
 package xdsservertest
 
 import (
+       "fmt"
+       "io"
        "log"
        "os"
        "os/exec"
+       "sync"
        "testing"
        "time"
 
        common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git/golib"
        "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1"
+       socketio_client "github.com/sebd71/go-socket.io-client"
 )
 
+// IOSockClient
+type IOSockClient struct {
+       URL       string
+       Conn      *socketio_client.Client
+       Options   *socketio_client.Options
+       EmitMutex *sync.Mutex
+       Connected bool
+       //ServerDiscoChan chan Disconnection
+       EscapeKeys []byte
+}
+
 //global client
 var HTTPCli *common.HTTPClient
 var logDir string
-var sdkDir string
+var sCli *IOSockClient
+
+func Copy(src, dst string) error {
+       in, err := os.Open(src)
+       if err != nil {
+               return err
+       }
+       defer in.Close()
+
+       out, err := os.Create(dst)
+       if err != nil {
+               return err
+       }
+       defer out.Close()
+
+       _, err = io.Copy(out, in)
+       if err != nil {
+               return err
+       }
+       return out.Close()
+}
 
 func initEnv(launchProcess bool) {
        if launchProcess {
+               /*kill xds-server if needed*/
                cmd := exec.Command("killall", "-9", "xds-server")
                if err := cmd.Start(); err != nil {
                        log.Fatal(err)
                }
                cmd.Wait()
        }
+       /*set environment variable*/
        rootTestLog := "/tmp/xds-server-test"
        if err := os.Setenv(envRootCfgDir, rootTestLog); err != nil {
                log.Fatal(err)
        }
-       sdkDir = rootTestLog + "/sdks/"
+       sdkDir := rootTestLog + "/sdks/"
        if err := os.Setenv(envXdtSdk, sdkDir); err != nil {
                log.Fatal(err)
        }
@@ -57,13 +94,14 @@ func initEnv(launchProcess bool) {
        if err := os.Setenv("XDS_LOG_SILLY", "1"); err != nil {
                log.Fatal(err)
        }
+       /*remove and recreate working directories*/
        os.RemoveAll(rootTestLog)
        os.MkdirAll(rootTestLog, 0755)
        logDir = rootTestLog + "/logs/"
        os.MkdirAll(logDir, 0755)
-       os.MkdirAll(sdkDir, 0755)
 }
 
+/*prepare xds-server process*/
 func launchXdsServer(proc **os.Process) *os.File {
        logFile := logDir + logFileXdsServer
        file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY, 0644)
@@ -107,9 +145,41 @@ func getHTTPClient(lvl int) (*common.HTTPClient, *os.File) {
        return cli, file
 }
 
+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),
+               },
+       }
+       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
+       })
+
+       log.Printf("Connect websocket with url=%v clientId=%v\n", prefixURL, HTTPCli.GetClientID())
+       return sCli, nil
+}
 func TestMain(m *testing.M) {
+       /* useful for debugging, preventing from launching xds-server
+        * it can be launch separetly */
        launchProcess := true
-       log.Printf("TestMain: launchProcess is %v", launchProcess)
+       log.Printf("TestMain: launchProcess is %v, so launching xds-server", launchProcess)
        initEnv(launchProcess)
 
        var proc *os.Process
@@ -117,6 +187,7 @@ func TestMain(m *testing.M) {
        if launchProcess {
                fileXdsServer = launchXdsServer(&proc)
                go func(p *os.Process) {
+                       log.Print("xds-server is launching")
                        if status, err := p.Wait(); err != nil {
                                log.Fatalf("status=%v\n err=%v\n", status, err)
                        }
@@ -130,8 +201,11 @@ func TestMain(m *testing.M) {
        var fileHTTPClient *os.File
        HTTPCli, fileHTTPClient = getHTTPClient(lvl)
        defer fileHTTPClient.Close()
-
-       log.Printf("HTTPCli id is %v", HTTPCli.GetClientID())
+       var err error
+       sCli, err = NewIoSocketClient(prefixURL, HTTPCli.GetClientID())
+       if err != nil {
+               log.Fatal(err)
+       }
 
        if HTTPCli == nil {
                log.Fatal("HTTPCLi is nil")
@@ -139,6 +213,3 @@ func TestMain(m *testing.M) {
        res := m.Run()
        defer os.Exit(res)
 }
-
-func init() {
-}