/[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 152 by dpavlin, Tue May 16 12:11:39 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 = 269;
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 32  cmp_ok($node->status, '==', -1, 'status' Line 38  cmp_ok($node->status, '==', -1, 'status'
38    
39  # test master functionality  # test master functionality
40    
41  #diag "not testing shutdown\n";  SKIP: {
42    
43  my $msg;  skip "can't find estmaster at $estmaster_uri", ($tests - 9) if (! eval { $node->master( action => 'nodelist' ) } );
44    
45  ok($msg = $node->master( action => 'sync' ), "sync: $msg");  diag "using $estmaster_uri";
46    diag("node->master shutdown not tested");
47    
48  #diag "not testing backup\n";  diag("node->master backup not tested");
49    
50  ok(my @users = $node->master( action => 'userlist' ), 'userlist');  ok(my @users = $node->master( action => 'userlist' ), 'userlist');
51    
# Line 52  my $user = { Line 59  my $user = {
59          misc => 'test user',          misc => 'test user',
60  };  };
61    
62    my $msg;
63  ok($msg = $node->master(  ok($msg = $node->master(
64          action => 'useradd',          action => 'useradd',
65          %{ $user },          %{ $user },
# Line 85  if ($#nodes > 42) { Line 93  if ($#nodes > 42) {
93    
94  This tests create three nodes in your Hyper Estraier.  This tests create three nodes in your Hyper Estraier.
95    
96  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
97  maximum of 46 nodes on each estmaster process, expect tests to fail.  1024 file descriptors for more than 46 nodes, expect tests to fail.
98    
99    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  _END_OF_WARNING_  _END_OF_WARNING_
107  }  }
# Line 102  foreach my $node_name ( $test1_node , $t Line 117  foreach my $node_name ( $test1_node , $t
117  }  }
118    
119  ok($msg = $node->master(  ok($msg = $node->master(
         action => 'nodeclr',  
         name => $temp_node,  
 ), "nodeclr $temp_node: $msg");  
   
 ok($msg = $node->master(  
120          action => 'nodedel',          action => 'nodedel',
121          name => $temp_node,          name => $temp_node,
122  ), "nodedel $temp_node: $msg");  ), "nodedel $temp_node: $msg");
# Line 116  ok($msg = $node->master( Line 126  ok($msg = $node->master(
126  # test document creation  # test document creation
127    
128  my $draft = <<'_END_OF_DRAFT_';  my $draft = <<'_END_OF_DRAFT_';
129  @uri=data001  @uri=data0
130  @title=Material Girl  @title=Material Girl
131    
132  Living in a material world  Living in a material world
# Line 130  ok(my $doc = new Search::Estraier::Docum Line 140  ok(my $doc = new Search::Estraier::Docum
140    
141  ok( $node->put_doc($doc), "put_doc data001");  ok( $node->put_doc($doc), "put_doc data001");
142    
143  for ( 1 .. 10 ) {  for ( 1 .. 17 ) {
144          $doc->add_attr('@uri', 'test' . $_);          $doc->add_attr('@uri', 'test' . $_);
145          ok( $node->put_doc($doc), "put_doc test$_");          ok( $node->put_doc($doc), "put_doc test$_");
146          #diag $doc->dump_draft;          #diag $doc->dump_draft;
147            cmp_ok( $node->doc_num, '==', ($_ + 1), "node->doc_num " . ($_ + 1));
148  }  }
149    
150  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");  
   
 my $data_max = 5;  
151    
152  for ( 1 .. $data_max ) {  my $id;
153          ok( $node->out_doc_by_uri( 'test' . $_ ), "out_doc_by_uri test$_");  ok($id = $node->uri_to_id( 'data0' ), "uri_to_id(data0)");
 }  
154    
155  ok($doc = $node->get_doc( $id ), 'get_doc for edit');  ok($doc = $node->get_doc( $id ), "get_doc($id) for edit");
156  $doc->add_attr('foo', 'bar');  $doc->add_attr('foo', 'bar');
157  #diag Dumper($doc);  #diag Dumper($doc);
158  ok( $node->edit_doc( $doc ), 'edit_doc');  ok( $node->edit_doc( $doc ), 'edit_doc');
159    
160  ok( $node->out_doc( $id ), "out_doc $id");  my $doc_num;
161    ok( $doc_num = $node->doc_num, "node->doc_num $doc_num");
162    
163    ok( $node->out_doc( $id ), "out_doc($id)");
164    
165    cmp_ok( $node->doc_num, '==', --$doc_num, "node->doc_num " . $doc_num);
166    
167    ok( ! $node->edit_doc( $doc ), "edit_doc of removed doc");
168    
169    my $delete_num = 5;
170    
171    for ( 1 .. $delete_num ) {
172            ok( $node->out_doc_by_uri( 'test' . $_ ), "out_doc_by_uri test$_");
173            cmp_ok( $node->doc_num, '==', $doc_num - $_, "node->doc_num " . ($doc_num - $_));
174    }
175    
176  ok( ! $node->edit_doc( $doc ), "edit removed");  my $doc_num2 = $doc_num - $delete_num;
177    cmp_ok($node->doc_num, '==', $doc_num2, "node->doc_num $doc_num2");
178    
179  my $max = 3;  my $max = int($doc_num2 / 2);
180    
181  ok(my $cond = new Search::Estraier::Condition, 'new cond');  ok(my $cond = new Search::Estraier::Condition, 'new cond');
182  ok($cond->set_phrase('girl'), 'cond set_phrase');  ok($cond->set_phrase('girl'), 'cond set_phrase');
183  ok($cond->set_max($max), "cond set_max $max");  ok($cond->set_max($max), "cond set_max($max)");
184  ok($cond->set_order('@uri ASCD'), 'cond set_order');  ok($cond->set_order('@uri ASCD'), 'cond set_order');
185  ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');  ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');
186    
# Line 168  ok( my $nres = $node->search( $cond, 0 ) Line 190  ok( my $nres = $node->search( $cond, 0 )
190    
191  isa_ok( $nres, 'Search::Estraier::NodeResult' );  isa_ok( $nres, 'Search::Estraier::NodeResult' );
192    
193  cmp_ok($nres->doc_num, '==', $max, "doc_num = $max");  cmp_ok($nres->doc_num, '==', $max, "nres->doc_num $max");
194    
195  cmp_ok($nres->hits, '==', $data_max, "hits");  cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
196    
197    # upper limit is $nres->hits and not $nres->doc_num because we
198    # check all documents, not just results!
199  for my $i ( 0 .. ($nres->hits - 1) ) {  for my $i ( 0 .. ($nres->hits - 1) ) {
200          my $uri = 'test' . ($i + $data_max + 1);          my $num = $i + $delete_num + 1;
201            my $uri = 'test' . $num;
202    
203          if ($i < $nres->doc_num) {          if ($i < $nres->doc_num) {
204                  ok( my $rdoc = $nres->get_doc( $i ), "get_doc $i");                  ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
205    
206                  cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");                  cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
207                    cmp_ok( $node->uri_to_id( $uri ), '==', $num + 1, "uri_to_id($uri)");
208    
209                  ok( my $k = $rdoc->keywords( $id ), "rdoc keywords");                  ok( my $k = $rdoc->keywords( $id ), "rdoc keywords");
210            } else {
211                    ok( ! $nres->get_doc( $i ), "nres->get_doc doesn't exist");
212          }          }
213    
214          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)");
215          ok( $node->get_doc( $id ), "get_doc $id");          ok( $node->get_doc( $id ), "get_doc($id)");
216          ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri $uri");          ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri($uri)");
217          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");
218          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");
219          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 223  for my $i ( 0 .. ($nres->hits - 1) ) {
223  }  }
224    
225  ok(my $hints = $nres->hints, 'hints');  ok(my $hints = $nres->hints, 'hints');
226  diag Dumper($hints);  diag Dumper($hints) if ($debug);
227    
228  ok($node->_set_info, "refresh _set_info");  ok($node->_set_info, "refresh _set_info");
229    
# Line 207  ok($v = $node->size, "size: $v"); Line 236  ok($v = $node->size, "size: $v");
236    
237  ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");  ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");
238    
239    # 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  # user doesn't exist  # user doesn't exist
260  ok(! $node->set_user('foobar', 1), 'set_user');  ok(! $node->set_user('foobar', 1), 'set_user');
261    
262  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");
263  ok($node2->set_auth('admin','admin'), "set_auth $test2_node");  ok($node2->set_auth('admin','admin'), "set_auth $test2_node");
264    
265  # croak_on_error  # croak_on_error
266    
267  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");
268  throws_ok { $node->name } qr/404/, 'croak on error';  throws_ok { $node->name } qr/404/, 'croak on error';
269    
270  # croak_on_error  # croak_on_error
271  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 ), "new $test1_node");
272    
273  ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');  ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');
274    
# Line 237  ok($nres = $node->search( $cond, 0 ), 's Line 286  ok($nres = $node->search( $cond, 0 ), 's
286    
287  # now, test links  # now, test links
288  my $test2_label = "$test2_node label";  my $test2_label = "$test2_node label";
289  my $link_url = "http://localhost:1978/node/$test2_node";  my $link_url = "$estmaster_uri/node/$test2_node";
290  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");
291  ok(my $links = $node->links, 'links');  ok(my $links = $node->links, 'links');
292  cmp_ok($#{$links}, '==', 0, 'one link');  cmp_ok($#{$links}, '==', 0, 'one link');
293  like($links->[0], qr/^$link_url/, 'link correct');  like($links->[0], qr/^$link_url/, 'link correct');
294  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");
295    
296    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  # cleanup test nodes  # cleanup test nodes
304  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 308  foreach my $node_name ( $test1_node , $t
308          ), "nodedel $node_name: $msg");          ), "nodedel $node_name: $msg");
309  }  }
310    
311    # test create
312    my $node_name = '_test_create_' . $$;
313    my $node_label = "test $$ label";
314    
315    ok($node = new Search::Estraier::Node(
316            url => "$estmaster_uri/node/$node_name",
317            create => 1,
318            label => $node_label,
319            croak_on_error => 1
320    ), "new create+croak");
321    
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    ok($node = new Search::Estraier::Node(
326            url => "$estmaster_uri/node/$node_name",
327            create => 1,
328            label => $node_label,
329            croak_on_error => 0
330    ), "new create existing");
331    
332    ok($node = new Search::Estraier::Node(
333            url => "$estmaster_uri/node/$node_name",
334            create => 1,
335            label => $node_label,
336            croak_on_error => 1
337    ), "new create+croak existing");
338    
339    # cleanup
340    ok($msg = $node->master(
341            action => 'nodedel',
342            name => $node_name,
343    ), "nodedel $node_name: $msg");
344    
345    # and again, this time without node
346    ok($node = new Search::Estraier::Node(
347            url => "$estmaster_uri/node/$node_name",
348            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    ok($msg = $node->master( action => 'sync' ), "sync: $msg");
363    
364    } # SKIP
365    
366  diag "over";  diag "over";

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

  ViewVC Help
Powered by ViewVC 1.1.26