This is an automated email from the ASF dual-hosted git repository. vatamane pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 0a49ffcdac0374633070ccc28d37cd5ac1a2af10 Author: Gabor Pali <gabor.p...@ibm.com> AuthorDate: Thu Jan 26 22:19:07 2023 +0100 Convert ExUnit tests back to EUnit ExUnit tests were not fully adopted and also became abandoned. Improve the situation by translating those few ExUnit tests to EUnit ones. --- src/couch/test/eunit/couch_compress_tests.erl | 128 +++++++++++++++++++++++ src/couch/test/eunit/same_site_cookie_tests.erl | 88 ++++++++++++++++ src/couch/test/exunit/couch_compress_tests.exs | 113 -------------------- src/couch/test/exunit/same_site_cookie_tests.exs | 44 -------- src/couch/test/exunit/test_helper.exs | 2 - 5 files changed, 216 insertions(+), 159 deletions(-) diff --git a/src/couch/test/eunit/couch_compress_tests.erl b/src/couch/test/eunit/couch_compress_tests.erl new file mode 100644 index 000000000..3d11be41a --- /dev/null +++ b/src/couch/test/eunit/couch_compress_tests.erl @@ -0,0 +1,128 @@ +% 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"). + +-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(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>> +). +-define(CORRUPT, <<2, 12, 85, 06>>). + +-define(DEFLATE_COMPRESSION, {deflate, 9}). +-define(DEFLATE_COMPRESSION_ZERO, {deflate, 0}). + +couch_compress_test_() -> + { + "couch compress tests", + [ + fun t_compress/0, + fun t_decompress/0, + fun t_recompress/0, + fun t_is_compressed/0, + fun t_uncompressed_size/0 + ] + }. + +t_compress() -> + ?assertEqual(?NONE, couch_compress:compress(?TERM, none)), + ?assertNotEqual(?NONE, couch_compress:compress(?TERM, ?DEFLATE_COMPRESSION)), + ?assertNotEqual(?NONE, couch_compress:compress(?TERM, snappy)), + + % assert that compressed output is smaller than uncompressed output + ?assert(bit_size(couch_compress:compress(?TERM, ?DEFLATE_COMPRESSION)) < bit_size(?NONE)), + ?assert(bit_size(couch_compress:compress(?TERM, snappy)) < bit_size(?NONE)). + +t_decompress() -> + ?assertEqual(?TERM, couch_compress:decompress(?NONE)), + ?assertEqual(?TERM, couch_compress:decompress(?DEFLATE)), + ?assertEqual(?TERM, couch_compress:decompress(?SNAPPY)), + ?assertEqual(?TERM, couch_compress:decompress(?SNAPPY_BIGENDIAN)), + ?assertError(invalid_compression, couch_compress:decompress(?CORRUPT)). + +t_recompress() -> + Result1 = ?NONE, + + % none -> deflate + Result2 = couch_compress:compress(Result1, ?DEFLATE_COMPRESSION), + ?assert(couch_compress:is_compressed(Result2, ?DEFLATE_COMPRESSION)), + + % deflate -> snappy + Result3 = couch_compress:compress(Result2, snappy), + ?assert(couch_compress:is_compressed(Result3, snappy)), + + % snappy -> none + Result4 = couch_compress:compress(Result3, none), + ?assert(couch_compress:is_compressed(Result4, none)), + + % none -> snappy + Result5 = couch_compress:compress(Result4, snappy), + ?assert(couch_compress:is_compressed(Result5, snappy)), + + % snappy -> deflate + Result6 = couch_compress:compress(Result5, ?DEFLATE_COMPRESSION), + ?assert(couch_compress:is_compressed(Result6, ?DEFLATE_COMPRESSION)), + + % deflate -> none + Result7 = couch_compress:compress(Result6, none), + ?assert(couch_compress:is_compressed(Result7, none)). + +t_is_compressed() -> + ?assert(couch_compress:is_compressed(?NONE, none)), + ?assert(couch_compress:is_compressed(?DEFLATE, ?DEFLATE_COMPRESSION)), + ?assert(couch_compress:is_compressed(?SNAPPY, snappy)), + ?assert(couch_compress:is_compressed(?SNAPPY_BIGENDIAN, snappy)), + ?assertNot(couch_compress:is_compressed(?NONE, ?DEFLATE_COMPRESSION_ZERO)), + ?assertNot(couch_compress:is_compressed(?NONE, ?DEFLATE_COMPRESSION)), + ?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_COMPRESSION)), + ?assertNot(couch_compress:is_compressed(?SNAPPY_BIGENDIAN, none)), + ?assertNot(couch_compress:is_compressed(?SNAPPY_BIGENDIAN, ?DEFLATE_COMPRESSION)), + + ?assertError(invalid_compression, couch_compress:is_compressed(?CORRUPT, none)), + ?assertError(invalid_compression, couch_compress:is_compressed(?CORRUPT, ?DEFLATE_COMPRESSION)), + ?assertError(invalid_compression, couch_compress:is_compressed(?CORRUPT, snappy)). + +t_uncompressed_size() -> + ?assertEqual(49, couch_compress:uncompressed_size(?NONE)), + ?assertEqual(49, couch_compress:uncompressed_size(?DEFLATE)), + ?assertEqual(49, couch_compress:uncompressed_size(?SNAPPY)), + ?assertEqual(49, couch_compress:uncompressed_size(?SNAPPY_BIGENDIAN)), + + ?assertEqual( + 5, + couch_compress:uncompressed_size( + couch_compress:compress(x, ?DEFLATE_COMPRESSION) + ) + ), + + ?assertError(invalid_compression, couch_compress:uncompressed_size(?CORRUPT)). diff --git a/src/couch/test/eunit/same_site_cookie_tests.erl b/src/couch/test/eunit/same_site_cookie_tests.erl new file mode 100644 index 000000000..9ae56b27e --- /dev/null +++ b/src/couch/test/eunit/same_site_cookie_tests.erl @@ -0,0 +1,88 @@ +% 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(same_site_cookie_tests). + +-include_lib("couch/include/couch_eunit.hrl"). +-include_lib("couch/include/couch_db.hrl"). + +-define(USER, "jan"). +-define(PASS, "apple"). + +-define(PERSIST, false). + +setup() -> + Hashed = couch_passwords:hash_admin_password(?PASS), + ok = config:set("admins", ?USER, ?b2l(Hashed), ?PERSIST), + Addr = config:get("httpd", "bind_address", "127.0.0.1"), + Port = integer_to_list(mochiweb_socket_server:get(couch_httpd, port)), + "http://" ++ Addr ++ ":" ++ Port. + +teardown(_BaseUri) -> + ok = config:delete("couch_httpd_auth", "same_site", ?PERSIST), + ok = config:delete("admins", ?USER, ?PERSIST). + +get_cookie(BaseUri, User, Password) -> + {ok, _, Headers, _} = test_request:post( + BaseUri ++ "/_session", + [{"Content-Type", "application/json"}], + couch_util:json_encode(#{username => ?l2b(User), password => ?l2b(Password)}) + ), + proplists:get_value("Set-Cookie", Headers). + +same_site_cookie_test_() -> + { + "same-site cookie tests", + { + setup, + fun test_util:start_couch/0, + fun test_util:stop_couch/1, + { + foreach, + fun setup/0, + fun teardown/1, + [ + ?TDEF_FE(same_site_none), + ?TDEF_FE(same_site_missing), + ?TDEF_FE(same_site_strict), + ?TDEF_FE(same_site_lax), + ?TDEF_FE(same_site_invalid) + ] + } + } + }. + +same_site_none(BaseUri) -> + ok = config:set("couch_httpd_auth", "same_site", "None", ?PERSIST), + Cookie = get_cookie(BaseUri, ?USER, ?PASS), + ?assertNotEqual(nomatch, string:find(Cookie, "; SameSite=None")). + +same_site_missing(BaseUri) -> + ok = config:set("couch_httpd_auth", "same_site", "", ?PERSIST), + Cookie = get_cookie(BaseUri, ?USER, ?PASS), + ?assertNotEqual(undefined, Cookie), + ?assertEqual(nomatch, string:find(Cookie, "; SameSite=")). + +same_site_strict(BaseUri) -> + ok = config:set("couch_httpd_auth", "same_site", "Strict", ?PERSIST), + Cookie = get_cookie(BaseUri, ?USER, ?PASS), + ?assertNotEqual(nomatch, string:find(Cookie, "; SameSite=Strict")). + +same_site_lax(BaseUri) -> + ok = config:set("couch_httpd_auth", "same_site", "Lax", ?PERSIST), + Cookie = get_cookie(BaseUri, ?USER, ?PASS), + ?assertNotEqual(nomatch, string:find(Cookie, "; SameSite=Lax")). + +same_site_invalid(BaseUri) -> + ok = config:set("couch_httpd_auth", "same_site", "Invalid", ?PERSIST), + Cookie = get_cookie(BaseUri, ?USER, ?PASS), + ?assertEqual(nomatch, string:find(Cookie, "; SameSite=")). diff --git a/src/couch/test/exunit/couch_compress_tests.exs b/src/couch/test/exunit/couch_compress_tests.exs deleted file mode 100644 index 5550e0661..000000000 --- a/src/couch/test/exunit/couch_compress_tests.exs +++ /dev/null @@ -1,113 +0,0 @@ -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 diff --git a/src/couch/test/exunit/same_site_cookie_tests.exs b/src/couch/test/exunit/same_site_cookie_tests.exs deleted file mode 100644 index bad32ada4..000000000 --- a/src/couch/test/exunit/same_site_cookie_tests.exs +++ /dev/null @@ -1,44 +0,0 @@ -defmodule SameSiteCookieTests do - use CouchTestCase - - @moduletag :authentication - - def get_cookie(user, pass) do - resp = Couch.post("/_session", body: %{:username => user, :password => pass}) - - true = resp.body["ok"] - resp.headers[:"set-cookie"] - end - - @tag config: [{"admins", "jan", "apple"}, {"couch_httpd_auth", "same_site", "None"}] - test "Set same_site None" do - cookie = get_cookie("jan", "apple") - assert cookie =~ "; SameSite=None" - end - - @tag config: [{"admins", "jan", "apple"}, {"couch_httpd_auth", "same_site", ""}] - test "same_site not set" do - cookie = get_cookie("jan", "apple") - assert cookie - refute cookie =~ "; SameSite=" - end - - @tag config: [{"admins", "jan", "apple"}, {"couch_httpd_auth", "same_site", "Strict"}] - test "Set same_site Strict" do - cookie = get_cookie("jan", "apple") - assert cookie =~ "; SameSite=Strict" - end - - @tag config: [{"admins", "jan", "apple"}, {"couch_httpd_auth", "same_site", "Lax"}] - test "Set same_site Lax" do - cookie = get_cookie("jan", "apple") - assert cookie =~ "; SameSite=Lax" - end - - @tag config: [{"admins", "jan", "apple"}, {"couch_httpd_auth", "same_site", "Invalid"}] - test "Set same_site invalid" do - cookie = get_cookie("jan", "apple") - assert cookie - refute cookie =~ "; SameSite=" - end -end diff --git a/src/couch/test/exunit/test_helper.exs b/src/couch/test/exunit/test_helper.exs deleted file mode 100644 index 314050085..000000000 --- a/src/couch/test/exunit/test_helper.exs +++ /dev/null @@ -1,2 +0,0 @@ -ExUnit.configure(formatters: [JUnitFormatter, ExUnit.CLIFormatter]) -ExUnit.start()