Files
traefik-selectel/internal/traefik/client_test.go
T
vasyanskandClaude Sonnet 5 273cd54415
Build / Tests (push) Successful in 13s
Build / Build image (push) Failing after 15s
Build / Notify on failure (push) Failing after 0s
feat: traefik-selectel-dns — A-записи Selectel по роутам Traefik + CI сборка образа
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-21 21:50:07 +07:00

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