summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Pittman <daniel@rimspace.net>2011-02-22 14:18:57 -0800
committerDaniel Pittman <daniel@rimspace.net>2011-02-22 14:43:43 -0800
commit0e9858f19d9d2e021a9d0aa43b69c6ddee229352 (patch)
tree2d89725c0fbaacc419600aa37a2b66703d2e05e8
parentea7b9dfc19ed704bc3abbd9c955e8a40970ada1f (diff)
downloadpuppet-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.rb5
-rwxr-xr-x[-rw-r--r--]spec/unit/network/http/compression_spec.rb2
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