/[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 92 by dpavlin, Thu Jan 26 15:29:20 2006 UTC revision 160 by dpavlin, Sat Jun 24 15:34:42 2006 UTC
# Line 3  Line 3 
3  use strict;  use strict;
4  use blib;  use blib;
5    
6  use Test::More tests => 98;  my $tests = 271;
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", 88, 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  my @res = ( -1, 200 );  diag("node->master backup not tested");
54    
55  my $nodelist;  ok(my @users = $node->master( action => 'userlist' ), 'userlist');
56  foreach my $url (qw{?action=nodelist http://localhost:1978/master?action=nodelist}) {  
57          cmp_ok(  #diag "users: ", Dumper( \@users );
58                  $node->shuttle_url( $url, 'text/plain', undef, \$nodelist)  diag "found ", $#users + 1, " users";
59          ,'==', shift @res, 'nodelist');  
60    my $user = {
61            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  for ( 1 .. 5 ) {  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  ok( ! $node->edit_doc( $doc ), "edit removed");  cmp_ok( $node->doc_num, '==', --$doc_num, "node->doc_num " . $doc_num);
171    
172  my $max = 3;  ok( ! $node->edit_doc( $doc ), "edit_doc of removed doc");
173    
174    my $cache;
175    ok($cache = $node->cacheusage, "cacheusage: $cache");
176    
177    my $delete_num = 5;
178    
179    for ( 1 .. $delete_num ) {
180            ok( $node->out_doc_by_uri( 'test' . $_ ), "out_doc_by_uri test$_");
181            cmp_ok( $node->doc_num, '==', $doc_num - $_, "node->doc_num " . ($doc_num - $_));
182    }
183    
184    my $doc_num2 = $doc_num - $delete_num;
185    cmp_ok($node->doc_num, '==', $doc_num2, "node->doc_num $doc_num2");
186    
187    my $max = int($doc_num2 / 2);
188    
189  ok(my $cond = new Search::Estraier::Condition, 'new cond');  ok(my $cond = new Search::Estraier::Condition, 'new cond');
190  ok($cond->set_phrase('girl'), 'cond set_phrase');  ok($cond->set_phrase('girl'), 'cond set_phrase');
191  ok($cond->set_max($max), "cond set_max $max");  ok($cond->set_max($max), "cond set_max($max)");
192  ok($cond->set_order('@uri ASCD'), 'cond set_order');  ok($cond->set_order('@uri ASCD'), 'cond set_order');
193  ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');  ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');
194    
# Line 94  ok( my $nres = $node->search( $cond, 0 ) Line 198  ok( my $nres = $node->search( $cond, 0 )
198    
199  isa_ok( $nres, 'Search::Estraier::NodeResult' );  isa_ok( $nres, 'Search::Estraier::NodeResult' );
200    
201  cmp_ok($nres->doc_num, '==', $max, "doc_num = $max");  cmp_ok($nres->doc_num, '==', $max, "nres->doc_num $max");
202    
203    cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
204    
205  for ( 6 .. 10 ) {  # upper limit is $nres->hits and not $nres->doc_num because we
206          my $uri = 'test' . $_;  # check all documents, not just results!
207          ok( my $id = $node->uri_to_id( $uri ), "uri_to_id $uri");  for my $i ( 0 .. ($nres->hits - 1) ) {
208          ok( $node->get_doc( $id ), "get_doc $id");          my $num = $i + $delete_num + 1;
209          ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri $uri");          my $uri = 'test' . $num;
210    
211            if ($i < $nres->doc_num) {
212                    ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
213    
214                    cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
215                    cmp_ok( $node->uri_to_id( $uri ), '==', $num + 1, "uri_to_id($uri)");
216    
217                    ok( my $k = $rdoc->keywords( $id ), "rdoc keywords");
218            } else {
219                    ok( ! $nres->get_doc( $i ), "nres->get_doc doesn't exist");
220            }
221    
222            ok( my $id = $node->uri_to_id( $uri ), "uri_to_id($uri)");
223            ok( $node->get_doc( $id ), "get_doc($id)");
224            ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri($uri)");
225          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");
226          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");
227          ok( my $k = $node->etch_doc( $id ), "etch_doc_by_uri $uri");          ok( my $k1 = $node->etch_doc( $id ), "etch_doc_by_uri $uri");
228          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");
229          #diag Dumper($k, $k2);          #diag Dumper($k, $k2);
230          ok( eq_hash( $k, $k2 ), "keywords");          ok( eq_hash( $k1, $k2 ), "keywords");
231  }  }
232    
233  ok(my $hints = $nres->hints, 'hints');  ok(my $hints = $nres->hints, 'hints');
234  diag Dumper($hints);  diag Dumper($hints) if ($debug);
235    
236  ok($node->_set_info, "refresh _set_info");  ok($node->_set_info, "refresh _set_info");
237    
# Line 118  my $v; Line 239  my $v;
239  ok($v = $node->name, "name: $v");  ok($v = $node->name, "name: $v");
240  ok($v = $node->label, "label: $v");  ok($v = $node->label, "label: $v");
241  ok($v = $node->doc_num, "doc_num: $v");  ok($v = $node->doc_num, "doc_num: $v");
242  ok($v = $node->word_num, "word_num: $v");  ok(defined($v = $node->word_num), "word_num: $v");
243  ok($v = $node->size, "size: $v");  ok($v = $node->size, "size: $v");
244    
245  ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");  ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");
246    
247    # test skip
248    my $skip = int($max / 2) || die "skip is zero, can't test";
249    ok($cond->set_skip( $skip ), "cond set_skip($skip)");
250    
251    like($node->cond_to_query( $cond ), qr/skip=$skip/, 'cond_to_query have skip');
252    
253    ok( $nres = $node->search( $cond, 0 ), 'search');
254    isa_ok( $nres, 'Search::Estraier::NodeResult' );
255    cmp_ok($nres->doc_num, '==', $max, "nres->doc_num " . ($max - $skip));
256    cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
257    
258    for my $i ( 0 .. ($nres->doc_num - 1) ) {
259            my $uri = 'test' . ($i + $delete_num + $skip + 1);
260            ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
261            if ($rdoc) {
262                    cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
263            } else {
264                    fail('no rdoc');
265            }
266    }
267    
268    
269  # user doesn't exist  # user doesn't exist
270  ok(! $node->set_user('foobar', 1), 'set_user');  ok($node->set_user('foobar', 1), 'set_user');
271    
272  ok(my $node1 = 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");
273  ok($node1->set_auth('admin','admin'), "set_auth $test2_node");  ok($node2->set_auth('admin','admin'), "set_auth $test2_node");
274    
275  # croak_on_error  # croak_on_error
276    
277  ok(my $node2 = 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");
278  throws_ok { $node2->name } qr/404/, 'croak on error';  throws_ok { $node->name } qr/404/, 'croak on error';
279    
280  SKIP: {  # croak_on_error
281          skip "no $test2_node in Hyper Estraier, skipping set_link", 2 unless (my $test1_label = $node1->label);  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");
282    
283    ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');
284    
285    
286    # test users
287    ok($node->admins, 'have admins');
288    ok(! $node->guests, 'no guests');
289    
290    
291    # test search without results
292    ok($cond = new Search::Estraier::Condition, 'new cond');
293    ok($cond->set_phrase('this_is_phrase_which_does_not_exits'), 'cond set_phrase');
294    
295    ok($nres = $node->search( $cond, 0 ), 'search');
296    
297    # now, test links
298    my $test2_label = "$test2_node label";
299    my $link_url = "$estmaster_uri/node/$test2_node";
300    ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");
301    ok(my $links = $node->links, 'links');
302    cmp_ok($#{$links}, '==', 0, 'one link');
303    like($links->[0], qr/^$link_url/, 'link correct');
304    ok($node->set_link("$estmaster_uri/node/$test2_node", $test2_label, 0), "set_link $test2_node ($test2_label) delete");
305    
306    ok($msg = $node->master(
307            action => 'nodeclr',
308            name => $node->name,
309    ), "nodeclr " . $node->name . ": $msg");
310    
311    cmp_ok($node->doc_num, '==', 0, 'no documents');
312    
313    # cleanup test nodes
314    foreach my $node_name ( $test1_node , $test2_node ) {
315            ok($msg = $node->master(
316                    action => 'nodedel',
317                    name => $node_name,
318            ), "nodedel $node_name: $msg");
319    }
320    
321    # test create
322    my $node_name = '_test_create_' . $$;
323    my $node_label = "test $$ 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 => 1
330    ), "new create+croak");
331    
332    cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
333    cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
334    
335    ok($node = new Search::Estraier::Node(
336            url => "$estmaster_uri/node/$node_name",
337            create => 1,
338            label => $node_label,
339            croak_on_error => 0
340    ), "new create existing");
341    
342    ok($node = new Search::Estraier::Node(
343            url => "$estmaster_uri/node/$node_name",
344            create => 1,
345            label => $node_label,
346            croak_on_error => 1
347    ), "new create+croak existing");
348    
349    # cleanup
350    ok($msg = $node->master(
351            action => 'nodedel',
352            name => $node_name,
353    ), "nodedel $node_name: $msg");
354    
355    # and again, this time without node
356    ok($node = new Search::Estraier::Node(
357            url => "$estmaster_uri/node/$node_name",
358            create => 1,
359            label => $node_label,
360            croak_on_error => 0
361    ), "new create non-existing");
362    
363    cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
364    cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
365    
366    # cleanup
367    ok($msg = $node->master(
368            action => 'nodedel',
369            name => $node_name,
370    ), "nodedel $node_name: $msg");
371    
372          ok($node->set_link("http://localhost:1978/node/$test2_node", $test1_label, 42), "set_link $test2_node ($test1_label) 42");  ok($msg = $node->master( action => 'sync' ), "sync: $msg");
         ok($node->set_link("http://localhost:1978/node/$test2_node", $test1_label, 0), "set_link $test2_node ($test1_label) delete");  
 }       # SKIP 2  
373    
374  }       # SKIP 1  } # SKIP
375    
376  diag "over";  diag "over";

Legend:
Removed from v.92  
changed lines
  Added in v.160

  ViewVC Help
Powered by ViewVC 1.1.26