mirror of
https://github.com/apernet/OpenGFW.git
synced 2024-11-13 13:59:24 +08:00
c0e2483f6c
Tests performed on real-like packets secure expected behavior.
65 lines
1.7 KiB
Go
65 lines
1.7 KiB
Go
package tcp
|
|
|
|
import (
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/apernet/OpenGFW/analyzer"
|
|
)
|
|
|
|
func TestHTTPParsing_Request(t *testing.T) {
|
|
testCases := map[string]analyzer.PropMap{
|
|
"GET / HTTP/1.1\r\n": {
|
|
"method": "GET", "path": "/", "version": "HTTP/1.1",
|
|
},
|
|
"POST /hello?a=1&b=2 HTTP/1.0\r\n": {
|
|
"method": "POST", "path": "/hello?a=1&b=2", "version": "HTTP/1.0",
|
|
},
|
|
"PUT /world HTTP/1.1\r\nContent-Length: 4\r\n\r\nbody": {
|
|
"method": "PUT", "path": "/world", "version": "HTTP/1.1", "headers": analyzer.PropMap{"content-length": "4"},
|
|
},
|
|
"DELETE /goodbye HTTP/2.0\r\n": {
|
|
"method": "DELETE", "path": "/goodbye", "version": "HTTP/2.0",
|
|
},
|
|
}
|
|
|
|
for tc, want := range testCases {
|
|
t.Run(strings.Split(tc, " ")[0], func(t *testing.T) {
|
|
tc, want := tc, want
|
|
t.Parallel()
|
|
|
|
u, _ := newHTTPStream(nil).Feed(false, false, false, 0, []byte(tc))
|
|
got := u.M.Get("req")
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Errorf("\"%s\" parsed = %v, want %v", tc, got, want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestHTTPParsing_Response(t *testing.T) {
|
|
testCases := map[string]analyzer.PropMap{
|
|
"HTTP/1.0 200 OK\r\nContent-Length: 4\r\n\r\nbody": {
|
|
"version": "HTTP/1.0", "status": 200,
|
|
"headers": analyzer.PropMap{"content-length": "4"},
|
|
},
|
|
"HTTP/2.0 204 No Content\r\n\r\n": {
|
|
"version": "HTTP/2.0", "status": 204,
|
|
},
|
|
}
|
|
|
|
for tc, want := range testCases {
|
|
t.Run(strings.Split(tc, " ")[0], func(t *testing.T) {
|
|
tc, want := tc, want
|
|
t.Parallel()
|
|
|
|
u, _ := newHTTPStream(nil).Feed(true, false, false, 0, []byte(tc))
|
|
got := u.M.Get("resp")
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Errorf("\"%s\" parsed = %v, want %v", tc, got, want)
|
|
}
|
|
})
|
|
}
|
|
}
|