source: trunk/src/unit_tests/fixtures.lisp

Last change on this file was 452, checked in by lgiessmann, 14 years ago

datamodel: implemented the function "open-tm-store" which wrapps elephant:open-store and uses :register t to support mutliple isidorus instances on one database; implemented the wrapper function "close-tm-store" that calls elephant:close-store; => adapted all unit-tests to these changes

  • Property svn:eol-style set to native
File size: 6.7 KB
Line 
1;;+-----------------------------------------------------------------------------
2;;+  Isidorus
3;;+  (c) 2008-2010 Marc Kuester, Christoph Ludwig, Lukas Georgieff
4;;+
5;;+  Isidorus is freely distributable under the LLGPL license.
6;;+  You can find a detailed description in trunk/docs/LLGPL-LICENSE.txt and
7;;+  trunk/docs/LGPL-LICENSE.txt.
8;;+-----------------------------------------------------------------------------
9
10(defpackage :fixtures
11  (:use 
12   :common-lisp
13   :xtm-importer
14   :datamodel
15   :it.bese.FiveAM
16   :base-tools
17   :unittests-constants)
18  (:import-from :constants
19                *xtm2.0-ns*)
20  (:import-from :xml-tools
21                xpath-child-elems-by-qname
22                xpath-select-location-path)
23  (:import-from :exceptions
24                missing-reference-error
25                duplicate-identifier-error)
26  (:export :atom-test-db
27           :bare-test-db
28           :clean-out-db
29           :initialized-test-db
30           :initialize-destination-db
31           :merge-test-db
32           :set-up-test-db
33           :tear-down-test-db
34           :rdf-exporter-test-db
35           :*TEST-TM*
36           :*NOTIFICATIONBASE-TM*
37           :*XTM-TM*
38           :*XTM-MERGE1-TM*
39           :*XTM-MERGE2-TM*
40           :rdf-init-db
41           :rdf-test-db
42           :with-empty-db
43           :with-tm-filled-db))
44
45(in-package :fixtures)
46
47(defvar *XTM-TM* nil)
48
49(defvar *TEST-TM* "test-tm")
50
51(defvar *NOTIFICATIONBASE-TM*
52  (dom:document-element
53   (cxml:parse-file *notificationbase.xtm* (cxml-dom:make-dom-builder))))
54
55(setf *debug-on-error* t)
56(setf *debug-on-failure* t)
57
58(defun clean-out-db (dir)
59  (let
60      ((dirname (make-pathname :directory (list :relative dir))))
61    (ensure-directories-exist dirname)
62    (loop for filename in (com.gigamonkeys.pathnames:list-directory dirname) do
63         (delete-file filename))))
64 
65(defun set-up-test-db (&optional (revision 0))
66  "clears out the database and parses the test file"
67  (clean-out-db "data_base")
68
69  (open-tm-store "data_base")
70  (init-isidorus revision)
71  (setf *current-xtm* *TEST-TM*)
72  ;deliberately only use stubs at this stage
73  (import-only-topics *xtm-tm* 
74                      :tm-id "http://www.isidor.us/unittests/testtm"
75                      :revision revision
76                      :xtm-id *TEST-TM*))
77 
78(defun set-up-raw-test-db ()
79  (clean-out-db "data_base")
80  (open-tm-store "data_base")
81  (init-isidorus)
82  (setf *current-xtm* *TEST-TM*))
83
84(defun tear-down-test-db ()
85  "make sure the elephant store is properly closed"
86  (close-tm-store))
87
88(def-fixture bare-test-db ()
89  (set-up-raw-test-db)
90  (&body)
91  (tear-down-test-db))
92
93(def-fixture initialize-destination-db (dir)
94  (clean-out-db dir)
95  (&body)
96  (tear-down-test-db))
97
98(def-fixture initialized-test-db (&optional (xtm *NOTIFICATIONBASE-TM*))
99  (let ((revision (get-revision)))
100    (declare (ignorable revision))
101    (setf *TM-REVISION* revision)
102    (setf *XTM-TM* xtm)
103    (set-up-test-db revision)
104    (let ((tm 
105           (get-item-by-item-identifier "http://www.isidor.us/unittests/testtm"
106                                        :revision revision)))
107      (declare (ignorable tm))
108      (&body)
109      (tear-down-test-db))))
110
111
112(defvar *XTM-MERGE1-TM*
113  (dom:document-element
114   (cxml:parse-file *notification_merge1.xtm* (cxml-dom:make-dom-builder))))
115
116(defparameter *XTM-MERGE2-TM*
117  (dom:document-element
118   (cxml:parse-file *notification_merge2.xtm* (cxml-dom:make-dom-builder))))
119
120(defparameter *XTM-ATOM-TM*
121  (dom:document-element
122   (cxml:parse-file *atom_test.xtm* (cxml-dom:make-dom-builder))))
123
124(def-fixture merge-test-db ()
125  (setf *XTM-TM* *NOTIFICATIONBASE-TM*)
126  (let*
127        ((revision1 (get-revision))
128         (revision2 (+ 200 revision1)) ; some arbitrary differences
129         (revision3 (+ 400 revision1)))
130    (set-up-test-db revision1)
131
132    (importer *XTM-TM* 
133              :tm-id "http://www.isidor.us/unittests/testtm"
134              :xtm-id *TEST-TM* :revision revision1)
135    (importer *XTM-MERGE1-TM* :xtm-id "merge1" 
136              :tm-id "http://www.isidor.us/unittests/testtm"
137              :revision revision2)
138    (importer *XTM-MERGE2-TM* :xtm-id "merge2" 
139              :tm-id "http://www.isidor.us/unittests/testtm"
140              :revision revision3)
141    (&body) 
142    (tear-down-test-db)))
143
144(defun init-conf ()
145  (in-package :atom)
146  ;;test configuration
147  ;(defparameter *tm-feed* nil)
148  (setf atom:*base-url* "http://london.ztt.fh-worms.de:8000")
149  (load *atom-conf.lisp*))
150
151(def-fixture atom-test-db ()
152  (setf *XTM-TM* *NOTIFICATIONBASE-TM*)
153  (init-conf)
154  (let*
155        ((revision1 (get-revision))
156         (revision2 (+ 200 revision1)) ; some arbitrary differences
157         (revision3 (+ 400 revision1)))
158    (set-up-test-db revision1)
159   
160    (importer *XTM-TM* 
161              ;;aligned with conf.lisp
162              :tm-id "http://psi.egovpt.org/tm/worms"
163              :xtm-id *TEST-TM* :revision revision1)
164    (importer *XTM-MERGE1-TM* :xtm-id "merge1" 
165              :tm-id "http://psi.egovpt.org/tm/worms"
166              :revision revision2)
167    (importer *XTM-MERGE2-TM* :xtm-id "merge2" 
168              :tm-id "http://psi.egovpt.org/tm/worms"
169              :revision revision3)
170
171    (importer *XTM-ATOM-TM* :xtm-id "atom-tm1" :tm-id "http://psi.egovpt.org/tm/egov-ontology"
172              :revision revision1)
173    (&body) 
174    (tear-down-test-db)))
175
176
177(defun rdf-init-db (&key (db-dir "data_base") (start-revision (get-revision)))
178  "Deletes the data base files and initializes isidorus for rdf."
179  (when elephant:*store-controller*
180    (close-tm-store))
181  (clean-out-db db-dir)
182  (open-tm-store db-dir)
183  (xtm-importer:init-isidorus start-revision)
184  (rdf-importer:init-rdf-module start-revision))
185
186
187(def-fixture rdf-test-db ()
188  (let ((db-dir "data_base")
189        (tm-id "http://test-tm/")
190        (document-id "doc-id"))
191    (clean-out-db db-dir)
192    (setf d:*current-xtm* document-id)
193    (rdf-importer:setup-rdf-module *poems_light.rdf* db-dir :tm-id tm-id
194                                   :document-id document-id)
195    (open-tm-store db-dir)
196    (&body)
197    (tear-down-test-db)))
198
199
200(def-fixture rdf-exporter-test-db()
201  (let ((db-dir "data_base")
202        (tm-id "http://test-tm")
203        (document-id "doc-id")
204        (exported-file-path "./__out__.rdf"))
205    (clean-out-db db-dir)
206    (handler-case (delete-file exported-file-path)
207      (error () )) ;do nothing
208    (setf d:*current-xtm* document-id)
209    (setup-repository *poems_light.xtm* db-dir :tm-id tm-id
210                      :xtm-id document-id)
211    (open-tm-store  db-dir)
212    (rdf-exporter:export-as-rdf exported-file-path :tm-id tm-id)
213    (&body)
214    (handler-case (delete-file exported-file-path)
215      (error () )) ;do nothing
216    (tear-down-test-db)))
217
218
219(def-fixture with-empty-db (dir)
220  (clean-out-db dir)
221  (open-tm-store dir)
222  (&body)
223  (tear-down-test-db))
224
225
226(def-fixture with-tm-filled-db (dir xtm-path)
227  (clean-out-db dir)
228  (let ((tm-id "http://www.isidor.us/unittests/testtm")
229        (xtm-id (full-path xtm-path)))
230    (xtm-importer:setup-repository xtm-path dir :tm-id tm-id :xtm-id xtm-id)
231    (open-tm-store dir)
232    (&body)
233    (tear-down-test-db)))
Note: See TracBrowser for help on using the repository browser.