Files
HY2XS_flamy/apps/tools/share-uri/main.go
T
founder 920a78fdae test(e2e): подключаться по ссылке из production-генератора share URI
Внутри e2e-hysteria.sh жила вторая реализация hysteria2:// URI на bash.
Go-юнит-тесты проверяли production-генератор, e2e проверял свою
функцию - и дрейф любой из двух реализаций оставлял обе группы тестов
зелёными. Фраза "реальный клиент подключается именно по ссылке, которую
выдаёт HY2XS" была неточной.

Билдер ссылки вынесен в экспортируемую service.BuildHysteria2ShareURI,
production-путь Hysteria2Url стал её тонкой обёрткой. Новая тестовая
утилита apps/tools/share-uri печатает ссылку тем же кодом; в
production-бинарь админки она не входит.

Единственное расхождение с пользовательской ссылкой - insecure=1: e2e
работает на самоподписанном сертификате. Расхождение ограничено с трёх
сторон:

- e2e отдельно печатает и проверяет production-вариант ссылки
  (insecure=0, корректные obfs и sni);
- TestBuildHysteria2ShareURI_InsecureDiffersOnlyInThatParam доказывает,
  что кроме этого параметра ссылки совпадают;
- TestBuildHysteria2Url_ProductionPathNeverDisablesVerification
  фиксирует, что production-путь никогда не передаёт insecure=1.

Для запуска e2e теперь нужен Go (GO_BIN).
2026-08-27 12:16:07 +05:00

54 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Утилита для end-to-end проверки: печатает клиентскую ссылку тем же
// production-кодом, который выдаёт её пользователю панели.
//
// Существует, чтобы у HY2XS была ровно ОДНА реализация hysteria2:// URI.
// Раньше tools/test/e2e-hysteria.sh собирал ссылку собственной функцией на
// bash, и дрейф любой из двух реализаций оставлял обе группы тестов зелёными.
//
// В production-бинарь админки не входит: это отдельный пакет, который не
// импортируется приложением.
//
// go run ./tools/share-uri \
// --secret peer-secret --host 127.0.0.1 --port 34643 \
// --obfs gecko --obfs-password p --sni hy2xs-e2e.local [--insecure]
package main
import (
"flag"
"fmt"
"os"
"hy2xs-admin/model/bo"
"hy2xs-admin/service"
)
func main() {
secret := flag.String("secret", "", "peer connection secret (userinfo)")
host := flag.String("host", "", "public host")
port := flag.Int("port", 0, "public port")
obfsType := flag.String("obfs", "", "obfuscation type: gecko or salamander")
obfsPassword := flag.String("obfs-password", "", "obfuscation password")
sni := flag.String("sni", "", "TLS SNI")
remark := flag.String("remark", "", "link remark (fragment)")
insecure := flag.Bool("insecure", false, "skip client-side certificate verification (test only)")
flag.Parse()
if *secret == "" || *host == "" || *port <= 0 || *port > 65535 {
fmt.Fprintln(os.Stderr, "share-uri: --secret, --host and a valid --port are required")
os.Exit(2)
}
fmt.Println(service.BuildHysteria2ShareURI(service.ShareURIOptions{
Secret: *secret,
Host: *host,
Port: *port,
Obfs: bo.ObfsShareConfig{
Type: *obfsType,
Password: *obfsPassword,
},
SNI: *sni,
Remark: *remark,
Insecure: *insecure,
}))
}