From cc960a6261b965369b3bdef894c5059efc92818a Mon Sep 17 00:00:00 2001 From: rubyist Date: Thu, 21 May 2015 16:51:02 -0400 Subject: [PATCH] Add batch endpoint to integration test server --- test/cmd/lfstest-gitserver.go | 50 ++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/test/cmd/lfstest-gitserver.go b/test/cmd/lfstest-gitserver.go index af520c92..e13feb18 100644 --- a/test/cmd/lfstest-gitserver.go +++ b/test/cmd/lfstest-gitserver.go @@ -85,7 +85,11 @@ func lfsHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/vnd.git-lfs+json") switch r.Method { case "POST": - lfsPostHandler(w, r) + if strings.HasSuffix(r.URL.String(), "batch") { + lfsBatchHandler(w, r) + } else { + lfsPostHandler(w, r) + } case "GET": lfsGetHandler(w, r) default: @@ -164,6 +168,50 @@ func lfsGetHandler(w http.ResponseWriter, r *http.Request) { w.Write(by) } +func lfsBatchHandler(w http.ResponseWriter, r *http.Request) { + buf := &bytes.Buffer{} + tee := io.TeeReader(r.Body, buf) + var objs map[string][]lfsObject + err := json.NewDecoder(tee).Decode(&objs) + io.Copy(ioutil.Discard, r.Body) + r.Body.Close() + + log.Println("REQUEST") + log.Println(buf.String()) + + if err != nil { + log.Fatal(err) + } + + res := []lfsObject{} + for _, obj := range objs["objects"] { + o := lfsObject{ + Oid: obj.Oid, + Size: obj.Size, + Links: map[string]lfsLink{ + "upload": lfsLink{ + Href: server.URL + "/storage/" + obj.Oid, + }, + }, + } + + res = append(res, o) + } + + ores := map[string][]lfsObject{"objects": res} + + by, err := json.Marshal(ores) + if err != nil { + log.Fatal(err) + } + + log.Println("RESPONSE: 200") + log.Println(string(by)) + + w.WriteHeader(200) + w.Write(by) +} + // handles any /storage/{oid} requests func storageHandler(w http.ResponseWriter, r *http.Request) { log.Printf("storage %s %s\n", r.Method, r.URL)