Skip to content

Commit cfd1d42

Browse files
authored
fix: add unit tests for the git store ext (#166)
1 parent e081118 commit cfd1d42

File tree

4 files changed

+189
-82
lines changed

4 files changed

+189
-82
lines changed

Dockerfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,8 @@ RUN mkdir -p /var/www/data
5858
COPY --from=builder /workspace/sample /var/www/sample
5959
COPY --from=ui /workspace/dist /var/www/html
6060

61+
RUN apt update -y && \
62+
# required for atest-store-git
63+
apt install -y --no-install-recommends ssh-client ca-certificates
64+
6165
CMD ["atest", "server", "--console-path=/var/www/html", "--local-storage=/var/www/sample/*.yaml", "--local-storage=/var/www/data/*.yaml"]

cmd/service.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,7 @@ func (s *containerService) getStartArgs() []string {
400400
"--pull=always",
401401
"--network=host",
402402
"-v", s.localStorage + ":/var/www/data",
403+
"-v", "/root/.config/atest:/root/.config/atest",
403404
s.image + ":" + s.tag}
404405
}
405406

extensions/store-git/pkg/server.go

Lines changed: 68 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"context"
2929
"errors"
3030
"fmt"
31+
"io"
3132
"os"
3233
"path"
3334
"time"
@@ -43,11 +44,13 @@ import (
4344
)
4445

4546
type gitClient struct {
47+
writer io.Writer
4648
remote.UnimplementedLoaderServer
4749
}
4850

51+
// NewRemoteServer returns a new remote server
4952
func NewRemoteServer() remote.LoaderServer {
50-
return &gitClient{}
53+
return &gitClient{writer: os.Stdout}
5154
}
5255
func (s *gitClient) loadCache(ctx context.Context) (opt *gitOptions, err error) {
5356
if opt, err = s.getClient(ctx); err != nil {
@@ -105,38 +108,33 @@ func (s *gitClient) pushCache(ctx context.Context) (err error) {
105108
var wd *git.Worktree
106109

107110
if wd, err = repo.Worktree(); err == nil {
108-
_, err = wd.Add(".")
111+
if _, err = wd.Add("."); err != nil {
112+
return
113+
}
109114

110115
if _, err = wd.Commit(`auto commit by api-testing
111116
112117
See also https://github.com/LinuxSuRen/api-testing
113118
`, &git.CommitOptions{
114119
Author: &object.Signature{
115-
Name: "LinuxSuRen",
116-
120+
Name: opt.name,
121+
Email: opt.email,
117122
When: time.Now(),
118123
},
119-
}); err != nil {
120-
return
124+
}); err == nil {
125+
err = repo.Push(opt.pushOptions)
121126
}
122-
123-
err = repo.Push(opt.pushOptions)
124127
}
125128
}
126129
return
127130
}
128131
func (s *gitClient) ListTestSuite(ctx context.Context, _ *server.Empty) (reply *remote.TestSuites, err error) {
129132
reply = &remote.TestSuites{}
130-
131-
var opt *gitOptions
132-
if opt, err = s.loadCache(ctx); err != nil {
133+
var loader testing.Writer
134+
if loader, err = s.newLoader(ctx); err != nil {
133135
return
134136
}
135137

136-
parentDir := path.Join(opt.cache, opt.targetPath)
137-
loader := testing.NewFileWriter(parentDir)
138-
loader.Put(parentDir + "/*.yaml")
139-
140138
var suites []testing.TestSuite
141139
if suites, err = loader.ListTestSuite(); err == nil {
142140
for _, item := range suites {
@@ -147,17 +145,10 @@ func (s *gitClient) ListTestSuite(ctx context.Context, _ *server.Empty) (reply *
147145
}
148146
func (s *gitClient) CreateTestSuite(ctx context.Context, testSuite *remote.TestSuite) (reply *server.Empty, err error) {
149147
reply = &server.Empty{}
150-
151-
var opt *gitOptions
152-
if opt, err = s.loadCache(ctx); err != nil {
153-
return
154-
}
155-
156-
parentDir := path.Join(opt.cache, opt.targetPath)
157-
if err = os.MkdirAll(parentDir, 0755); err != nil {
148+
var loader testing.Writer
149+
if loader, err = s.newLoader(ctx); err != nil {
158150
return
159151
}
160-
loader := testing.NewFileWriter(parentDir)
161152

162153
if err = loader.CreateSuite(testSuite.Name, testSuite.Api); err == nil {
163154
s.pushCache(ctx)
@@ -166,16 +157,11 @@ func (s *gitClient) CreateTestSuite(ctx context.Context, testSuite *remote.TestS
166157
}
167158
func (s *gitClient) GetTestSuite(ctx context.Context, suite *remote.TestSuite) (reply *remote.TestSuite, err error) {
168159
reply = &remote.TestSuite{}
169-
170-
var opt *gitOptions
171-
if opt, err = s.loadCache(ctx); err != nil {
160+
var loader testing.Writer
161+
if loader, err = s.newLoader(ctx); err != nil {
172162
return
173163
}
174164

175-
parentDir := path.Join(opt.cache, opt.targetPath)
176-
loader := testing.NewFileWriter(parentDir)
177-
loader.Put(parentDir + "/*.yaml")
178-
179165
var normalSuite testing.TestSuite
180166
if normalSuite, err = loader.GetTestSuite(suite.Name, true); err == nil {
181167
reply = remote.ConvertToGRPCTestSuite(&normalSuite)
@@ -184,33 +170,23 @@ func (s *gitClient) GetTestSuite(ctx context.Context, suite *remote.TestSuite) (
184170
}
185171
func (s *gitClient) UpdateTestSuite(ctx context.Context, suite *remote.TestSuite) (reply *remote.TestSuite, err error) {
186172
reply = &remote.TestSuite{}
187-
188-
var opt *gitOptions
189-
if opt, err = s.loadCache(ctx); err != nil {
173+
var loader testing.Writer
174+
if loader, err = s.newLoader(ctx); err != nil {
190175
return
191176
}
192177

193-
parentDir := path.Join(opt.cache, opt.targetPath)
194-
loader := testing.NewFileWriter(parentDir)
195-
loader.Put(parentDir + "/*.yaml")
196-
197178
if err = loader.UpdateSuite(*remote.ConvertToNormalTestSuite(suite)); err == nil {
198179
err = s.pushCache(ctx)
199180
}
200181
return
201182
}
202183
func (s *gitClient) DeleteTestSuite(ctx context.Context, suite *remote.TestSuite) (reply *server.Empty, err error) {
203184
reply = &server.Empty{}
204-
205-
var opt *gitOptions
206-
if opt, err = s.loadCache(ctx); err != nil {
185+
var loader testing.Writer
186+
if loader, err = s.newLoader(ctx); err != nil {
207187
return
208188
}
209189

210-
parentDir := path.Join(opt.cache, opt.targetPath)
211-
loader := testing.NewFileWriter(parentDir)
212-
loader.Put(parentDir + "/*.yaml")
213-
214190
if err = loader.DeleteSuite(suite.Name); err == nil {
215191
err = s.pushCache(ctx)
216192
}
@@ -226,16 +202,11 @@ func (s *gitClient) ListTestCases(ctx context.Context, suite *remote.TestSuite)
226202
}
227203
func (s *gitClient) CreateTestCase(ctx context.Context, testcase *server.TestCase) (reply *server.Empty, err error) {
228204
reply = &server.Empty{}
229-
230-
var opt *gitOptions
231-
if opt, err = s.loadCache(ctx); err != nil {
205+
var loader testing.Writer
206+
if loader, err = s.newLoader(ctx); err != nil {
232207
return
233208
}
234209

235-
parentDir := path.Join(opt.cache, opt.targetPath)
236-
loader := testing.NewFileWriter(parentDir)
237-
loader.Put(parentDir + "/*.yaml")
238-
239210
if err = loader.CreateTestCase(testcase.SuiteName, remote.ConvertToNormalTestCase(testcase)); err == nil {
240211
err = s.pushCache(ctx)
241212
}
@@ -257,33 +228,23 @@ func (s *gitClient) GetTestCase(ctx context.Context, testcase *server.TestCase)
257228
}
258229
func (s *gitClient) UpdateTestCase(ctx context.Context, testcase *server.TestCase) (reply *server.TestCase, err error) {
259230
reply = &server.TestCase{}
260-
261-
var opt *gitOptions
262-
if opt, err = s.loadCache(ctx); err != nil {
231+
var loader testing.Writer
232+
if loader, err = s.newLoader(ctx); err != nil {
263233
return
264234
}
265235

266-
parentDir := path.Join(opt.cache, opt.targetPath)
267-
loader := testing.NewFileWriter(parentDir)
268-
loader.Put(parentDir + "/*.yaml")
269-
270236
if err = loader.UpdateTestCase(testcase.SuiteName, remote.ConvertToNormalTestCase(testcase)); err == nil {
271237
err = s.pushCache(ctx)
272238
}
273239
return
274240
}
275241
func (s *gitClient) DeleteTestCase(ctx context.Context, testcase *server.TestCase) (reply *server.Empty, err error) {
276242
reply = &server.Empty{}
277-
278-
var opt *gitOptions
279-
if opt, err = s.loadCache(ctx); err != nil {
243+
var loader testing.Writer
244+
if loader, err = s.newLoader(ctx); err != nil {
280245
return
281246
}
282247

283-
parentDir := path.Join(opt.cache, opt.targetPath)
284-
loader := testing.NewFileWriter(parentDir)
285-
loader.Put(parentDir + "/*.yaml")
286-
287248
if err = loader.DeleteTestCase(testcase.SuiteName, testcase.Name); err == nil {
288249
err = s.pushCache(ctx)
289250
}
@@ -292,7 +253,7 @@ func (s *gitClient) DeleteTestCase(ctx context.Context, testcase *server.TestCas
292253
func (s *gitClient) Verify(ctx context.Context, in *server.Empty) (reply *server.CommonResult, err error) {
293254
_, clientErr := s.ListTestSuite(ctx, in)
294255
reply = &server.CommonResult{
295-
Success: err == nil,
256+
Success: clientErr == nil,
296257
Message: util.OKOrErrorMessage(clientErr),
297258
}
298259
return
@@ -302,44 +263,69 @@ func (s *gitClient) getClient(ctx context.Context) (opt *gitOptions, err error)
302263
if store == nil {
303264
err = errors.New("no connect to git server")
304265
} else {
305-
var ok bool
306-
if opt, ok = clientCache[store.Name]; ok && opt != nil {
307-
return
308-
}
309-
310266
auth := &http.BasicAuth{
311267
Username: store.Username,
312268
Password: store.Password,
313269
}
314270

271+
insecure := store.Properties["insecure"] == "true"
272+
315273
opt = &gitOptions{
316-
cache: "/tmp/" + store.Name,
274+
cache: path.Join(os.TempDir(), store.Name),
317275
targetPath: store.Properties["targetpath"],
276+
name: store.Properties["name"],
277+
email: store.Properties["email"],
318278
cloneOptions: &git.CloneOptions{
319-
URL: store.URL,
320-
Progress: os.Stdout,
321-
Auth: auth,
279+
URL: store.URL,
280+
Progress: s.writer,
281+
InsecureSkipTLS: insecure,
282+
Auth: auth,
322283
},
323284
pushOptions: &git.PushOptions{
324-
Progress: os.Stdout,
325-
Auth: auth,
285+
Progress: s.writer,
286+
InsecureSkipTLS: insecure,
287+
Auth: auth,
326288
},
327289
fetchOptions: &git.FetchOptions{
328-
Progress: os.Stdout,
329-
Auth: auth,
290+
Progress: s.writer,
291+
InsecureSkipTLS: insecure,
292+
Auth: auth,
330293
},
331294
}
332-
clientCache[store.Name] = opt
295+
296+
if opt.name == "" {
297+
opt.name = "LinuxSuRen"
298+
}
299+
if opt.email == "" {
300+
opt.email = "[email protected]"
301+
}
333302
}
334303
return
335304
}
336305

337-
var clientCache = map[string]*gitOptions{}
306+
func (s *gitClient) newLoader(ctx context.Context) (loader testing.Writer, err error) {
307+
var opt *gitOptions
308+
if opt, err = s.loadCache(ctx); err == nil {
309+
loader, err = opt.newLoader()
310+
}
311+
return
312+
}
338313

339314
type gitOptions struct {
340315
cache string
341316
targetPath string
317+
name string
318+
email string
342319
cloneOptions *git.CloneOptions
343320
pushOptions *git.PushOptions
344321
fetchOptions *git.FetchOptions
345322
}
323+
324+
func (g *gitOptions) newLoader() (loader testing.Writer, err error) {
325+
parentDir := path.Join(g.cache, g.targetPath)
326+
if err = os.MkdirAll(parentDir, 0755); err == nil {
327+
loader = testing.NewFileWriter(parentDir)
328+
loader.Put(parentDir + "/*.yaml")
329+
}
330+
return
331+
}

0 commit comments

Comments
 (0)