package xdsservertest
import (
- "io/ioutil"
+ "fmt"
+ "io"
"log"
- "net"
"os"
"os/exec"
- "regexp"
- "strings"
+ "path"
+ "sync"
"testing"
"time"
common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git/golib"
"gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1"
- "github.com/stretchr/testify/assert"
+ 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 initEnv() {
- cmd := exec.Command("killall", "-9", "xds-server")
- if err := cmd.Start(); err != nil {
- log.Fatal(err)
+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 {
+ cmd := exec.Command("killall", "-9", "xds-server")
+ if err := cmd.Start(); err != nil {
+ log.Fatal(err)
+ }
+ cmd.Wait()
}
- cmd.Wait()
rootTestLog := "/tmp/xds-server-test"
if err := os.Setenv(envRootCfgDir, rootTestLog); err != nil {
log.Fatal(err)
}
+ sdkDir = rootTestLog + "/sdks/"
+ if err := os.Setenv(envXdtSdk, sdkDir); err != nil {
+ log.Fatal(err)
+ }
+ if err := os.Setenv(envXdsServerWorkspaceDir, rootTestLog); err != nil {
+ log.Fatal(err)
+ }
+ if err := os.Setenv(envXdsServerRootCfgDir, rootTestLog); err != nil {
+ log.Fatal(err)
+ }
+ if err := os.Setenv("XDS_LOG_SILLY", "1"); err != nil {
+ log.Fatal(err)
+ }
os.RemoveAll(rootTestLog)
os.MkdirAll(rootTestLog, 0755)
logDir = rootTestLog + "/logs/"
os.MkdirAll(logDir, 0755)
+ os.MkdirAll(sdkDir, 0755)
+ currentDir, err := os.Getwd()
+ if err != nil {
+ log.Fatal(err)
+ }
+ if err := Copy(path.Join(currentDir, sdkFile), path.Join(sdkDir, sdkFileName)); err != nil {
+ log.Fatal(err)
+ }
}
func launchXdsServer(proc **os.Process) *os.File {
}
conf := common.HTTPClientConfig{
URLPrefix: "/api/v1",
- HeaderClientKeyName: "Xds-Test-Sid",
+ HeaderClientKeyName: "Xds-Sid",
CsrfDisable: true,
LogOut: file,
LogPrefix: "XDSSERVERTEST: ",
}
cli, err := common.HTTPNewClient(prefixURL, conf)
if err != nil {
- log.Print(err)
- }
- return cli, file
-}
-
-func TestMain(m *testing.M) {
- initEnv()
-
- var proc *os.Process
- fileXdsServer := launchXdsServer(&proc)
- go func(p *os.Process) {
- if status, err := p.Wait(); err != nil {
- log.Fatalf("status=%v\n err=%v\n", status, err)
- }
- }(proc)
- time.Sleep(1 * time.Second)
-
- lvl := common.HTTPLogLevelDebug
- var fileHTTPClient *os.File
- HTTPCli, fileHTTPClient = getHTTPClient(lvl)
-
- if HTTPCli == nil {
- log.Fatal("HTTPCLi is nil")
+ log.Fatal(err)
}
- res := m.Run()
- proc.Kill()
- fileXdsServer.Close()
- fileHTTPClient.Close()
- os.Exit(res)
-}
-
-func init() {
-}
-
-func CheckIP(ipconfig string) bool {
- ifaces, _ := net.Interfaces()
- for _, i := range ifaces {
- addrs, _ := i.Addrs()
- for _, addr := range addrs {
- if strings.HasPrefix(addr.String(), ipconfig) {
- return true
- }
- }
+ log.Printf("HTTP session ID : %v", cli.GetClientID())
+ var ver xsapiv1.Version
+ err = cli.Get("/version", &ver)
+ if err != nil {
+ log.Fatal(err)
}
- return false
-}
-
-func TestVersion(t *testing.T) {
- var datVersion map[string]interface{}
- assert.Nil(t, HTTPCli.Get("/version", &datVersion))
- t.Log(datVersion)
-
- ver, present := datVersion["version"]
- assert.True(t, present)
- t.Logf("version is %s", ver.(string))
- re := regexp.MustCompile("^v*[0-9]+.[0-9]+.[0-9]+$")
- assert.True(t, re.MatchString(ver.(string)))
+ return cli, file
}
-func TestConfig(t *testing.T) {
- var cfg xsapiv1.APIConfig
- assert.Nil(t, HTTPCli.Get("/config", &cfg))
+func NewIoSocketClient(url, clientID string) (*IOSockClient, error) {
- re := regexp.MustCompile("^[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+$")
- assert.True(t, re.MatchString(cfg.ServerUID)) //ID
- pathMap, present := cfg.SupportedSharing["PathMap"]
- assert.True(t, present)
- assert.True(t, pathMap)
- assert.True(t, CheckIP(cfg.Builder.IP))
-}
-func TestFolders(t *testing.T) {
- var cfgArray []xsapiv1.FolderConfig
- assert.Nil(t, HTTPCli.Get("/folders", &cfgArray))
- assert.Equal(t, len(cfgArray), 0)
+ var err error
- fPrj := xsapiv1.FolderConfig{
- Label: "testproject",
- ClientPath: logDir + "testproject",
- Type: xsapiv1.TypePathMap,
- ClientData: "clientdatatest",
- DataPathMap: xsapiv1.PathMapConfig{
- ServerPath: logDir + "testserverpath",
+ sCli := &IOSockClient{
+ URL: url,
+ EmitMutex: &sync.Mutex{},
+ Options: &socketio_client.Options{
+ Transport: "websocket",
+ Header: make(map[string][]string),
},
+ //ServerDiscoChan: make(chan Disconnection, 1),
}
- var cfg xsapiv1.FolderConfig
- assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg))
- assert.NotNil(t, cfg)
-
- isCfgPrjMatch := func(fPrj xsapiv1.FolderConfig, cfg xsapiv1.FolderConfig) {
- re := regexp.MustCompile("^[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+$")
- assert.True(t, re.MatchString(cfg.ID)) //ID
- assert.Equal(t, cfg.Label, fPrj.Label) //Label
- assert.Equal(t, cfg.ClientPath, fPrj.ClientPath)
- assert.Equal(t, cfg.Type, fPrj.Type)
- assert.Equal(t, cfg.Status, "Enable")
- assert.Equal(t, cfg.IsInSync, true)
- assert.Equal(t, len(cfg.DefaultSdk), 0)
- assert.Equal(t, fPrj.ClientData, cfg.ClientData)
- assert.Equal(t, fPrj.DataPathMap.ServerPath, cfg.DataPathMap.ServerPath)
- }
- isCfgPrjMatch(fPrj, cfg)
- var cfg2 xsapiv1.FolderConfig
- assert.Nil(t, HTTPCli.Get("/folders/"+cfg.ID, &cfg2))
- isCfgPrjMatch(fPrj, cfg2)
+ sCli.Options.Header["XDS-SID"] = []string{clientID}
- assert.Nil(t, HTTPCli.Get("/folders", &cfgArray))
- assert.Equal(t, len(cfgArray), 1)
-
- //call with the same uid create error
- assert.NotNil(t, HTTPCli.Post("/folders", cfg, &cfg))
-
- /*create/delete folders*/
- var cfgArrayBis []xsapiv1.FolderConfig
- assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg))
- assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg))
- assert.Nil(t, HTTPCli.Get("/folders", &cfgArray))
- assert.Equal(t, len(cfgArray), 3)
- assert.Nil(t, HTTPCli.Delete("/folders/"+cfgArray[1].ID, &cfg))
- assert.Equal(t, cfg, cfgArray[1])
- assert.Nil(t, HTTPCli.Get("/folders", &cfgArrayBis))
- assert.Equal(t, len(cfgArrayBis), 2)
- assert.Nil(t, HTTPCli.Delete("/folders/"+cfgArray[0].ID, &cfg))
- assert.Equal(t, cfg, cfgArray[0])
- assert.Nil(t, HTTPCli.Get("/folders", &cfgArrayBis))
- assert.Equal(t, len(cfgArrayBis), 1)
- assert.Nil(t, HTTPCli.Delete("/folders/"+cfgArray[2].ID, &cfg))
- assert.Equal(t, cfg, cfgArray[2])
- assert.Nil(t, HTTPCli.Get("/folders", &cfgArrayBis))
- assert.Equal(t, len(cfgArrayBis), 0)
-}
-
-func TestFoldersEmptyValues(t *testing.T) {
- fPrj := xsapiv1.FolderConfig{
- Label: "testproject",
- ClientPath: logDir + "testproject",
- Type: xsapiv1.TypePathMap,
- ClientData: "clientdatatest",
- DataPathMap: xsapiv1.PathMapConfig{
- ServerPath: "",
- },
+ sCli.Conn, err = socketio_client.NewClient(url, sCli.Options)
+ if err != nil {
+ return nil, fmt.Errorf("IO.socket connection error: " + err.Error())
}
- var cfg xsapiv1.FolderConfig
- /*ServerPath is empty*/
- assert.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg))
- fPrj.DataPathMap.ServerPath = logDir + "sameserverpath"
- fPrj.ClientPath = ""
- /*ClientPath is Empty*/
- assert.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg))
+ sCli.Conn.On("connection", func() {
+ sCli.Connected = true
+ })
- fPrj.ClientPath = "logDir"
- fPrj.Type = ""
- /*Type is empty*/
- assert.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg))
+ sCli.Conn.On("disconnection", func(err error) {
+ log.Printf("WS disconnection event with err: %v\n", err)
+ sCli.Connected = false
+ })
- var cfgArray []xsapiv1.FolderConfig
- assert.Nil(t, HTTPCli.Get("/folders", &cfgArray))
- assert.Equal(t, len(cfgArray), 0)
+ return sCli, nil
}
+func TestMain(m *testing.M) {
+ launchProcess := true
+ log.Printf("TestMain: launchProcess is %v", launchProcess)
+ initEnv(launchProcess)
-func TestFoldersPathMapConfig(t *testing.T) {
- fPrj := xsapiv1.FolderConfig{
- Label: "testproject",
- ClientPath: logDir + "clientpathtest",
- Type: xsapiv1.TypePathMap,
- ClientData: "clientdatatest",
- DataPathMap: xsapiv1.PathMapConfig{
- ServerPath: logDir + "serverpath",
- CheckFile: "checkfile",
- },
+ var proc *os.Process
+ var fileXdsServer *os.File
+ if launchProcess {
+ fileXdsServer = launchXdsServer(&proc)
+ go func(p *os.Process) {
+ if status, err := p.Wait(); err != nil {
+ log.Fatalf("status=%v\n err=%v\n", status, err)
+ }
+ }(proc)
+ defer proc.Kill()
+ defer fileXdsServer.Close()
}
- var cfg xsapiv1.FolderConfig
- /*file not present*/
- assert.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg))
-
- var checkFileClient = fPrj.ClientPath + "/checkfile"
- var checkFileServer = fPrj.DataPathMap.ServerPath + "/checkfile"
+ time.Sleep(1 * time.Second)
- /*create file*/
- os.MkdirAll(fPrj.ClientPath, 0755)
- fPrj.DataPathMap.CheckFile = checkFileClient
- fPrj.DataPathMap.CheckContent = "CheckContent From Client\n"
- file, err := os.OpenFile(checkFileClient, os.O_CREATE|os.O_RDWR, 0644)
+ lvl := common.HTTPLogLevelDebug
+ var fileHTTPClient *os.File
+ HTTPCli, fileHTTPClient = getHTTPClient(lvl)
+ defer fileHTTPClient.Close()
+ var err error
+ sCli, err = NewIoSocketClient(prefixURL, HTTPCli.GetClientID())
if err != nil {
- t.Log(err)
- }
- if err := os.Symlink(checkFileClient, checkFileServer); err != nil {
- t.Log(err)
+ log.Fatal(err)
}
- /*file content differ*/
- assert.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg))
- /*write same message*/
- if _, err := file.WriteString(fPrj.DataPathMap.CheckContent); err != nil {
- t.Log(err)
- }
- assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg))
+ log.Printf("HTTPCli id is %v", HTTPCli.GetClientID())
- /*check server msg: ServerUID needed*/
- var APIcfg xsapiv1.APIConfig
- assert.Nil(t, HTTPCli.Get("/config", &APIcfg))
- msg := "Pathmap checked message written by xds-server ID: " + APIcfg.ServerUID + "\n"
- data, err := ioutil.ReadAll(file)
- if err != nil {
- t.Log(err)
+ if HTTPCli == nil {
+ log.Fatal("HTTPCLi is nil")
}
- assert.Equal(t, msg, string(data))
+ res := m.Run()
+ defer os.Exit(res)
+}
- assert.Nil(t, HTTPCli.Delete("/folders/"+cfg.ID, &cfg))
- var cfgArray []xsapiv1.FolderConfig
- assert.Nil(t, HTTPCli.Get("/folders", &cfgArray))
- assert.Equal(t, len(cfgArray), 0)
+func init() {
}