mirror of
https://github.com/containers/podman.git
synced 2025-05-21 09:05:56 +08:00
140 lines
4.0 KiB
Go
140 lines
4.0 KiB
Go
package utils
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
func TestSupportedVersion(t *testing.T) {
|
|
req, err := http.NewRequest("GET",
|
|
fmt.Sprintf("/v%s/libpod/testing/versions", APIVersion[LibpodTree][CurrentAPIVersion]),
|
|
nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
req = mux.SetURLVars(req, map[string]string{"version": APIVersion[LibpodTree][CurrentAPIVersion].String()})
|
|
|
|
rr := httptest.NewRecorder()
|
|
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
_, err := SupportedVersionWithDefaults(r)
|
|
switch {
|
|
case errors.Is(err, ErrVersionNotGiven): // for compat endpoints version optional
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
fmt.Fprint(w, err.Error())
|
|
case errors.Is(err, ErrVersionNotSupported): // version given but not supported
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
fmt.Fprint(w, err.Error())
|
|
case err != nil:
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
fmt.Fprint(w, err.Error())
|
|
default: // all good
|
|
w.WriteHeader(http.StatusOK)
|
|
fmt.Fprint(w, "OK")
|
|
}
|
|
})
|
|
handler.ServeHTTP(rr, req)
|
|
|
|
if status := rr.Code; status != http.StatusOK {
|
|
t.Errorf("handler returned wrong status code: got %v want %v",
|
|
status, http.StatusOK)
|
|
}
|
|
|
|
// Check the response body is what we expect.
|
|
expected := `OK`
|
|
if rr.Body.String() != expected {
|
|
t.Errorf("handler returned unexpected body: got %q want %q",
|
|
rr.Body.String(), expected)
|
|
}
|
|
}
|
|
|
|
func TestUnsupportedVersion(t *testing.T) {
|
|
version := "999.999.999"
|
|
req, err := http.NewRequest("GET",
|
|
fmt.Sprintf("/v%s/libpod/testing/versions", version),
|
|
nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
req = mux.SetURLVars(req, map[string]string{"version": version})
|
|
|
|
rr := httptest.NewRecorder()
|
|
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
_, err := SupportedVersionWithDefaults(r)
|
|
switch {
|
|
case errors.Is(err, ErrVersionNotGiven): // for compat endpoints version optional
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
fmt.Fprint(w, err.Error())
|
|
case errors.Is(err, ErrVersionNotSupported): // version given but not supported
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
fmt.Fprint(w, err.Error())
|
|
case err != nil:
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
fmt.Fprint(w, err.Error())
|
|
default: // all good
|
|
w.WriteHeader(http.StatusOK)
|
|
fmt.Fprint(w, "OK")
|
|
}
|
|
})
|
|
handler.ServeHTTP(rr, req)
|
|
|
|
if status := rr.Code; status != http.StatusBadRequest {
|
|
t.Errorf("handler returned wrong status code: got %v want %v",
|
|
status, http.StatusBadRequest)
|
|
}
|
|
|
|
// Check the response body is what we expect.
|
|
expected := ErrVersionNotSupported.Error()
|
|
if rr.Body.String() != expected {
|
|
t.Errorf("handler returned unexpected body: got %q want %q",
|
|
rr.Body.String(), expected)
|
|
}
|
|
}
|
|
|
|
func TestEqualVersion(t *testing.T) {
|
|
version := "1.30.0"
|
|
req, err := http.NewRequest("GET",
|
|
fmt.Sprintf("/v%s/libpod/testing/versions", version),
|
|
nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
req = mux.SetURLVars(req, map[string]string{"version": version})
|
|
|
|
rr := httptest.NewRecorder()
|
|
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
_, err := SupportedVersion(r, "=="+version)
|
|
switch {
|
|
case errors.Is(err, ErrVersionNotGiven): // for compat endpoints version optional
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
fmt.Fprint(w, err.Error())
|
|
case errors.Is(err, ErrVersionNotSupported): // version given but not supported
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
fmt.Fprint(w, err.Error())
|
|
case err != nil:
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
fmt.Fprint(w, err.Error())
|
|
default: // all good
|
|
w.WriteHeader(http.StatusOK)
|
|
fmt.Fprint(w, "OK")
|
|
}
|
|
})
|
|
handler.ServeHTTP(rr, req)
|
|
|
|
if status := rr.Code; status != http.StatusOK {
|
|
t.Errorf("handler returned wrong status code: got %v want %v",
|
|
status, http.StatusOK)
|
|
}
|
|
|
|
// Check the response body is what we expect.
|
|
expected := http.StatusText(http.StatusOK)
|
|
if rr.Body.String() != expected {
|
|
t.Errorf("handler returned unexpected body: got %q want %q",
|
|
rr.Body.String(), expected)
|
|
}
|
|
}
|