42 lines
1.8 KiB
Clojure
42 lines
1.8 KiB
Clojure
(ns pmagnus.btcdata.ws.binance-test
|
|
(:require [clojure.test :refer [deftest is]]
|
|
[integrant.core :as ig]
|
|
[pmagnus.btcdata.ws.binance :as binance])
|
|
(:import [java.time Instant]))
|
|
|
|
(deftest freshness-boundaries
|
|
(let [state (atom {:enabled? true :connected? true})
|
|
price (atom {:recorded-at (Instant/ofEpochMilli 100000)})
|
|
component {:state state :latest-price price}]
|
|
(is (binance/fresh? component 100000))
|
|
(is (binance/fresh? component 160000))
|
|
(is (not (binance/fresh? component 160001)))
|
|
(is (not (binance/fresh? component 99999)))
|
|
(swap! state assoc :connected? false)
|
|
(is (not (binance/fresh? component 100000)))
|
|
(reset! price nil)
|
|
(is (not (binance/fresh? component 100000)))))
|
|
|
|
(deftest disabled-stream-does-not-connect
|
|
(let [component (ig/init-key :ws/binance {:enabled? "false" :uri "invalid"})]
|
|
(is (binance/fresh? component))
|
|
(is (nil? (:worker component)))
|
|
(ig/halt-key! :ws/binance component)
|
|
(is (false? (:running? @(:state component))))))
|
|
|
|
(deftest initial-failure-is-retried-and-worker-stops
|
|
(let [attempts (atom 0)
|
|
connect-var (ns-resolve 'pmagnus.btcdata.ws.binance 'connect!)]
|
|
(with-redefs-fn
|
|
{connect-var (fn [& _] (swap! attempts inc) (throw (ex-info "test failure" {})))}
|
|
(fn []
|
|
(let [component (ig/init-key :ws/binance {:enabled? "true" :uri "test"})]
|
|
(try
|
|
(let [deadline (+ (System/currentTimeMillis) 6000)]
|
|
(while (and (< @attempts 2) (< (System/currentTimeMillis) deadline))
|
|
(Thread/sleep 20)))
|
|
(is (>= @attempts 2))
|
|
(is (not (binance/fresh? component)))
|
|
(finally (ig/halt-key! :ws/binance component)))
|
|
(is (future-cancelled? (:worker component))))))))
|