Newer
Older
(ns document-storage.postgres.caching-test
(:require [clojure.test :refer :all]
[document-storage.core :as ds]
[document-storage.postgres.core :as dspostgres]
[clojure.java.io :as io]
[fipp.edn :refer [pprint] :rename {pprint fipp}]
[document-storage.protocol :as dsprot]
[environ.core :refer [env]]
[document-storage.protocol-test :as protocol-tests]
[document-storage.postgres.core-test :refer [ds-atom storage-fixture]]
[document-storage.postgres.documents :as pgdocs]
[document-storage.postgres.cache :as pgcache]
[document-storage.testdata :refer [generate-document]]
[clj-helper.string :refer [get-unique-id]]))
(use-fixtures :once storage-fixture)
(deftest test-repository-caching
(testing "check if documents are cached and reset cache will remove cached documents"
(let [repo1name (str (gensym "r1"))
repo2name (str (gensym "r2"))]
(.create-repository @ds-atom {:name repo1name
:caching true
:versioning true})
(.create-repository @ds-atom {:name repo2name
:caching true
:versioning true})
(let [docname1 (get-unique-id "tdoc")
new-document1 (generate-document)
docname2 (get-unique-id "tdoc")
new-document2 (generate-document)]
;;;Create Testdocument in each repository
(.save-document @ds-atom docname1 new-document1 repo1name)
(.save-document @ds-atom docname2 new-document2 repo2name)
(let [last-version1 (pgdocs/get-last-document-version @ds-atom docname1 repo1name)
last-version2 (pgdocs/get-last-document-version @ds-atom docname2 repo2name)]
;;; Check if inital versions are not cached
(is (nil? (pgcache/get-cached-document @ds-atom repo1name docname1 last-version1)) "Initial documents are not cached")
(is (nil? (pgcache/get-cached-document @ds-atom repo2name docname2 last-version2)) "Initial documents are not cached")
;;; Load doc1 and check if its cached - doc2 should not be cached
(.load-document @ds-atom docname1 repo1name)
(is (not (nil? (pgcache/get-cached-document @ds-atom repo1name docname1 last-version1))) "Documents should be cached after being loaded at least once")
(is (nil? (pgcache/get-cached-document @ds-atom repo2name docname2 last-version2)) "Unloaded docs are not cached")
;;; Now load doc1 and check if its also cached
(.load-document @ds-atom docname2 repo2name)
(is (not (nil? (pgcache/get-cached-document @ds-atom repo2name docname2 last-version2))) "Documents should be cached after being loaded at least once")
;;; Reset repository cache and check if its only reset the chosen repository cache
(.reset-repository-cache @ds-atom repo1name)
(is (nil? (pgcache/get-cached-document @ds-atom repo1name docname1 last-version1)) "Documents should not be cached after repository-cache reset")
(is (not (nil? (pgcache/get-cached-document @ds-atom repo2name docname2 last-version2))) "Documents should be cached if another repository is reset")
;;; Reset complete cache and check if it cleared the remaining cache for repo2
(.reset-cache @ds-atom)
(is (nil? (pgcache/get-cached-document @ds-atom repo2name docname2 last-version2)) "Documents should not be cached if the whole cache was reset")))
(.delete-repository @ds-atom repo1name)
(.delete-repository @ds-atom repo2name))))