| 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) |
| } |
| } |