summaryrefslogtreecommitdiff
path: root/test/dumpfm/load_test.clj
diff options
context:
space:
mode:
Diffstat (limited to 'test/dumpfm/load_test.clj')
-rw-r--r--test/dumpfm/load_test.clj81
1 files changed, 81 insertions, 0 deletions
diff --git a/test/dumpfm/load_test.clj b/test/dumpfm/load_test.clj
new file mode 100644
index 0000000..68eda68
--- /dev/null
+++ b/test/dumpfm/load_test.clj
@@ -0,0 +1,81 @@
+(ns dumpfm.load-test
+ (:import org.postgresql.ds.PGPoolingDataSource)
+ (:use clojure.contrib.json.read
+ clojure.contrib.json.write
+ clojure.contrib.seq-utils
+ clojure.contrib.sql
+ dumpfm.millstone))
+
+
+(let [db-host "localhost"
+ db-name "dumpfm"
+ db-user "postgres"
+ db-pass "root"]
+ (def *db* {:datasource (doto (new PGPoolingDataSource)
+ (.setServerName db-host)
+ (.setDatabaseName db-name)
+ (.setUser db-user)
+ (.setPassword db-pass)
+ (.setMaxConnections 3))}))
+
+(def userlist-query "
+select u.nick, u.hash
+from users u, messages m where u.user_id = m.user_id
+group by u.nick, u.hash
+having count(*) > 50
+order by count(*) desc
+")
+
+(print "Fetching userlist: ")
+(def userlist (time
+ (with-connection *db*
+ (with-query-results rs [userlist-query]
+ (doall rs)))))
+
+
+(def sample-messages-query "
+select content
+from messages
+order by random()
+limit 100
+")
+
+(print "Fetching messages: ")
+(def message-contents (time
+ (with-connection *db*
+ (with-query-results rs [sample-messages-query]
+ (doall (map :content rs))))))
+
+(defn login-client []
+ (let [user-info (rand-elt userlist)
+ params (select-keys user-info [:nick :hash])]
+ (do-setup-request! "/login"
+ :params params
+ :method "GET")))
+
+(defn refresh []
+ (let [params {:since (- (System/currentTimeMillis) 2000)
+ :room "test"}]
+ (do-request! "/refresh"
+ :params params
+ :method "GET")
+ (Thread/sleep 1000)))
+
+(defn post-msg []
+ (let [params {:content (rand-elt message-contents)
+ :room "test"}]
+ (do-request! "/msg"
+ :params params
+ :method "POST")))
+
+(def test-spec {:server "http://localhost:8080"
+ :clients 100
+ :requests 10000
+ :setup-func login-client
+ :funcs [[55 refresh]
+ [5 post-msg]]
+ :frequency 1
+ })
+
+(grind! test-spec)
+(System/exit 0) \ No newline at end of file