summaryrefslogtreecommitdiff
path: root/test/elixir/test/auth_cache_test.exs
diff options
context:
space:
mode:
Diffstat (limited to 'test/elixir/test/auth_cache_test.exs')
-rw-r--r--test/elixir/test/auth_cache_test.exs198
1 files changed, 0 insertions, 198 deletions
diff --git a/test/elixir/test/auth_cache_test.exs b/test/elixir/test/auth_cache_test.exs
deleted file mode 100644
index 5c446f039..000000000
--- a/test/elixir/test/auth_cache_test.exs
+++ /dev/null
@@ -1,198 +0,0 @@
-defmodule AuthCacheTest do
- use CouchTestCase
-
- @moduletag :authentication
- @moduletag kind: :single_node
-
- @tag :pending
- @tag :with_db
- test "auth cache management", context do
- db_name = context[:db_name]
-
- server_config = [
- %{
- :section => "chttpd_auth",
- :key => "authentication_db",
- :value => db_name
- },
- %{
- :section => "chttpd_auth",
- :key => "auth_cache_size",
- :value => "3"
- },
- %{
- :section => "httpd",
- :key => "authentication_handlers",
- :value => "{couch_httpd_auth, default_authentication_handler}"
- },
- %{
- :section => "chttpd_auth",
- :key => "secret",
- :value => generate_secret(64)
- }
- ]
-
- run_on_modified_server(server_config, fn -> test_fun(db_name) end)
- end
-
- defp generate_secret(len) do
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
- |> String.splitter("", trim: true)
- |> Enum.take_random(len)
- |> Enum.join("")
- end
-
- defp hits() do
- hits = request_stats(["couchdb", "auth_cache_hits"], true)
- hits["value"] || 0
- end
-
- defp misses() do
- misses = request_stats(["couchdb", "auth_cache_misses"], true)
- misses["value"] || 0
- end
-
- defp logout(session) do
- assert Couch.Session.logout(session).body["ok"]
- end
-
- defp login_fail(user, password) do
- resp = Couch.login(user, password, :fail)
- assert resp.error, "Login error is expected."
- end
-
- defp login(user, password) do
- sess = Couch.login(user, password)
- assert sess.cookie, "Login correct is expected"
- sess
- end
-
- defp assert_cache(event, user, password, expect \\ :expect_login_success) do
- hits_before = hits()
- misses_before = misses()
-
- session =
- case expect do
- :expect_login_success -> login(user, password)
- :expect_login_fail -> login_fail(user, password)
- _ -> assert false
- end
-
- hits_after = hits()
- misses_after = misses()
-
- if expect == :expect_success do
- logout(session)
- end
-
- case event do
- :expect_miss ->
- assert misses_after == misses_before + 1,
- "Cache miss is expected for #{user} after login"
-
- assert hits_after == hits_before,
- "No cache hit is expected for #{user} after login"
-
- :expect_hit ->
- assert misses_after == misses_before,
- "No cache miss is expected for #{user} after login"
-
- assert hits_after == hits_before + 1,
- "Cache hit is expected for #{user} after login"
-
- _ ->
- assert false
- end
- end
-
- def save_doc(db_name, body) do
- resp = Couch.put("/#{db_name}/#{body["_id"]}", body: body)
- assert resp.status_code in [201, 202]
- assert resp.body["ok"]
- Map.put(body, "_rev", resp.body["rev"])
- end
-
- def delete_doc(db_name, body) do
- resp = Couch.delete("/#{db_name}/#{body["_id"]}", query: [rev: body["_rev"]])
- assert resp.status_code in [200, 202]
- assert resp.body["ok"]
- {:ok, resp}
- end
-
- defp test_fun(db_name) do
- fdmanana =
- prepare_user_doc([
- {:name, "fdmanana"},
- {:password, "qwerty"},
- {:roles, ["dev"]}
- ])
-
- {:ok, resp} = create_doc(db_name, fdmanana)
- fdmanana = Map.put(fdmanana, "_rev", resp.body["rev"])
-
- chris =
- prepare_user_doc([
- {:name, "chris"},
- {:password, "the_god_father"},
- {:roles, ["dev", "mafia", "white_costume"]}
- ])
-
- create_doc(db_name, chris)
-
- joe =
- prepare_user_doc([
- {:name, "joe"},
- {:password, "functional"},
- {:roles, ["erlnager"]}
- ])
-
- create_doc(db_name, joe)
-
- johndoe =
- prepare_user_doc([
- {:name, "johndoe"},
- {:password, "123456"},
- {:roles, ["user"]}
- ])
-
- create_doc(db_name, johndoe)
-
- assert_cache(:expect_miss, "fdmanana", "qwerty")
- assert_cache(:expect_hit, "fdmanana", "qwerty")
- assert_cache(:expect_miss, "chris", "the_god_father")
- assert_cache(:expect_miss, "joe", "functional")
- assert_cache(:expect_miss, "johndoe", "123456")
-
- # It's a MRU cache, joe was removed from cache to add johndoe
- # BUGGED assert_cache(:expect_miss, "joe", "functional")
-
- assert_cache(:expect_hit, "fdmanana", "qwerty")
-
- fdmanana = Map.replace!(fdmanana, "password", "foobar")
- fdmanana = save_doc(db_name, fdmanana)
-
- # Cache was refreshed
- # BUGGED
- # assert_cache(:expect_hit, "fdmanana", "qwerty", :expect_login_fail)
- # assert_cache(:expect_hit, "fdmanana", "foobar")
-
- # and yet another update
- fdmanana = Map.replace!(fdmanana, "password", "javascript")
- fdmanana = save_doc(db_name, fdmanana)
-
- # Cache was refreshed
- # BUGGED
- # assert_cache(:expect_hit, "fdmanana", "foobar", :expect_login_fail)
- # assert_cache(:expect_hit, "fdmanana", "javascript")
-
- delete_doc(db_name, fdmanana)
-
- assert_cache(:expect_hit, "fdmanana", "javascript", :expect_login_fail)
-
- # login, compact authentication DB, login again and verify that
- # there was a cache hit
- assert_cache(:expect_hit, "johndoe", "123456")
- compact(db_name)
- assert_cache(:expect_hit, "johndoe", "123456")
- end
-end