package splithttp_test import ( "testing" "github.com/stretchr/testify/assert" . "github.com/xtls/xray-core/transport/internet/splithttp" ) func Test_GetNormalizedPath(t *testing.T) { tests := []struct { TestName string Path string SessionIDPlacement string SeqPlacement string Expected string }{ { TestName: "default placement keeps trailing slash", Path: "/sh", Expected: "/sh/", }, { TestName: "query string is stripped", Path: "/?world", Expected: "/", }, { TestName: "both off path drops trailing slash", Path: "/stream", SessionIDPlacement: "query", SeqPlacement: "query", Expected: "/stream", }, { TestName: "both off path keeps file-like path", Path: "/stream/filename.extension", SessionIDPlacement: "query", SeqPlacement: "header", Expected: "/stream/filename.extension", }, { TestName: "seq in path keeps trailing slash", Path: "/stream", SessionIDPlacement: "query", Expected: "/stream/", }, { TestName: "session in path keeps trailing slash", Path: "/stream", SeqPlacement: "cookie", Expected: "/stream/", }, { TestName: "existing trailing slash preserved", Path: "/stream/", SessionIDPlacement: "query", SeqPlacement: "query", Expected: "/stream/", }, { TestName: "root unchanged", Path: "/", SessionIDPlacement: "query", SeqPlacement: "query", Expected: "/", }, } for _, test := range tests { t.Run(test.TestName, func(t *testing.T) { c := Config{ Path: test.Path, SessionIDPlacement: test.SessionIDPlacement, SeqPlacement: test.SeqPlacement, } assert.Equal(t, test.Expected, c.GetNormalizedPath()) }) } }