You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2023/02/10 00:37:09 UTC
[couchdb] 01/05: Convert ExUnit tests back to EUnit
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 <ga...@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()