175 lines
3.7 KiB
Go
175 lines
3.7 KiB
Go
package lfs
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestDownload(t *testing.T) {
|
|
mux := http.NewServeMux()
|
|
server := httptest.NewServer(mux)
|
|
tmp := tempdir(t)
|
|
defer server.Close()
|
|
defer os.RemoveAll(tmp)
|
|
|
|
mux.HandleFunc("/media/objects/oid", func(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != "GET" {
|
|
w.WriteHeader(405)
|
|
return
|
|
}
|
|
|
|
head := w.Header()
|
|
head.Set("Content-Type", "application/octet-stream")
|
|
head.Set("Content-Length", "4")
|
|
w.WriteHeader(200)
|
|
w.Write([]byte("test"))
|
|
})
|
|
|
|
Config.SetConfig("lfs.url", server.URL+"/media")
|
|
reader, size, wErr := Download("whatever/oid")
|
|
if wErr != nil {
|
|
t.Fatalf("unexpected error: %s", wErr)
|
|
}
|
|
defer reader.Close()
|
|
|
|
if size != 4 {
|
|
t.Errorf("unexpected size: %d", size)
|
|
}
|
|
|
|
by, err := ioutil.ReadAll(reader)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
|
|
if body := string(by); body != "test" {
|
|
t.Errorf("unexpected body: %s", body)
|
|
}
|
|
}
|
|
|
|
func TestDownloadFromMeta(t *testing.T) {
|
|
mux := http.NewServeMux()
|
|
server := httptest.NewServer(mux)
|
|
tmp := tempdir(t)
|
|
defer server.Close()
|
|
defer os.RemoveAll(tmp)
|
|
|
|
// simulates an endpoint that returns the meta data for every request.
|
|
// this way downloads keep working with the older prototype server during
|
|
// the pre-release.
|
|
mux.HandleFunc("/media/objects/oid", func(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != "GET" {
|
|
w.WriteHeader(405)
|
|
return
|
|
}
|
|
|
|
obj := &objectResource{
|
|
Oid: "oid",
|
|
Size: 4,
|
|
Links: map[string]*linkRelation{
|
|
"download": &linkRelation{
|
|
Href: server.URL + "/media/download/oid",
|
|
},
|
|
},
|
|
}
|
|
|
|
by, err := json.Marshal(obj)
|
|
if err != nil {
|
|
t.Errorf("Error marshaling json: %s", err)
|
|
}
|
|
|
|
head := w.Header()
|
|
head.Set("Content-Type", "application/vnd.git-media+json")
|
|
w.WriteHeader(200)
|
|
w.Write(by)
|
|
})
|
|
|
|
mux.HandleFunc("/media/download/oid", func(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != "GET" {
|
|
w.WriteHeader(405)
|
|
return
|
|
}
|
|
|
|
head := w.Header()
|
|
head.Set("Content-Type", "application/octet-stream")
|
|
head.Set("Content-Length", "4")
|
|
w.WriteHeader(200)
|
|
w.Write([]byte("test"))
|
|
})
|
|
|
|
Config.SetConfig("lfs.url", server.URL+"/media")
|
|
reader, size, wErr := Download("whatever/oid")
|
|
if wErr != nil {
|
|
t.Fatalf("unexpected error: %s", wErr)
|
|
}
|
|
defer reader.Close()
|
|
|
|
if size != 4 {
|
|
t.Errorf("unexpected size: %d", size)
|
|
}
|
|
|
|
by, err := ioutil.ReadAll(reader)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
|
|
if body := string(by); body != "test" {
|
|
t.Errorf("unexpected body: %s", body)
|
|
}
|
|
}
|
|
|
|
func TestDownloadWithRedirect(t *testing.T) {
|
|
mux := http.NewServeMux()
|
|
server := httptest.NewServer(mux)
|
|
tmp := tempdir(t)
|
|
defer server.Close()
|
|
defer os.RemoveAll(tmp)
|
|
|
|
mux.HandleFunc("/media/objects/oid", func(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != "GET" {
|
|
w.WriteHeader(405)
|
|
return
|
|
}
|
|
|
|
head := w.Header()
|
|
head.Set("Location", server.URL+"/media/objects/redirect")
|
|
w.WriteHeader(302)
|
|
})
|
|
|
|
mux.HandleFunc("/media/objects/redirect", func(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != "GET" {
|
|
w.WriteHeader(405)
|
|
return
|
|
}
|
|
|
|
head := w.Header()
|
|
head.Set("Content-Type", "application/octet-stream")
|
|
head.Set("Content-Length", "4")
|
|
w.WriteHeader(200)
|
|
w.Write([]byte("test"))
|
|
})
|
|
|
|
Config.SetConfig("lfs.url", server.URL+"/media")
|
|
reader, size, wErr := Download("whatever/oid")
|
|
if wErr != nil {
|
|
t.Fatalf("unexpected error: %s", wErr)
|
|
}
|
|
defer reader.Close()
|
|
|
|
if size != 4 {
|
|
t.Errorf("unexpected size: %d", size)
|
|
}
|
|
|
|
by, err := ioutil.ReadAll(reader)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
|
|
if body := string(by); body != "test" {
|
|
t.Errorf("unexpected body: %s", body)
|
|
}
|
|
}
|