|
1 | 1 | (ns ziggurat.streams-test
|
2 | 2 | (:require [clojure.test :refer [deftest is join-fixtures testing use-fixtures]]
|
3 | 3 | [protobuf.core :as proto]
|
4 |
| - [ziggurat.streams :refer [start-streams stop-streams]] |
| 4 | + [mount.core :as mount] |
| 5 | + [ziggurat.streams :refer [start-streams stop-streams stop-stream start-stream]] |
5 | 6 | [ziggurat.fixtures :as fix]
|
6 | 7 | [ziggurat.config :refer [ziggurat-config]]
|
7 | 8 | [ziggurat.middleware.default :as default-middleware]
|
|
15 | 16 | [kafka.utils MockTime]
|
16 | 17 | [org.apache.kafka.clients.producer ProducerConfig]
|
17 | 18 | [org.apache.kafka.streams KeyValue]
|
| 19 | + [org.apache.kafka.streams KafkaStreams$State] |
18 | 20 | [org.apache.kafka.streams.integration.utils IntegrationTestUtils]
|
19 | 21 | [io.opentracing.tag Tags]))
|
20 | 22 |
|
|
59 | 61 | (swap! message-received-count inc))
|
60 | 62 | :success)))
|
61 | 63 |
|
| 64 | +(defn- poll-to-check-if-running |
| 65 | + ([stream] |
| 66 | + (poll-to-check-if-running stream :default)) |
| 67 | + ([stream topic-entity] |
| 68 | + (let [threshold 0] |
| 69 | + (while (and (not= (.state (get stream topic-entity)) KafkaStreams$State/RUNNING) |
| 70 | + (> threshold 30)) |
| 71 | + (Thread/sleep 2000) |
| 72 | + (inc threshold))))) |
| 73 | + |
62 | 74 | (defn- rand-application-id []
|
63 | 75 | (str "test" "-" (rand-int 999999999)))
|
64 | 76 |
|
|
102 | 114 | (stop-streams streams)
|
103 | 115 | (is (= times @message-received-count))))
|
104 | 116 |
|
| 117 | +(deftest stop-stream-test |
| 118 | + (let [message-received-count (atom 0) |
| 119 | + mapped-fn (get-mapped-fn message-received-count) |
| 120 | + handler-fn (default-middleware/protobuf->hash mapped-fn proto-class :default) |
| 121 | + _ (mount/start)] |
| 122 | + (mount/start-with-states {#'ziggurat.streams/stream {:start (fn [] (start-streams {:default {:handler-fn handler-fn}} |
| 123 | + (ziggurat-config))) |
| 124 | + :stop (fn [] (stop-streams #'ziggurat.streams/stream))}})) |
| 125 | + (poll-to-check-if-running ziggurat.streams/stream) |
| 126 | + (stop-stream :default) |
| 127 | + (is (not= (.state (get ziggurat.streams/stream :default)) KafkaStreams$State/RUNNING))) |
| 128 | + |
| 129 | +(deftest start-stopped-stream-test |
| 130 | + (let [message-received-count (atom 0) |
| 131 | + mapped-fn (get-mapped-fn message-received-count) |
| 132 | + handler-fn (default-middleware/protobuf->hash mapped-fn proto-class :default) |
| 133 | + _ (mount/start)] |
| 134 | + (mount/start-with-states {#'ziggurat.streams/stream {:start (fn [] (start-streams {:default {:handler-fn handler-fn}} |
| 135 | + (ziggurat-config))) |
| 136 | + :stop (fn [] (stop-streams ziggurat.streams/stream))}})) |
| 137 | + (poll-to-check-if-running ziggurat.streams/stream) |
| 138 | + (stop-stream :default) |
| 139 | + (is (not= (.state (get ziggurat.streams/stream :default)) KafkaStreams$State/RUNNING)) |
| 140 | + (start-stream :default) |
| 141 | + (poll-to-check-if-running ziggurat.streams/stream) |
| 142 | + (is (not= (.state (get ziggurat.streams/stream :default)) KafkaStreams$State/NOT_RUNNING))) |
| 143 | + |
| 144 | +(deftest stop-restarted-stream-test |
| 145 | + (let [message-received-count (atom 0) |
| 146 | + mapped-fn (get-mapped-fn message-received-count) |
| 147 | + handler-fn (default-middleware/protobuf->hash mapped-fn proto-class :default) |
| 148 | + _ (mount/start)] |
| 149 | + (mount/start-with-states {#'ziggurat.streams/stream {:start (fn [] (start-streams {:default {:handler-fn handler-fn}} |
| 150 | + (ziggurat-config))) |
| 151 | + :stop (fn [] (stop-streams ziggurat.streams/stream))}})) |
| 152 | + (poll-to-check-if-running ziggurat.streams/stream) |
| 153 | + (stop-stream :default) |
| 154 | + (is (not= (.state (get ziggurat.streams/stream :default)) KafkaStreams$State/RUNNING)) |
| 155 | + (start-stream :default) |
| 156 | + (poll-to-check-if-running ziggurat.streams/stream :default) |
| 157 | + (is (not= (.state (get ziggurat.streams/stream :default)) KafkaStreams$State/NOT_RUNNING)) |
| 158 | + (stop-stream :default) |
| 159 | + (is (not= (.state (get ziggurat.streams/stream :default)) KafkaStreams$State/RUNNING))) |
| 160 | + |
| 161 | +(deftest stop-desired-stream-only-test |
| 162 | + (let [message-received-count (atom 0) |
| 163 | + mapped-fn (get-mapped-fn message-received-count) |
| 164 | + handler-fn (default-middleware/protobuf->hash mapped-fn proto-class :default) |
| 165 | + _ (mount/start)] |
| 166 | + (mount/start-with-states {#'ziggurat.streams/stream {:start (fn [] (start-streams {:default {:handler-fn handler-fn} |
| 167 | + :using-string-serde {:handler-fn handler-fn}} |
| 168 | + (-> (ziggurat-config) |
| 169 | + (assoc-in [:stream-router :default :application-id] (rand-application-id)) |
| 170 | + (assoc-in [:stream-router :default :changelog-topic-replication-factor] changelog-topic-replication-factor) |
| 171 | + (assoc-in [:stream-router :using-string-serde :application-id] (rand-application-id)) |
| 172 | + (assoc-in [:stream-router :using-string-serde :changelog-topic-replication-factor] changelog-topic-replication-factor)))) |
| 173 | + :stop (fn [] (stop-streams ziggurat.streams/stream))}})) |
| 174 | + (poll-to-check-if-running ziggurat.streams/stream) |
| 175 | + (stop-stream :default) |
| 176 | + (is (not= (.state (get ziggurat.streams/stream :default)) KafkaStreams$State/RUNNING)) |
| 177 | + (is (not= (.state (get ziggurat.streams/stream :using-string-serde)) KafkaStreams$State/NOT_RUNNING))) |
| 178 | + |
| 179 | +(deftest stop-duplicate-stream-test |
| 180 | + (let [message-received-count (atom 0) |
| 181 | + mapped-fn (get-mapped-fn message-received-count) |
| 182 | + handler-fn (default-middleware/protobuf->hash mapped-fn proto-class :default) |
| 183 | + _ (mount/start)] |
| 184 | + (mount/start-with-states {#'ziggurat.streams/stream {:start (fn [] (start-streams {:default {:handler-fn handler-fn}} |
| 185 | + (ziggurat-config))) |
| 186 | + :stop (fn [] (stop-streams ziggurat.streams/stream))}})) |
| 187 | + (poll-to-check-if-running ziggurat.streams/stream) |
| 188 | + (stop-stream :default) |
| 189 | + (is (not= (.state (get ziggurat.streams/stream :default)) KafkaStreams$State/RUNNING)) |
| 190 | + (stop-stream :default)) |
| 191 | + |
| 192 | +(deftest stop-invalid-stream-test |
| 193 | + (let [is-close-called (atom 0) |
| 194 | + mapped-fn (get-mapped-fn is-close-called) |
| 195 | + handler-fn (default-middleware/protobuf->hash mapped-fn proto-class :default) |
| 196 | + _ (mount/start)] |
| 197 | + (mount/start-with-states {#'ziggurat.streams/stream {:start (fn [] (start-streams {:default {:handler-fn handler-fn}} |
| 198 | + (ziggurat-config))) |
| 199 | + :stop (fn [] (stop-streams ziggurat.streams/stream))}}) |
| 200 | + (poll-to-check-if-running ziggurat.streams/stream) |
| 201 | + (with-redefs [ziggurat.streams/close-stream (fn [] (swap! is-close-called inc))] |
| 202 | + (stop-stream :invalid-topic-entity) |
| 203 | + (is (= @is-close-called 0))))) |
| 204 | + |
| 205 | +(deftest start-invalid-stream-test |
| 206 | + (let [is-close-called (atom 0) |
| 207 | + mapped-fn (get-mapped-fn is-close-called) |
| 208 | + handler-fn (default-middleware/protobuf->hash mapped-fn proto-class :default) |
| 209 | + _ (mount/start)] |
| 210 | + (mount/start-with-states {#'ziggurat.streams/stream {:start (fn [] (start-streams {:default {:handler-fn handler-fn}} |
| 211 | + (ziggurat-config))) |
| 212 | + :stop (fn [] (stop-streams ziggurat.streams/stream))}})) |
| 213 | + (let [is-close-called (atom 0)] |
| 214 | + (with-redefs [mount/start-with-states (fn [] (swap! is-close-called inc))] |
| 215 | + (start-stream :invalid-topic-entity) |
| 216 | + (is (= @is-close-called 0))))) |
| 217 | + |
105 | 218 | (deftest start-stream-joins-test
|
106 | 219 | (testing "stream joins using inner join"
|
107 | 220 | (let [orig-config (ziggurat-config)]
|
|
0 commit comments