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