summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWill Holley <willholley@apache.org>2019-12-10 10:53:09 +0000
committerGitHub <noreply@github.com>2019-12-10 10:53:09 +0000
commit27d4458e466579747e1de57fde25ffb4d26d0731 (patch)
tree9f446bf098c2294ac584ac6df2d858500507e0ac
parent71d673f434d17f8cb8c46bf86fef3ff38569fdcb (diff)
parent4dbd7c17e6e7e7894b64595b2b7fdde7ead823f6 (diff)
downloadcouchdb-27d4458e466579747e1de57fde25ffb4d26d0731.tar.gz
Merge pull request #2346 from willholley/couch_compress_tests
Big-endian support for couch_compress tests
-rw-r--r--src/couch/test/eunit/couch_compress_tests.erl85
-rw-r--r--src/couch/test/exunit/couch_compress_tests.exs113
2 files changed, 113 insertions, 85 deletions
diff --git a/src/couch/test/eunit/couch_compress_tests.erl b/src/couch/test/eunit/couch_compress_tests.erl
deleted file mode 100644
index addb9a0e2..000000000
--- a/src/couch/test/eunit/couch_compress_tests.erl
+++ /dev/null
@@ -1,85 +0,0 @@
-% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-% use this file except in compliance with the License. You may obtain a copy of
-% the License at
-%
-% http://www.apache.org/licenses/LICENSE-2.0
-%
-% Unless required by applicable law or agreed to in writing, software
-% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-% License for the specific language governing permissions and limitations under
-% the License.
-
--module(couch_compress_tests).
-
--include_lib("couch/include/couch_eunit.hrl").
--include_lib("couch/include/couch_db.hrl").
-
--define(TERM, {[{a, 1}, {b, 2}, {c, 3}, {d, 4}, {e, 5}]}).
--define(NONE, <<131,104,1,108,0,0,0,5,104,2,100,0,1,97,97,1,
- 104,2,100,0,1,98,97,2,104,2,100,0,1,99,97,3,104,2,100,0,
- 1,100,97,4,104,2,100,0,1,101,97,5,106>>).
--define(DEFLATE, <<131,80,0,0,0,48,120,218,203,96,204,97,96,
- 96,96,205,96,74,97,96,76,76,100,4,211,73,137,76,96,58,57,
- 145,25,76,167,36,178,128,233,212,68,214,44,0,212,169,9,51>>).
--define(SNAPPY, <<1,49,64,131,104,1,108,0,0,0,5,104,2,100,0,
- 1,97,97,1,104,1,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>>).
--define(CORRUPT, <<2,12,85,06>>).
-
-
-compress_test_() ->
- [
- ?_assertEqual(?NONE, couch_compress:compress(?TERM, none)),
- ?_assertEqual(?DEFLATE, couch_compress:compress(?TERM, {deflate, 9})),
- ?_assertEqual(?SNAPPY, couch_compress:compress(?TERM, snappy))
- ].
-
-decompress_test_() ->
- [
- ?_assertEqual(?TERM, couch_compress:decompress(?NONE)),
- ?_assertEqual(?TERM, couch_compress:decompress(?DEFLATE)),
- ?_assertEqual(?TERM, couch_compress:decompress(?SNAPPY)),
- ?_assertError(invalid_compression, couch_compress:decompress(?CORRUPT))
- ].
-
-recompress_test_() ->
- [
- ?_assertEqual(?DEFLATE, couch_compress:compress(?NONE, {deflate, 9})),
- ?_assertEqual(?SNAPPY, couch_compress:compress(?NONE, snappy)),
- ?_assertEqual(?NONE, couch_compress:compress(?DEFLATE, none)),
- ?_assertEqual(?SNAPPY, couch_compress:compress(?DEFLATE, snappy)),
- ?_assertEqual(?NONE, couch_compress:compress(?SNAPPY, none)),
- ?_assertEqual(?DEFLATE, couch_compress:compress(?SNAPPY, {deflate, 9}))
- ].
-
-is_compressed_test_() ->
- [
- ?_assert(couch_compress:is_compressed(?NONE, none)),
- ?_assert(couch_compress:is_compressed(?DEFLATE, {deflate, 9})),
- ?_assert(couch_compress:is_compressed(?SNAPPY, snappy)),
- ?_assertNot(couch_compress:is_compressed(?NONE, {deflate, 0})),
- ?_assertNot(couch_compress:is_compressed(?NONE, {deflate, 9})),
- ?_assertNot(couch_compress:is_compressed(?NONE, snappy)),
- ?_assertNot(couch_compress:is_compressed(?DEFLATE, none)),
- ?_assertNot(couch_compress:is_compressed(?DEFLATE, snappy)),
- ?_assertNot(couch_compress:is_compressed(?SNAPPY, none)),
- ?_assertNot(couch_compress:is_compressed(?SNAPPY, {deflate, 9})),
- ?_assertError(invalid_compression,
- couch_compress:is_compressed(?CORRUPT, none)),
- ?_assertError(invalid_compression,
- couch_compress:is_compressed(?CORRUPT, {deflate, 9})),
- ?_assertError(invalid_compression,
- couch_compress:is_compressed(?CORRUPT, snappy))
- ].
-
-uncompressed_size_test_() ->
- [
- ?_assertEqual(49, couch_compress:uncompressed_size(?NONE)),
- ?_assertEqual(49, couch_compress:uncompressed_size(?DEFLATE)),
- ?_assertEqual(49, couch_compress:uncompressed_size(?SNAPPY)),
- ?_assertEqual(5, couch_compress:uncompressed_size(
- couch_compress:compress(x, {deflate, 9}))),
- ?_assertError(invalid_compression,
- couch_compress:uncompressed_size(?CORRUPT))
- ].
diff --git a/src/couch/test/exunit/couch_compress_tests.exs b/src/couch/test/exunit/couch_compress_tests.exs
new file mode 100644
index 000000000..5550e0661
--- /dev/null
+++ b/src/couch/test/exunit/couch_compress_tests.exs
@@ -0,0 +1,113 @@
+defmodule Couch.Test.CouchCompress do
+ use Couch.Test.ExUnit.Case
+ alias Couch.Test.Utils
+
+ import Utils
+
+ @term {[{:a, 1}, {:b, 2}, {:c, 3}, {:d, 4}, {:e, 5}]}
+
+ @none <<131, 104, 1, 108, 0, 0, 0, 5, 104, 2, 100, 0, 1, 97, 97, 1, 104, 2, 100, 0, 1,
+ 98, 97, 2, 104, 2, 100, 0, 1, 99, 97, 3, 104, 2, 100, 0, 1, 100, 97, 4, 104, 2,
+ 100, 0, 1, 101, 97, 5, 106>>
+
+ @deflate <<131, 80, 0, 0, 0, 48, 120, 218, 203, 96, 204, 97, 96, 96, 96, 205, 96, 74,
+ 97, 96, 76, 76, 100, 4, 211, 73, 137, 76, 96, 58, 57, 145, 25, 76, 167, 36,
+ 178, 128, 233, 212, 68, 214, 44, 0, 212, 169, 9, 51>>
+
+ @snappy <<1, 49, 64, 131, 104, 1, 108, 0, 0, 0, 5, 104, 2, 100, 0, 1, 97, 97, 1, 104, 1,
+ 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 "couch_compress" do
+ test "compress" do
+ assert @none === :couch_compress.compress(@term, :none)
+ 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
+ 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
+ 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)
+ refute :couch_compress.is_compressed(@deflate, :none)
+ 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
+
+ assert catch_error(:couch_compress.is_compressed(@corrupt, {:deflate, 9})) ==
+ :invalid_compression
+
+ assert catch_error(:couch_compress.is_compressed(@corrupt, :snappy)) ==
+ :invalid_compression
+ end
+
+ 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})
+ ) === 5
+
+ assert catch_error(:couch_compress.uncompressed_size(@corrupt)) ==
+ :invalid_compression
+ end
+ end
+end