/[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 43 by dpavlin, Fri Jan 6 00:04:28 2006 UTC revision 137 by dpavlin, Tue May 9 14:05:57 2006 UTC
# Line 3  Line 3 
3  use strict;  use strict;
4  use blib;  use blib;
5    
6  use Test::More tests => 40;  use Test::More tests => 132;
7  use Test::Exception;  use Test::Exception;
8  use Data::Dumper;  use Data::Dumper;
9    
# Line 12  BEGIN { use_ok('Search::Estraier') }; Line 12  BEGIN { use_ok('Search::Estraier') };
12  my $debug = 0;  my $debug = 0;
13    
14  # name of node for test  # name of node for test
15  my $test_node = 'Search-Estraier';  my $test1_node = '_test1_' . $$;
16    my $test2_node = '_test2_' . $$;
17    
18  ok(my $node = new Search::Estraier::Node($debug), 'new');  ok(my $node = new Search::Estraier::Node( debug => $debug ), 'new');
19  isa_ok($node, 'Search::Estraier::Node');  isa_ok($node, 'Search::Estraier::Node');
20    
21  ok($node->set_url('http://localhost:1978/node/searchestraier'), 'set_url');  ok($node->set_url("http://localhost:1978/node/$test1_node"), "set_url $test1_node");
22    
23  ok($node->set_proxy('', 8080), 'set_proxy');  ok($node->set_proxy('', 8080), 'set_proxy');
24  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 29  ok($node->set_auth('admin','admin'), 'se Line 30  ok($node->set_auth('admin','admin'), 'se
30    
31  cmp_ok($node->status, '==', -1, 'status');  cmp_ok($node->status, '==', -1, 'status');
32    
33  my @res = ( -1, 200 );  # test master functionality
34    
35  my $nodelist;  #diag "not testing shutdown\n";
36  foreach my $url (qw{?action=nodelist http://localhost:1978/master?action=nodelist}) {  
37          cmp_ok(  my $msg;
38                  $node->shuttle_url( $url, 'text/plain', undef, \$nodelist)  
39          ,'==', shift @res, 'nodelist');  ok($msg = $node->master( action => 'sync' ), "sync: $msg");
40    
41    #diag "not testing backup\n";
42    
43    ok(my @users = $node->master( action => 'userlist' ), 'userlist');
44    
45    #diag "users: ", Dumper( \@users );
46    diag "found ", $#users + 1, " users";
47    
48    my $user = {
49            name => '_test_' . $$,
50            flags => 'b',
51            fname => 'Search::Estraier',
52            misc => 'test user',
53    };
54    
55    ok($msg = $node->master(
56            action => 'useradd',
57            %{ $user },
58            passwd => 'test1234',
59    ), "useradd: $msg");
60    
61    ok(my @users2 = $node->master( action => 'userlist' ), 'userlist');
62    cmp_ok($#users2, '==', $#users + 1, 'added user');
63    
64    while (my $row = shift @users2) {
65            next unless ($row->{name} eq $user);
66            map {
67                    cmp_ok($user->{$_}, 'eq', $row->{$_}, "$_");
68            } keys %{ $user };
69    }
70    
71    ok($msg = $node->master(
72            action => 'userdel',
73            name => $user->{name},
74    ), "userdel: $msg");
75    
76    ok(@users2 = $node->master( action => 'userlist' ), 'userlist');
77    cmp_ok($#users2, '==', $#users, 'removed user');
78    
79    ok(my @nodes = $node->master( action => 'nodelist' ), 'nodelist' );
80    #diag "nodelist: ", Dumper( \@nodes );
81    diag "found ", $#nodes + 1, " nodes";
82    
83    if ($#nodes > 42) {
84            diag <<'_END_OF_WARNING_';
85    
86    This tests create three nodes in your Hyper Estraier.
87    
88    Since you have more than 43 modes, and Hyper Estraier seems to be limited to
89    maximum of 46 nodes on each estmaster process, expect tests to fail.
90    
91    _END_OF_WARNING_
92  }  }
93    
94    my $temp_node = "_test_temp_$$";
95    
96    foreach my $node_name ( $test1_node , $test2_node, $temp_node ) {
97            ok($msg = $node->master(
98                    action => 'nodeadd',
99                    name => $node_name,
100                    label => "$node_name label",
101            ), "nodeadd $node_name: $msg");
102    }
103    
104    ok($msg = $node->master(
105            action => 'nodeclr',
106            name => $temp_node,
107    ), "nodeclr $temp_node: $msg");
108    
109    ok($msg = $node->master(
110            action => 'nodedel',
111            name => $temp_node,
112    ), "nodedel $temp_node: $msg");
113    
114    #diag "not testing logrtt\n";
115    
116    # test document creation
117    
118  my $draft = <<'_END_OF_DRAFT_';  my $draft = <<'_END_OF_DRAFT_';
119  @uri=data001  @uri=data001
120  @title=Material Girl  @title=Material Girl
# Line 51  _END_OF_DRAFT_ Line 128  _END_OF_DRAFT_
128  #diag "draft:\n$draft";  #diag "draft:\n$draft";
129  ok(my $doc = new Search::Estraier::Document($draft), 'new doc from draft');  ok(my $doc = new Search::Estraier::Document($draft), 'new doc from draft');
130    
131    ok( $node->put_doc($doc), "put_doc data001");
132    
133  for ( 1 .. 10 ) {  for ( 1 .. 10 ) {
134          $doc->add_attr('@uri', 'test' . $_);          $doc->add_attr('@uri', 'test' . $_);
135          ok( $node->put_doc($doc), "put_doc test$_");          ok( $node->put_doc($doc), "put_doc test$_");
136          #diag $doc->dump_draft;          #diag $doc->dump_draft;
137  }  }
138    
139  ok( $node->out_doc( 0 ), 'out_doc');  my $id;
140    ok($id = $node->uri_to_id( 'data001' ), "uri_to_id = $id");
141    
142    my $data_max = 5;
143    
144  for ( 1 .. 5 ) {  for ( 1 .. $data_max ) {
145          ok( $node->out_doc_by_uri( 'test' . $_ ), "out_doc_by_uri test$_");          ok( $node->out_doc_by_uri( 'test' . $_ ), "out_doc_by_uri test$_");
146  }  }
147    
148  $doc->add_attr('@uri', 'data001');  ok($doc = $node->get_doc( $id ), 'get_doc for edit');
149  $doc->add_attr('foo', 'bar');  $doc->add_attr('foo', 'bar');
150    #diag Dumper($doc);
151  ok( $node->edit_doc( $doc ), 'edit_doc');  ok( $node->edit_doc( $doc ), 'edit_doc');
152    
153  for ( 6 .. 10 ) {  ok( $node->out_doc( $id ), "out_doc $id");
154          ok( $node->get_doc( $_ ), "get_doc $_");  
155          ok( $node->get_doc_by_uri( 'test' . $_ ), "get_doc_by_uri test$_");  ok( ! $node->edit_doc( $doc ), "edit removed");
156    
157    my $max = 3;
158    
159    ok(my $cond = new Search::Estraier::Condition, 'new cond');
160    ok($cond->set_phrase('girl'), 'cond set_phrase');
161    ok($cond->set_max($max), "cond set_max $max");
162    ok($cond->set_order('@uri ASCD'), 'cond set_order');
163    ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');
164    
165    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');
166    
167    ok( my $nres = $node->search( $cond, 0 ), 'search');
168    
169    isa_ok( $nres, 'Search::Estraier::NodeResult' );
170    
171    cmp_ok($nres->doc_num, '==', $max, "doc_num = $max");
172    
173    cmp_ok($nres->hits, '==', $data_max, "hits");
174    
175    for my $i ( 0 .. ($nres->hits - 1) ) {
176            my $uri = 'test' . ($i + $data_max + 1);
177    
178            if ($i < $nres->doc_num) {
179                    ok( my $rdoc = $nres->get_doc( $i ), "get_doc $i");
180    
181                    cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
182                    ok( my $k = $rdoc->keywords( $id ), "rdoc keywords");
183            }
184    
185            ok( my $id = $node->uri_to_id( $uri ), "uri_to_id($uri) = $id");
186            ok( $node->get_doc( $id ), "get_doc $id");
187            ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri $uri");
188            cmp_ok( $node->get_doc_attr( $id, '@uri' ), 'eq', $uri, "get_doc_attr $id");
189            cmp_ok( $node->get_doc_attr_by_uri( $uri, '@uri' ), 'eq', $uri, "get_doc_attr $id");
190            ok( my $k1 = $node->etch_doc( $id ), "etch_doc_by_uri $uri");
191            ok( my $k2 = $node->etch_doc_by_uri( $uri ), "etch_doc_by_uri $uri");
192            #diag Dumper($k, $k2);
193            ok( eq_hash( $k1, $k2 ), "keywords");
194    }
195    
196    ok(my $hints = $nres->hints, 'hints');
197    diag Dumper($hints);
198    
199    ok($node->_set_info, "refresh _set_info");
200    
201    my $v;
202    ok($v = $node->name, "name: $v");
203    ok($v = $node->label, "label: $v");
204    ok($v = $node->doc_num, "doc_num: $v");
205    ok(defined($v = $node->word_num), "word_num: $v");
206    ok($v = $node->size, "size: $v");
207    
208    ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");
209    
210    # user doesn't exist
211    ok(! $node->set_user('foobar', 1), 'set_user');
212    
213    ok(my $node2 = new Search::Estraier::Node( "http://localhost:1978/node/$test2_node" ), "new $test2_node");
214    ok($node2->set_auth('admin','admin'), "set_auth $test2_node");
215    
216    # croak_on_error
217    
218    ok($node = new Search::Estraier::Node( url => "http://localhost:1978/non-existant", croak_on_error => 1 ), "new non-existant");
219    throws_ok { $node->name } qr/404/, 'croak on error';
220    
221    # croak_on_error
222    ok($node = new Search::Estraier::Node( url => "http://localhost:1978/node/$test1_node", croak_on_error => 1 ), "new $test1_node");
223    
224    ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');
225    
226    
227    # test users
228    ok(! $node->admins, 'no admins');
229    ok(! $node->guests, 'no guests');
230    
231    
232    # test search without results
233    ok($cond = new Search::Estraier::Condition, 'new cond');
234    ok($cond->set_phrase('this_is_phrase_which_does_not_exits'), 'cond set_phrase');
235    
236    ok($nres = $node->search( $cond, 0 ), 'search');
237    
238    # now, test links
239    my $test2_label = "$test2_node label";
240    my $link_url = "http://localhost:1978/node/$test2_node";
241    ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");
242    ok(my $links = $node->links, 'links');
243    cmp_ok($#{$links}, '==', 0, 'one link');
244    like($links->[0], qr/^$link_url/, 'link correct');
245    ok($node->set_link("http://localhost:1978/node/$test2_node", $test2_label, 0), "set_link $test2_node ($test2_label) delete");
246    
247    # cleanup test nodes
248    foreach my $node_name ( $test1_node , $test2_node ) {
249            ok($msg = $node->master(
250                    action => 'nodedel',
251                    name => $node_name,
252            ), "nodedel $node_name: $msg");
253  }  }
254    
255    diag "over";

Legend:
Removed from v.43  
changed lines
  Added in v.137

  ViewVC Help
Powered by ViewVC 1.1.26