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

Last change on this file since 15853 was 15853, checked in by sjamaan, 11 years ago

Make list-nodes return node info in an alist so it looks more like get-node-info

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 (lambda (n) (alist-ref 'name n)) nodes))
26    (test "Node label is accepted"
27          '("testnode" "testlabel")
28          (map (lambda (n) (alist-ref 'label n)) nodes)))
29  (test "After deleting a node, it is gone"
30        '("testnode")
31        (begin (delete-node base-uri "testnode2")
32               (map (lambda (n) (alist-ref 'name n)) (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 (get-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(test-group "cleanup"
192 (test-assert "Clean shutdown" (begin (shutdown-master base-uri) #t))
193 (test-error "After shutdown, server is unreachable" (list-nodes base-uri)))
194(system "rm -rf masterdir")
Note: See TracBrowser for help on using the repository browser.