mirror of https://github.com/XTLS/Xray-core
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.0 KiB
105 lines
3.0 KiB
package http_test |
|
|
|
import ( |
|
"testing" |
|
|
|
. "github.com/xtls/xray-core/common/protocol/http" |
|
) |
|
|
|
func TestHTTPHeaders(t *testing.T) { |
|
cases := []struct { |
|
input string |
|
domain string |
|
err bool |
|
}{ |
|
{ |
|
input: `GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1 |
|
Host: net.tutsplus.com |
|
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) |
|
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 |
|
Accept-Language: en-us,en;q=0.5 |
|
Accept-Encoding: gzip,deflate |
|
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 |
|
Keep-Alive: 300 |
|
Connection: keep-alive |
|
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120 |
|
Pragma: no-cache |
|
Cache-Control: no-cache`, |
|
domain: "net.tutsplus.com", |
|
}, |
|
{ |
|
input: `POST /foo.php HTTP/1.1 |
|
Host: localhost |
|
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) |
|
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 |
|
Accept-Language: en-us,en;q=0.5 |
|
Accept-Encoding: gzip,deflate |
|
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 |
|
Keep-Alive: 300 |
|
Connection: keep-alive |
|
Referer: http://localhost/test.php |
|
Content-Type: application/x-www-form-urlencoded |
|
Content-Length: 43 |
|
|
|
first_name=John&last_name=Doe&action=Submit`, |
|
domain: "localhost", |
|
}, |
|
{ |
|
input: `X /foo.php HTTP/1.1 |
|
Host: localhost |
|
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) |
|
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 |
|
Accept-Language: en-us,en;q=0.5 |
|
Accept-Encoding: gzip,deflate |
|
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 |
|
Keep-Alive: 300 |
|
Connection: keep-alive |
|
Referer: http://localhost/test.php |
|
Content-Type: application/x-www-form-urlencoded |
|
Content-Length: 43 |
|
|
|
first_name=John&last_name=Doe&action=Submit`, |
|
domain: "", |
|
err: true, |
|
}, |
|
{ |
|
input: `GET /foo.php HTTP/1.1 |
|
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729) |
|
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 |
|
Accept-Language: en-us,en;q=0.5 |
|
Accept-Encoding: gzip,deflate |
|
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 |
|
Keep-Alive: 300 |
|
Connection: keep-alive |
|
Referer: http://localhost/test.php |
|
Content-Type: application/x-www-form-urlencoded |
|
Content-Length: 43 |
|
|
|
Host: localhost |
|
first_name=John&last_name=Doe&action=Submit`, |
|
domain: "", |
|
err: true, |
|
}, |
|
{ |
|
input: `GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1`, |
|
domain: "", |
|
err: true, |
|
}, |
|
} |
|
|
|
for _, test := range cases { |
|
header, err := SniffHTTP([]byte(test.input)) |
|
if test.err { |
|
if err == nil { |
|
t.Errorf("Expect error but nil, in test: %v", test) |
|
} |
|
} else { |
|
if err != nil { |
|
t.Errorf("Expect no error but actually %s in test %v", err.Error(), test) |
|
} |
|
if header.Domain() != test.domain { |
|
t.Error("expected domain ", test.domain, " but got ", header.Domain()) |
|
} |
|
} |
|
} |
|
}
|
|
|