/[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 129 by dpavlin, Mon May 8 12:01:00 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 => 118;  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 30  ok($node->set_auth('admin','admin'), 'se Line 36  ok($node->set_auth('admin','admin'), 'se
36    
37  cmp_ok($node->status, '==', -1, 'status');  cmp_ok($node->status, '==', -1, 'status');
38    
39    # test master functionality
40    
41  SKIP: {  SKIP: {
42    
43  skip "no $test1_node node in Hyper Estraier", 105, unless($node->name);  skip "can't find estmaster at $estmaster_uri", ($tests - 9) if (! eval { $node->master( action => 'nodelist' ) } );
44    
45  my @res = ( -1, 200 );  diag "using $estmaster_uri";
46    diag("node->master shutdown not tested");
47    
48  my $nodelist;  diag("node->master backup not tested");
49  foreach my $url (qw{?action=nodelist http://localhost:1978/master?action=nodelist}) {  
50          cmp_ok(  ok(my @users = $node->master( action => 'userlist' ), 'userlist');
51                  $node->shuttle_url( $url, 'text/plain', undef, \$nodelist)  
52          ,'==', shift @res, 'nodelist');  #diag "users: ", Dumper( \@users );
53    diag "found ", $#users + 1, " users";
54    
55    my $user = {
56            name => '_test_' . $$,
57            flags => 'b',
58            fname => 'Search::Estraier',
59            misc => 'test user',
60    };
61    
62    my $msg;
63    ok($msg = $node->master(
64            action => 'useradd',
65            %{ $user },
66            passwd => 'test1234',
67    ), "useradd: $msg");
68    
69    ok(my @users2 = $node->master( action => 'userlist' ), 'userlist');
70    cmp_ok($#users2, '==', $#users + 1, 'added user');
71    
72    while (my $row = shift @users2) {
73            next unless ($row->{name} eq $user);
74            map {
75                    cmp_ok($user->{$_}, 'eq', $row->{$_}, "$_");
76            } keys %{ $user };
77  }  }
78    
79    ok($msg = $node->master(
80            action => 'userdel',
81            name => $user->{name},
82    ), "userdel: $msg");
83    
84    ok(@users2 = $node->master( action => 'userlist' ), 'userlist');
85    cmp_ok($#users2, '==', $#users, 'removed user');
86    
87    ok(my @nodes = $node->master( action => 'nodelist' ), 'nodelist' );
88    #diag "nodelist: ", Dumper( \@nodes );
89    diag "found ", $#nodes + 1, " nodes";
90    
91    if ($#nodes > 42) {
92            diag <<'_END_OF_WARNING_';
93    
94    This tests create three nodes in your Hyper Estraier.
95    
96    Since you have more than 43 modes, and Hyper Estraier needs more than
97    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_
107    }
108    
109    my $temp_node = "_test_temp_$$";
110    
111    foreach my $node_name ( $test1_node , $test2_node, $temp_node ) {
112            ok($msg = $node->master(
113                    action => 'nodeadd',
114                    name => $node_name,
115                    label => "$node_name label",
116            ), "nodeadd $node_name: $msg");
117    }
118    
119    ok($msg = $node->master(
120            action => 'nodedel',
121            name => $temp_node,
122    ), "nodedel $temp_node: $msg");
123    
124    #diag "not testing logrtt\n";
125    
126    # 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 58  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 96  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 122  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 135  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    
 # test users  
275    
276    # test users
277  ok(! $node->admins, 'no admins');  ok(! $node->admins, 'no admins');
278  ok(! $node->guests, 'no guests');  ok(! $node->guests, 'no guests');
279    
 # test search without results  
280    
281    # test search without results
282  ok($cond = new Search::Estraier::Condition, 'new cond');  ok($cond = new Search::Estraier::Condition, 'new cond');
283  ok($cond->set_phrase('this_is_phrase_which_does_not_exits'), 'cond set_phrase');  ok($cond->set_phrase('this_is_phrase_which_does_not_exits'), 'cond set_phrase');
284    
285  ok($nres = $node->search( $cond, 0 ), 'search');  ok($nres = $node->search( $cond, 0 ), 'search');
286    
287  SKIP: {  # now, test links
288          skip "no $test2_node in Hyper Estraier, skipping set_link", 5 unless (my $test2_label = $node2->label);  my $test2_label = "$test2_node label";
289    my $link_url = "$estmaster_uri/node/$test2_node";
290          my $link_url = "http://localhost:1978/node/$test2_node";  ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");
291    ok(my $links = $node->links, 'links');
292          ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");  cmp_ok($#{$links}, '==', 0, 'one link');
293    like($links->[0], qr/^$link_url/, 'link correct');
294          ok(my $links = $node->links, 'links');  ok($node->set_link("$estmaster_uri/node/$test2_node", $test2_label, 0), "set_link $test2_node ($test2_label) delete");
295    
296          cmp_ok($#{$links}, '==', 0, 'one link');  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
304    foreach my $node_name ( $test1_node , $test2_node ) {
305            ok($msg = $node->master(
306                    action => 'nodedel',
307                    name => $node_name,
308            ), "nodedel $node_name: $msg");
309    }
310    
311          like($links->[0], qr/^$link_url/, 'link correct');  # 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($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  
363    
364  }       # SKIP 1  } # SKIP
365    
366  diag "over";  diag "over";

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

  ViewVC Help
Powered by ViewVC 1.1.26