mirror of https://github.com/XTLS/Xray-core
				
				
				
			
		
			
				
	
	
		
			106 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
| 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())
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 |