64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
|
package rest
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
"net/url"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/aws/aws-sdk-go/aws"
|
||
|
"github.com/aws/aws-sdk-go/aws/request"
|
||
|
)
|
||
|
|
||
|
func TestCleanPath(t *testing.T) {
|
||
|
uri := &url.URL{
|
||
|
Path: "//foo//bar",
|
||
|
Scheme: "https",
|
||
|
Host: "host",
|
||
|
}
|
||
|
cleanPath(uri)
|
||
|
|
||
|
expected := "https://host/foo/bar"
|
||
|
if a, e := uri.String(), expected; a != e {
|
||
|
t.Errorf("expect %q URI, got %q", e, a)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestMarshalPath(t *testing.T) {
|
||
|
in := struct {
|
||
|
Bucket *string `location:"uri" locationName:"bucket"`
|
||
|
Key *string `location:"uri" locationName:"key"`
|
||
|
}{
|
||
|
Bucket: aws.String("mybucket"),
|
||
|
Key: aws.String("my/cool+thing space/object世界"),
|
||
|
}
|
||
|
|
||
|
expectURL := `/mybucket/my/cool+thing space/object世界`
|
||
|
expectEscapedURL := `/mybucket/my/cool%2Bthing%20space/object%E4%B8%96%E7%95%8C`
|
||
|
|
||
|
req := &request.Request{
|
||
|
HTTPRequest: &http.Request{
|
||
|
URL: &url.URL{Scheme: "https", Host: "exmaple.com", Path: "/{bucket}/{key+}"},
|
||
|
},
|
||
|
Params: &in,
|
||
|
}
|
||
|
|
||
|
Build(req)
|
||
|
|
||
|
if req.Error != nil {
|
||
|
t.Fatalf("unexpected error, %v", req.Error)
|
||
|
}
|
||
|
|
||
|
if a, e := req.HTTPRequest.URL.Path, expectURL; a != e {
|
||
|
t.Errorf("expect %q URI, got %q", e, a)
|
||
|
}
|
||
|
|
||
|
if a, e := req.HTTPRequest.URL.RawPath, expectEscapedURL; a != e {
|
||
|
t.Errorf("expect %q escaped URI, got %q", e, a)
|
||
|
}
|
||
|
|
||
|
if a, e := req.HTTPRequest.URL.EscapedPath(), expectEscapedURL; a != e {
|
||
|
t.Errorf("expect %q escaped URI, got %q", e, a)
|
||
|
}
|
||
|
|
||
|
}
|