Browse files

all tests pass

  • Loading branch information...
1 parent 3564cc2 commit c14e118ca3928e48700564d691dfb0aa74582761 @adamwynne committed Aug 3, 2011
Showing with 121 additions and 20 deletions.
  1. +2 −2 project.clj
  2. +87 −3 src/kestrel/client.clj
  3. +32 −15 test/kestrel/test/client.clj
View
4 project.clj
@@ -1,5 +1,5 @@
-(defproject kestrel-tester "1.0.0-SNAPSHOT"
- :description "tester for kestrel"
+(defproject kestrel-client "0.1.0-SNAPSHOT"
+ :description "client for kestrel via the memcached interface"
:repositories {"spy" "http://files.couchbase.com/maven2/"}
:dev-dependencies [[swank-clojure "1.3.2"]]
:dependencies [[org.clojure/clojure "1.2.1"]
View
90 src/kestrel/client.clj
@@ -1,11 +1,95 @@
(ns kestrel.client
(:use
- [clojure.test])
+ [clojure.contrib.def :only [defn-memo]])
(:import
(net.spy.memcached MemcachedClient)
(java.net InetSocketAddress)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defn- connect
- [])
+(defn- create-client
+ "Creates a memcached client from the supplied host and port number"
+ [& {:keys [host port]
+ :or {host "localhost" port 22133}}]
+
+ (MemcachedClient. (list (InetSocketAddress. host port))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defn-memo default-client
+ "Caches a connecton to the kestrel server for future use"
+ [& {:keys [host port]
+ :or {host "localhost" port 22133}}]
+
+ (create-client host port))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defn set-item
+ "Adds an item to a specific queue"
+ [queue-name data & {:keys [timeout] :or {timeout 0}}]
+
+ (.set (default-client) queue-name timeout data))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defn- decorate-queue-name
+ "Takes in the options and makes the queue name string"
+ [queue-name timeout mode0 mode1]
+
+ (str queue-name
+ (if timeout (str "/t=" timeout))
+ (if mode0 (str "/" (name mode0)))
+ (if mode1 (str "/" (name mode1)))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defn get-item
+ "Retrieves an item from a specific queue"
+ [queue-name & {:keys [timeout mode0 mode1]}]
+
+ (.get (default-client) (decorate-queue-name queue-name timeout mode0 mode1)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defn delete-queue
+ "removes a queue from kestrel, dropping items in it and removing the journal files"
+ [queue-name]
+
+ (.delete (default-client) queue-name))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defn flush-queue
+ "drops items in a queue, leaving it empty"
+ [queue-name]
+
+ ;FIXME: do the goods
+ )
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defn flush-all
+ "flushes all the queues"
+ []
+
+ (.flush (default-client)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defn get-version
+ "gets the kestrel version"
+ []
+
+ (into '{} (.getVersions (default-client))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defn get-stats
+ "gets the stats for the queues"
+ []
+
+ (let [stats (.getStats (default-client))]
+ (into '{} (for [[k v] stats] [k (into '{} v)]))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
View
47 test/kestrel/test/client.clj
@@ -1,26 +1,43 @@
(ns kestrel.test.client
(:use
- [clojure.test])
- (:import
- (net.spy.memcached MemcachedClient)
- (java.net InetSocketAddress)))
+ [clojure.test]
+ [kestrel.client]))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(deftest test-create-client
- (is (= (type (MemcachedClient. (list (InetSocketAddress. "localhost" 22133))))
+ (is (= (type (#'kestrel.client/create-client))
net.spy.memcached.MemcachedClient)))
+(deftest test-queue-name
+ (is (= (#'kestrel.client/decorate-queue-name "myname" nil nil nil) "myname"))
+ (is (= (#'kestrel.client/decorate-queue-name "myname" 0 nil nil) "myname/t=0"))
+ (is (= (#'kestrel.client/decorate-queue-name "myname" 1000 nil nil) "myname/t=1000"))
+ (is (= (#'kestrel.client/decorate-queue-name "myname" nil :open nil) "myname/open"))
+ (is (= (#'kestrel.client/decorate-queue-name "myname" nil :close :open) "myname/close/open"))
+ (is (= (#'kestrel.client/decorate-queue-name "myname" nil :close nil) "myname/close"))
+ (is (= (#'kestrel.client/decorate-queue-name "myname" 1000 :abort nil) "myname/t=1000/abort")))
+
+(deftest test-delete
+ (let [q-name "testq"
+ q-val "test value"]
+ (set-item q-name q-val)
+ (delete-queue q-name)
+ (is (nil? (get-item q-name)))))
+
(deftest test-set-get
- (let [mcd (MemcachedClient. (list (InetSocketAddress. "localhost" 22133)))
- q-name "testq"]
- (.set mcd q-name 0 "testing")
- (is (= (.get mcd q-name) "testing"))))
-
-(deftest test-range
- (let [mcd (MemcachedClient. (list (InetSocketAddress. "localhost" 22133)))
- q-name "testq"]
- (doseq [i (range 10)] (.set mcd q-name 0 (str i)))
- ))
+ (let [q-name "testq"
+ q-val "test value"]
+ (set-item q-name q-val)
+ (is (= (get-item q-name) q-val))))
+
+(deftest test-version
+ (let [v (get-version)]
+ (is (= (type (first (first v))) java.net.InetSocketAddress))
+ (is (= (type (first (rest (first v)))) String))))
+
+(deftest test-stats
+ (let [s (get-stats)]
+ (is (= (type (first (keys s))) java.net.InetSocketAddress))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

0 comments on commit c14e118

Please sign in to comment.