59 lines
1.6 KiB
Go
59 lines
1.6 KiB
Go
package traefik
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestRoutersPagination(t *testing.T) {
|
|
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
if r.URL.Path != "/api/http/routers" {
|
|
t.Errorf("path = %s", r.URL.Path)
|
|
}
|
|
switch r.URL.Query().Get("page") {
|
|
case "1":
|
|
w.Header().Set("X-Next-Page", "2")
|
|
_, _ = w.Write([]byte(`[{"name":"a@docker","rule":"Host(` + "`a.example.com`" + `)","status":"enabled","provider":"docker"}]`))
|
|
case "2":
|
|
w.Header().Set("X-Next-Page", "2")
|
|
_, _ = w.Write([]byte(`[{"name":"b@file","rule":"Host(` + "`b.example.com`" + `)","status":"disabled","provider":"file"}]`))
|
|
default:
|
|
t.Errorf("unexpected page %q", r.URL.Query().Get("page"))
|
|
}
|
|
}))
|
|
defer srv.Close()
|
|
c, err := NewClient(srv.URL, time.Second)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
rs, err := c.Routers(context.Background())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(rs) != 2 || rs[0].Name != "a@docker" || rs[1].Status != "disabled" {
|
|
t.Fatalf("routers = %+v", rs)
|
|
}
|
|
}
|
|
|
|
func TestRoutersErrorStatus(t *testing.T) {
|
|
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusForbidden)
|
|
}))
|
|
defer srv.Close()
|
|
c, _ := NewClient(srv.URL, time.Second)
|
|
if _, err := c.Routers(context.Background()); err == nil {
|
|
t.Fatal("ожидалась ошибка")
|
|
}
|
|
}
|
|
|
|
func TestNewClientInvalidURL(t *testing.T) {
|
|
for _, u := range []string{"", "traefik:8080", "ftp://x"} {
|
|
if _, err := NewClient(u, time.Second); err == nil {
|
|
t.Errorf("%q: ожидалась ошибка", u)
|
|
}
|
|
}
|
|
}
|