-
Notifications
You must be signed in to change notification settings - Fork 1
/
zookeeper.clj
50 lines (41 loc) · 1.29 KB
/
zookeeper.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
(ns kafka.testing.zookeeper
(:require [kafka.testing.utils :as tu])
(:import
[org.apache.curator.test TestingServer]))
(defmacro ^:private do-if-instance [zookeeper & body]
`(when (and ~zookeeper (::instance ~zookeeper))
~@body))
(defn zookeeper-server [& {:as options}]
(let [^Integer port (get options :port (tu/free-port!))]
{::instance (TestingServer. port false)}))
(defn start [zookeeper]
(do-if-instance zookeeper
(.start (::instance zookeeper)))
zookeeper)
(defn stop [zookeeper]
(do-if-instance zookeeper
(.close (::instance zookeeper)))
zookeeper)
(defn port [zookeeper]
(do-if-instance zookeeper
(.getPort (::instance zookeeper))))
(defn connect-string [zookeeper]
(do-if-instance zookeeper
(.getConnectString (::instance zookeeper))))
(defn data-directory [zookeeper]
(do-if-instance zookeeper
(.getTempDirectory (::instance zookeeper))))
(defn with-fresh-zookeeper [zookeeper-atom]
(fn [run-tests]
(try
(reset! zookeeper-atom (zookeeper-server))
(run-tests)
(finally
(reset! zookeeper-atom nil)))))
(defn with-running-zookeeper [zookeeper-atom]
(fn [run-tests]
(try
(reset! zookeeper-atom (start @zookeeper-atom))
(run-tests)
(finally
(reset! zookeeper-atom (stop @zookeeper-atom))))))