/[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

Diff of /trunk/t/5_Node.t

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 137 by dpavlin, Tue May 9 14:05:57 2006 UTC revision 170 by dpavlin, Sun Aug 6 17:15:01 2006 UTC
# Line 3  Line 3 
3  use strict;  use strict;
4  use blib;  use blib;
5    
6  use Test::More tests => 132;  my $tests = 279;
7    
8    use Test::More;
9  use Test::Exception;  use Test::Exception;
10  use Data::Dumper;  use Data::Dumper;
11    
12  BEGIN { use_ok('Search::Estraier') };  BEGIN { use_ok('Search::Estraier') };
13    
14  my $debug = 0;  plan tests => $tests;
15    
16    my $debug = shift @ARGV;
17    
18  # name of node for test  # name of node for test
19  my $test1_node = '_test1_' . $$;  my $test1_node = '_test1_' . $$;
20  my $test2_node = '_test2_' . $$;  my $test2_node = '_test2_' . $$;
21    
22    my $estmaster_uri = $ENV{'ESTMASTER_URI'} || 'http://localhost:1978';
23    
24  ok(my $node = new Search::Estraier::Node( debug => $debug ), 'new');  ok(my $node = new Search::Estraier::Node( debug => $debug ), 'new');
25  isa_ok($node, 'Search::Estraier::Node');  isa_ok($node, 'Search::Estraier::Node');
26    
27  ok($node->set_url("http://localhost:1978/node/$test1_node"), "set_url $test1_node");  ok($node->set_url("$estmaster_uri/node/$test1_node"), "set_url $test1_node");
28    
29  ok($node->set_proxy('', 8080), 'set_proxy');  ok($node->set_proxy('', 8080), 'set_proxy');
30  throws_ok {$node->set_proxy('proxy.example.com', 'foo') } qr/port/, 'set_proxy port NaN';  throws_ok {$node->set_proxy('proxy.example.com', 'foo') } qr/port/, 'set_proxy port NaN';
# Line 26  throws_ok {$node->set_proxy('proxy.examp Line 32  throws_ok {$node->set_proxy('proxy.examp
32  ok($node->set_timeout(42), 'set_timeout');  ok($node->set_timeout(42), 'set_timeout');
33  throws_ok {$node->set_timeout('foo') } qr/timeout/, 'set_timeout NaN';  throws_ok {$node->set_timeout('foo') } qr/timeout/, 'set_timeout NaN';
34    
35  ok($node->set_auth('admin','admin'), 'set_auth');  my ($user, $passwd) = (
36            $ENV{EST_USER} || 'admin',
37            $ENV{EST_PASSWD} || 'admin'
38    );
39    
40    ok($node->set_auth($user, $passwd), 'set_auth');
41    
42  cmp_ok($node->status, '==', -1, 'status');  cmp_ok($node->status, '==', -1, 'status');
43    
44  # test master functionality  # test master functionality
45    
46  #diag "not testing shutdown\n";  SKIP: {
47    
48  my $msg;  skip "can't find estmaster at $estmaster_uri", ($tests - 9) if (! eval { $node->master( action => 'nodelist' ) } );
49    
50  ok($msg = $node->master( action => 'sync' ), "sync: $msg");  diag "using $estmaster_uri";
51    diag("node->master shutdown not tested");
52    
53  #diag "not testing backup\n";  diag("node->master backup not tested");
54    
55  ok(my @users = $node->master( action => 'userlist' ), 'userlist');  ok(my @users = $node->master( action => 'userlist' ), 'userlist');
56    
# Line 52  my $user = { Line 64  my $user = {
64          misc => 'test user',          misc => 'test user',
65  };  };
66    
67    my $msg;
68  ok($msg = $node->master(  ok($msg = $node->master(
69          action => 'useradd',          action => 'useradd',
70          %{ $user },          %{ $user },
# Line 85  if ($#nodes > 42) { Line 98  if ($#nodes > 42) {
98    
99  This tests create three nodes in your Hyper Estraier.  This tests create three nodes in your Hyper Estraier.
100    
101  Since you have more than 43 modes, and Hyper Estraier seems to be limited to  Since you have more than 43 modes, and Hyper Estraier needs more than
102  maximum of 46 nodes on each estmaster process, expect tests to fail.  1024 file descriptors for more than 46 nodes, expect tests to fail.
103    
104    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  _END_OF_WARNING_  _END_OF_WARNING_
112  }  }
# Line 102  foreach my $node_name ( $test1_node , $t Line 122  foreach my $node_name ( $test1_node , $t
122  }  }
123    
124  ok($msg = $node->master(  ok($msg = $node->master(
         action => 'nodeclr',  
         name => $temp_node,  
 ), "nodeclr $temp_node: $msg");  
   
 ok($msg = $node->master(  
125          action => 'nodedel',          action => 'nodedel',
126          name => $temp_node,          name => $temp_node,
127  ), "nodedel $temp_node: $msg");  ), "nodedel $temp_node: $msg");
# Line 116  ok($msg = $node->master( Line 131  ok($msg = $node->master(
131  # test document creation  # test document creation
132    
133  my $draft = <<'_END_OF_DRAFT_';  my $draft = <<'_END_OF_DRAFT_';
134  @uri=data001  @uri=data0
135  @title=Material Girl  @title=Material Girl
136    
137  Living in a material world  Living in a material world
# Line 130  ok(my $doc = new Search::Estraier::Docum Line 145  ok(my $doc = new Search::Estraier::Docum
145    
146  ok( $node->put_doc($doc), "put_doc data001");  ok( $node->put_doc($doc), "put_doc data001");
147    
148  for ( 1 .. 10 ) {  for ( 1 .. 17 ) {
149          $doc->add_attr('@uri', 'test' . $_);          $doc->add_attr('@uri', 'test' . $_);
150          ok( $node->put_doc($doc), "put_doc test$_");          ok( $node->put_doc($doc), "put_doc test$_");
151          #diag $doc->dump_draft;          #diag $doc->dump_draft;
152            cmp_ok( $node->doc_num, '==', ($_ + 1), "node->doc_num " . ($_ + 1));
153  }  }
154    
155  my $id;  ok(! $node->uri_to_id( 'does-not-exists' ), "non-existant uri_to_id");
 ok($id = $node->uri_to_id( 'data001' ), "uri_to_id = $id");  
156    
157  my $data_max = 5;  my $id;
158    ok($id = $node->uri_to_id( 'data0' ), "uri_to_id(data0)");
159    
160  for ( 1 .. $data_max ) {  throws_ok { $node->get_doc( 'foo') } qr/id must be number/, 'croak on non-number';
         ok( $node->out_doc_by_uri( 'test' . $_ ), "out_doc_by_uri test$_");  
 }  
161    
162  ok($doc = $node->get_doc( $id ), 'get_doc for edit');  ok($doc = $node->get_doc( $id ), "get_doc($id) for edit");
163  $doc->add_attr('foo', 'bar');  $doc->add_attr('foo', 'bar');
164  #diag Dumper($doc);  #diag Dumper($doc);
165  ok( $node->edit_doc( $doc ), 'edit_doc');  ok( $node->edit_doc( $doc ), 'edit_doc');
166    
167  ok( $node->out_doc( $id ), "out_doc $id");  my $doc_num;
168    ok( $doc_num = $node->doc_num, "node->doc_num $doc_num");
169    
170    ok( $node->out_doc( $id ), "out_doc($id)");
171    
172    cmp_ok( $node->doc_num, '==', --$doc_num, "node->doc_num " . $doc_num);
173    
174    ok( ! $node->edit_doc( $doc ), "edit_doc of removed doc");
175    
176  ok( ! $node->edit_doc( $doc ), "edit removed");  my $cache;
177    ok($cache = $node->cacheusage, "cacheusage: $cache");
178    
179  my $max = 3;  my $delete_num = 5;
180    
181    for ( 1 .. $delete_num ) {
182            ok( $node->out_doc_by_uri( 'test' . $_ ), "out_doc_by_uri test$_");
183            cmp_ok( $node->doc_num, '==', $doc_num - $_, "node->doc_num " . ($doc_num - $_));
184    }
185    
186    my $doc_num2 = $doc_num - $delete_num;
187    cmp_ok($node->doc_num, '==', $doc_num2, "node->doc_num $doc_num2");
188    
189    my $max = int($doc_num2 / 2);
190    
191  ok(my $cond = new Search::Estraier::Condition, 'new cond');  ok(my $cond = new Search::Estraier::Condition, 'new cond');
192  ok($cond->set_phrase('girl'), 'cond set_phrase');  ok($cond->set_phrase('girl'), 'cond set_phrase');
193  ok($cond->set_max($max), "cond set_max $max");  ok($cond->set_max($max), "cond set_max($max)");
194  ok($cond->set_order('@uri ASCD'), 'cond set_order');  ok($cond->set_order('@uri ASCD'), 'cond set_order');
195  ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');  ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');
196    
# Line 168  ok( my $nres = $node->search( $cond, 0 ) Line 200  ok( my $nres = $node->search( $cond, 0 )
200    
201  isa_ok( $nres, 'Search::Estraier::NodeResult' );  isa_ok( $nres, 'Search::Estraier::NodeResult' );
202    
203  cmp_ok($nres->doc_num, '==', $max, "doc_num = $max");  cmp_ok($nres->doc_num, '==', $max, "nres->doc_num $max");
204    
205  cmp_ok($nres->hits, '==', $data_max, "hits");  cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
206    
207    # upper limit is $nres->hits and not $nres->doc_num because we
208    # check all documents, not just results!
209  for my $i ( 0 .. ($nres->hits - 1) ) {  for my $i ( 0 .. ($nres->hits - 1) ) {
210          my $uri = 'test' . ($i + $data_max + 1);          my $num = $i + $delete_num + 1;
211            my $uri = 'test' . $num;
212    
213          if ($i < $nres->doc_num) {          if ($i < $nres->doc_num) {
214                  ok( my $rdoc = $nres->get_doc( $i ), "get_doc $i");                  ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
215    
216                  cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");                  cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
217                    cmp_ok( $node->uri_to_id( $uri ), '==', $num + 1, "uri_to_id($uri)");
218    
219                  ok( my $k = $rdoc->keywords( $id ), "rdoc keywords");                  ok( my $k = $rdoc->keywords( $id ), "rdoc keywords");
220            } else {
221                    ok( ! $nres->get_doc( $i ), "nres->get_doc doesn't exist");
222          }          }
223    
224          ok( my $id = $node->uri_to_id( $uri ), "uri_to_id($uri) = $id");          ok( my $id = $node->uri_to_id( $uri ), "uri_to_id($uri)");
225          ok( $node->get_doc( $id ), "get_doc $id");          ok( $node->get_doc( $id ), "get_doc($id)");
226          ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri $uri");          ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri($uri)");
227          cmp_ok( $node->get_doc_attr( $id, '@uri' ), 'eq', $uri, "get_doc_attr $id");          cmp_ok( $node->get_doc_attr( $id, '@uri' ), 'eq', $uri, "get_doc_attr $id");
228          cmp_ok( $node->get_doc_attr_by_uri( $uri, '@uri' ), 'eq', $uri, "get_doc_attr $id");          cmp_ok( $node->get_doc_attr_by_uri( $uri, '@uri' ), 'eq', $uri, "get_doc_attr $id");
229          ok( my $k1 = $node->etch_doc( $id ), "etch_doc_by_uri $uri");          ok( my $k1 = $node->etch_doc( $id ), "etch_doc_by_uri $uri");
# Line 194  for my $i ( 0 .. ($nres->hits - 1) ) { Line 233  for my $i ( 0 .. ($nres->hits - 1) ) {
233  }  }
234    
235  ok(my $hints = $nres->hints, 'hints');  ok(my $hints = $nres->hints, 'hints');
236  diag Dumper($hints);  diag Dumper($hints) if ($debug);
237    foreach my $h (qw/TIME DOCNUM VERSION NODE HIT WORDNUM/) {
238            ok(defined( $nres->hint($h) ), "have hint $h");
239    }
240    
241  ok($node->_set_info, "refresh _set_info");  ok($node->_set_info, "refresh _set_info");
242    
# Line 207  ok($v = $node->size, "size: $v"); Line 249  ok($v = $node->size, "size: $v");
249    
250  ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");  ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");
251    
252    # test skip
253    my $skip = int($max / 2) || die "skip is zero, can't test";
254    ok($cond->set_skip( $skip ), "cond set_skip($skip)");
255    cmp_ok($cond->skip, '==', $skip, "skip is $skip");
256    
257    like($node->cond_to_query( $cond ), qr/skip=$skip/, 'cond_to_query have skip');
258    
259    ok( $nres = $node->search( $cond, 0 ), 'search');
260    isa_ok( $nres, 'Search::Estraier::NodeResult' );
261    cmp_ok($nres->doc_num, '==', $max, "nres->doc_num " . ($max - $skip));
262    cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
263    
264    for my $i ( 0 .. ($nres->doc_num - 1) ) {
265            my $uri = 'test' . ($i + $delete_num + $skip + 1);
266            ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
267            if ($rdoc) {
268                    cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
269            } else {
270                    fail('no rdoc');
271            }
272    }
273    
274    
275  # user doesn't exist  # user doesn't exist
276  ok(! $node->set_user('foobar', 1), 'set_user');  ok($node->set_user('foobar', 1), 'set_user');
277    
278  ok(my $node2 = new Search::Estraier::Node( "http://localhost:1978/node/$test2_node" ), "new $test2_node");  ok(my $node2 = new Search::Estraier::Node( "$estmaster_uri/node/$test2_node" ), "new $test2_node");
279  ok($node2->set_auth('admin','admin'), "set_auth $test2_node");  ok($node2->set_auth('admin','admin'), "set_auth $test2_node");
280    
281  # croak_on_error  # croak_on_error
282    
283  ok($node = new Search::Estraier::Node( url => "http://localhost:1978/non-existant", croak_on_error => 1 ), "new non-existant");  ok($node = new Search::Estraier::Node( url => "$estmaster_uri/non-existant", croak_on_error => 1 ), "new non-existant");
284  throws_ok { $node->name } qr/404/, 'croak on error';  throws_ok { $node->name } qr/404/, 'croak on error';
285    
286  # croak_on_error  # croak_on_error
287  ok($node = new Search::Estraier::Node( url => "http://localhost:1978/node/$test1_node", croak_on_error => 1 ), "new $test1_node");  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");
288    
289  ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');  ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');
290    
291    
292  # test users  # test users
293  ok(! $node->admins, 'no admins');  ok($node->admins, 'have admins');
294  ok(! $node->guests, 'no guests');  ok(! $node->guests, 'no guests');
295    
296    
# Line 237  ok($nres = $node->search( $cond, 0 ), 's Line 302  ok($nres = $node->search( $cond, 0 ), 's
302    
303  # now, test links  # now, test links
304  my $test2_label = "$test2_node label";  my $test2_label = "$test2_node label";
305  my $link_url = "http://localhost:1978/node/$test2_node";  my $link_url = "$estmaster_uri/node/$test2_node";
306  ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");  ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");
307  ok(my $links = $node->links, 'links');  ok(my $links = $node->links, 'links');
308  cmp_ok($#{$links}, '==', 0, 'one link');  cmp_ok($#{$links}, '==', 0, 'one link');
309  like($links->[0], qr/^$link_url/, 'link correct');  like($links->[0], qr/^$link_url/, 'link correct');
310  ok($node->set_link("http://localhost:1978/node/$test2_node", $test2_label, 0), "set_link $test2_node ($test2_label) delete");  ok($node->set_link("$estmaster_uri/node/$test2_node", $test2_label, 0), "set_link $test2_node ($test2_label) delete");
311    
312    ok($msg = $node->master(
313            action => 'nodeclr',
314            name => $node->name,
315    ), "nodeclr " . $node->name . ": $msg");
316    
317    cmp_ok($node->doc_num, '==', 0, 'no documents');
318    
319  # cleanup test nodes  # cleanup test nodes
320  foreach my $node_name ( $test1_node , $test2_node ) {  foreach my $node_name ( $test1_node , $test2_node ) {
# Line 252  foreach my $node_name ( $test1_node , $t Line 324  foreach my $node_name ( $test1_node , $t
324          ), "nodedel $node_name: $msg");          ), "nodedel $node_name: $msg");
325  }  }
326    
327    # test create
328    my $node_name = '_test_create_' . $$;
329    my $node_label = "test $$ label";
330    
331    ok($node = new Search::Estraier::Node(
332            url => "$estmaster_uri/node/$node_name",
333            create => 1,
334            label => $node_label,
335            croak_on_error => 1
336    ), "new create+croak");
337    
338    cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
339    cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
340    
341    ok($node = new Search::Estraier::Node(
342            url => "$estmaster_uri/node/$node_name",
343            create => 1,
344            label => $node_label,
345            croak_on_error => 0
346    ), "new create existing");
347    
348    ok($node = new Search::Estraier::Node(
349            url => "$estmaster_uri/node/$node_name",
350            create => 1,
351            label => $node_label,
352            croak_on_error => 1
353    ), "new create+croak existing");
354    
355    # cleanup
356    ok($msg = $node->master(
357            action => 'nodedel',
358            name => $node_name,
359    ), "nodedel $node_name: $msg");
360    
361    # and again, this time without node
362    ok($node = new Search::Estraier::Node(
363            url => "$estmaster_uri/node/$node_name",
364            create => 1,
365            label => $node_label,
366            croak_on_error => 0
367    ), "new create non-existing");
368    
369    cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
370    cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
371    
372    # cleanup
373    ok($msg = $node->master(
374            action => 'nodedel',
375            name => $node_name,
376    ), "nodedel $node_name: $msg");
377    
378    ok($msg = $node->master( action => 'sync' ), "sync: $msg");
379    
380    } # SKIP
381    
382  diag "over";  diag "over";

Legend:
Removed from v.137  
changed lines
  Added in v.170

  ViewVC Help
Powered by ViewVC 1.1.26