Тест кабинета для просмотра на порту ядра
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
This commit is contained in:
@@ -0,0 +1,60 @@
|
|||||||
|
package lkgateway
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Кабинет для просмотра на порту ядра: включается настройкой, отдаёт страницу входа с куками без
|
||||||
|
// Secure (просмотр по http), выключается той же настройкой.
|
||||||
|
func TestLKPreviewListener(t *testing.T) {
|
||||||
|
rc, err := NewRuntimeConfig(t.TempDir() + "/setup.json")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
mux := http.NewServeMux()
|
||||||
|
registerLKAPI(mux, rc, nil) // задаёт globalLKCabinet
|
||||||
|
cfg := rc.Snapshot().LK
|
||||||
|
cfg.APIKey, cfg.PreviewOn, cfg.PreviewListen = "lk-preview-key", true, "127.0.0.1:18099"
|
||||||
|
if err := rc.UpdateLK(cfg); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
lkPreviewApply(rc)
|
||||||
|
defer func() {
|
||||||
|
cfg.PreviewOn = false
|
||||||
|
_ = rc.UpdateLK(cfg)
|
||||||
|
lkPreviewApply(rc)
|
||||||
|
}()
|
||||||
|
client := &http.Client{Timeout: 5 * time.Second}
|
||||||
|
var resp *http.Response
|
||||||
|
for i := 0; i < 20; i++ {
|
||||||
|
resp, err = client.Get("http://127.0.0.1:18099/login")
|
||||||
|
if err == nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
time.Sleep(50 * time.Millisecond)
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("кабинет для просмотра не отвечает: %v", err)
|
||||||
|
}
|
||||||
|
body, _ := io.ReadAll(resp.Body)
|
||||||
|
resp.Body.Close()
|
||||||
|
if resp.StatusCode != http.StatusOK || !strings.Contains(string(body), "Логин или номер договора") {
|
||||||
|
t.Fatalf("страница входа: %d %.200s", resp.StatusCode, body)
|
||||||
|
}
|
||||||
|
for _, c := range resp.Cookies() {
|
||||||
|
if c.Name == "bj_lk_csrf" && c.Secure {
|
||||||
|
t.Error("для просмотра по http кука не должна быть Secure — вход не сработает")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cfg.PreviewOn = false
|
||||||
|
_ = rc.UpdateLK(cfg)
|
||||||
|
lkPreviewApply(rc)
|
||||||
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
if _, err := client.Get("http://127.0.0.1:18099/login"); err == nil {
|
||||||
|
t.Fatal("после выключения порт всё ещё отвечает")
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user