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

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26