Add a test to blobstore_test.clj to detect for corrupt downloads.

This commit is contained in:
Phil Hagelberg 2010-03-19 12:59:46 -07:00
parent 83d0b24e53
commit 7a4b513191
1 changed files with 46 additions and 0 deletions

View File

@ -91,3 +91,49 @@
;; TODO: more tests involving blob-specific functions ;; TODO: more tests involving blob-specific functions
(deftest corruption-hunt
(let [service "transient"
account ""
secret-key ""
container-name "test"
name "work-file"
upload-filename "/home/phil/work-file"
total-downloads 100
threads 10
blob-s (blobstore service account secret-key)]
;; upload
(create-container blob-s container-name)
(when-not (blob-exists? blob-s container-name name)
(create-blob blob-s container-name name
(java.io.File. upload-filename)))
;; download
(let [total (atom total-downloads)]
(defn new-agent []
(agent name))
(defn dl-and-restart [file]
(when-not (<= @total 0)
(with-open [baos (java.io.ByteArrayOutputStream.)]
(try
(download-blob blob-s container-name file baos)
(catch Exception e
(with-open [of (java.io.FileOutputStream.
(java.io.File/createTempFile "jclouds" ".dl"))]
(.write of (.toByteArray baos)))
(throw e))))
(swap! total dec)
(send *agent* dl-and-restart)
file))
(defn start-agents []
(let [agents (map (fn [_] (new-agent))
(range threads))]
(doseq [a agents]
(send-off a dl-and-restart))
agents))
(let [agents (start-agents)]
(apply await agents)
(is (every? nil? (map agent-errors agents)))))))