Date | Commit message (Collapse) |
|
Instead of using completely random names, we'll use
predictable ones since we already depend on them for
exit codes and such. This drops our ability to run
the same test for the same version of Ruby in the
same working tree, but that's an unlikely scenario.
While we're at it, avoid remove tempfiles if a test
failed. This should make debugging easier.
|
|
If we're going to name a variable "fifo", it'll be for
descriptive reasons...
|
|
We now check for SIGKILL, too
|
|
This new middleware should be a no-op for non-Rev concurrency
models (or by explicitly setting env['rainbows.autochunk'] to
false).
Setting env['rainbows.autochunk'] to true (the default when Rev
is used) allows (e)poll-able IO objects (sockets, pipes) to be
sent asynchronously after app.call(env) returns.
This also has a fortunate side effect of introducing a code path
which allows large, static files to be sent without slurping
them into a Rev IO::Buffer, too. This new change works even
without the DevFdResponse middleware, so you won't have to
reconfigure your app.
This lets us epoll on response bodies that come in from a pipe
or even a socket and send them either straight through or with
chunked encoding.
|
|
|
|
|
|
We support pipelining, keepalive, and even HTTP/0.9!
|
|
|
|
We'll spit out a proper warning later anyways...
|
|
|
|
|
|
|
|
|
|
At least these tests all run with dash now, but ksh93
or bash is still recommended for pipefail
|
|
Just in case we break something. Also add staggered
blob test to simulate slow client uploads.
|
|
Buffering enabled in tee(1) was making tests more
difficult to debug.
|
|
This makes it easier to write/share code for multi-model tests.
|
|
We use the "G" global constant from the Rev model everywhere
to simplify things a little.
Test cases are more consistent now, too.
|
|
Since we do "Expect: 100-continue" handling, make sure
we read anything in the request body the client
will send us.
|
|
Makes it easier to track down empty files this way
|
|
|
|
Since we export "rainbows.model" to Rack now, we don't
have to worry about setting the "SLEEP_CLASS" env for
the application.
|
|
oops
|
|
|
|
Help ensure apps get the correct Rack environment to make
choices (if any) with.
|
|
all test files should have the executable bit set
|
|
We should try to send 400s back to the client if possible.
|
|
There is no TeeInput (streaming request body) support, yet,
as that does not seem fun nor easy to do (or even possible
without using Threads or Fibers or something to save/restore
the stack...)
|
|
Just in case Rev/Revactor does weird things when faced
with signals.
|
|
And fix existing tests that use "grep -v" since that
is almost always true...
|
|
They were completely broken in the refactoring :x
|
|
|
|
In case the test doesn't complete and somehow
doesn't write the exit code, we always want to
start with one.
|
|
|
|
These variables are only for shells in tests
|
|
|
|
pipefail is extremely useful for detecting bad exits _anywhere_
in pipelines, not just the last command. Combined with
"set -e", pipefail leads to very unforgiving scripts that
bail out at the first sign of error, exactly what we want
in tests.
|
|
Revactor model uses a different process_client method
than our Thread* models.
|
|
Useful for prefixing individual lines of a temporary
file while catting it to stdout. This helps make tests
easier to write and test.
|
|
Since we rely heavily on temporary files in tests, make
sure management of them is easy and reliable.
|
|
|
|
Avoid cluttering the directory we write tests in
|
|
We don't need to repeatedly waste cycles and memory
bandwidth to generate random throwaway data.
|
|
mktemp(1) requires files to end with "XXXXXXXX", not just have
that template anywhere. Also, add pid files to the TEST_RM_LIST
since test failures can leave a pid file dangling. Lastly,
since the config.ru files are 100% static, just check them
as standalone files in instead of allocating a tempfile on them
for easier maintenance.
|
|
Normally we can run "make V=1" for medium verbosity
|
|
|
|
Everything is logged in git anyways and it'll be easier to
hand off to somebody else.
|
|
We'll be able to use the SHA1 test in other places, too.
|
|
This is somewhat like the original model found in Mongrel,
except we refuse to accept() connections unless we have slots
available. Even though we support multiple listen sockets, we
only accept() synchronously to simplify processing and to avoid
having to synchronize ThreadGroup management.
|
|
I'd rather write shell scripts in shell than shell scripts in
Ruby like was done with Unicorn. We're a *nix-only project so
we'll embrace *nix tools to their fullest extent and as a
pleasant side-effect these test cases are immune to internal API
changes.
|