/[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 152 - (hide annotations)
Tue May 16 12:11:39 2006 UTC (17 years, 11 months ago) by dpavlin
File MIME type: application/x-troff
File size: 10298 byte(s)
skip tests if estmaster isn't running, optional way to test against remove
Hyper Estraier server using:

ESTMASTER_URI=http://estraier.example.com:1978 make test

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

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26