package lkgateway import ( "bufio" "net" "net/http" "strings" "testing" ) // http:// на порт HTTPS — 308 на https:// того же имени и порта; первый байт TLS проходит дальше. func TestHTTPSSniffRedirect(t *testing.T) { raw, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { t.Fatal(err) } ln := newHTTPSSniffListener(raw, 8443) defer ln.Close() go func() { // TLS-соединения отдаются Accept c, err := ln.Accept() if err == nil { b := make([]byte, 1) _, _ = c.Read(b) _, _ = c.Write(b) c.Close() } }() c, err := net.Dial("tcp", raw.Addr().String()) if err != nil { t.Fatal(err) } _, _ = c.Write([]byte("GET /admin/setup?x=1 HTTP/1.1\r\nHost: m2m.corp.fontvielle.ru:8443\r\n\r\n")) resp, err := http.ReadResponse(bufio.NewReader(c), nil) c.Close() if err != nil || resp.StatusCode != 308 || resp.Header.Get("Location") != "https://m2m.corp.fontvielle.ru:8443/admin/setup?x=1" { t.Fatalf("ответ: %v %v %q", err, resp, resp.Header.Get("Location")) } c2, _ := net.Dial("tcp", raw.Addr().String()) _, _ = c2.Write([]byte{0x16}) b := make([]byte, 1) if _, err := c2.Read(b); err != nil || b[0] != 0x16 || !strings.Contains(raw.Addr().String(), "127.0.0.1") { t.Fatalf("TLS-байт не прошёл: %v %x", err, b) } c2.Close() }