about summary refs log tree commit homepage
path: root/t/t0104-rack-input-limit-tiny.sh
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2010-05-03 15:19:53 -0700
committerEric Wong <normalperson@yhbt.net>2010-05-03 15:19:53 -0700
commit9f1131f5972ba90c1c54c76cc97633447142b307 (patch)
treec5ee918bfea67ffcd77b5b90ee2191ec2a5df129 /t/t0104-rack-input-limit-tiny.sh
parent1f3de8f8940fc7805c54d3d27e2074632ab5a0b0 (diff)
downloadrainbows-9f1131f5972ba90c1c54c76cc97633447142b307.tar.gz
Since Rainbows! is supported when exposed directly to the
Internet, administrators may want to limit the amount of data a
user may upload in a single request body to prevent a
denial-of-service via disk space exhaustion.

This amount may be specified in bytes, the default limit being
1024*1024 bytes (1 megabyte).  To override this default, a user
may specify `client_max_body_size' in the Rainbows! block
of their server config file:

  Rainbows! do
    client_max_body_size 10 * 1024 * 1024
  end

Clients that exceed the limit will get a "413 Request Entity Too
Large" response if the request body is too large and the
connection will close.

For chunked requests, we have no choice but to interrupt during
the client upload since we have no prior knowledge of the
request body size.
Diffstat (limited to 't/t0104-rack-input-limit-tiny.sh')
-rwxr-xr-xt/t0104-rack-input-limit-tiny.sh62
1 files changed, 62 insertions, 0 deletions
diff --git a/t/t0104-rack-input-limit-tiny.sh b/t/t0104-rack-input-limit-tiny.sh
new file mode 100755
index 0000000..e68bc53
--- /dev/null
+++ b/t/t0104-rack-input-limit-tiny.sh
@@ -0,0 +1,62 @@
+#!/bin/sh
+. ./test-lib.sh
+test -r random_blob || die "random_blob required, run with 'make $0'"
+
+t_plan 6 "rack.input client_max_body_size tiny"
+
+t_begin "setup and startup" && {
+        rtmpfiles curl_out curl_err cmbs_config
+        rainbows_setup $model
+        sed -e 's/client_max_body_size.*/client_max_body_size 256/' \
+          < $unicorn_config > $cmbs_config
+        rainbows -D sha1-random-size.ru -c $cmbs_config
+        rainbows_wait_start
+}
+
+t_begin "stops a regular request" && {
+        rm -f $ok
+        dd if=/dev/zero bs=257 count=1 of=$tmp
+        curl -vsSf -T $tmp -H Expect: \
+          http://$listen/ > $curl_out 2> $curl_err || > $ok
+        dbgcat curl_err
+        dbgcat curl_out
+        test -e $ok
+}
+
+t_begin "stops a large chunked request" && {
+        rm -f $ok
+        dd if=/dev/zero bs=257 count=1 | \
+          curl -vsSf -T- -H Expect: \
+          http://$listen/ > $curl_out 2> $curl_err || > $ok
+        dbgcat curl_err
+        dbgcat curl_out
+        test -e $ok
+}
+
+t_begin "small size sha1 chunked ok" && {
+        blob_sha1=b376885ac8452b6cbf9ced81b1080bfd570d9b91
+        rm -f $ok
+        dd if=/dev/zero bs=256 count=1 | \
+          curl -vsSf -T- -H Expect: \
+          http://$listen/ > $curl_out 2> $curl_err
+        dbgcat curl_err
+        dbgcat curl_out
+        test "$(cat $curl_out)" = $blob_sha1
+}
+
+t_begin "small size sha1 content-length ok" && {
+        blob_sha1=b376885ac8452b6cbf9ced81b1080bfd570d9b91
+        rm -f $ok
+        dd if=/dev/zero bs=256 count=1 of=$tmp
+        curl -vsSf -T $tmp -H Expect: \
+          http://$listen/ > $curl_out 2> $curl_err
+        dbgcat curl_err
+        dbgcat curl_out
+        test "$(cat $curl_out)" = $blob_sha1
+}
+
+t_begin "shutdown" && {
+        kill $rainbows_pid
+}
+
+t_done