;;-*- mode: nendo; syntax: scheme -*- ;;; ;;; memcache.nnd - memcacheアクセスのテスト ;;; ;;; Copyright (c) 2011 Kiyoka Nishiyama ;;; ;;; Redistribution and use in source and binary forms, with or without ;;; modification, are permitted provided that the following conditions ;;; are met: ;;; ;;; 1. Redistributions of source code must retain the above copyright ;;; notice, this list of conditions and the following disclaimer. ;;; ;;; 2. Redistributions in binary form must reproduce the above copyright ;;; notice, this list of conditions and the following disclaimer in the ;;; documentation and/or other materials provided with the distribution. ;;; ;;; 3. Neither the name of the authors nor the names of its contributors ;;; may be used to endorse or promote products derived from this ;;; software without specific prior written permission. ;;; ;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ;;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ;;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ;;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ;;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ;;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ;;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ;;; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ;;; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;; ;;; $Id: ;;; (require "sekka/kvs") (use nendo.test) (load "./test/common.nnd") (define dbtype 'memcache) (define userid "temp") (define cachesv (Kvs.new dbtype)) (test-start "memcached I/F") ;;=================================================================== ;;------------------------------------------------------------------- (test-section "memcached access") (test* "db connect NG and Exception" (test-error MemCache::MemCacheError) (let1 sv (Kvs.new dbtype) (sv.open "localhost:11111") (sv.put! "temp:1" "one"))) (test* "db connect OK" "one" (begin (cachesv.open "localhost:11211") (cachesv.put! "temp:1" "one"))) (test* "db store 1" "one" (cachesv.put! "temp:1" "one")) (test* "db fetch 1" "one" (cachesv.get "temp:1")) (test* "db fetch fallback" false (cachesv.get "temp:none" false)) ;;------------------------------------------------------------------- (test-section "memcached access heavily") (test* "db rw" 10000 (let1 count 0 (for-each (lambda (n) (let1 str (sprintf "%06d" n) (cachesv.put! (+ "temp:" str) str) (when (string=? str (cachesv.get (+ "temp:" str) str)) (set! count (+ count 1))))) (range 10000)) count)) (test-section "memcached expire data") (test* "db expire time 1" "now" (cachesv.put! "temp:1" "now" 2)) (test* "db expire time 2" "now" (cachesv.get "temp:1" "now")) (test* "db expire time 3" "miss" (begin (.sleep 3) (cachesv.get "temp:1" "miss"))) ;;=================================================================== (test-end)