/[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 153 by dpavlin, Tue May 16 16:01:09 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 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");  
   
 my $data_max = 5;  
156    
157  for ( 1 .. $data_max ) {  my $id;
158          ok( $node->out_doc_by_uri( 'test' . $_ ), "out_doc_by_uri test$_");  ok($id = $node->uri_to_id( 'data0' ), "uri_to_id(data0)");
 }  
159    
160  ok($doc = $node->get_doc( $id ), 'get_doc for edit');  ok($doc = $node->get_doc( $id ), "get_doc($id) for edit");
161  $doc->add_attr('foo', 'bar');  $doc->add_attr('foo', 'bar');
162  #diag Dumper($doc);  #diag Dumper($doc);
163  ok( $node->edit_doc( $doc ), 'edit_doc');  ok( $node->edit_doc( $doc ), 'edit_doc');
164    
165  ok( $node->out_doc( $id ), "out_doc $id");  my $doc_num;
166    ok( $doc_num = $node->doc_num, "node->doc_num $doc_num");
167    
168    ok( $node->out_doc( $id ), "out_doc($id)");
169    
170    cmp_ok( $node->doc_num, '==', --$doc_num, "node->doc_num " . $doc_num);
171    
172    ok( ! $node->edit_doc( $doc ), "edit_doc of removed doc");
173    
174    my $delete_num = 5;
175    
176    for ( 1 .. $delete_num ) {
177            ok( $node->out_doc_by_uri( 'test' . $_ ), "out_doc_by_uri test$_");
178            cmp_ok( $node->doc_num, '==', $doc_num - $_, "node->doc_num " . ($doc_num - $_));
179    }
180    
181  ok( ! $node->edit_doc( $doc ), "edit removed");  my $doc_num2 = $doc_num - $delete_num;
182    cmp_ok($node->doc_num, '==', $doc_num2, "node->doc_num $doc_num2");
183    
184  my $max = 3;  my $max = int($doc_num2 / 2);
185    
186  ok(my $cond = new Search::Estraier::Condition, 'new cond');  ok(my $cond = new Search::Estraier::Condition, 'new cond');
187  ok($cond->set_phrase('girl'), 'cond set_phrase');  ok($cond->set_phrase('girl'), 'cond set_phrase');
188  ok($cond->set_max($max), "cond set_max $max");  ok($cond->set_max($max), "cond set_max($max)");
189  ok($cond->set_order('@uri ASCD'), 'cond set_order');  ok($cond->set_order('@uri ASCD'), 'cond set_order');
190  ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');  ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');
191    
# Line 168  ok( my $nres = $node->search( $cond, 0 ) Line 195  ok( my $nres = $node->search( $cond, 0 )
195    
196  isa_ok( $nres, 'Search::Estraier::NodeResult' );  isa_ok( $nres, 'Search::Estraier::NodeResult' );
197    
198  cmp_ok($nres->doc_num, '==', $max, "doc_num = $max");  cmp_ok($nres->doc_num, '==', $max, "nres->doc_num $max");
199    
200  cmp_ok($nres->hits, '==', $data_max, "hits");  cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
201    
202    # upper limit is $nres->hits and not $nres->doc_num because we
203    # check all documents, not just results!
204  for my $i ( 0 .. ($nres->hits - 1) ) {  for my $i ( 0 .. ($nres->hits - 1) ) {
205          my $uri = 'test' . ($i + $data_max + 1);          my $num = $i + $delete_num + 1;
206            my $uri = 'test' . $num;
207    
208          if ($i < $nres->doc_num) {          if ($i < $nres->doc_num) {
209                  ok( my $rdoc = $nres->get_doc( $i ), "get_doc $i");                  ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
210    
211                  cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");                  cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
212                    cmp_ok( $node->uri_to_id( $uri ), '==', $num + 1, "uri_to_id($uri)");
213    
214                  ok( my $k = $rdoc->keywords( $id ), "rdoc keywords");                  ok( my $k = $rdoc->keywords( $id ), "rdoc keywords");
215            } else {
216                    ok( ! $nres->get_doc( $i ), "nres->get_doc doesn't exist");
217          }          }
218    
219          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)");
220          ok( $node->get_doc( $id ), "get_doc $id");          ok( $node->get_doc( $id ), "get_doc($id)");
221          ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri $uri");          ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri($uri)");
222          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");
223          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");
224          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 228  for my $i ( 0 .. ($nres->hits - 1) ) {
228  }  }
229    
230  ok(my $hints = $nres->hints, 'hints');  ok(my $hints = $nres->hints, 'hints');
231  diag Dumper($hints);  diag Dumper($hints) if ($debug);
232    
233  ok($node->_set_info, "refresh _set_info");  ok($node->_set_info, "refresh _set_info");
234    
# Line 207  ok($v = $node->size, "size: $v"); Line 241  ok($v = $node->size, "size: $v");
241    
242  ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");  ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");
243    
244    # 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    ok( $nres = $node->search( $cond, 0 ), 'search');
249    isa_ok( $nres, 'Search::Estraier::NodeResult' );
250    cmp_ok($nres->doc_num, '==', $max, "nres->doc_num " . ($max - $skip));
251    cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
252    
253    for my $i ( 0 .. ($nres->doc_num - 1) ) {
254            my $uri = 'test' . ($i + $delete_num + 1);
255            ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
256            if ($rdoc) {
257                    cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
258            } else {
259                    fail('no rdoc');
260            }
261    }
262    
263    
264  # user doesn't exist  # user doesn't exist
265  ok(! $node->set_user('foobar', 1), 'set_user');  ok(! $node->set_user('foobar', 1), 'set_user');
266    
267  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");
268  ok($node2->set_auth('admin','admin'), "set_auth $test2_node");  ok($node2->set_auth('admin','admin'), "set_auth $test2_node");
269    
270  # croak_on_error  # croak_on_error
271    
272  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");
273  throws_ok { $node->name } qr/404/, 'croak on error';  throws_ok { $node->name } qr/404/, 'croak on error';
274    
275  # croak_on_error  # croak_on_error
276  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");
277    
278  ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');  ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');
279    
# Line 237  ok($nres = $node->search( $cond, 0 ), 's Line 291  ok($nres = $node->search( $cond, 0 ), 's
291    
292  # now, test links  # now, test links
293  my $test2_label = "$test2_node label";  my $test2_label = "$test2_node label";
294  my $link_url = "http://localhost:1978/node/$test2_node";  my $link_url = "$estmaster_uri/node/$test2_node";
295  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");
296  ok(my $links = $node->links, 'links');  ok(my $links = $node->links, 'links');
297  cmp_ok($#{$links}, '==', 0, 'one link');  cmp_ok($#{$links}, '==', 0, 'one link');
298  like($links->[0], qr/^$link_url/, 'link correct');  like($links->[0], qr/^$link_url/, 'link correct');
299  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");
300    
301    ok($msg = $node->master(
302            action => 'nodeclr',
303            name => $node->name,
304    ), "nodeclr $node->name: $msg");
305    
306    cmp_ok($node->doc_num, '==', 0, 'no documents');
307    
308  # cleanup test nodes  # cleanup test nodes
309  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 313  foreach my $node_name ( $test1_node , $t
313          ), "nodedel $node_name: $msg");          ), "nodedel $node_name: $msg");
314  }  }
315    
316    # test create
317    my $node_name = '_test_create_' . $$;
318    my $node_label = "test $$ label";
319    
320    ok($node = new Search::Estraier::Node(
321            url => "$estmaster_uri/node/$node_name",
322            create => 1,
323            label => $node_label,
324            croak_on_error => 1
325    ), "new create+croak");
326    
327    cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
328    cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
329    
330    ok($node = new Search::Estraier::Node(
331            url => "$estmaster_uri/node/$node_name",
332            create => 1,
333            label => $node_label,
334            croak_on_error => 0
335    ), "new create existing");
336    
337    ok($node = new Search::Estraier::Node(
338            url => "$estmaster_uri/node/$node_name",
339            create => 1,
340            label => $node_label,
341            croak_on_error => 1
342    ), "new create+croak existing");
343    
344    # cleanup
345    ok($msg = $node->master(
346            action => 'nodedel',
347            name => $node_name,
348    ), "nodedel $node_name: $msg");
349    
350    # and again, this time without node
351    ok($node = new Search::Estraier::Node(
352            url => "$estmaster_uri/node/$node_name",
353            create => 1,
354            label => $node_label,
355            croak_on_error => 0
356    ), "new create non-existing");
357    
358    cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
359    cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
360    
361    # cleanup
362    ok($msg = $node->master(
363            action => 'nodedel',
364            name => $node_name,
365    ), "nodedel $node_name: $msg");
366    
367    ok($msg = $node->master( action => 'sync' ), "sync: $msg");
368    
369    } # SKIP
370    
371  diag "over";  diag "over";

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

  ViewVC Help
Powered by ViewVC 1.1.26