functionnal test: initial commit for tests
authorClément Bénier <clement.benier@iot.bzh>
Thu, 19 Jul 2018 08:57:02 +0000 (10:57 +0200)
committerClément Bénier <clement.benier@iot.bzh>
Tue, 21 Aug 2018 09:08:35 +0000 (11:08 +0200)
Launch xds-server process and run test based on xds REST APIs.
list of tests
- version
- config
- folders(in progress)

Change-Id: I4312c9ab067b2d6e157f8828c2fbe467ef187733
Signed-off-by: Clément Bénier <clement.benier@iot.bzh>
.vscode/launch.json
Makefile
glide.yaml
test/_test-config.json [new file with mode: 0644]
test/test_config.go [new file with mode: 0644]
test/xdsserver_test.go [new file with mode: 0644]

index 7c3d99c..c12c80c 100644 (file)
             "args": ["-log", "debug"],
             "showLog": false
         },
+        {
+            "name": "XDS-Server-Test",
+            "type": "go",
+            "request": "launch",
+            "mode": "test",
+            "program": "${workspaceRoot}/test",
+            "env": {
+                "GOPATH": "${workspaceRoot}/../../../../../..:${env:GOPATH}",
+            },
+            "args": ["-test.v", "-test.run", ".*"],
+            "showLog": false
+        },
         {
             "name": "XDS-Server local dev",
             "type": "go",
index 705b670..295650b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -120,7 +120,7 @@ xds: scripts tools/syncthing/copytobin
        @cd $(ROOT_SRCDIR); $(BUILD_ENV_FLAGS) go build $(VERBOSE_$(V)) -i -o $(LOCAL_BINDIR)/$(TARGET)$(EXT) -ldflags "$(GO_LDFLAGS) -X main.AppVersion=$(VERSION) -X main.AppSubVersion=$(SUB_VERSION)" -gcflags "$(GO_GCFLAGS)" .
 
 test: tools/glide
-       go test --race $(shell $(LOCAL_TOOLSDIR)/glide novendor)
+       go test --race ./test -v
 
 vet: tools/glide
        go vet $(shell $(LOCAL_TOOLSDIR)/glide novendor)
index 6aeee9f..193ad48 100644 (file)
@@ -33,3 +33,8 @@ import:
   version: ^1.0.0
 - package: github.com/franciscocpg/reflectme
   version: ^0.1.9
+- package: "github.com/stretchr/testify"
+  version: ^1.2.2
+  subpackages:
+  - assert
+
diff --git a/test/_test-config.json b/test/_test-config.json
new file mode 100644 (file)
index 0000000..835bc79
--- /dev/null
@@ -0,0 +1,8 @@
+{
+    "webAppDir": "${EXEPATH}/../webapp/dist",
+    "httpPort": "8000",
+    "sdkScriptsDir": "${EXEPATH}/../sdks",
+    "shareRootDir": "${XDS_SERVER_ROOT_CFG_DIR}/xds-server/projects",
+    "logsDir": "${XDS_SERVER_ROOT_CFG_DIR}/xds-server/logs",
+    "sdkRootDir": "${EXEPATH}/xds-server/sdk"
+}
diff --git a/test/test_config.go b/test/test_config.go
new file mode 100644 (file)
index 0000000..a182dd5
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * 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
+
+var argsProcess = []string{"../bin/xds-server", "-l", "debug", "-c", "_test-config.json"}
+
+const envRootCfgDir = "XDS_SERVER_ROOT_CFG_DIR"
+const prefixURL = "http://localhost:8000"
+const logFileXdsServer = "xdsserver-test.log"
+const logFileClient = "client-test.log"
diff --git a/test/xdsserver_test.go b/test/xdsserver_test.go
new file mode 100644 (file)
index 0000000..bab7f68
--- /dev/null
@@ -0,0 +1,199 @@
+/*
+ * 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 (
+       "log"
+       "net"
+       "os"
+       "regexp"
+       "strings"
+       "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"
+)
+
+//global client
+var HTTPCli *common.HTTPClient
+var logDir string
+
+func initEnv() {
+       rootTestLog := "/tmp/xds-server-test"
+       if err := os.Setenv(envRootCfgDir, rootTestLog); err != nil {
+               log.Fatal(err)
+       }
+       os.RemoveAll(rootTestLog)
+       os.MkdirAll(rootTestLog, 0755)
+       logDir = rootTestLog + "/logs/"
+       os.MkdirAll(logDir, 0755)
+}
+
+func launchXdsServer(proc **os.Process) *os.File {
+       logFile := logDir + logFileXdsServer
+       file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY, 0644)
+       if err != nil {
+               log.Fatal(err)
+       }
+       tmpProc, err := os.StartProcess(argsProcess[0], argsProcess, &os.ProcAttr{
+               Files: []*os.File{os.Stdin, file, file},
+       })
+       if err != nil {
+               log.Fatal(err)
+       }
+       *proc = tmpProc
+       return file
+}
+
+func getHTTPClient(lvl int) (*common.HTTPClient, *os.File) {
+       logFile := logDir + logFileClient
+       file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY, 0644)
+       if err != nil {
+               log.Fatal(err)
+       }
+       conf := common.HTTPClientConfig{
+               URLPrefix:           "/api/v1",
+               HeaderClientKeyName: "Xds-Test-Sid",
+               CsrfDisable:         true,
+               LogOut:              file,
+               LogPrefix:           "XDSSERVERTEST: ",
+               LogLevel:            lvl,
+       }
+       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")
+       }
+       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
+                       }
+               }
+       }
+       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)))
+}
+
+func TestConfig(t *testing.T) {
+       var datConfig map[string]interface{}
+       assert.Nil(t, HTTPCli.Get("/config", &datConfig))
+
+       builder, present := datConfig["builder"].(map[string]interface{})
+       assert.True(t, present)
+       ip, present := builder["ip"]
+       assert.True(t, present)
+       assert.True(t, CheckIP(ip.(string)))
+}
+func TestFolders(t *testing.T) {
+       var datFolder []interface{}
+       assert.Nil(t, HTTPCli.Get("/folders", &datFolder))
+       t.Log(datFolder)
+       assert.Equal(t, len(datFolder), 0)
+
+       fPrj := xsapiv1.FolderConfig{
+               Label:      "testproject",
+               ClientPath: logDir + "testproject",
+               Type:       xsapiv1.TypePathMap,
+               ClientData: "clientdatatest",
+               DataPathMap: xsapiv1.PathMapConfig{
+                       ServerPath: logDir + "testserverpath",
+               },
+       }
+       var cfg xsapiv1.FolderConfig
+       assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg))
+       assert.NotNil(t, cfg)
+       t.Log(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))
+       t.Log(cfg2)
+       isCfgPrjMatch(fPrj, cfg2)
+
+       //call with the same uid create error
+       assert.NotNil(t, HTTPCli.Post("/folders", cfg, &cfg))
+
+       //assert.Equal(t, cfg.DefaultSdk, "true")
+       //call with the same uid
+       //serverpath nil
+       //serverpath already exists
+}
+
+//func TestRegister(t *testing.T) {
+//     var client := common.HTTPClient
+//     client.Get("/folders", folders)
+//}