about summary refs log tree commit homepage
path: root/t
DateCommit message (Collapse)
2010-08-02revactor: implement sendfile and range support
Due to the synchronous nature of Revactor, we can be certain sendfile won't overstep the userspace output buffering done by Rev.
2010-08-01t0015: cleanup after working directory test
Our test suite doesn't include facilities for dealing with temporary directories, yet.
2010-08-01tests: do not clobber existing RUBYLIB
We may want to try some external libraries for some tests via RUBYLIB/RUBYOPT while doing development.
2010-07-29revactor: Actor-aware dev_fd_response proxying
Proxying regular Ruby IO objects while Revactor is in use is highly suboptimal, so proxy it with an Actor-aware wrapper for better scheduling.
2010-07-28event_machine: better handling of staggered pipelines
Since TCP sockets stream, HTTP requests do not come in at well-defined boundaries and it's possible for pipelined requests to come in in a staggered form. We need to ensure our receive_data callback doesn't fire any actions at all while responding with a deferrable @body. We still need to be careful about buffering, since EM does not appear to allow temporarily disabling read events (without pausing writes), so we shutdown the read end of the socket if it reaches a maximum header size limit.
2010-07-27rev_thread_pool: stop supporting this under Ruby 1.8
It hits 100% CPU usage and Rev's 1.8 support when mixed with threads is currently suboptimal. Unfortunately our tests can not check for 100% CPU usage, so I had to *gasp* confirm it by actually starting an app :x This appears to be a fixable bug in Rev, however, and we'll try to fix it as soon as we have time.
2010-07-27t0020: speed up rate limited tests
They were taking long enough to be annoying :<
2010-07-27t00{2,3}1: beef tests up with more aborted requests
HTTP/1.1 and HTTP/1.0 code paths may vary significantly from the (highly uncommon) HTTP/0.9 ones in our concurrency models, so add extra tests for those.
2010-07-27event_machine: fix pipelining of static files
EM::FileStreamer writes may be intermingled with the headers in the subsequent response if we enable processing of the second pipelined response right away, so wait until the first response is complete before hitting the second one. This also avoids potential deep stack recursion in the unlikely case where too many requests are pipelined.
2010-07-26rev*: properly handle pipelined responses w/sendfile
With sendfile enabled, we must avoid writing headers (or normal, non-file responses) while a file is deferred for sending. This means we must disable processing of new requests while a file is deferred for sending and use the on_write_complete callback less aggressively.
2010-07-23t9000: disable app_pool test for WriterThread*
Those are entirely single-threaded during the application dispatch phase.
2010-07-22t0501: workarounds for non-GNU awks
While gawk can handle binary data, other awks cannot, so use tr(1) to filter out non-printable characters from the WebSocket message. We need to send a bigger message, too, since tr(1) output is buffered and there's no portable way to unbuffer it :<
2010-07-22t0105: I/O reductions and speedups
2010-07-22enable Range: responses for static files for most models
The FileStreamer class of EventMachine (and by extension NeverBlock) unfortunately doesn't handle this. It's possible to do with Revactor (since it uses Rev under the covers), but we'll support what we can easily for now.
2010-07-19ensure client aborted file/stream response bodies are closed
We need to remember to close response bodies even if a client aborts the connection, since body.close can trigger interesting things like logging and such...
2010-07-19ensure file response bodies are properly closed
Middlewares like Clogger may wrap Rack::File responses with another body that responds to to_path and still rely on #close to trigger an action (writing out the log file).
2010-07-19ensure stream response bodies get closed
Some middlewares such as Clogger rely on wrapping the body having the close method called on it for logging.
2010-07-19rev + em: enable keepalive for pipe/socket responses
This makes it easier to write proxies for slow clients that benefit from keep-alive. We also need to be careful about non-HTTP/1.1 connections that can't do keepalive, now.
2010-07-19rev + em: more easily allow Content-Length in pipe responses
If a response proxying a pipe (or socket) includes a Content-Length, do not attempt to outsmart the application and just use the given Content-Length. This helps avoid exposing applications to weird internals such as env["rainbows.autochunk"] and X-Rainbows-* response headers.
2010-07-19event_machine: avoid race in unchunked fast pipe responses
Using EM.enable_proxy with EM.attach seems to cause EM::Connection#receive_data callbacks to be fired before the proxy has a chance to act, leading the first few chunks of data being lost in the default receive_data handler. Instead just rely on EM.watch like the chunked pipe.
2010-07-11bump Unicorn dependency to 1.1.1
This avoids costant resolution problems on client EOF during input processing.
2010-07-10test_isolate: document why we test with Rack 1.1.0
2010-07-08restore Rainbows::HttpResponse.write for Cramp
Cramp monkey patches Rainbows internals for WebSockets support and we forgot about it. Add a new integration test to ensure this continues to work in the future (and force us to update the test for newer Cramp).
2010-07-08dev: bump isolate dependency to 2.1.0
2010-07-08bump unicorn dependencies
2010-07-06fix string slicing under 1.9 after short writes
Fortunately this only affects the hardly-used FiberSpawn and FiberPool concurrency models, and also unreleased revisions of Rev. 1.9 encoding is tricky to handle right when doing I/O in Ruby...
2010-07-06cleanup error handling for aborted downloads
We shouldn't ever spew errors to the stderr/logger on client disconnects (ECONNRESET/EPIPE/etc...).
2010-07-04refactor response body handling for sendfile(2)
This hopefully allows the "sendfile" gem to be required anywhere in the Rainbows!/Unicorn config file, and not have to be required via RUBYOPT or the '-r' command-line switch. We also modularize HttpResponse and avoids singleton methods in the response path. This (hopefully) makes it easier for individual concurrency models to share code and override individual methods.
2010-06-28add preliminary sendfile (1.0.0) gem support
This still needs work and lots of cleanup, but the basics are there. The sendfile 1.0.0 RubyGem is now safe to use under MRI 1.8, and is superior to current (1.9.2-preview3) versions of IO.copy_stream for static files in that it supports more platforms and doesn't truncate large files on 32-bit platforms.
2010-06-21tests: enable ActorSpawn test for rbx
2010-06-21test_isolate: bump unicorn dependency
2010-06-21test: no need for IO#sync=true in async-response tests
We only read from the IO pipe and never write to it
2010-06-21tests: avoid embedded command-line switches in tests
They're ugly and potentially non-portable to other servers. They also make Unicorn + Rubinius unhappy, which makes us unhappy as well.
2010-06-21bump async_sinatra test dependencies
Everything should be working under Ruby 1.9.2(-preview3) now.
2010-06-16test_isolate: fix ruby engine usage
Oops, looks like 1.9.1 exports the RUBY_ENGINE constant.
2010-06-11update test infrastructure to support Rubinius
Rubinius still has a few issues that prevent 100% support, but it basically works if log rotation or USR2 upgrades aren't required. Tickets for all known issues for Rubinius have been filed on the project's issue tracker. * rbx does not support -i/-p yet, so rely on MRI for that * "io/nonblock" is missing * avoiding any optional Gems for now (EM, Rev, etc..)
2010-06-11alt working_directory test from Unicorn
2010-06-11rely on Unicorn 0.991.0 for tests
2010-06-10add Rainbows::ServerToken middleware
Some folks can now show off their Rainbows! installation
2010-06-10my-tap-lib: fix race condition in verbose mode
Don't try to redirect until we know our FIFO consumers are ready for us. This only seems to happen with bash and not ksh... commit d0a0883eaaeec37800ca5cd07647b7b66a00c453 in Unicorn
2010-06-06tests: t9001: avoid needless filesystem activity
2010-06-04doc: update test suite README and link with RDoc
Apparently this document was completely forgotten over the course of development and never properly put on the website. The test suite is one of my favorite parts of Rainbows! and allows us to test the server as real clients would hit it.
2010-06-04tests: make -C $MODEL.tNNNN-foo.sh work again out-of-the box
It was missing dependencies on the first run
2010-06-04tests: cleanup isolate usage
We don't need tmp/ in our top level directory
2010-06-04tests: disable async_sinatra test for Ruby 1.9.2
Sinatra 0.9.4 does not appear to be compatible with Ruby 1.9.2...
2010-06-04test-lib: set NO_PROXY to counter http_proxy
Some testers (like myself) use http_proxy when isolating gems to avoid wasting bandwidth, but we don't proxy requests to localhost.
2010-06-03depend on Isolate ~> 2.0.2 for development
It's useful given all the Gems we support but don't have hard installation dependencies on.
2010-06-03add Rainbows::Sendfile middleware
This lets most concurrency models understand and process X-Sendfile efficiently with IO.copy_stream under Ruby 1.9. EventMachine can take advantage of this middleware under both Ruby 1.8 and Ruby 1.9.
2010-06-03writer_thread_*: fix static file response under 1.8
While these models are designed to work with IO.copy_stream under Ruby 1.9, it should be possible to run them under Ruby 1.8 without returning corrupt responses. The large file response test is beefed up to compare SHA1 checksums of the served file, not just sizes.
2010-06-03test-lib: remove ancient wait_for_pid() function
It hasn't been used since the first month of development when we started using FIFOs