/[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 109 by dpavlin, Mon Feb 20 21:21:04 2006 UTC revision 155 by dpavlin, Thu May 18 14:31:42 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 = 270;
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", 97, 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");  
   
 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->edit_doc( $doc ), "edit removed");  ok( $node->out_doc( $id ), "out_doc($id)");
169    
170  my $max = 3;  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    my $doc_num2 = $doc_num - $delete_num;
182    cmp_ok($node->doc_num, '==', $doc_num2, "node->doc_num $doc_num2");
183    
184    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 96  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  for ( 6 .. 10 ) {  # upper limit is $nres->hits and not $nres->doc_num because we
203          my $uri = 'test' . $_;  # check all documents, not just results!
204          ok( my $id = $node->uri_to_id( $uri ), "uri_to_id($uri) = $id");  for my $i ( 0 .. ($nres->hits - 1) ) {
205          ok( $node->get_doc( $id ), "get_doc $id");          my $num = $i + $delete_num + 1;
206          ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri $uri");          my $uri = 'test' . $num;
207    
208            if ($i < $nres->doc_num) {
209                    ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
210    
211                    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");
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)");
220            ok( $node->get_doc( $id ), "get_doc($id)");
221            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 $k = $node->etch_doc( $id ), "etch_doc_by_uri $uri");          ok( my $k1 = $node->etch_doc( $id ), "etch_doc_by_uri $uri");
225          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");
226          #diag Dumper($k, $k2);          #diag Dumper($k, $k2);
227          ok( eq_hash( $k, $k2 ), "keywords");          ok( eq_hash( $k1, $k2 ), "keywords");
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 122  my $v; Line 236  my $v;
236  ok($v = $node->name, "name: $v");  ok($v = $node->name, "name: $v");
237  ok($v = $node->label, "label: $v");  ok($v = $node->label, "label: $v");
238  ok($v = $node->doc_num, "doc_num: $v");  ok($v = $node->doc_num, "doc_num: $v");
239  ok($v = $node->word_num, "word_num: $v");  ok(defined($v = $node->word_num), "word_num: $v");
240  ok($v = $node->size, "size: $v");  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    like($node->cond_to_query( $cond ), qr/skip=$skip/, 'cond_to_query have skip');
249    
250    ok( $nres = $node->search( $cond, 0 ), 'search');
251    isa_ok( $nres, 'Search::Estraier::NodeResult' );
252    cmp_ok($nres->doc_num, '==', $max, "nres->doc_num " . ($max - $skip));
253    cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
254    
255    for my $i ( 0 .. ($nres->doc_num - 1) ) {
256            my $uri = 'test' . ($i + $delete_num + $skip + 1);
257            ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
258            if ($rdoc) {
259                    cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
260            } else {
261                    fail('no rdoc');
262            }
263    }
264    
265    
266  # user doesn't exist  # user doesn't exist
267  ok(! $node->set_user('foobar', 1), 'set_user');  ok(! $node->set_user('foobar', 1), 'set_user');
268    
269  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");
270  ok($node2->set_auth('admin','admin'), "set_auth $test2_node");  ok($node2->set_auth('admin','admin'), "set_auth $test2_node");
271    
272  # croak_on_error  # croak_on_error
273    
274  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");
275  throws_ok { $node->name } qr/404/, 'croak on error';  throws_ok { $node->name } qr/404/, 'croak on error';
276    
277  # croak_on_error  # croak_on_error
278  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");
279    
280  ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');  ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');
281    
 # test users  
282    
283    # test users
284  ok(! $node->admins, 'no admins');  ok(! $node->admins, 'no admins');
285  ok(! $node->guests, 'no guests');  ok(! $node->guests, 'no guests');
286    
 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";  
287    
288          ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");  # test search without results
289    ok($cond = new Search::Estraier::Condition, 'new cond');
290          ok(my $links = $node->links, 'links');  ok($cond->set_phrase('this_is_phrase_which_does_not_exits'), 'cond set_phrase');
291    
292          cmp_ok($#{$links}, '==', 0, 'one link');  ok($nres = $node->search( $cond, 0 ), 'search');
293    
294    # now, test links
295    my $test2_label = "$test2_node label";
296    my $link_url = "$estmaster_uri/node/$test2_node";
297    ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");
298    ok(my $links = $node->links, 'links');
299    cmp_ok($#{$links}, '==', 0, 'one link');
300    like($links->[0], qr/^$link_url/, 'link correct');
301    ok($node->set_link("$estmaster_uri/node/$test2_node", $test2_label, 0), "set_link $test2_node ($test2_label) delete");
302    
303    ok($msg = $node->master(
304            action => 'nodeclr',
305            name => $node->name,
306    ), "nodeclr " . $node->name . ": $msg");
307    
308    cmp_ok($node->doc_num, '==', 0, 'no documents');
309    
310    # cleanup test nodes
311    foreach my $node_name ( $test1_node , $test2_node ) {
312            ok($msg = $node->master(
313                    action => 'nodedel',
314                    name => $node_name,
315            ), "nodedel $node_name: $msg");
316    }
317    
318          like($links->[0], qr/^$link_url/, 'link correct');  # test create
319    my $node_name = '_test_create_' . $$;
320    my $node_label = "test $$ label";
321    
322    ok($node = new Search::Estraier::Node(
323            url => "$estmaster_uri/node/$node_name",
324            create => 1,
325            label => $node_label,
326            croak_on_error => 1
327    ), "new create+croak");
328    
329    cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
330    cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
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 => 0
337    ), "new create existing");
338    
339    ok($node = new Search::Estraier::Node(
340            url => "$estmaster_uri/node/$node_name",
341            create => 1,
342            label => $node_label,
343            croak_on_error => 1
344    ), "new create+croak existing");
345    
346    # cleanup
347    ok($msg = $node->master(
348            action => 'nodedel',
349            name => $node_name,
350    ), "nodedel $node_name: $msg");
351    
352    # and again, this time without node
353    ok($node = new Search::Estraier::Node(
354            url => "$estmaster_uri/node/$node_name",
355            create => 1,
356            label => $node_label,
357            croak_on_error => 0
358    ), "new create non-existing");
359    
360    cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
361    cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
362    
363    # cleanup
364    ok($msg = $node->master(
365            action => 'nodedel',
366            name => $node_name,
367    ), "nodedel $node_name: $msg");
368    
369          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  
370    
371  }       # SKIP 1  } # SKIP
372    
373  diag "over";  diag "over";

Legend:
Removed from v.109  
changed lines
  Added in v.155

  ViewVC Help
Powered by ViewVC 1.1.26