/[Search-Estraier]/trunk/t/5_Node.t
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/t/5_Node.t

Parent Directory Parent Directory | Revision Log Revision Log


Revision 151 - (hide annotations)
Tue May 16 11:39:53 2006 UTC (17 years, 11 months ago) by dpavlin
File MIME type: application/x-troff
File size: 10092 byte(s)
added _clear_info which is called in cases where comands modify stats about
node (which will force re-read of those data from Hyper Estraier on next
request), explanded test suite
1 dpavlin 28 #!/usr/bin/perl -w
2    
3     use strict;
4     use blib;
5    
6 dpavlin 151 use Test::More tests => 270;
7 dpavlin 28 use Test::Exception;
8     use Data::Dumper;
9    
10     BEGIN { use_ok('Search::Estraier') };
11    
12 dpavlin 148 my $debug = shift @ARGV;
13 dpavlin 40
14 dpavlin 35 # name of node for test
15 dpavlin 137 my $test1_node = '_test1_' . $$;
16     my $test2_node = '_test2_' . $$;
17 dpavlin 35
18 dpavlin 57 ok(my $node = new Search::Estraier::Node( debug => $debug ), 'new');
19 dpavlin 28 isa_ok($node, 'Search::Estraier::Node');
20    
21 dpavlin 78 ok($node->set_url("http://localhost:1978/node/$test1_node"), "set_url $test1_node");
22 dpavlin 29
23 dpavlin 38 ok($node->set_proxy('', 8080), 'set_proxy');
24 dpavlin 30 throws_ok {$node->set_proxy('proxy.example.com', 'foo') } qr/port/, 'set_proxy port NaN';
25    
26     ok($node->set_timeout(42), 'set_timeout');
27     throws_ok {$node->set_timeout('foo') } qr/timeout/, 'set_timeout NaN';
28 dpavlin 31
29 dpavlin 39 ok($node->set_auth('admin','admin'), 'set_auth');
30 dpavlin 32
31     cmp_ok($node->status, '==', -1, 'status');
32 dpavlin 35
33 dpavlin 134 # test master functionality
34    
35 dpavlin 151 diag("node->master shutdown not tested");
36 dpavlin 134
37 dpavlin 151 diag("node->master backup not tested");
38 dpavlin 134
39 dpavlin 135 ok(my @users = $node->master( action => 'userlist' ), 'userlist');
40    
41 dpavlin 137 #diag "users: ", Dumper( \@users );
42     diag "found ", $#users + 1, " users";
43 dpavlin 135
44 dpavlin 137 my $user = {
45     name => '_test_' . $$,
46     flags => 'b',
47     fname => 'Search::Estraier',
48     misc => 'test user',
49     };
50 dpavlin 73
51 dpavlin 151 my $msg;
52 dpavlin 137 ok($msg = $node->master(
53     action => 'useradd',
54     %{ $user },
55     passwd => 'test1234',
56     ), "useradd: $msg");
57 dpavlin 73
58 dpavlin 137 ok(my @users2 = $node->master( action => 'userlist' ), 'userlist');
59     cmp_ok($#users2, '==', $#users + 1, 'added user');
60 dpavlin 38
61 dpavlin 137 while (my $row = shift @users2) {
62     next unless ($row->{name} eq $user);
63     map {
64     cmp_ok($user->{$_}, 'eq', $row->{$_}, "$_");
65     } keys %{ $user };
66 dpavlin 37 }
67 dpavlin 35
68 dpavlin 137 ok($msg = $node->master(
69     action => 'userdel',
70     name => $user->{name},
71     ), "userdel: $msg");
72    
73     ok(@users2 = $node->master( action => 'userlist' ), 'userlist');
74     cmp_ok($#users2, '==', $#users, 'removed user');
75    
76     ok(my @nodes = $node->master( action => 'nodelist' ), 'nodelist' );
77     #diag "nodelist: ", Dumper( \@nodes );
78     diag "found ", $#nodes + 1, " nodes";
79    
80     if ($#nodes > 42) {
81     diag <<'_END_OF_WARNING_';
82    
83     This tests create three nodes in your Hyper Estraier.
84    
85 dpavlin 138 Since you have more than 43 modes, and Hyper Estraier needs more than
86     1024 file descriptors for more than 46 nodes, expect tests to fail.
87 dpavlin 137
88 dpavlin 138 If tests do fail, you can try to add
89    
90     ulimit -n 2048
91    
92     before staring estmaster, which will increase number of available nodes
93     to 96 before estmaster runs out of file descriptors.
94    
95 dpavlin 137 _END_OF_WARNING_
96     }
97    
98     my $temp_node = "_test_temp_$$";
99    
100     foreach my $node_name ( $test1_node , $test2_node, $temp_node ) {
101     ok($msg = $node->master(
102     action => 'nodeadd',
103     name => $node_name,
104     label => "$node_name label",
105     ), "nodeadd $node_name: $msg");
106     }
107    
108     ok($msg = $node->master(
109     action => 'nodedel',
110     name => $temp_node,
111     ), "nodedel $temp_node: $msg");
112    
113     #diag "not testing logrtt\n";
114    
115     # test document creation
116    
117 dpavlin 35 my $draft = <<'_END_OF_DRAFT_';
118 dpavlin 148 @uri=data0
119 dpavlin 35 @title=Material Girl
120    
121     Living in a material world
122     And I am a material girl
123     You know that we are living in a material world
124     And I am a material girl
125     _END_OF_DRAFT_
126    
127 dpavlin 40 #diag "draft:\n$draft";
128     ok(my $doc = new Search::Estraier::Document($draft), 'new doc from draft');
129    
130 dpavlin 46 ok( $node->put_doc($doc), "put_doc data001");
131    
132 dpavlin 148 for ( 1 .. 17 ) {
133 dpavlin 41 $doc->add_attr('@uri', 'test' . $_);
134     ok( $node->put_doc($doc), "put_doc test$_");
135     #diag $doc->dump_draft;
136 dpavlin 151 cmp_ok( $node->doc_num, '==', ($_ + 1), "node->doc_num " . ($_ + 1));
137 dpavlin 41 }
138    
139 dpavlin 148 ok(! $node->uri_to_id( 'does-not-exists' ), "non-existant uri_to_id");
140    
141 dpavlin 50 my $id;
142 dpavlin 148 ok($id = $node->uri_to_id( 'data0' ), "uri_to_id(data0)");
143 dpavlin 41
144 dpavlin 148 ok($doc = $node->get_doc( $id ), "get_doc($id) for edit");
145     $doc->add_attr('foo', 'bar');
146     #diag Dumper($doc);
147     ok( $node->edit_doc( $doc ), 'edit_doc');
148 dpavlin 100
149 dpavlin 150 my $doc_num;
150     ok( $doc_num = $node->doc_num, "node->doc_num $doc_num");
151    
152 dpavlin 148 ok( $node->out_doc( $id ), "out_doc($id)");
153    
154 dpavlin 150 cmp_ok( $node->doc_num, '==', --$doc_num, "node->doc_num " . $doc_num);
155    
156 dpavlin 148 ok( ! $node->edit_doc( $doc ), "edit_doc of removed doc");
157    
158     my $delete_num = 5;
159    
160     for ( 1 .. $delete_num ) {
161 dpavlin 43 ok( $node->out_doc_by_uri( 'test' . $_ ), "out_doc_by_uri test$_");
162 dpavlin 150 cmp_ok( $node->doc_num, '==', $doc_num - $_, "node->doc_num " . ($doc_num - $_));
163 dpavlin 41 }
164 dpavlin 42
165 dpavlin 148 my $doc_num2 = $doc_num - $delete_num;
166     cmp_ok($node->doc_num, '==', $doc_num2, "node->doc_num $doc_num2");
167 dpavlin 50
168 dpavlin 148 my $max = int($doc_num2 / 2);
169 dpavlin 50
170 dpavlin 51 ok(my $cond = new Search::Estraier::Condition, 'new cond');
171     ok($cond->set_phrase('girl'), 'cond set_phrase');
172 dpavlin 148 ok($cond->set_max($max), "cond set_max($max)");
173 dpavlin 51 ok($cond->set_order('@uri ASCD'), 'cond set_order');
174     ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');
175    
176 dpavlin 53 cmp_ok($node->cond_to_query( $cond ), 'eq' , 'phrase=girl&attr1=%40title%20STRINC%20Material&order=%40uri%20ASCD&max='.$max.'&wwidth=480&hwidth=96&awidth=96', 'cond_to_query');
177 dpavlin 51
178 dpavlin 91 ok( my $nres = $node->search( $cond, 0 ), 'search');
179 dpavlin 51
180 dpavlin 91 isa_ok( $nres, 'Search::Estraier::NodeResult' );
181 dpavlin 51
182 dpavlin 148 cmp_ok($nres->doc_num, '==', $max, "nres->doc_num $max");
183 dpavlin 53
184 dpavlin 148 cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
185 dpavlin 100
186 dpavlin 148 # upper limit is $nres->hits and not $nres->doc_num because we
187     # check all documents, not just results!
188 dpavlin 115 for my $i ( 0 .. ($nres->hits - 1) ) {
189 dpavlin 148 my $num = $i + $delete_num + 1;
190     my $uri = 'test' . $num;
191 dpavlin 115
192     if ($i < $nres->doc_num) {
193 dpavlin 148 ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
194 dpavlin 115
195     cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
196 dpavlin 148 cmp_ok( $node->uri_to_id( $uri ), '==', $num + 1, "uri_to_id($uri)");
197    
198 dpavlin 115 ok( my $k = $rdoc->keywords( $id ), "rdoc keywords");
199 dpavlin 148 } else {
200     ok( ! $nres->get_doc( $i ), "nres->get_doc doesn't exist");
201 dpavlin 115 }
202    
203 dpavlin 148 ok( my $id = $node->uri_to_id( $uri ), "uri_to_id($uri)");
204     ok( $node->get_doc( $id ), "get_doc($id)");
205     ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri($uri)");
206 dpavlin 49 cmp_ok( $node->get_doc_attr( $id, '@uri' ), 'eq', $uri, "get_doc_attr $id");
207     cmp_ok( $node->get_doc_attr_by_uri( $uri, '@uri' ), 'eq', $uri, "get_doc_attr $id");
208 dpavlin 115 ok( my $k1 = $node->etch_doc( $id ), "etch_doc_by_uri $uri");
209 dpavlin 49 ok( my $k2 = $node->etch_doc_by_uri( $uri ), "etch_doc_by_uri $uri");
210     #diag Dumper($k, $k2);
211 dpavlin 115 ok( eq_hash( $k1, $k2 ), "keywords");
212 dpavlin 43 }
213 dpavlin 48
214 dpavlin 91 ok(my $hints = $nres->hints, 'hints');
215     diag Dumper($hints);
216    
217 dpavlin 72 ok($node->_set_info, "refresh _set_info");
218    
219 dpavlin 48 my $v;
220     ok($v = $node->name, "name: $v");
221     ok($v = $node->label, "label: $v");
222     ok($v = $node->doc_num, "doc_num: $v");
223 dpavlin 110 ok(defined($v = $node->word_num), "word_num: $v");
224 dpavlin 48 ok($v = $node->size, "size: $v");
225    
226 dpavlin 55 ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");
227    
228 dpavlin 148 # test skip
229     my $skip = int($max / 2) || die "skip is zero, can't test";
230     ok($cond->set_skip( $skip ), "cond set_skip($skip)");
231    
232     ok( $nres = $node->search( $cond, 0 ), 'search');
233     isa_ok( $nres, 'Search::Estraier::NodeResult' );
234     cmp_ok($nres->doc_num, '==', $max, "nres->doc_num " . ($max - $skip));
235     cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
236    
237     for my $i ( 0 .. ($nres->doc_num - 1) ) {
238     my $uri = 'test' . ($i + $delete_num + 1);
239     ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
240     if ($rdoc) {
241     cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
242     } else {
243     fail('no rdoc');
244     }
245     }
246    
247    
248 dpavlin 56 # user doesn't exist
249     ok(! $node->set_user('foobar', 1), 'set_user');
250    
251 dpavlin 94 ok(my $node2 = new Search::Estraier::Node( "http://localhost:1978/node/$test2_node" ), "new $test2_node");
252     ok($node2->set_auth('admin','admin'), "set_auth $test2_node");
253 dpavlin 57
254 dpavlin 78 # croak_on_error
255    
256 dpavlin 94 ok($node = new Search::Estraier::Node( url => "http://localhost:1978/non-existant", croak_on_error => 1 ), "new non-existant");
257     throws_ok { $node->name } qr/404/, 'croak on error';
258 dpavlin 78
259 dpavlin 103 # croak_on_error
260 dpavlin 106 ok($node = new Search::Estraier::Node( url => "http://localhost:1978/node/$test1_node", croak_on_error => 1 ), "new $test1_node");
261 dpavlin 94
262 dpavlin 103 ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');
263    
264 dpavlin 137
265 dpavlin 107 # test users
266     ok(! $node->admins, 'no admins');
267     ok(! $node->guests, 'no guests');
268    
269 dpavlin 137
270 dpavlin 129 # test search without results
271     ok($cond = new Search::Estraier::Condition, 'new cond');
272     ok($cond->set_phrase('this_is_phrase_which_does_not_exits'), 'cond set_phrase');
273    
274     ok($nres = $node->search( $cond, 0 ), 'search');
275    
276 dpavlin 137 # now, test links
277     my $test2_label = "$test2_node label";
278     my $link_url = "http://localhost:1978/node/$test2_node";
279     ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");
280     ok(my $links = $node->links, 'links');
281     cmp_ok($#{$links}, '==', 0, 'one link');
282     like($links->[0], qr/^$link_url/, 'link correct');
283     ok($node->set_link("http://localhost:1978/node/$test2_node", $test2_label, 0), "set_link $test2_node ($test2_label) delete");
284 dpavlin 72
285 dpavlin 151 ok($msg = $node->master(
286     action => 'nodeclr',
287     name => $node->name,
288     ), "nodeclr $node->name: $msg");
289    
290     cmp_ok($node->doc_num, '==', 0, 'no documents');
291    
292 dpavlin 137 # cleanup test nodes
293     foreach my $node_name ( $test1_node , $test2_node ) {
294     ok($msg = $node->master(
295     action => 'nodedel',
296     name => $node_name,
297     ), "nodedel $node_name: $msg");
298     }
299 dpavlin 107
300 dpavlin 139 # test create
301     my $node_name = '_test_create_' . $$;
302     my $node_label = "test $$ label";
303    
304     ok($node = new Search::Estraier::Node(
305     url => "http://localhost:1978/node/$node_name",
306     create => 1,
307     label => $node_label,
308     croak_on_error => 1
309 dpavlin 140 ), "new create+croak");
310 dpavlin 139
311     cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
312     cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
313    
314 dpavlin 140 ok($node = new Search::Estraier::Node(
315     url => "http://localhost:1978/node/$node_name",
316     create => 1,
317     label => $node_label,
318     croak_on_error => 0
319     ), "new create existing");
320    
321     ok($node = new Search::Estraier::Node(
322     url => "http://localhost:1978/node/$node_name",
323     create => 1,
324     label => $node_label,
325     croak_on_error => 1
326     ), "new create+croak existing");
327    
328     # cleanup
329 dpavlin 139 ok($msg = $node->master(
330     action => 'nodedel',
331     name => $node_name,
332     ), "nodedel $node_name: $msg");
333    
334 dpavlin 140 # and again, this time without node
335     ok($node = new Search::Estraier::Node(
336     url => "http://localhost:1978/node/$node_name",
337     create => 1,
338     label => $node_label,
339     croak_on_error => 0
340     ), "new create non-existing");
341    
342     cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
343     cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
344    
345     # cleanup
346     ok($msg = $node->master(
347     action => 'nodedel',
348     name => $node_name,
349     ), "nodedel $node_name: $msg");
350    
351 dpavlin 151 ok($msg = $node->master( action => 'sync' ), "sync: $msg");
352    
353 dpavlin 55 diag "over";

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26