/[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 51 by dpavlin, Fri Jan 6 13:19:50 2006 UTC revision 167 by dpavlin, Sun Aug 6 16:29:34 2006 UTC
# Line 3  Line 3 
3  use strict;  use strict;
4  use blib;  use blib;
5    
6  use Test::More tests => 87;  my $tests = 272;
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 $test_node = 'Search-Estraier';  my $test1_node = '_test1_' . $$;
20    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), '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/searchestraier'), 'set_url');  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 25  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  my @res = ( -1, 200 );  # test master functionality
45    
46    SKIP: {
47    
48    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    ok(my @users = $node->master( action => 'userlist' ), 'userlist');
56    
57    #diag "users: ", Dumper( \@users );
58    diag "found ", $#users + 1, " users";
59    
60  my $nodelist;  my $user = {
61  foreach my $url (qw{?action=nodelist http://localhost:1978/master?action=nodelist}) {          name => '_test_' . $$,
62          cmp_ok(          flags => 'b',
63                  $node->shuttle_url( $url, 'text/plain', undef, \$nodelist)          fname => 'Search::Estraier',
64          ,'==', shift @res, 'nodelist');          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 53  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    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  ok( ! $node->edit_doc( $doc ), "edit removed");  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(42), 'cond set_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    
195  cmp_ok($node->cond_to_query( $cond ), 'eq' , 'phrase=girl&attr1=%40title%20STRINC%20Material&order=%40uri%20ASCD&max=42&wwidth=480&hwidth=96&awidth=96', 'cond_to_query');  cmp_ok($node->cond_to_query( $cond ), 'eq' , 'phrase=girl&attr1=%40title%20STRINC%20Material&order=%40uri%20ASCD&max='.$max.'&wwidth=480&hwidth=96&awidth=96', 'cond_to_query');
196    
197    ok( my $nres = $node->search( $cond, 0 ), 'search');
198    
199    isa_ok( $nres, 'Search::Estraier::NodeResult' );
200    
201    cmp_ok($nres->doc_num, '==', $max, "nres->doc_num $max");
202    
203    cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
204    
205  ok( my $nrec = $node->search( $cond, 0 ), 'search');  # upper limit is $nres->hits and not $nres->doc_num because we
206    # check all documents, not just results!
207    for my $i ( 0 .. ($nres->hits - 1) ) {
208            my $num = $i + $delete_num + 1;
209            my $uri = 'test' . $num;
210    
211  isa_ok( $nrec, 'Search::Estraier::NodeResult' );          if ($i < $nres->doc_num) {
212                    ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
213    
214  for ( 6 .. 10 ) {                  cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
215          my $uri = 'test' . $_;                  cmp_ok( $node->uri_to_id( $uri ), '==', $num + 1, "uri_to_id($uri)");
216          ok( my $id = $node->uri_to_id( $uri ), "uri_to_id $uri");  
217          ok( $node->get_doc( $id ), "get_doc $id");                  ok( my $k = $rdoc->keywords( $id ), "rdoc keywords");
218          ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri $uri");          } 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');
234    diag Dumper($hints) if ($debug);
235    
236    ok($node->_set_info, "refresh _set_info");
237    
238  my $v;  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");
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    cmp_ok($cond->skip, '==', $skip, "skip is $skip");
251    
252    like($node->cond_to_query( $cond ), qr/skip=$skip/, 'cond_to_query have skip');
253    
254    ok( $nres = $node->search( $cond, 0 ), 'search');
255    isa_ok( $nres, 'Search::Estraier::NodeResult' );
256    cmp_ok($nres->doc_num, '==', $max, "nres->doc_num " . ($max - $skip));
257    cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
258    
259    for my $i ( 0 .. ($nres->doc_num - 1) ) {
260            my $uri = 'test' . ($i + $delete_num + $skip + 1);
261            ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
262            if ($rdoc) {
263                    cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
264            } else {
265                    fail('no rdoc');
266            }
267    }
268    
269    
270    # user doesn't exist
271    ok($node->set_user('foobar', 1), 'set_user');
272    
273    ok(my $node2 = new Search::Estraier::Node( "$estmaster_uri/node/$test2_node" ), "new $test2_node");
274    ok($node2->set_auth('admin','admin'), "set_auth $test2_node");
275    
276    # croak_on_error
277    
278    ok($node = new Search::Estraier::Node( url => "$estmaster_uri/non-existant", croak_on_error => 1 ), "new non-existant");
279    throws_ok { $node->name } qr/404/, 'croak on error';
280    
281    # croak_on_error
282    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");
283    
284    ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');
285    
286    
287    # test users
288    ok($node->admins, 'have admins');
289    ok(! $node->guests, 'no guests');
290    
291    
292    # test search without results
293    ok($cond = new Search::Estraier::Condition, 'new cond');
294    ok($cond->set_phrase('this_is_phrase_which_does_not_exits'), 'cond set_phrase');
295    
296    ok($nres = $node->search( $cond, 0 ), 'search');
297    
298    # now, test links
299    my $test2_label = "$test2_node label";
300    my $link_url = "$estmaster_uri/node/$test2_node";
301    ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");
302    ok(my $links = $node->links, 'links');
303    cmp_ok($#{$links}, '==', 0, 'one link');
304    like($links->[0], qr/^$link_url/, 'link correct');
305    ok($node->set_link("$estmaster_uri/node/$test2_node", $test2_label, 0), "set_link $test2_node ($test2_label) delete");
306    
307    ok($msg = $node->master(
308            action => 'nodeclr',
309            name => $node->name,
310    ), "nodeclr " . $node->name . ": $msg");
311    
312    cmp_ok($node->doc_num, '==', 0, 'no documents');
313    
314    # cleanup test nodes
315    foreach my $node_name ( $test1_node , $test2_node ) {
316            ok($msg = $node->master(
317                    action => 'nodedel',
318                    name => $node_name,
319            ), "nodedel $node_name: $msg");
320    }
321    
322    # test create
323    my $node_name = '_test_create_' . $$;
324    my $node_label = "test $$ label";
325    
326    ok($node = new Search::Estraier::Node(
327            url => "$estmaster_uri/node/$node_name",
328            create => 1,
329            label => $node_label,
330            croak_on_error => 1
331    ), "new create+croak");
332    
333    cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
334    cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
335    
336    ok($node = new Search::Estraier::Node(
337            url => "$estmaster_uri/node/$node_name",
338            create => 1,
339            label => $node_label,
340            croak_on_error => 0
341    ), "new create existing");
342    
343    ok($node = new Search::Estraier::Node(
344            url => "$estmaster_uri/node/$node_name",
345            create => 1,
346            label => $node_label,
347            croak_on_error => 1
348    ), "new create+croak existing");
349    
350    # cleanup
351    ok($msg = $node->master(
352            action => 'nodedel',
353            name => $node_name,
354    ), "nodedel $node_name: $msg");
355    
356    # and again, this time without node
357    ok($node = new Search::Estraier::Node(
358            url => "$estmaster_uri/node/$node_name",
359            create => 1,
360            label => $node_label,
361            croak_on_error => 0
362    ), "new create non-existing");
363    
364    cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
365    cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
366    
367    # cleanup
368    ok($msg = $node->master(
369            action => 'nodedel',
370            name => $node_name,
371    ), "nodedel $node_name: $msg");
372    
373    ok($msg = $node->master( action => 'sync' ), "sync: $msg");
374    
375    } # SKIP
376    
377    diag "over";

Legend:
Removed from v.51  
changed lines
  Added in v.167

  ViewVC Help
Powered by ViewVC 1.1.26