diff -r 55e901396005 -r 37d7a1d18b97 tests/test-http-api-httpv2.t --- a/tests/test-http-api-httpv2.t Tue Mar 13 14:15:10 2018 -0700 +++ b/tests/test-http-api-httpv2.t Tue Mar 13 19:44:59 2018 -0700 @@ -1,4 +1,5 @@ $ HTTPV2=exp-http-v2-0001 + $ MEDIATYPE=application/mercurial-tbd $ send() { > hg --verbose debugwireproto --peer raw http://$LOCALIP:$HGPORT/ @@ -60,27 +61,6 @@ $ hg -R server serve -p $HGPORT -d --pid-file hg.pid $ cat hg.pid > $DAEMON_PIDS -Request to read-only command works out of the box - - $ send << EOF - > httprequest POST api/$HTTPV2/ro/customreadonly - > user-agent: test - > EOF - using raw connection to peer - s> POST /api/exp-http-v2-0001/ro/customreadonly HTTP/1.1\r\n - s> Accept-Encoding: identity\r\n - s> user-agent: test\r\n - s> host: $LOCALIP:$HGPORT\r\n (glob) - s> \r\n - s> makefile('rb', None) - s> HTTP/1.1 200 OK\r\n - s> Server: testing stub value\r\n - s> Date: $HTTP_DATE$\r\n - s> Content-Type: text/plain\r\n - s> Content-Length: 18\r\n - s> \r\n - s> ro/customreadonly\n - Request to unknown command yields 404 $ send << EOF @@ -123,6 +103,100 @@ s> \r\n s> commands require POST requests +Missing Accept header results in 406 + + $ send << EOF + > httprequest POST api/$HTTPV2/ro/customreadonly + > user-agent: test + > EOF + using raw connection to peer + s> POST /api/exp-http-v2-0001/ro/customreadonly HTTP/1.1\r\n + s> Accept-Encoding: identity\r\n + s> user-agent: test\r\n + s> host: $LOCALIP:$HGPORT\r\n (glob) + s> \r\n + s> makefile('rb', None) + s> HTTP/1.1 406 Not Acceptable\r\n + s> Server: testing stub value\r\n + s> Date: $HTTP_DATE$\r\n + s> Content-Type: text/plain\r\n + s> Content-Length: 72\r\n + s> \r\n + s> client MUST specify Accept header with value: application/mercurial-tbd\n + +Bad Accept header results in 406 + + $ send << EOF + > httprequest POST api/$HTTPV2/ro/customreadonly + > accept: invalid + > user-agent: test + > EOF + using raw connection to peer + s> POST /api/exp-http-v2-0001/ro/customreadonly HTTP/1.1\r\n + s> Accept-Encoding: identity\r\n + s> accept: invalid\r\n + s> user-agent: test\r\n + s> host: $LOCALIP:$HGPORT\r\n (glob) + s> \r\n + s> makefile('rb', None) + s> HTTP/1.1 406 Not Acceptable\r\n + s> Server: testing stub value\r\n + s> Date: $HTTP_DATE$\r\n + s> Content-Type: text/plain\r\n + s> Content-Length: 72\r\n + s> \r\n + s> client MUST specify Accept header with value: application/mercurial-tbd\n + +Bad Content-Type header results in 415 + + $ send << EOF + > httprequest POST api/$HTTPV2/ro/customreadonly + > accept: $MEDIATYPE + > user-agent: test + > content-type: badmedia + > EOF + using raw connection to peer + s> POST /api/exp-http-v2-0001/ro/customreadonly HTTP/1.1\r\n + s> Accept-Encoding: identity\r\n + s> accept: application/mercurial-tbd\r\n + s> content-type: badmedia\r\n + s> user-agent: test\r\n + s> host: $LOCALIP:$HGPORT\r\n (glob) + s> \r\n + s> makefile('rb', None) + s> HTTP/1.1 415 Unsupported Media Type\r\n + s> Server: testing stub value\r\n + s> Date: $HTTP_DATE$\r\n + s> Content-Type: text/plain\r\n + s> Content-Length: 75\r\n + s> \r\n + s> client MUST send Content-Type header with value: application/mercurial-tbd\n + +Request to read-only command works out of the box + + $ send << EOF + > httprequest POST api/$HTTPV2/ro/customreadonly + > accept: $MEDIATYPE + > content-type: $MEDIATYPE + > user-agent: test + > EOF + using raw connection to peer + s> POST /api/exp-http-v2-0001/ro/customreadonly HTTP/1.1\r\n + s> Accept-Encoding: identity\r\n + s> accept: application/mercurial-tbd\r\n + s> content-type: application/mercurial-tbd\r\n + s> user-agent: test\r\n + s> host: $LOCALIP:$HGPORT\r\n (glob) + s> \r\n + s> makefile('rb', None) + s> HTTP/1.1 200 OK\r\n + s> Server: testing stub value\r\n + s> Date: $HTTP_DATE$\r\n + s> Content-Type: text/plain\r\n + s> Content-Length: 18\r\n + s> \r\n + s> ro/customreadonly\n + Request to read-write command fails because server is read-only by default GET to read-write request yields 405 @@ -207,10 +281,14 @@ $ send << EOF > httprequest POST api/$HTTPV2/rw/customreadonly > user-agent: test + > accept: $MEDIATYPE + > content-type: $MEDIATYPE > EOF using raw connection to peer s> POST /api/exp-http-v2-0001/rw/customreadonly HTTP/1.1\r\n s> Accept-Encoding: identity\r\n + s> accept: application/mercurial-tbd\r\n + s> content-type: application/mercurial-tbd\r\n s> user-agent: test\r\n s> host: $LOCALIP:$HGPORT\r\n (glob) s> \r\n @@ -228,10 +306,12 @@ $ send << EOF > httprequest POST api/$HTTPV2/rw/badcommand > user-agent: test + > accept: $MEDIATYPE > EOF using raw connection to peer s> POST /api/exp-http-v2-0001/rw/badcommand HTTP/1.1\r\n s> Accept-Encoding: identity\r\n + s> accept: application/mercurial-tbd\r\n s> user-agent: test\r\n s> host: $LOCALIP:$HGPORT\r\n (glob) s> \r\n