summaryrefslogtreecommitdiff
path: root/spartan
diff options
context:
space:
mode:
Diffstat (limited to 'spartan')
-rw-r--r--spartan/request.go4
-rw-r--r--spartan/request_test.go45
2 files changed, 47 insertions, 2 deletions
diff --git a/spartan/request.go b/spartan/request.go
index 331b68c..ca1159b 100644
--- a/spartan/request.go
+++ b/spartan/request.go
@@ -37,7 +37,7 @@ func ParseRequest(rdr io.Reader) (*gus.Request, int, error) {
if !ok {
return nil, 0, InvalidRequestLine
}
- path, rest, ok := strings.Cut(line, " ")
+ path, rest, ok := strings.Cut(rest, " ")
if !ok {
return nil, 0, InvalidRequestLine
}
@@ -46,7 +46,7 @@ func ParseRequest(rdr io.Reader) (*gus.Request, int, error) {
return nil, 0, InvalidRequestLineEnding
}
- contentlen, err := strconv.Atoi(line[:len(line)-2])
+ contentlen, err := strconv.Atoi(rest[:len(rest)-2])
if err != nil {
return nil, 0, err
}
diff --git a/spartan/request_test.go b/spartan/request_test.go
new file mode 100644
index 0000000..bffecef
--- /dev/null
+++ b/spartan/request_test.go
@@ -0,0 +1,45 @@
+package spartan_test
+
+import (
+ "bytes"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+
+ "tildegit.org/tjp/gus/spartan"
+)
+
+func TestParseRequest(t *testing.T) {
+ tests := []struct {
+ requestLine string
+ host string
+ path string
+ clen int
+ }{
+ {
+ requestLine: "foobar.ninja /baz/quux 0\r\n",
+ host: "foobar.ninja",
+ path: "/baz/quux",
+ clen: 0,
+ },
+ {
+ requestLine: "foo.bar / 12\r\n",
+ host: "foo.bar",
+ path: "/",
+ clen: 12,
+ },
+ }
+
+ for _, test := range tests {
+ t.Run(test.requestLine, func(t *testing.T) {
+ request, clen, err := spartan.ParseRequest(bytes.NewBufferString(test.requestLine))
+ require.Nil(t, err)
+
+ assert.Equal(t, test.host, request.Host)
+ assert.Equal(t, test.path, request.Path)
+ assert.Equal(t, test.path, request.RawPath)
+ assert.Equal(t, test.clen, clen)
+ })
+ }
+}