Skip to content

Commit

Permalink
Merge pull request #107 from nlnwa/fix/parse-resource-request
Browse files Browse the repository at this point in the history
Fix parsing of query parameters when requesting a resource
  • Loading branch information
maeb authored May 22, 2024
2 parents a6b8d59 + c0d883f commit 0c7972b
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 2 deletions.
3 changes: 1 addition & 2 deletions server/warcserver/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ func parseResourceRequest(r *http.Request) (uri string, closest string) {
uri = p1[1:]

// we must add on any query parameters
if q := r.URL.Query().Encode(); len(q) > 0 {
if q := r.URL.RawQuery; len(q) > 0 {
uri += "?" + q
}
// and fragment
Expand All @@ -94,5 +94,4 @@ func parseResourceRequest(r *http.Request) (uri string, closest string) {
}

return

}
52 changes: 52 additions & 0 deletions server/warcserver/api_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package warcserver

import (
"context"
"net/http"
"testing"

"github.com/julienschmidt/httprouter"
)

func TestParseResourceRequest(t *testing.T) {
tests := []struct {
name string // test case name
uri string // expected uri
closest string // expected timestamp
request *http.Request // test request
}{
{
name: "Query parameters are not sorted during parsing",
uri: "http://example.com?d=4&a=1&c=3&b=2#hei",
closest: "20210101000000",
request: func() *http.Request {
r, _ := http.NewRequest("GET", "http://example.com", nil)

ctx := context.WithValue(context.Background(), httprouter.ParamsKey, httprouter.Params{
httprouter.Param{
Key: "url",
Value: "/http://example.com?d=4&a=1&c=3&b=2#hei",
},
httprouter.Param{
Key: "timestamp",
Value: "20210101000000id_",
},
})

return r.WithContext(ctx)
}(),
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
uri, closest := parseResourceRequest(tt.request)
if uri != tt.uri {
t.Errorf("got %s, want %s", uri, tt.uri)
}
if closest != tt.closest {
t.Errorf("got %s, want %s", closest, tt.closest)
}
})
}
}

0 comments on commit 0c7972b

Please sign in to comment.