/[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 167 - (hide annotations)
Sun Aug 6 16:29:34 2006 UTC (17 years, 8 months ago) by dpavlin
File MIME type: application/x-troff
File size: 10645 byte(s)
test $cond->skip
1 dpavlin 28 #!/usr/bin/perl -w
2    
3     use strict;
4     use blib;
5    
6 dpavlin 167 my $tests = 272;
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 dpavlin 160 my $cache;
175     ok($cache = $node->cacheusage, "cacheusage: $cache");
176    
177 dpavlin 148 my $delete_num = 5;
178    
179     for ( 1 .. $delete_num ) {
180 dpavlin 43 ok( $node->out_doc_by_uri( 'test' . $_ ), "out_doc_by_uri test$_");
181 dpavlin 150 cmp_ok( $node->doc_num, '==', $doc_num - $_, "node->doc_num " . ($doc_num - $_));
182 dpavlin 41 }
183 dpavlin 42
184 dpavlin 148 my $doc_num2 = $doc_num - $delete_num;
185     cmp_ok($node->doc_num, '==', $doc_num2, "node->doc_num $doc_num2");
186 dpavlin 50
187 dpavlin 148 my $max = int($doc_num2 / 2);
188 dpavlin 50
189 dpavlin 51 ok(my $cond = new Search::Estraier::Condition, 'new cond');
190     ok($cond->set_phrase('girl'), 'cond set_phrase');
191 dpavlin 148 ok($cond->set_max($max), "cond set_max($max)");
192 dpavlin 51 ok($cond->set_order('@uri ASCD'), 'cond set_order');
193     ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');
194    
195 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');
196 dpavlin 51
197 dpavlin 91 ok( my $nres = $node->search( $cond, 0 ), 'search');
198 dpavlin 51
199 dpavlin 91 isa_ok( $nres, 'Search::Estraier::NodeResult' );
200 dpavlin 51
201 dpavlin 148 cmp_ok($nres->doc_num, '==', $max, "nres->doc_num $max");
202 dpavlin 53
203 dpavlin 148 cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
204 dpavlin 100
205 dpavlin 148 # upper limit is $nres->hits and not $nres->doc_num because we
206     # check all documents, not just results!
207 dpavlin 115 for my $i ( 0 .. ($nres->hits - 1) ) {
208 dpavlin 148 my $num = $i + $delete_num + 1;
209     my $uri = 'test' . $num;
210 dpavlin 115
211     if ($i < $nres->doc_num) {
212 dpavlin 148 ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
213 dpavlin 115
214     cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
215 dpavlin 148 cmp_ok( $node->uri_to_id( $uri ), '==', $num + 1, "uri_to_id($uri)");
216    
217 dpavlin 115 ok( my $k = $rdoc->keywords( $id ), "rdoc keywords");
218 dpavlin 148 } else {
219     ok( ! $nres->get_doc( $i ), "nres->get_doc doesn't exist");
220 dpavlin 115 }
221    
222 dpavlin 148 ok( my $id = $node->uri_to_id( $uri ), "uri_to_id($uri)");
223     ok( $node->get_doc( $id ), "get_doc($id)");
224     ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri($uri)");
225 dpavlin 49 cmp_ok( $node->get_doc_attr( $id, '@uri' ), 'eq', $uri, "get_doc_attr $id");
226     cmp_ok( $node->get_doc_attr_by_uri( $uri, '@uri' ), 'eq', $uri, "get_doc_attr $id");
227 dpavlin 115 ok( my $k1 = $node->etch_doc( $id ), "etch_doc_by_uri $uri");
228 dpavlin 49 ok( my $k2 = $node->etch_doc_by_uri( $uri ), "etch_doc_by_uri $uri");
229     #diag Dumper($k, $k2);
230 dpavlin 115 ok( eq_hash( $k1, $k2 ), "keywords");
231 dpavlin 43 }
232 dpavlin 48
233 dpavlin 91 ok(my $hints = $nres->hints, 'hints');
234 dpavlin 152 diag Dumper($hints) if ($debug);
235 dpavlin 91
236 dpavlin 72 ok($node->_set_info, "refresh _set_info");
237    
238 dpavlin 48 my $v;
239     ok($v = $node->name, "name: $v");
240     ok($v = $node->label, "label: $v");
241     ok($v = $node->doc_num, "doc_num: $v");
242 dpavlin 110 ok(defined($v = $node->word_num), "word_num: $v");
243 dpavlin 48 ok($v = $node->size, "size: $v");
244    
245 dpavlin 55 ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");
246    
247 dpavlin 148 # test skip
248     my $skip = int($max / 2) || die "skip is zero, can't test";
249     ok($cond->set_skip( $skip ), "cond set_skip($skip)");
250 dpavlin 167 cmp_ok($cond->skip, '==', $skip, "skip is $skip");
251 dpavlin 148
252 dpavlin 155 like($node->cond_to_query( $cond ), qr/skip=$skip/, 'cond_to_query have skip');
253    
254 dpavlin 148 ok( $nres = $node->search( $cond, 0 ), 'search');
255     isa_ok( $nres, 'Search::Estraier::NodeResult' );
256     cmp_ok($nres->doc_num, '==', $max, "nres->doc_num " . ($max - $skip));
257     cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
258    
259     for my $i ( 0 .. ($nres->doc_num - 1) ) {
260 dpavlin 155 my $uri = 'test' . ($i + $delete_num + $skip + 1);
261 dpavlin 148 ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
262     if ($rdoc) {
263     cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
264     } else {
265     fail('no rdoc');
266     }
267     }
268    
269    
270 dpavlin 56 # user doesn't exist
271 dpavlin 156 ok($node->set_user('foobar', 1), 'set_user');
272 dpavlin 56
273 dpavlin 152 ok(my $node2 = new Search::Estraier::Node( "$estmaster_uri/node/$test2_node" ), "new $test2_node");
274 dpavlin 94 ok($node2->set_auth('admin','admin'), "set_auth $test2_node");
275 dpavlin 57
276 dpavlin 78 # croak_on_error
277    
278 dpavlin 152 ok($node = new Search::Estraier::Node( url => "$estmaster_uri/non-existant", croak_on_error => 1 ), "new non-existant");
279 dpavlin 94 throws_ok { $node->name } qr/404/, 'croak on error';
280 dpavlin 78
281 dpavlin 103 # croak_on_error
282 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");
283 dpavlin 94
284 dpavlin 103 ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');
285    
286 dpavlin 137
287 dpavlin 107 # test users
288 dpavlin 156 ok($node->admins, 'have admins');
289 dpavlin 107 ok(! $node->guests, 'no guests');
290    
291 dpavlin 137
292 dpavlin 129 # test search without results
293     ok($cond = new Search::Estraier::Condition, 'new cond');
294     ok($cond->set_phrase('this_is_phrase_which_does_not_exits'), 'cond set_phrase');
295    
296     ok($nres = $node->search( $cond, 0 ), 'search');
297    
298 dpavlin 137 # now, test links
299     my $test2_label = "$test2_node label";
300 dpavlin 152 my $link_url = "$estmaster_uri/node/$test2_node";
301 dpavlin 137 ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");
302     ok(my $links = $node->links, 'links');
303     cmp_ok($#{$links}, '==', 0, 'one link');
304     like($links->[0], qr/^$link_url/, 'link correct');
305 dpavlin 152 ok($node->set_link("$estmaster_uri/node/$test2_node", $test2_label, 0), "set_link $test2_node ($test2_label) delete");
306 dpavlin 72
307 dpavlin 151 ok($msg = $node->master(
308     action => 'nodeclr',
309     name => $node->name,
310 dpavlin 155 ), "nodeclr " . $node->name . ": $msg");
311 dpavlin 151
312     cmp_ok($node->doc_num, '==', 0, 'no documents');
313    
314 dpavlin 137 # cleanup test nodes
315     foreach my $node_name ( $test1_node , $test2_node ) {
316     ok($msg = $node->master(
317     action => 'nodedel',
318     name => $node_name,
319     ), "nodedel $node_name: $msg");
320     }
321 dpavlin 107
322 dpavlin 139 # test create
323     my $node_name = '_test_create_' . $$;
324     my $node_label = "test $$ label";
325    
326     ok($node = new Search::Estraier::Node(
327 dpavlin 152 url => "$estmaster_uri/node/$node_name",
328 dpavlin 139 create => 1,
329     label => $node_label,
330     croak_on_error => 1
331 dpavlin 140 ), "new create+croak");
332 dpavlin 139
333     cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
334     cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
335    
336 dpavlin 140 ok($node = new Search::Estraier::Node(
337 dpavlin 152 url => "$estmaster_uri/node/$node_name",
338 dpavlin 140 create => 1,
339     label => $node_label,
340     croak_on_error => 0
341     ), "new create existing");
342    
343     ok($node = new Search::Estraier::Node(
344 dpavlin 152 url => "$estmaster_uri/node/$node_name",
345 dpavlin 140 create => 1,
346     label => $node_label,
347     croak_on_error => 1
348     ), "new create+croak existing");
349    
350     # cleanup
351 dpavlin 139 ok($msg = $node->master(
352     action => 'nodedel',
353     name => $node_name,
354     ), "nodedel $node_name: $msg");
355    
356 dpavlin 140 # and again, this time without node
357     ok($node = new Search::Estraier::Node(
358 dpavlin 152 url => "$estmaster_uri/node/$node_name",
359 dpavlin 140 create => 1,
360     label => $node_label,
361     croak_on_error => 0
362     ), "new create non-existing");
363    
364     cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
365     cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
366    
367     # cleanup
368     ok($msg = $node->master(
369     action => 'nodedel',
370     name => $node_name,
371     ), "nodedel $node_name: $msg");
372    
373 dpavlin 151 ok($msg = $node->master( action => 'sync' ), "sync: $msg");
374    
375 dpavlin 152 } # SKIP
376    
377 dpavlin 55 diag "over";

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26