Skip to content

Commit 5fcb58a

Browse files
committed
Fix server tests
1 parent 3da658c commit 5fcb58a

15 files changed

+245
-232
lines changed

src/indexer/init_test.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,23 +34,28 @@ func InitTests(doIndex bool) (tc testContext) {
3434
func (tc testContext) readSpecs(filename string) (specs []interface{}) {
3535
var by []byte
3636
var err error
37-
absFilename := tc.ind.Util.FromTestFolder(filename)
38-
37+
absFilename := filename
38+
if !tc.ind.Util.IsAbs(absFilename) {
39+
absFilename = tc.ind.Util.FromTestFolder(filename)
40+
}
41+
tc.ind.Lg.Info("read specs file", logseal.F{"filename": absFilename})
3942
by, _, err = tc.ind.Util.ReadFile(absFilename)
4043
if err != nil {
4144
tc.t.Errorf("can not read specs file: %q", absFilename)
4245
}
43-
4446
by, err = tc.ind.Conf.TemplateFile(by)
4547
if err != nil {
4648
tc.t.Errorf("can not expand variables in specs file: %q", absFilename)
4749
}
48-
4950
err = yaml.Unmarshal(by, &specs)
5051
if err != nil {
51-
tc.t.Errorf("reading specs file failed: %q", filename)
52+
tc.ind.Lg.Fatal(
53+
"reading specs file failed",
54+
logseal.F{"path": absFilename, "error": err},
55+
)
56+
// tc.t.Errorf("reading specs file failed: %q", absFilename)
5257
} else {
53-
tc.ind.Lg.Info("got specs", logseal.F{"filename": filename, "specs": specs})
58+
tc.ind.Lg.Info("got specs", logseal.F{"filename": absFilename, "specs": specs})
5459
}
5560
return
5661
}

src/indexer/server.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ func (ind Indexer) ServeContent(w http.ResponseWriter, r *http.Request) {
5757
}
5858
}
5959
if val, ok := ind.Conf.API[url]; ok {
60-
params.Endpoint = val
6160
start := time.Now()
62-
ind.MakeTapIndex(params)
61+
params.Endpoint = val
62+
ind.UpdateTapIndex(params)
6363
ind.Lg.Debug(
6464
"serve json",
6565
logseal.F{

src/indexer/server_test.go

Lines changed: 65 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -7,52 +7,51 @@ import (
77
"net/http"
88
"net/http/httptest"
99
"testing"
10-
11-
yaml "gopkg.in/yaml.v3"
1210
)
1311

1412
func TestParseFilter(t *testing.T) {
15-
validateParseFilter(
13+
tc := InitTests(false)
14+
15+
tc.validateParseFilter(
1616
"front_matter.title==this+is+a+title",
1717
FilterParams{
1818
Prefix: "front_matter.title", Operator: "==", Suffix: []string{"this+is+a+title"},
1919
}, t,
2020
)
21-
validateParseFilter(
21+
tc.validateParseFilter(
2222
"front_matter.title!=not+the+title",
2323
FilterParams{
2424
Prefix: "front_matter.title", Operator: "!=", Suffix: []string{"not+the+title"},
2525
}, t,
2626
)
27-
validateParseFilter(
27+
tc.validateParseFilter(
2828
"front_matter.tags=*title2",
2929
FilterParams{
3030
Prefix: "front_matter.tags", Operator: "=*", Suffix: []string{"title2"},
3131
}, t,
3232
)
33-
validateParseFilter(
33+
tc.validateParseFilter(
3434
"front_matter.tags!=*title",
3535
FilterParams{
3636
Prefix: "front_matter.tags", Operator: "!=*", Suffix: []string{"title"},
3737
}, t,
3838
)
39-
validateParseFilter(
39+
tc.validateParseFilter(
4040
"front_matter.tags!==tag1,tag2",
4141
FilterParams{
4242
Prefix: "front_matter.tags", Operator: "!==", Suffix: []string{"tag1", "tag2"},
4343
}, t,
4444
)
45-
validateParseFilter(
45+
tc.validateParseFilter(
4646
"front_matter.title=~title[0-9]{1,2}",
4747
FilterParams{
4848
Prefix: "front_matter.title", Operator: "=~", Suffix: []string{"title[0-9]{1,2}"},
4949
}, t,
5050
)
5151
}
5252

53-
func validateParseFilter(filter string, exp FilterParams, t *testing.T) {
54-
ind, _, _ := prepareTests("", "", true)
55-
res := ind.parseFilterString(filter)
53+
func (tc testContext) validateParseFilter(filter string, exp FilterParams, t *testing.T) {
54+
res := tc.ind.parseFilterString(filter)
5655
r := true
5756
if res.Prefix != exp.Prefix || res.Operator != exp.Operator {
5857
r = false
@@ -68,81 +67,80 @@ func validateParseFilter(filter string, exp FilterParams, t *testing.T) {
6867
}
6968

7069
func TestServeContent(t *testing.T) {
71-
testSpecs, _ := ut.Find(ut.FromTestFolder("specs/server"), "\\.yaml$")
72-
for _, specFile := range testSpecs {
73-
validateServeContent(specFile, t)
70+
tc := InitTests(false)
71+
fol := ut.FromTestFolder("specs/server")
72+
specFiles, err := tc.ind.Util.Find(fol, "\\.yaml$")
73+
if err != nil {
74+
tc.t.Errorf("can not find specs files: %q", fol)
7475
}
75-
}
76-
77-
func validateServeContent(specFile string, t *testing.T) {
78-
ind, _, _ := prepareTests("", "", true)
79-
var urls []string
80-
var exp []string
81-
var spec map[string][]string
8276

83-
by, _, err := ut.ReadFile(specFile)
84-
if err != nil {
85-
t.Errorf("can not read spec file: %q", specFile)
86-
} else {
87-
err = yaml.Unmarshal(by, &spec)
88-
if err != nil {
89-
t.Errorf("can not unmarshal spec file: %q, %s", specFile, err)
90-
}
91-
urls = spec["urls"]
92-
exp = spec["expectation"]
77+
for _, specFile := range specFiles {
78+
tc.validateServeContent(specFile)
9379
}
80+
}
9481

95-
testsrv := httptest.NewServer(http.HandlerFunc(
96-
func(w http.ResponseWriter, r *http.Request) {
97-
ind.ServeContent(w, r)
98-
}))
99-
defer testsrv.Close()
82+
func (tc testContext) validateServeContent(specFile string) {
83+
specs := tc.readSpecs(specFile)
84+
for _, specItf := range specs {
85+
spec := specItf.(map[string]interface{})
86+
urls := tc.ind.Util.ListInterfaceToListString(
87+
spec["urls"].([]interface{}),
88+
)
89+
exp := tc.ind.Util.ListInterfaceToListString(
90+
spec["exp"].([]interface{}),
91+
)
92+
testsrv := httptest.NewServer(http.HandlerFunc(
93+
func(w http.ResponseWriter, r *http.Request) {
94+
tc.ind.ServeContent(w, r)
95+
}))
96+
defer testsrv.Close()
10097

101-
for _, url := range urls {
102-
c := NewClient(testsrv.URL)
103-
res, err := http.Get(c.url + url)
104-
if err != nil {
105-
t.Errorf("test serve content, request failed: %s, %s", url, err)
106-
}
107-
defer res.Body.Close()
98+
for _, url := range urls {
99+
c := NewClient(testsrv.URL)
100+
res, err := http.Get(c.url + url)
101+
if err != nil {
102+
tc.t.Errorf("test serve content, request failed: %s, %s", url, err)
103+
}
104+
defer res.Body.Close()
108105

109-
bodyBytes, err := io.ReadAll(res.Body)
110-
if err != nil {
111-
t.Errorf("test serve content failed, can not read body: %+v", err)
112-
} else {
113-
var ji JoinerIndex
114-
err = json.Unmarshal([]byte(bodyBytes), &ji)
106+
bodyBytes, err := io.ReadAll(res.Body)
115107
if err != nil {
116-
t.Errorf(
117-
"test joiner index failed, can not unmarshal server response: %+v", err,
118-
)
108+
tc.t.Errorf("test serve content failed, can not read body: %+v", err)
109+
} else {
110+
var ti TapIndex
111+
err = json.Unmarshal([]byte(bodyBytes), &ti)
112+
if err != nil {
113+
tc.t.Errorf(
114+
"test joiner index failed, can not unmarshal server response: %+v", err,
115+
)
116+
}
117+
tc.validateTapIndex(ti, url, exp)
119118
}
120-
validateJoinerIndex(ji, url, exp, t)
121119
}
122120
}
123121
}
124122

125-
func validateJoinerIndex(ji JoinerIndex, url string, exp []string, t *testing.T) {
123+
func (tc testContext) validateTapIndex(ti TapIndex, url string, exp []string) {
126124
failed := false
127-
if len(ji) != len(exp) {
128-
t.Errorf(
129-
"validate joiner index failed: %q, lengths do not match: exp: %+v, got: %+v",
130-
url, len(exp), len(ji),
125+
if len(ti) != len(exp) {
126+
tc.t.Errorf(
127+
"validate tap index failed: %q, lengths do not match: exp: %+v, got: %+v",
128+
url, len(exp), len(ti),
131129
)
132130
} else {
133-
for i := 0; i < len(ji); i++ {
134-
if ji[i].Path != exp[i] {
131+
for i := 0; i < len(ti); i++ {
132+
if ti[i].Path != exp[i] {
135133
failed = true
136134
break
137135
}
138136
}
139137
}
140138
if failed {
141-
t.Errorf(
142-
"validate joiner index failed: %q\n"+
139+
tc.t.Errorf(
140+
"validate tap index failed: %q\n"+
143141
"exp, len: %d\n %+v,\n"+
144142
"got, len: %d\n%+v\n",
145-
url, len(exp), exp, len(ji), getJoinerIndexPaths(ji),
143+
url, len(exp), exp, len(ti), tc.getTapIndexPaths(),
146144
)
147145
}
148146
}
@@ -155,22 +153,16 @@ func NewClient(url string) Client {
155153
return Client{url}
156154
}
157155

158-
func getJoinerIndexPaths(ji JoinerIndex) (arr []string) {
159-
for _, el := range ji {
160-
arr = append(arr, el.Path)
161-
}
162-
return
163-
}
164-
165156
func BenchmarkServer(b *testing.B) {
166-
ind, _, _ := prepareTests("", "", true)
157+
tc := InitTests(false)
158+
167159
pos := ut.Trace()
168160
testsrv := httptest.NewServer(http.HandlerFunc(
169161
func(w http.ResponseWriter, r *http.Request) {
170-
ind.ServeContent(w, r)
162+
tc.ind.ServeContent(w, r)
171163
}))
172164
defer testsrv.Close()
173-
for url := range ind.Conf.API {
165+
for url := range tc.ind.Conf.API {
174166
c := NewClient(testsrv.URL)
175167
http.Get(c.url + url)
176168
}

src/util/util.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@ import (
1616

1717
// keep-sorted start block=yes newline_separated=yes
1818
func (ut Util) AbsPath(str string) (p string, err error) {
19-
p, err = filepath.Abs(str)
20-
ut.Lg.IfErrFatal("invalid file path", logseal.F{"path": str, "error": err})
19+
p = str
20+
if !ut.IsAbs(str) {
21+
p, err = filepath.Abs(str)
22+
ut.Lg.IfErrFatal("invalid file path", logseal.F{"path": str, "error": err})
23+
}
2124
return p, err
2225
}
2326

@@ -113,6 +116,10 @@ func (ut Util) GetPathDepth(pth string) int {
113116
return len(strings.Split(pth, string(filepath.Separator))) - 1
114117
}
115118

119+
func (ut Util) IsAbs(s string) bool {
120+
return filepath.IsAbs(s)
121+
}
122+
116123
func (ut Util) IsDir(path string) bool {
117124
fileInfo, err := os.Stat(path)
118125
if err != nil {

testdata/specs/mapval/spec.yaml

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,33 @@
11
---
2-
- content_file: dump/markdown/1.md
2+
- content_file: "{{.confdir}}/dump/markdown/1.md"
33
key: front_matter.title
4-
exp: [title1]
4+
exp:
5+
- title1
56

6-
- content_file: dump/markdown/1.md
7+
- content_file: "{{.confdir}}/dump/markdown/1.md"
78
key: front_matter.tags
8-
exp: [tag1, tag2]
9+
exp:
10+
- tag1
11+
- tag2
912

10-
- content_file: dump/yaml/cpx/data_aip.yaml
13+
- content_file: "{{.confdir}}/dump/yaml/cpx/data_aip.yaml"
1114
key: title
12-
exp: [Data Services @ AIP]
15+
exp:
16+
- "Data Services @ AIP"
1317

14-
- content_file: dump/yaml/cpx/data_aip.yaml
18+
- content_file: "{{.confdir}}/dump/yaml/cpx/data_aip.yaml"
1519
key: metadata.access
16-
exp: [open]
20+
exp:
21+
- open
1722

18-
- content_file: dump/yaml/cpx/data_aip.yaml
23+
- content_file: "{{.confdir}}/dump/yaml/cpx/data_aip.yaml"
1924
key: metadata.tags
20-
exp: [vo, IVOA, Daiquiri]
25+
exp:
26+
- vo
27+
- IVOA
28+
- Daiquiri
2129

22-
- content_file: dump/yaml/cpx/data_aip.yaml
30+
- content_file: "{{.confdir}}/dump/yaml/cpx/data_aip.yaml"
2331
key: metadata.url
24-
exp: ['https://data.aip.de']
32+
exp:
33+
- https://data.aip.de

testdata/specs/server/all.yaml

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
---
2-
urls:
3-
- /all.json
4-
expectation:
5-
- sort.yaml
6-
- binary/binary_1k.file
7-
- binary/binary_5k.file
8-
- html/1.html
9-
- html/2.html
10-
- html/3.html
11-
- html/more_than_10k.html
12-
- html/sort.yaml
13-
- json/list.json
14-
- markdown/1.md
15-
- markdown/no_front_matter.md
16-
- markdown/sort.yaml
17-
- yaml/1.yaml
18-
- yaml/2.yaml
19-
- yaml/3.yaml
20-
- yaml/4.yaml
21-
- yaml/more_than_10k.yaml
22-
- markdown/subfolder1/1.md
23-
- markdown/subfolder1/2.md
24-
- markdown/subfolder1/3.md
25-
- markdown/subfolder1/4.md
26-
- markdown/subfolder2/1.md
27-
- markdown/subfolder2/2.md
28-
- markdown/subfolder2/3.md
29-
- yaml/cpx/data_aip.yaml
2+
- urls:
3+
- /all.json
4+
exp:
5+
- sort.yaml
6+
- binary/binary_1k.file
7+
- binary/binary_5k.file
8+
- html/1.html
9+
- html/2.html
10+
- html/3.html
11+
- html/more_than_10k.html
12+
- html/sort.yaml
13+
- json/list.json
14+
- markdown/1.md
15+
- markdown/no_front_matter.md
16+
- markdown/sort.yaml
17+
- yaml/1.yaml
18+
- yaml/2.yaml
19+
- yaml/3.yaml
20+
- yaml/4.yaml
21+
- yaml/more_than_10k.yaml
22+
- markdown/subfolder1/1.md
23+
- markdown/subfolder1/2.md
24+
- markdown/subfolder1/3.md
25+
- markdown/subfolder1/4.md
26+
- markdown/subfolder2/1.md
27+
- markdown/subfolder2/2.md
28+
- markdown/subfolder2/3.md
29+
- yaml/cpx/data_aip.yaml

0 commit comments

Comments
 (0)