forked from TrueCloudLab/rclone
As of Go 1.16, the same functionality is now provided by package io or package os, and those implementations should be preferred in new code.
76 lines
2.6 KiB
Go
76 lines
2.6 KiB
Go
package serve
|
|
|
|
import (
|
|
"io"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/rclone/rclone/fstest/mockobject"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestObjectBadMethod(t *testing.T) {
|
|
w := httptest.NewRecorder()
|
|
r := httptest.NewRequest("BADMETHOD", "http://example.com/aFile", nil)
|
|
o := mockobject.New("aFile")
|
|
Object(w, r, o)
|
|
resp := w.Result()
|
|
assert.Equal(t, http.StatusMethodNotAllowed, resp.StatusCode)
|
|
body, _ := io.ReadAll(resp.Body)
|
|
assert.Equal(t, "Method Not Allowed\n", string(body))
|
|
}
|
|
|
|
func TestObjectHEAD(t *testing.T) {
|
|
w := httptest.NewRecorder()
|
|
r := httptest.NewRequest("HEAD", "http://example.com/aFile", nil)
|
|
o := mockobject.New("aFile").WithContent([]byte("hello"), mockobject.SeekModeNone)
|
|
Object(w, r, o)
|
|
resp := w.Result()
|
|
assert.Equal(t, http.StatusOK, resp.StatusCode)
|
|
assert.Equal(t, "5", resp.Header.Get("Content-Length"))
|
|
assert.Equal(t, "bytes", resp.Header.Get("Accept-Ranges"))
|
|
body, _ := io.ReadAll(resp.Body)
|
|
assert.Equal(t, "", string(body))
|
|
}
|
|
|
|
func TestObjectGET(t *testing.T) {
|
|
w := httptest.NewRecorder()
|
|
r := httptest.NewRequest("GET", "http://example.com/aFile", nil)
|
|
o := mockobject.New("aFile").WithContent([]byte("hello"), mockobject.SeekModeNone)
|
|
Object(w, r, o)
|
|
resp := w.Result()
|
|
assert.Equal(t, http.StatusOK, resp.StatusCode)
|
|
assert.Equal(t, "5", resp.Header.Get("Content-Length"))
|
|
assert.Equal(t, "bytes", resp.Header.Get("Accept-Ranges"))
|
|
body, _ := io.ReadAll(resp.Body)
|
|
assert.Equal(t, "hello", string(body))
|
|
}
|
|
|
|
func TestObjectRange(t *testing.T) {
|
|
w := httptest.NewRecorder()
|
|
r := httptest.NewRequest("GET", "http://example.com/aFile", nil)
|
|
r.Header.Add("Range", "bytes=3-5")
|
|
o := mockobject.New("aFile").WithContent([]byte("0123456789"), mockobject.SeekModeNone)
|
|
Object(w, r, o)
|
|
resp := w.Result()
|
|
assert.Equal(t, http.StatusPartialContent, resp.StatusCode)
|
|
assert.Equal(t, "3", resp.Header.Get("Content-Length"))
|
|
assert.Equal(t, "bytes", resp.Header.Get("Accept-Ranges"))
|
|
assert.Equal(t, "bytes 3-5/10", resp.Header.Get("Content-Range"))
|
|
body, _ := io.ReadAll(resp.Body)
|
|
assert.Equal(t, "345", string(body))
|
|
}
|
|
|
|
func TestObjectBadRange(t *testing.T) {
|
|
w := httptest.NewRecorder()
|
|
r := httptest.NewRequest("GET", "http://example.com/aFile", nil)
|
|
r.Header.Add("Range", "xxxbytes=3-5")
|
|
o := mockobject.New("aFile").WithContent([]byte("0123456789"), mockobject.SeekModeNone)
|
|
Object(w, r, o)
|
|
resp := w.Result()
|
|
assert.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
|
assert.Equal(t, "10", resp.Header.Get("Content-Length"))
|
|
body, _ := io.ReadAll(resp.Body)
|
|
assert.Equal(t, "Bad Request\n", string(body))
|
|
}
|