Skip to content

Commit

Permalink
Add testing namespace.
Browse files Browse the repository at this point in the history
Working on Java client, will use this to spin up servers for running tests.
  • Loading branch information
csm committed Sep 19, 2021
1 parent a8527af commit 7cb1df5
Showing 1 changed file with 40 additions and 0 deletions.
40 changes: 40 additions & 0 deletions src/skywalker/server/testing.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
(ns skywalker.server.testing
(:require [skywalker.server :as server]
[skywalker.cluster :as cluster]
[clojure.core.async :as async]
[skywalker.cluster.client :as cc]
[skywalker.core :as core])
(:import (java.net InetSocketAddress InetAddress)
(java.security SecureRandom)))

(defn test-server
"Create a single test server, bound to the loopback address and any port."
[]
(server/server (InetSocketAddress. (InetAddress/getLoopbackAddress) 0)))

(defn test-cluster
([] (test-cluster 3))
([num-servers]
(let [discovery-chans (mapv (fn [_] (async/chan)) (range num-servers))
discoveries (mapv #(reify cluster/Discovery
(discover-nodes [_] %)
(register-node [_ _] (async/go)))
discovery-chans)
random (SecureRandom.)
tokens (mapv #(vec (for [_ (range 32)] (.nextLong random)))
(range num-servers))
servers (mapv #(server/server (InetSocketAddress. (InetAddress/getLoopbackAddress) 0)
:tokens (nth tokens %)
:junction (cc/cluster-client (nth discoveries %)
{:tokens (nth tokens %)
:junction (core/local-junction)}))
(range num-servers))
nodes (mapv #(hash-map {:node/id (str "server" %)
:node/node (str "server" %)
:node/address ""
:service/address (.getHostAddress (InetAddress/getLoopbackAddress))
:service/port (:port (nth servers %))})
(range num-servers))]
(doseq [chan discovery-chans]
(async/put! chan {:added-nodes nodes}))
servers)))

0 comments on commit 7cb1df5

Please sign in to comment.