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

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

Add some more tests

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