2 * Copyright (C) 2017-2018 "IoT.bzh"
3 * Author Clément Bénier <clement.benier@iot.bzh>
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
28 common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git/golib"
29 "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1"
30 "github.com/stretchr/testify/assert"
34 var HTTPCli *common.HTTPClient
38 rootTestLog := "/tmp/xds-server-test"
39 if err := os.Setenv(envRootCfgDir, rootTestLog); err != nil {
42 os.RemoveAll(rootTestLog)
43 os.MkdirAll(rootTestLog, 0755)
44 logDir = rootTestLog + "/logs/"
45 os.MkdirAll(logDir, 0755)
48 func launchXdsServer(proc **os.Process) *os.File {
49 logFile := logDir + logFileXdsServer
50 file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY, 0644)
54 tmpProc, err := os.StartProcess(argsProcess[0], argsProcess, &os.ProcAttr{
55 Files: []*os.File{os.Stdin, file, file},
64 func getHTTPClient(lvl int) (*common.HTTPClient, *os.File) {
65 logFile := logDir + logFileClient
66 file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY, 0644)
70 conf := common.HTTPClientConfig{
72 HeaderClientKeyName: "Xds-Test-Sid",
75 LogPrefix: "XDSSERVERTEST: ",
78 cli, err := common.HTTPNewClient(prefixURL, conf)
85 func TestMain(m *testing.M) {
89 fileXdsServer := launchXdsServer(&proc)
90 go func(p *os.Process) {
91 if status, err := p.Wait(); err != nil {
92 log.Fatalf("status=%v\n err=%v\n", status, err)
95 time.Sleep(1 * time.Second)
97 lvl := common.HTTPLogLevelDebug
98 var fileHTTPClient *os.File
99 HTTPCli, fileHTTPClient = getHTTPClient(lvl)
102 log.Fatal("HTTPCLi is nil")
106 fileXdsServer.Close()
107 fileHTTPClient.Close()
114 func CheckIP(ipconfig string) bool {
115 ifaces, _ := net.Interfaces()
116 for _, i := range ifaces {
117 addrs, _ := i.Addrs()
118 for _, addr := range addrs {
119 if strings.HasPrefix(addr.String(), ipconfig) {
127 func TestVersion(t *testing.T) {
128 var datVersion map[string]interface{}
129 assert.Nil(t, HTTPCli.Get("/version", &datVersion))
132 ver, present := datVersion["version"]
133 assert.True(t, present)
134 t.Logf("version is %s", ver.(string))
135 re := regexp.MustCompile("^v*[0-9]+.[0-9]+.[0-9]+$")
136 assert.True(t, re.MatchString(ver.(string)))
139 func TestConfig(t *testing.T) {
140 var datConfig map[string]interface{}
141 assert.Nil(t, HTTPCli.Get("/config", &datConfig))
143 builder, present := datConfig["builder"].(map[string]interface{})
144 assert.True(t, present)
145 ip, present := builder["ip"]
146 assert.True(t, present)
147 assert.True(t, CheckIP(ip.(string)))
149 func TestFolders(t *testing.T) {
150 var datFolder []interface{}
151 assert.Nil(t, HTTPCli.Get("/folders", &datFolder))
153 assert.Equal(t, len(datFolder), 0)
155 fPrj := xsapiv1.FolderConfig{
156 Label: "testproject",
157 ClientPath: logDir + "testproject",
158 Type: xsapiv1.TypePathMap,
159 ClientData: "clientdatatest",
160 DataPathMap: xsapiv1.PathMapConfig{
161 ServerPath: logDir + "testserverpath",
164 var cfg xsapiv1.FolderConfig
165 assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg))
166 assert.NotNil(t, cfg)
169 isCfgPrjMatch := func(fPrj xsapiv1.FolderConfig, cfg xsapiv1.FolderConfig) {
170 re := regexp.MustCompile("^[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+$")
171 assert.True(t, re.MatchString(cfg.ID)) //ID
172 assert.Equal(t, cfg.Label, fPrj.Label) //Label
173 assert.Equal(t, cfg.ClientPath, fPrj.ClientPath)
174 assert.Equal(t, cfg.Type, fPrj.Type)
175 assert.Equal(t, cfg.Status, "Enable")
176 assert.Equal(t, cfg.IsInSync, true)
177 assert.Equal(t, len(cfg.DefaultSdk), 0)
178 assert.Equal(t, fPrj.ClientData, cfg.ClientData)
179 assert.Equal(t, fPrj.DataPathMap.ServerPath, cfg.DataPathMap.ServerPath)
181 isCfgPrjMatch(fPrj, cfg)
182 var cfg2 xsapiv1.FolderConfig
183 assert.Nil(t, HTTPCli.Get("/folders/"+cfg.ID, &cfg2))
185 isCfgPrjMatch(fPrj, cfg2)
187 //call with the same uid create error
188 assert.NotNil(t, HTTPCli.Post("/folders", cfg, &cfg))
190 //assert.Equal(t, cfg.DefaultSdk, "true")
191 //call with the same uid
193 //serverpath already exists
196 //func TestRegister(t *testing.T) {
197 // var client := common.HTTPClient
198 // client.Get("/folders", folders)