source: project/release/4/estraier-client/tests/run.scm @ 15847

Last change on this file since 15847 was 15847, checked in by sjamaan, 10 years ago

Make the API more logical by requiring a base URI, and a node name in case of nodes

File size: 8.7 KB
Line 
1(load "../estraier-client.scm")
2
3(use test posix http-client)
4
5(import estraier-client)
6
7;; This will start the server, we hope
8(system "rm -rf masterdir")              ; Just in case
9(system "estmaster init masterdir")
10(printf "Waiting for estmaster to startup...")
11(system "estmaster start -bg masterdir > /dev/null 2>&1")
12(sleep 2)
13
14(define base-uri "http://admin:admin@localhost:1978")
15
16(test-group "node master API"
17  (test "Empty node list on init" '() (list-nodes base-uri))
18  (test-error "Cannot connect with invalid credentials"
19              (list-nodes "http://admin:invalid@localhost:1978"))
20  (let ((nodes (begin (add-node base-uri "testnode")
21                      (add-node base-uri "testnode2" "testlabel")
22                      (list-nodes base-uri))))
23    (test "After adding two nodes, they show up"
24          '("testnode" "testnode2")
25          (map car nodes))
26    (test "Node label is accepted"
27          '("testnode" "testlabel")
28          (map cadr nodes)))
29  (test "After deleting a node, it is gone"
30        '("testnode")
31        (begin (delete-node base-uri "testnode2")
32               (map car (list-nodes base-uri))))
33  (let ((users (begin (add-user base-uri "testuser" "password"
34                                fullname: "Joe testuser"
35                                description: "This is just a test")
36                      (list-users base-uri))))
37    (test "After adding a user, it shows up"
38          '("admin" "testuser")
39          (map car users)))
40  (test "After deleting a user, it is gone"
41        '("admin")
42        (begin (delete-user base-uri "testuser")
43               (map car (list-users base-uri)))))
44
45;; TODO: more in-depth tests of master result values
46
47(test-group "node API"
48  (let ((info (get-node-info base-uri "testnode")))
49    (test "Get-node-info reports zero documents at first"
50          0 (alist-ref 'document-count info))
51    (test "Get-node-info reports zero words at first"
52          0 (alist-ref 'word-count info))
53    (test "Get-node-info reports no guests at first"
54          '() (alist-ref 'guest-users info))
55    (test "Get-node-info reports no admins at first"
56          '() (alist-ref 'admin-users info)))
57  (test "Cache usage starts out empty"
58        0.0 (node-cache-usage base-uri "testnode"))
59  (test "Document list starts out empty"
60        '() (list-documents base-uri "testnode"))
61
62  (test "After registering admins and guests, they are listed in node info"
63        '(("guest1" "guest2" "both") ("admin1" "admin2" "both"))
64        (begin (register-guest-user base-uri "testnode" "guest1")
65               (register-guest-user base-uri "testnode" "guest2")
66               (register-guest-user base-uri "testnode" "both")
67               (register-admin-user base-uri "testnode" "admin1")
68               (register-admin-user base-uri "testnode" "admin2")
69               (register-admin-user base-uri "testnode" "both")
70               (let ((info (get-node-info base-uri "testnode")))
71                 (list (alist-ref 'guest-users info)
72                       (alist-ref 'admin-users info)))))
73  (test "After unregistering users, they are not listed"
74        '(("guest2") ("admin2"))
75        (begin (unregister-user base-uri "testnode" "guest1")
76               (unregister-user base-uri "testnode" "admin1")
77               (unregister-user base-uri "testnode" "both")
78               (let ((info (get-node-info base-uri "testnode")))
79                 (list (alist-ref 'guest-users info)
80                       (alist-ref 'admin-users info)))))
81 
82  (test-error "Putting document without URI is an error"
83              (put-document base-uri "testnode" "This is just a test" '()))
84  (test-assert "Putting documents with URIs succeed"
85               (begin
86                 (put-document base-uri "testnode" '("Just a test for estraier")
87                               '((@uri . "/test1") (my-tag . "something")))
88                 (put-document base-uri "testnode" '("Another test for estraier")
89                               '((@uri . "/test2") (my-tag . "foo") (my-other-tag . "whatever")))
90                 #t))
91  ;; If we don't sync, the newly added docs don't (always?) show up...
92  (test-assert "Synchronize works" (begin (sync-node base-uri "testnode") #t))
93  (let ((info (get-node-info base-uri "testnode")))
94    (test "Get-node-info reports the new documents"
95          2 (alist-ref 'document-count info))
96    (test "Get-node-info reports the total number of words"
97          6 (alist-ref 'word-count info))  ;; "test for estraier" is in both
98    ;; Why does this still report zero?
99    #;(test-assert "Size is nonzero" (> 0 (alist-ref 'size info))))
100  (test "Documents are listed"
101        '("/test1" "/test2")
102        (map (lambda (l) (alist-ref '@uri l)) (list-documents base-uri "testnode")))
103  (test "Skipping list results works"
104        '("/test2")
105        (map (lambda (l) (alist-ref '@uri l))
106             (list-documents base-uri "testnode" prev: "/test1")))
107  (test "Maximum result length is used"
108        '("/test1")
109        (map (lambda (l) (alist-ref '@uri l))
110             (list-documents base-uri "testnode" max: 1)))
111  (test "Document keywords are correct"
112        '("a" "estraier" "for" "just" "test")
113        (sort (map car (document-keywords base-uri "testnode" uri: "/test1")) string<?))
114
115  (receive (doc meta)
116    (get-document base-uri "testnode" uri: "/test1")
117    (test "Get-document returns document"
118          '("Just a test for estraier")
119          (values doc))
120    (test "Get-document returns attributes"
121          '("/test1" "something")
122          (list (alist-ref '@uri meta) (alist-ref 'my-tag meta)))
123    (test-assert "Updating gives no error"
124                 (begin
125                   (update-attributes
126                    base-uri "testnode" (alist-update! 'my-tag "or other" meta))
127                   #t))
128    (receive (doc meta)
129      (get-document base-uri "testnode" uri: "/test1")
130      (test "Get-document returns updated attributes"
131            "or other"
132            (alist-ref 'my-tag meta))
133      (test-assert "Putting a modified doc gives no error"
134                   (begin
135                     (put-document base-uri "testnode"
136                                   '("Simply a test for estraier")
137                                   meta)
138                     (sync-node base-uri "testnode") 
139                    #t))
140      (receive (doc meta)
141        (get-document base-uri "testnode" uri: "/test1")
142        (test "Updated document is accepted"
143              '("Simply a test for estraier")
144              (values doc)))))
145
146  (test "Document-attribute returns correct attributes"
147        "or other"
148        (document-attribute base-uri "testnode" 'my-tag uri: "/test1"))
149
150  ;; XXX: This makes assumptions about the ordering of the docs in the
151  ;; result set.  It should not do that :)
152  (receive (results meta-data)
153    (find-documents base-uri "testnode" phrase: "test")
154    (test "Find-documents finds both docs"
155          '(((#f . "Another ") ("test" . "test") (#f . " for estraier"))
156            ((#f . "Simply a ") ("test" . "test") (#f . " for estraier")))
157          (map car results))
158    (test "URI matches put-document"
159          "/test1"
160          (alist-ref '@uri (cdr (cadr results))))
161    (test "document-uri->id gives result that matches search result details"
162          (alist-ref '@id (cdr (cadr results)))
163          (document-uri->id base-uri "testnode" "/test1")))
164
165  (receive (results meta-data)
166    (find-documents base-uri "testnode" attr-phrases: '("my-tag STREQ foo"
167                                             "my-other-tag STREQ whatever"))
168    (test "Find-documents can search attributes"
169          '(((#f . "Another test for estraier")))
170          (map car results))
171    (test-assert "Find-documents can search up to 10 attributes"
172                 (find-documents base-uri "testnode"
173                                 attr-phrases: '("0" "1" "2" "3" "4" "5"
174                                                 "6" "7" "8" "9")))
175    (test-error "Find-documents cannot search more than 10 attributes"
176                (find-documents base-uri "testnode"
177                                attr-phrases: '("0" "1" "2" "3" "4" "5"
178                                                "6" "7" "8" "9" "10"))))
179
180  (test "Deleted documents are not listed"
181        '("/test1")
182        (begin
183          (delete-document base-uri "testnode" uri: "/test2")
184          (map (lambda (l) (alist-ref '@uri l)) (list-documents base-uri "testnode"))))
185 
186  (test "Clearing node results in empty document list"
187        '()
188        (begin (clear-node base-uri "testnode")
189               (list-documents base-uri "testnode"))))
190
191;; TODO: Test search options (especially attributes)
192
193(test-group "cleanup"
194 (test-assert "Clean shutdown" (begin (shutdown-master base-uri) #t))
195 (test-error "After shutdown, server is unreachable" (list-nodes base-uri)))
196(system "rm -rf masterdir")
Note: See TracBrowser for help on using the repository browser.