diff options
| author | Daniel Pittman <daniel@rimspace.net> | 2011-02-22 14:18:57 -0800 |
|---|---|---|
| committer | Daniel Pittman <daniel@rimspace.net> | 2011-02-22 14:43:43 -0800 |
| commit | 0e9858f19d9d2e021a9d0aa43b69c6ddee229352 (patch) | |
| tree | 2d89725c0fbaacc419600aa37a2b66703d2e05e8 | |
| parent | ea7b9dfc19ed704bc3abbd9c955e8a40970ada1f (diff) | |
| download | puppet-0e9858f19d9d2e021a9d0aa43b69c6ddee229352.tar.gz puppet-0e9858f19d9d2e021a9d0aa43b69c6ddee229352.tar.xz puppet-0e9858f19d9d2e021a9d0aa43b69c6ddee229352.zip | |
(#6407) Fix spec test hang with Mocha >= 0.9.11 in zlib testing
We had a combination of bad logic, and bad testing, and a nasty behaviour of
Mocha <= 0.9.10 that would result in a false pass for one of our tests.
This not only falsely passed, but hid an infinite loop retrying decompression
on an invalid data stream; it could be triggered by anything that sent an HTTP
request with an invalid compressed body, resulting in a livelock.
Paired-with: Jesse Wolfe <jesse@puppetlabs.com>
Signed-off-by: Daniel Pittman <daniel@puppetlabs.com>
| -rw-r--r-- | lib/puppet/network/http/compression.rb | 5 | ||||
| -rwxr-xr-x[-rw-r--r--] | spec/unit/network/http/compression_spec.rb | 2 |
2 files changed, 5 insertions, 2 deletions
diff --git a/lib/puppet/network/http/compression.rb b/lib/puppet/network/http/compression.rb index d9b56f184..c8d001169 100644 --- a/lib/puppet/network/http/compression.rb +++ b/lib/puppet/network/http/compression.rb @@ -75,7 +75,10 @@ module Puppet::Network::HTTP::Compression # in this case, we try with a verbatim (no header) # deflater. @uncompressor = Zlib::Inflate.new - retry if @first + if @first then + @first = false + retry + end raise end diff --git a/spec/unit/network/http/compression_spec.rb b/spec/unit/network/http/compression_spec.rb index c5bbbb064..3828ec59c 100644..100755 --- a/spec/unit/network/http/compression_spec.rb +++ b/spec/unit/network/http/compression_spec.rb @@ -178,7 +178,7 @@ describe "http compression" do end it "should raise the error the second time" do - @inflater.expects(:inflate).raises(Zlib::DataError.new("not a zlib stream")) + @inflater.stubs(:inflate).raises(Zlib::DataError.new("not a zlib stream")) Zlib::Inflate.expects(:new).with.returns(@inflater) lambda { @adapter.uncompress("chunk") }.should raise_error end |
