42db7c2821a5dcc3832b40f6c27065572e25f6f0
[src/xds/xds-server.git] / test / folders_test.go
1 /*
2  * Copyright (C) 2017-2018 "IoT.bzh"
3  * Author Clément Bénier <clement.benier@iot.bzh>
4  *
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
8  *
9  *   http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  */
17 package xdsservertest
18
19 import (
20         "io/ioutil"
21         "os"
22         "regexp"
23         "testing"
24
25         "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1"
26         "github.com/stretchr/testify/assert"
27 )
28
29 func TestFolders(t *testing.T) {
30         var cfgArray []xsapiv1.FolderConfig
31         assert.Nil(t, HTTPCli.Get("/folders", &cfgArray))
32         assert.Equal(t, len(cfgArray), 0)
33
34         fPrj := xsapiv1.FolderConfig{
35                 Label:      "testproject",
36                 ClientPath: logDir + "testproject",
37                 Type:       xsapiv1.TypePathMap,
38                 ClientData: "clientdatatest",
39                 DataPathMap: xsapiv1.PathMapConfig{
40                         ServerPath: logDir + "testserverpath",
41                 },
42         }
43         var cfg xsapiv1.FolderConfig
44         assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg))
45         assert.NotNil(t, cfg)
46
47         isCfgPrjMatch := func(fPrj xsapiv1.FolderConfig, cfg xsapiv1.FolderConfig) {
48                 re := regexp.MustCompile("^[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+$")
49                 assert.True(t, re.MatchString(cfg.ID)) //ID
50                 assert.Equal(t, cfg.Label, fPrj.Label) //Label
51                 assert.Equal(t, cfg.ClientPath, fPrj.ClientPath)
52                 assert.Equal(t, cfg.Type, fPrj.Type)
53                 assert.Equal(t, cfg.Status, "Enable")
54                 assert.Equal(t, cfg.IsInSync, true)
55                 assert.Equal(t, len(cfg.DefaultSdk), 0)
56                 assert.Equal(t, fPrj.ClientData, cfg.ClientData)
57                 assert.Equal(t, fPrj.DataPathMap.ServerPath, cfg.DataPathMap.ServerPath)
58         }
59         isCfgPrjMatch(fPrj, cfg)
60         var cfg2 xsapiv1.FolderConfig
61         assert.Nil(t, HTTPCli.Get("/folders/"+cfg.ID, &cfg2))
62         isCfgPrjMatch(fPrj, cfg2)
63
64         assert.Nil(t, HTTPCli.Get("/folders", &cfgArray))
65         assert.Equal(t, len(cfgArray), 1)
66
67         //call with the same uid create error
68         assert.NotNil(t, HTTPCli.Post("/folders", cfg, &cfg))
69
70         /*create/delete folders*/
71         var cfgArrayBis []xsapiv1.FolderConfig
72         assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg))
73         assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg))
74         assert.Nil(t, HTTPCli.Get("/folders", &cfgArray))
75         assert.Equal(t, len(cfgArray), 3)
76         assert.Nil(t, HTTPCli.Delete("/folders/"+cfgArray[1].ID, &cfg))
77         assert.Equal(t, cfg, cfgArray[1])
78         assert.Nil(t, HTTPCli.Get("/folders", &cfgArrayBis))
79         assert.Equal(t, len(cfgArrayBis), 2)
80         assert.Nil(t, HTTPCli.Delete("/folders/"+cfgArray[0].ID, &cfg))
81         assert.Equal(t, cfg, cfgArray[0])
82         assert.Nil(t, HTTPCli.Get("/folders", &cfgArrayBis))
83         assert.Equal(t, len(cfgArrayBis), 1)
84         assert.Nil(t, HTTPCli.Delete("/folders/"+cfgArray[2].ID, &cfg))
85         assert.Equal(t, cfg, cfgArray[2])
86         assert.Nil(t, HTTPCli.Get("/folders", &cfgArrayBis))
87         assert.Equal(t, len(cfgArrayBis), 0)
88 }
89
90 func TestFoldersEmptyValues(t *testing.T) {
91         fPrj := xsapiv1.FolderConfig{
92                 Label:      "testproject",
93                 ClientPath: logDir + "testproject",
94                 Type:       xsapiv1.TypePathMap,
95                 ClientData: "clientdatatest",
96                 DataPathMap: xsapiv1.PathMapConfig{
97                         ServerPath: "",
98                 },
99         }
100         var cfg xsapiv1.FolderConfig
101         /*ServerPath is empty*/
102         assert.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg))
103
104         fPrj.DataPathMap.ServerPath = logDir + "sameserverpath"
105         fPrj.ClientPath = ""
106         /*ClientPath is Empty*/
107         assert.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg))
108
109         fPrj.ClientPath = "logDir"
110         fPrj.Type = ""
111         /*Type is empty*/
112         assert.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg))
113
114         var cfgArray []xsapiv1.FolderConfig
115         assert.Nil(t, HTTPCli.Get("/folders", &cfgArray))
116         assert.Equal(t, len(cfgArray), 0)
117 }
118
119 func TestFoldersPathMapConfig(t *testing.T) {
120         fPrj := xsapiv1.FolderConfig{
121                 Label:      "testproject",
122                 ClientPath: logDir + "clientpathtest",
123                 Type:       xsapiv1.TypePathMap,
124                 ClientData: "clientdatatest",
125                 DataPathMap: xsapiv1.PathMapConfig{
126                         ServerPath: logDir + "serverpath",
127                         CheckFile:  "checkfile",
128                 },
129         }
130         var cfg xsapiv1.FolderConfig
131         /*file not present*/
132         assert.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg))
133
134         var checkFileClient = fPrj.ClientPath + "/checkfile"
135         var checkFileServer = fPrj.DataPathMap.ServerPath + "/checkfile"
136
137         /*create file*/
138         os.MkdirAll(fPrj.ClientPath, 0755)
139         fPrj.DataPathMap.CheckFile = checkFileClient
140         fPrj.DataPathMap.CheckContent = "CheckContent From Client\n"
141         file, err := os.OpenFile(checkFileClient, os.O_CREATE|os.O_RDWR, 0644)
142         if err != nil {
143                 t.Log(err)
144         }
145         if err := os.Symlink(checkFileClient, checkFileServer); err != nil {
146                 t.Log(err)
147         }
148         /*file content differ*/
149         assert.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg))
150
151         /*write same message*/
152         if _, err := file.WriteString(fPrj.DataPathMap.CheckContent); err != nil {
153                 t.Log(err)
154         }
155         assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg))
156
157         /*check server msg: ServerUID needed*/
158         var APIcfg xsapiv1.APIConfig
159         assert.Nil(t, HTTPCli.Get("/config", &APIcfg))
160         msg := "Pathmap checked message written by xds-server ID: " + APIcfg.ServerUID + "\n"
161         data, err := ioutil.ReadAll(file)
162         if err != nil {
163                 t.Log(err)
164         }
165         assert.Equal(t, msg, string(data))
166
167         assert.Nil(t, HTTPCli.Delete("/folders/"+cfg.ID, &cfg))
168         var cfgArray []xsapiv1.FolderConfig
169         assert.Nil(t, HTTPCli.Get("/folders", &cfgArray))
170         assert.Equal(t, len(cfgArray), 0)
171 }