/[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 110 by dpavlin, Tue Feb 21 15:40:54 2006 UTC revision 169 by dpavlin, Sun Aug 6 16:42:39 2006 UTC
# Line 3  Line 3 
3  use strict;  use strict;
4  use blib;  use blib;
5    
6  use Test::More tests => 106;  my $tests = 273;
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
45    
46  SKIP: {  SKIP: {
47    
48  skip "no $test1_node node in Hyper Estraier", 96, unless($node->name);  skip "can't find estmaster at $estmaster_uri", ($tests - 9) if (! eval { $node->master( action => 'nodelist' ) } );
49    
50    diag "using $estmaster_uri";
51    diag("node->master shutdown not tested");
52    
53    diag("node->master backup not tested");
54    
55  my @res = ( -1, 200 );  ok(my @users = $node->master( action => 'userlist' ), 'userlist');
56    
57  my $nodelist;  #diag "users: ", Dumper( \@users );
58  foreach my $url (qw{?action=nodelist http://localhost:1978/master?action=nodelist}) {  diag "found ", $#users + 1, " users";
59          cmp_ok(  
60                  $node->shuttle_url( $url, 'text/plain', undef, \$nodelist)  my $user = {
61          ,'==', shift @res, 'nodelist');          name => '_test_' . $$,
62            flags => 'b',
63            fname => 'Search::Estraier',
64            misc => 'test user',
65    };
66    
67    my $msg;
68    ok($msg = $node->master(
69            action => 'useradd',
70            %{ $user },
71            passwd => 'test1234',
72    ), "useradd: $msg");
73    
74    ok(my @users2 = $node->master( action => 'userlist' ), 'userlist');
75    cmp_ok($#users2, '==', $#users + 1, 'added user');
76    
77    while (my $row = shift @users2) {
78            next unless ($row->{name} eq $user);
79            map {
80                    cmp_ok($user->{$_}, 'eq', $row->{$_}, "$_");
81            } keys %{ $user };
82  }  }
83    
84    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    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    
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_
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  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 58  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  ok( ! $node->edit_doc( $doc ), "edit removed");  cmp_ok( $node->doc_num, '==', --$doc_num, "node->doc_num " . $doc_num);
173    
174  my $max = 3;  ok( ! $node->edit_doc( $doc ), "edit_doc of removed doc");
175    
176    my $cache;
177    ok($cache = $node->cacheusage, "cacheusage: $cache");
178    
179    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 96  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  for ( 6 .. 10 ) {  # upper limit is $nres->hits and not $nres->doc_num because we
208          my $uri = 'test' . $_;  # check all documents, not just results!
209          ok( my $id = $node->uri_to_id( $uri ), "uri_to_id($uri) = $id");  for my $i ( 0 .. ($nres->hits - 1) ) {
210          ok( $node->get_doc( $id ), "get_doc $id");          my $num = $i + $delete_num + 1;
211          ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri $uri");          my $uri = 'test' . $num;
212    
213            if ($i < $nres->doc_num) {
214                    ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
215    
216                    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");
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)");
225            ok( $node->get_doc( $id ), "get_doc($id)");
226            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 $k = $node->etch_doc( $id ), "etch_doc_by_uri $uri");          ok( my $k1 = $node->etch_doc( $id ), "etch_doc_by_uri $uri");
230          ok( my $k2 = $node->etch_doc_by_uri( $uri ), "etch_doc_by_uri $uri");          ok( my $k2 = $node->etch_doc_by_uri( $uri ), "etch_doc_by_uri $uri");
231          #diag Dumper($k, $k2);          #diag Dumper($k, $k2);
232          ok( eq_hash( $k, $k2 ), "keywords");          ok( eq_hash( $k1, $k2 ), "keywords");
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    
238  ok($node->_set_info, "refresh _set_info");  ok($node->_set_info, "refresh _set_info");
239    
# Line 127  ok($v = $node->size, "size: $v"); Line 246  ok($v = $node->size, "size: $v");
246    
247  ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");  ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");
248    
249    # test skip
250    my $skip = int($max / 2) || die "skip is zero, can't test";
251    ok($cond->set_skip( $skip ), "cond set_skip($skip)");
252    cmp_ok($cond->skip, '==', $skip, "skip is $skip");
253    
254    like($node->cond_to_query( $cond ), qr/skip=$skip/, 'cond_to_query have skip');
255    
256    ok( $nres = $node->search( $cond, 0 ), 'search');
257    isa_ok( $nres, 'Search::Estraier::NodeResult' );
258    cmp_ok($nres->doc_num, '==', $max, "nres->doc_num " . ($max - $skip));
259    cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
260    
261    for my $i ( 0 .. ($nres->doc_num - 1) ) {
262            my $uri = 'test' . ($i + $delete_num + $skip + 1);
263            ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
264            if ($rdoc) {
265                    cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
266            } else {
267                    fail('no rdoc');
268            }
269    }
270    
271    
272  # user doesn't exist  # user doesn't exist
273  ok(! $node->set_user('foobar', 1), 'set_user');  ok($node->set_user('foobar', 1), 'set_user');
274    
275  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");
276  ok($node2->set_auth('admin','admin'), "set_auth $test2_node");  ok($node2->set_auth('admin','admin'), "set_auth $test2_node");
277    
278  # croak_on_error  # croak_on_error
279    
280  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");
281  throws_ok { $node->name } qr/404/, 'croak on error';  throws_ok { $node->name } qr/404/, 'croak on error';
282    
283  # croak_on_error  # croak_on_error
284  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");
285    
286  ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');  ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');
287    
 # test users  
288    
289  ok(! $node->admins, 'no admins');  # test users
290    ok($node->admins, 'have admins');
291  ok(! $node->guests, 'no guests');  ok(! $node->guests, 'no guests');
292    
 SKIP: {  
         skip "no $test2_node in Hyper Estraier, skipping set_link", 5 unless (my $test2_label = $node2->label);  
   
         my $link_url = "http://localhost:1978/node/$test2_node";  
293    
294          ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");  # test search without results
295    ok($cond = new Search::Estraier::Condition, 'new cond');
296          ok(my $links = $node->links, 'links');  ok($cond->set_phrase('this_is_phrase_which_does_not_exits'), 'cond set_phrase');
297    
298          cmp_ok($#{$links}, '==', 0, 'one link');  ok($nres = $node->search( $cond, 0 ), 'search');
299    
300    # now, test links
301    my $test2_label = "$test2_node label";
302    my $link_url = "$estmaster_uri/node/$test2_node";
303    ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");
304    ok(my $links = $node->links, 'links');
305    cmp_ok($#{$links}, '==', 0, 'one link');
306    like($links->[0], qr/^$link_url/, 'link correct');
307    ok($node->set_link("$estmaster_uri/node/$test2_node", $test2_label, 0), "set_link $test2_node ($test2_label) delete");
308    
309    ok($msg = $node->master(
310            action => 'nodeclr',
311            name => $node->name,
312    ), "nodeclr " . $node->name . ": $msg");
313    
314    cmp_ok($node->doc_num, '==', 0, 'no documents');
315    
316    # cleanup test nodes
317    foreach my $node_name ( $test1_node , $test2_node ) {
318            ok($msg = $node->master(
319                    action => 'nodedel',
320                    name => $node_name,
321            ), "nodedel $node_name: $msg");
322    }
323    
324          like($links->[0], qr/^$link_url/, 'link correct');  # test create
325    my $node_name = '_test_create_' . $$;
326    my $node_label = "test $$ label";
327    
328    ok($node = new Search::Estraier::Node(
329            url => "$estmaster_uri/node/$node_name",
330            create => 1,
331            label => $node_label,
332            croak_on_error => 1
333    ), "new create+croak");
334    
335    cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
336    cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
337    
338    ok($node = new Search::Estraier::Node(
339            url => "$estmaster_uri/node/$node_name",
340            create => 1,
341            label => $node_label,
342            croak_on_error => 0
343    ), "new create existing");
344    
345    ok($node = new Search::Estraier::Node(
346            url => "$estmaster_uri/node/$node_name",
347            create => 1,
348            label => $node_label,
349            croak_on_error => 1
350    ), "new create+croak existing");
351    
352    # cleanup
353    ok($msg = $node->master(
354            action => 'nodedel',
355            name => $node_name,
356    ), "nodedel $node_name: $msg");
357    
358    # and again, this time without node
359    ok($node = new Search::Estraier::Node(
360            url => "$estmaster_uri/node/$node_name",
361            create => 1,
362            label => $node_label,
363            croak_on_error => 0
364    ), "new create non-existing");
365    
366    cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
367    cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
368    
369    # cleanup
370    ok($msg = $node->master(
371            action => 'nodedel',
372            name => $node_name,
373    ), "nodedel $node_name: $msg");
374    
375          ok($node->set_link("http://localhost:1978/node/$test2_node", $test2_label, 0), "set_link $test2_node ($test2_label) delete");  ok($msg = $node->master( action => 'sync' ), "sync: $msg");
 }       # SKIP 2  
376    
377  }       # SKIP 1  } # SKIP
378    
379  diag "over";  diag "over";

Legend:
Removed from v.110  
changed lines
  Added in v.169

  ViewVC Help
Powered by ViewVC 1.1.26