/[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 50 by dpavlin, Fri Jan 6 12:48:14 2006 UTC revision 173 by dpavlin, Sun Aug 6 18:15:11 2006 UTC
# Line 3  Line 3 
3  use strict;  use strict;
4  use blib;  use blib;
5    
6  use Test::More tests => 79;  my $tests = 280;
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    ok(! $node->uri_to_id( 'does-not-exists' ), "non-existant uri_to_id");
156    
157  my $id;  my $id;
158  ok($id = $node->uri_to_id( 'data001' ), "uri_to_id = $id");  ok($id = $node->uri_to_id( 'data0' ), "uri_to_id(data0)");
159    
160  for ( 1 .. 5 ) {  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    cmp_ok( $node->doc_num, '==', --$doc_num, "node->doc_num " . $doc_num);
173    
174    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');
192    ok($cond->set_phrase('girl'), 'cond set_phrase');
193    ok($cond->set_max($max), "cond set_max($max)");
194    ok($cond->set_order('@uri ASCD'), 'cond set_order');
195    ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');
196    ok($cond->set_mask(qw/1 2/), 'cond set_mask');
197    
198    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&mask=6', 'cond_to_query');
199    
200    ok( my $nres = $node->search( $cond, 0 ), 'search');
201    
202    isa_ok( $nres, 'Search::Estraier::NodeResult' );
203    
204    cmp_ok($nres->doc_num, '==', $max, "nres->doc_num $max");
205    
206    cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
207    
208  ok( ! $node->edit_doc( $doc ), "edit removed");  # upper limit is $nres->hits and not $nres->doc_num because we
209    # check all documents, not just results!
210    for my $i ( 0 .. ($nres->hits - 1) ) {
211            my $num = $i + $delete_num + 1;
212            my $uri = 'test' . $num;
213    
214  for ( 6 .. 10 ) {          if ($i < $nres->doc_num) {
215          my $uri = 'test' . $_;                  ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
216          ok( my $id = $node->uri_to_id( $uri ), "uri_to_id $uri");  
217          ok( $node->get_doc( $id ), "get_doc $id");                  cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
218          ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri $uri");                  cmp_ok( $node->uri_to_id( $uri ), '==', $num + 1, "uri_to_id($uri)");
219    
220                    ok( my $k = $rdoc->keywords( $id ), "rdoc keywords");
221            } else {
222                    ok( ! $nres->get_doc( $i ), "nres->get_doc doesn't exist");
223            }
224    
225            ok( my $id = $node->uri_to_id( $uri ), "uri_to_id($uri)");
226            ok( $node->get_doc( $id ), "get_doc($id)");
227            ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri($uri)");
228          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");
229          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");
230          ok( my $k = $node->etch_doc( $id ), "etch_doc_by_uri $uri");          ok( my $k1 = $node->etch_doc( $id ), "etch_doc_by_uri $uri");
231          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");
232          #diag Dumper($k, $k2);          #diag Dumper($k, $k2);
233          ok( eq_hash( $k, $k2 ), "keywords");          ok( eq_hash( $k1, $k2 ), "keywords");
234    }
235    
236    ok(my $hints = $nres->hints, 'hints');
237    diag Dumper($hints) if ($debug);
238    foreach my $h (qw/TIME DOCNUM VERSION NODE HIT WORDNUM/) {
239            ok(defined( $nres->hint($h) ), "have hint $h");
240  }  }
241    
242    ok($node->_set_info, "refresh _set_info");
243    
244  my $v;  my $v;
245  ok($v = $node->name, "name: $v");  ok($v = $node->name, "name: $v");
246  ok($v = $node->label, "label: $v");  ok($v = $node->label, "label: $v");
247  ok($v = $node->doc_num, "doc_num: $v");  ok($v = $node->doc_num, "doc_num: $v");
248  ok($v = $node->word_num, "word_num: $v");  ok(defined($v = $node->word_num), "word_num: $v");
249  ok($v = $node->size, "size: $v");  ok($v = $node->size, "size: $v");
250    
251    ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");
252    
253    # test skip
254    my $skip = int($max / 2) || die "skip is zero, can't test";
255    ok($cond->set_skip( $skip ), "cond set_skip($skip)");
256    cmp_ok($cond->skip, '==', $skip, "skip is $skip");
257    
258    like($node->cond_to_query( $cond ), qr/skip=$skip/, 'cond_to_query have skip');
259    
260    ok( $nres = $node->search( $cond, 0 ), 'search');
261    isa_ok( $nres, 'Search::Estraier::NodeResult' );
262    cmp_ok($nres->doc_num, '==', $max, "nres->doc_num " . ($max - $skip));
263    cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
264    
265    for my $i ( 0 .. ($nres->doc_num - 1) ) {
266            my $uri = 'test' . ($i + $delete_num + $skip + 1);
267            ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
268            if ($rdoc) {
269                    cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
270            } else {
271                    fail('no rdoc');
272            }
273    }
274    
275    
276    # user doesn't exist
277    ok($node->set_user('foobar', 1), 'set_user');
278    
279    ok(my $node2 = new Search::Estraier::Node( "$estmaster_uri/node/$test2_node" ), "new $test2_node");
280    ok($node2->set_auth('admin','admin'), "set_auth $test2_node");
281    
282    # croak_on_error
283    
284    ok($node = new Search::Estraier::Node( url => "$estmaster_uri/non-existant", croak_on_error => 1 ), "new non-existant");
285    throws_ok { $node->name } qr/404/, 'croak on error';
286    
287    # croak_on_error
288    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");
289    
290    ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');
291    
292    
293    # test users
294    ok($node->admins, 'have admins');
295    ok(! $node->guests, 'no guests');
296    
297    
298    # test search without results
299    ok($cond = new Search::Estraier::Condition, 'new cond');
300    ok($cond->set_phrase('this_is_phrase_which_does_not_exits'), 'cond set_phrase');
301    
302    ok($nres = $node->search( $cond, 0 ), 'search');
303    
304    # now, test links
305    my $test2_label = "$test2_node label";
306    my $link_url = "$estmaster_uri/node/$test2_node";
307    ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");
308    ok(my $links = $node->links, 'links');
309    cmp_ok($#{$links}, '==', 0, 'one link');
310    like($links->[0], qr/^$link_url/, 'link correct');
311    ok($node->set_link("$estmaster_uri/node/$test2_node", $test2_label, 0), "set_link $test2_node ($test2_label) delete");
312    
313    ok($msg = $node->master(
314            action => 'nodeclr',
315            name => $node->name,
316    ), "nodeclr " . $node->name . ": $msg");
317    
318    cmp_ok($node->doc_num, '==', 0, 'no documents');
319    
320    # cleanup test nodes
321    foreach my $node_name ( $test1_node , $test2_node ) {
322            ok($msg = $node->master(
323                    action => 'nodedel',
324                    name => $node_name,
325            ), "nodedel $node_name: $msg");
326    }
327    
328    # test create
329    my $node_name = '_test_create_' . $$;
330    my $node_label = "test $$ 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 => 1
337    ), "new create+croak");
338    
339    cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
340    cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
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 => 0
347    ), "new create existing");
348    
349    ok($node = new Search::Estraier::Node(
350            url => "$estmaster_uri/node/$node_name",
351            create => 1,
352            label => $node_label,
353            croak_on_error => 1
354    ), "new create+croak existing");
355    
356    # cleanup
357    ok($msg = $node->master(
358            action => 'nodedel',
359            name => $node_name,
360    ), "nodedel $node_name: $msg");
361    
362    # and again, this time without node
363    ok($node = new Search::Estraier::Node(
364            url => "$estmaster_uri/node/$node_name",
365            create => 1,
366            label => $node_label,
367            croak_on_error => 0
368    ), "new create non-existing");
369    
370    cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
371    cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
372    
373    # cleanup
374    ok($msg = $node->master(
375            action => 'nodedel',
376            name => $node_name,
377    ), "nodedel $node_name: $msg");
378    
379    ok($msg = $node->master( action => 'sync' ), "sync: $msg");
380    
381    } # SKIP
382    
383    diag "over";

Legend:
Removed from v.50  
changed lines
  Added in v.173

  ViewVC Help
Powered by ViewVC 1.1.26