package rule import ( "net/http" "testing" ) func TestRequestToCurl(t *testing.T) { f := func(req *http.Request, exp string) { t.Helper() got := requestToCurl(req) if got != exp { t.Fatalf("expected to have %q; got %q instead", exp, got) } } newReq := func(url string, queryParams ...string) *http.Request { t.Helper() r, err := http.NewRequest(http.MethodPost, url, nil) if err != nil { t.Fatal(err) } params := r.URL.Query() for i := 0; i < len(queryParams); i += 2 { params.Add(queryParams[i], queryParams[i+1]) } r.URL.RawQuery = params.Encode() return r } req := newReq("foo.com") f(req, "curl -X POST 'http://foo.com'") req = newReq("foo.com") req.Header.Set("foo", "bar") req.Header.Set("baz", "qux") f(req, "curl -X POST -H 'Baz: qux' -H 'Foo: bar' 'http://foo.com'") req = newReq("foo.com", "query", "up", "step", "10") f(req, "curl -X POST 'http://foo.com?query=up&step=10'") req = newReq("http://foo.com", "query", "up", "step", "10") f(req, "curl -X POST 'http://foo.com?query=up&step=10'") req = newReq("https://foo.com", "query", "up", "step", "10") f(req, "curl -k -X POST 'https://foo.com?query=up&step=10'") req = newReq("https://user:pass@foo.com", "query", "up", "step", "10") f(req, "curl -k -X POST 'https://user:xxxxx@foo.com?query=up&step=10'") req = newReq("https://user:pass@foo.com") req.Header.Set("Authorisation", "Bearer 123456") f(req, "curl -k -X POST -H 'Authorisation: <secret>' 'https://user:xxxxx@foo.com'") req = newReq("https://user:pass@foo.com") req.Header.Set("Authorisation", "Basic 123456") f(req, "curl -k -X POST -H 'Authorisation: <secret>' 'https://user:xxxxx@foo.com'") req = newReq("https://foo.com") req.Header.Set("My-Password", "mypassword") f(req, "curl -k -X POST -H 'My-Password: <secret>' 'https://foo.com'") req = newReq("https://foo.com") req.Header.Set("key-for", "my-new-key") f(req, "curl -k -X POST -H 'Key-For: <secret>' 'https://foo.com'") req = newReq("https://foo.com") req.Header.Set("My-Secret-Org", "secret-organisation") f(req, "curl -k -X POST -H 'My-Secret-Org: <secret>' 'https://foo.com'") req = newReq("https://foo.com") req.Header.Set("Token", "secret-token") f(req, "curl -k -X POST -H 'Token: <secret>' 'https://foo.com'") }