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)
}
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)
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
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)
}
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")
res := m.Run()
defer os.Exit(res)
}
-
-func init() {
-}