blob: 9552696232cdf59815d111f468bc583cc816196d [file] [log] [blame]
package utils
import (
"fmt"
"net/http"
"testing"
"github.com/rackspace/gophercloud/testhelper"
)
func setupVersionHandler() {
testhelper.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, `
{
"versions": {
"values": [
{
"status": "stable",
"id": "v3.0",
"links": [
{ "href": "%s/v3.0", "rel": "self" }
]
},
{
"status": "stable",
"id": "v2.0",
"links": [
{ "href": "%s/v2.0", "rel": "self" }
]
}
]
}
}
`, testhelper.Server.URL, testhelper.Server.URL)
})
}
func TestChooseVersion(t *testing.T) {
testhelper.SetupHTTP()
defer testhelper.TeardownHTTP()
setupVersionHandler()
v2 := &Version{ID: "v2.0", Priority: 2, Suffix: "blarg"}
v3 := &Version{ID: "v3.0", Priority: 3, Suffix: "hargl"}
v, endpoint, err := ChooseVersion(testhelper.Endpoint(), "", []*Version{v2, v3})
if err != nil {
t.Fatalf("Unexpected error from ChooseVersion: %v", err)
}
if v != v3 {
t.Errorf("Expected %#v to win, but %#v did instead", v3, v)
}
expected := testhelper.Endpoint() + "v3.0/"
if endpoint != expected {
t.Errorf("Expected endpoint [%s], but was [%s] instead", expected, endpoint)
}
}
func TestChooseVersionOpinionatedLink(t *testing.T) {
testhelper.SetupHTTP()
defer testhelper.TeardownHTTP()
setupVersionHandler()
v2 := &Version{ID: "v2.0", Priority: 2, Suffix: "nope"}
v3 := &Version{ID: "v3.0", Priority: 3, Suffix: "northis"}
v, endpoint, err := ChooseVersion(testhelper.Endpoint(), testhelper.Endpoint()+"v2.0/", []*Version{v2, v3})
if err != nil {
t.Fatalf("Unexpected error from ChooseVersion: %v", err)
}
if v != v2 {
t.Errorf("Expected %#v to win, but %#v did instead", v2, v)
}
expected := testhelper.Endpoint() + "v2.0/"
if endpoint != expected {
t.Errorf("Expected endpoint [%s], but was [%s] instead", expected, endpoint)
}
}
func TestChooseVersionFromSuffix(t *testing.T) {
testhelper.SetupHTTP()
defer testhelper.TeardownHTTP()
v2 := &Version{ID: "v2.0", Priority: 2, Suffix: "/v2.0/"}
v3 := &Version{ID: "v3.0", Priority: 3, Suffix: "/v3.0/"}
v, endpoint, err := ChooseVersion(testhelper.Endpoint(), testhelper.Endpoint()+"v2.0/", []*Version{v2, v3})
if err != nil {
t.Fatalf("Unexpected error from ChooseVersion: %v", err)
}
if v != v2 {
t.Errorf("Expected %#v to win, but %#v did instead", v2, v)
}
expected := testhelper.Endpoint() + "v2.0/"
if endpoint != expected {
t.Errorf("Expected endpoint [%s], but was [%s] instead", expected, endpoint)
}
}