summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWill Holley <willholley@gmail.com>2019-12-09 12:42:01 +0000
committerWill Holley <willholley@gmail.com>2019-12-09 20:29:11 +0000
commit4dbd7c17e6e7e7894b64595b2b7fdde7ead823f6 (patch)
tree9f446bf098c2294ac584ac6df2d858500507e0ac
parent57fa67f8c50c1589a4e7e39f69b25d70e9528d2e (diff)
downloadcouchdb-4dbd7c17e6e7e7894b64595b2b7fdde7ead823f6.tar.gz
Big endian support for couch_compress tests
This refactors the couch_compress tests to allow them to run on platforms (e.g. s390x) where the compression output might be different to the fixed values defined in the tests. Namely: * Assert that compressed output is smaller than the input * Assert bigendian output is portable * Assert that compressed output can be recompressed Background and discussion of this is in https://issues.apache.org/jira/browse/COUCHDB-3261.
-rw-r--r--src/couch/test/exunit/couch_compress_tests.exs58
1 files changed, 43 insertions, 15 deletions
diff --git a/src/couch/test/exunit/couch_compress_tests.exs b/src/couch/test/exunit/couch_compress_tests.exs
index b4a4e690c..5550e0661 100644
--- a/src/couch/test/exunit/couch_compress_tests.exs
+++ b/src/couch/test/exunit/couch_compress_tests.exs
@@ -2,10 +2,6 @@ defmodule Couch.Test.CouchCompress do
use Couch.Test.ExUnit.Case
alias Couch.Test.Utils
- alias Couch.Test.Setup
-
- alias Couch.Test.Setup.Step
-
import Utils
@term {[{:a, 1}, {:b, 2}, {:c, 3}, {:d, 4}, {:e, 5}]}
@@ -22,35 +18,64 @@ defmodule Couch.Test.CouchCompress do
8, 8, 98, 97, 2, 5, 8, 8, 99, 97, 3, 5, 8, 44, 100, 97, 4, 104, 2, 100, 0, 1,
101, 97, 5, 106>>
+ @snappy_bigendian <<1, 49, 60, 131, 104, 1, 108, 0, 0, 0, 5, 104, 2, 100, 0, 1, 97, 97,
+ 1, 5, 8, 8, 98, 97, 2, 5, 8, 8, 99, 97, 3, 5, 8, 44, 100, 97, 4,
+ 104, 2, 100, 0, 1, 101, 97, 5, 106>>
+
@corrupt <<2, 12, 85, 06>>
- describe "CouchDB Compression" do
+ describe "couch_compress" do
test "compress" do
assert @none === :couch_compress.compress(@term, :none)
- assert @deflate === :couch_compress.compress(@term, {:deflate, 9})
- assert @snappy === :couch_compress.compress(@term, :snappy)
+ assert @none !== :couch_compress.compress(@term, {:deflate, 9})
+ assert @none !== :couch_compress.compress(@term, :snappy)
+
+ # assert that compressed output is smaller than uncompressed input
+ assert bit_size(:couch_compress.compress(@term, {:deflate, 9})) < bit_size(@none)
+ assert bit_size(:couch_compress.compress(@term, :snappy)) < bit_size(@none)
end
test "decompress" do
assert @term === :couch_compress.decompress(@none)
assert @term === :couch_compress.decompress(@deflate)
assert @term === :couch_compress.decompress(@snappy)
+ assert @term === :couch_compress.decompress(@snappy_bigendian)
assert catch_error(:couch_compress.decompress(@corrupt)) == :invalid_compression
end
test "recompress" do
- assert @deflate === :couch_compress.compress(@none, {:deflate, 9})
- assert @snappy === :couch_compress.compress(@none, :snappy)
- assert @none === :couch_compress.compress(@deflate, :none)
- assert @snappy === :couch_compress.compress(@deflate, :snappy)
- assert @none === :couch_compress.compress(@snappy, :none)
- assert @deflate === :couch_compress.compress(@snappy, {:deflate, 9})
+ res = @none
+
+ # none -> deflate
+ res = :couch_compress.compress(res, {:deflate, 9})
+ assert :couch_compress.is_compressed(res, {:deflate, 9})
+
+ # deflate -> snappy
+ res = :couch_compress.compress(res, :snappy)
+ assert :couch_compress.is_compressed(res, :snappy)
+
+ # snappy -> none
+ res = :couch_compress.compress(res, :none)
+ assert :couch_compress.is_compressed(res, :none)
+
+ # none -> snappy
+ res = :couch_compress.compress(res, :snappy)
+ assert :couch_compress.is_compressed(res, :snappy)
+
+ # snappy -> deflate
+ res = :couch_compress.compress(res, {:deflate, 9})
+ assert :couch_compress.is_compressed(res, {:deflate, 9})
+
+ # deflate -> none
+ res = :couch_compress.compress(res, :none)
+ assert :couch_compress.is_compressed(res, :none)
end
- test "is compressed" do
+ test "is_compressed" do
assert :couch_compress.is_compressed(@none, :none)
assert :couch_compress.is_compressed(@deflate, {:deflate, 9})
assert :couch_compress.is_compressed(@snappy, :snappy)
+ assert :couch_compress.is_compressed(@snappy_bigendian, :snappy)
refute :couch_compress.is_compressed(@none, {:deflate, 0})
refute :couch_compress.is_compressed(@none, {:deflate, 9})
refute :couch_compress.is_compressed(@none, :snappy)
@@ -58,6 +83,8 @@ defmodule Couch.Test.CouchCompress do
refute :couch_compress.is_compressed(@deflate, :snappy)
refute :couch_compress.is_compressed(@snappy, :none)
refute :couch_compress.is_compressed(@snappy, {:deflate, 9})
+ refute :couch_compress.is_compressed(@snappy_bigendian, :none)
+ refute :couch_compress.is_compressed(@snappy_bigendian, {:deflate, 9})
assert catch_error(:couch_compress.is_compressed(@corrupt, :none)) ==
:invalid_compression
@@ -69,10 +96,11 @@ defmodule Couch.Test.CouchCompress do
:invalid_compression
end
- test "uncompressed size" do
+ test "uncompressed_size" do
assert :couch_compress.uncompressed_size(@none) === 49
assert :couch_compress.uncompressed_size(@deflate) === 49
assert :couch_compress.uncompressed_size(@snappy) === 49
+ assert :couch_compress.uncompressed_size(@snappy_bigendian) === 49
assert :couch_compress.uncompressed_size(
:couch_compress.compress(:x, {:deflate, 9})