;;; cl-scopes/test/test-storage ;;;; testing facility for scopes/storage (defpackage :scopes/test-storage (:use :common-lisp) (:local-nicknames (:config :scopes/config) (:core :scopes/core) (:logging :scopes/logging) (:message :scopes/core/message) (:msgstore :scopes/storage/msgstore) (:shape :scopes/shape) (:storage :scopes/storage) (:tracking :scopes/storage/tracking) (:util :scopes/util) (:t :scopes/testing) (:alx :alexandria)) (:export #:run #:run-all #:run-postgres #:run-sqlite) (:import-from :scopes/testing #:deftest #:==)) (in-package :scopes/test-storage) (defun run-all () (run-sqlite) (run-postgres)) (defun run-sqlite () (load (t:test-path "config-sqlite")) (let ((t:*test-suite* (t:test-suite "sqlite"))) (run))) (defun run-postgres () (load (t:test-path "config-postgres")) (let ((t:*test-suite* (t:test-suite "postgres"))) (run))) (defun run () (core:setup-services) (let ((ctx (core:find-service :storage))) (test-track ctx) (test-msgstore ctx) (t:show-result))) (deftest test-track (ctx) (let ((st (storage:storage ctx)) cont tr tr2) (setf cont (make-instance 'tracking:container :storage st)) (storage:drop-table st :tracks) (tracking:create-table cont) (setf tr (tracking:make-item cont :t01 :john)) (== (shape:head tr) '(:t01 :john)) (== (shape:head-plist tr) '(:username "john" :taskid "t01")) (== (shape:data tr) nil) (setf (shape:data tr) '(:desc "scopes/storage: queries")) (tracking:insert tr) (== (tracking:trackid tr) 1) (setf tr2 (tracking:get-track cont 1)) (== (shape:head tr2) '(:t01 :john)) (== (getf (shape:data tr2) :desc) "scopes/storage: queries") )) (deftest test-msgstore (ctx) (let ((st (storage:storage ctx)) (data (make-hash-table)) cont msg pm pm2 pm3) (setf cont (msgstore:make-container st)) (storage:drop-table st :messages) (tracking:create-table cont) (setf msg (message:create '(:test :data :field) :data '(:info "test data"))) (setf pm (msgstore:save msg cont)) (== (tracking:trackid pm) 1) (setf pm2 (tracking:get-track cont 1)) (== (shape:head pm2) '(:test :data :field nil)) (== (getf (shape:data pm2) :info) "test data") (setf pm3 (tracking:query-last cont '(:domain :test))) (util:lgi pm3) ;(log:info "pm3: ~s" pm3) ))