/[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

Annotation of /trunk/t/5_Node.t

Parent Directory Parent Directory | Revision Log Revision Log


Revision 150 - (hide annotations)
Mon May 15 22:26:08 2006 UTC (17 years, 11 months ago) by dpavlin
File MIME type: application/x-troff
File size: 9950 byte(s)
call _set_info to refresh data about node after calling out_doc*
1 dpavlin 28 #!/usr/bin/perl -w
2    
3     use strict;
4     use blib;
5    
6 dpavlin 150 use Test::More tests => 252;
7 dpavlin 28 use Test::Exception;
8     use Data::Dumper;
9    
10     BEGIN { use_ok('Search::Estraier') };
11    
12 dpavlin 148 my $debug = shift @ARGV;
13 dpavlin 40
14 dpavlin 35 # name of node for test
15 dpavlin 137 my $test1_node = '_test1_' . $$;
16     my $test2_node = '_test2_' . $$;
17 dpavlin 35
18 dpavlin 57 ok(my $node = new Search::Estraier::Node( debug => $debug ), 'new');
19 dpavlin 28 isa_ok($node, 'Search::Estraier::Node');
20    
21 dpavlin 78 ok($node->set_url("http://localhost:1978/node/$test1_node"), "set_url $test1_node");
22 dpavlin 29
23 dpavlin 38 ok($node->set_proxy('', 8080), 'set_proxy');
24 dpavlin 30 throws_ok {$node->set_proxy('proxy.example.com', 'foo') } qr/port/, 'set_proxy port NaN';
25    
26     ok($node->set_timeout(42), 'set_timeout');
27     throws_ok {$node->set_timeout('foo') } qr/timeout/, 'set_timeout NaN';
28 dpavlin 31
29 dpavlin 39 ok($node->set_auth('admin','admin'), 'set_auth');
30 dpavlin 32
31     cmp_ok($node->status, '==', -1, 'status');
32 dpavlin 35
33 dpavlin 134 # test master functionality
34    
35 dpavlin 137 #diag "not testing shutdown\n";
36 dpavlin 134
37 dpavlin 137 my $msg;
38 dpavlin 134
39 dpavlin 137 #diag "not testing backup\n";
40    
41 dpavlin 135 ok(my @users = $node->master( action => 'userlist' ), 'userlist');
42    
43 dpavlin 137 #diag "users: ", Dumper( \@users );
44     diag "found ", $#users + 1, " users";
45 dpavlin 135
46 dpavlin 137 my $user = {
47     name => '_test_' . $$,
48     flags => 'b',
49     fname => 'Search::Estraier',
50     misc => 'test user',
51     };
52 dpavlin 73
53 dpavlin 137 ok($msg = $node->master(
54     action => 'useradd',
55     %{ $user },
56     passwd => 'test1234',
57     ), "useradd: $msg");
58 dpavlin 73
59 dpavlin 137 ok(my @users2 = $node->master( action => 'userlist' ), 'userlist');
60     cmp_ok($#users2, '==', $#users + 1, 'added user');
61 dpavlin 38
62 dpavlin 137 while (my $row = shift @users2) {
63     next unless ($row->{name} eq $user);
64     map {
65     cmp_ok($user->{$_}, 'eq', $row->{$_}, "$_");
66     } keys %{ $user };
67 dpavlin 37 }
68 dpavlin 35
69 dpavlin 137 ok($msg = $node->master(
70     action => 'userdel',
71     name => $user->{name},
72     ), "userdel: $msg");
73    
74     ok(@users2 = $node->master( action => 'userlist' ), 'userlist');
75     cmp_ok($#users2, '==', $#users, 'removed user');
76    
77     ok(my @nodes = $node->master( action => 'nodelist' ), 'nodelist' );
78     #diag "nodelist: ", Dumper( \@nodes );
79     diag "found ", $#nodes + 1, " nodes";
80    
81     if ($#nodes > 42) {
82     diag <<'_END_OF_WARNING_';
83    
84     This tests create three nodes in your Hyper Estraier.
85    
86 dpavlin 138 Since you have more than 43 modes, and Hyper Estraier needs more than
87     1024 file descriptors for more than 46 nodes, expect tests to fail.
88 dpavlin 137
89 dpavlin 138 If tests do fail, you can try to add
90    
91     ulimit -n 2048
92    
93     before staring estmaster, which will increase number of available nodes
94     to 96 before estmaster runs out of file descriptors.
95    
96 dpavlin 137 _END_OF_WARNING_
97     }
98    
99     my $temp_node = "_test_temp_$$";
100    
101     foreach my $node_name ( $test1_node , $test2_node, $temp_node ) {
102     ok($msg = $node->master(
103     action => 'nodeadd',
104     name => $node_name,
105     label => "$node_name label",
106     ), "nodeadd $node_name: $msg");
107     }
108    
109     ok($msg = $node->master(
110     action => 'nodeclr',
111     name => $temp_node,
112     ), "nodeclr $temp_node: $msg");
113    
114     ok($msg = $node->master(
115     action => 'nodedel',
116     name => $temp_node,
117     ), "nodedel $temp_node: $msg");
118    
119     #diag "not testing logrtt\n";
120    
121     # test document creation
122    
123 dpavlin 35 my $draft = <<'_END_OF_DRAFT_';
124 dpavlin 148 @uri=data0
125 dpavlin 35 @title=Material Girl
126    
127     Living in a material world
128     And I am a material girl
129     You know that we are living in a material world
130     And I am a material girl
131     _END_OF_DRAFT_
132    
133 dpavlin 40 #diag "draft:\n$draft";
134     ok(my $doc = new Search::Estraier::Document($draft), 'new doc from draft');
135    
136 dpavlin 46 ok( $node->put_doc($doc), "put_doc data001");
137    
138 dpavlin 148 for ( 1 .. 17 ) {
139 dpavlin 41 $doc->add_attr('@uri', 'test' . $_);
140     ok( $node->put_doc($doc), "put_doc test$_");
141     #diag $doc->dump_draft;
142     }
143    
144 dpavlin 148 ok(! $node->uri_to_id( 'does-not-exists' ), "non-existant uri_to_id");
145    
146 dpavlin 50 my $id;
147 dpavlin 148 ok($id = $node->uri_to_id( 'data0' ), "uri_to_id(data0)");
148 dpavlin 41
149 dpavlin 148 ok($doc = $node->get_doc( $id ), "get_doc($id) for edit");
150     $doc->add_attr('foo', 'bar');
151     #diag Dumper($doc);
152     ok( $node->edit_doc( $doc ), 'edit_doc');
153 dpavlin 100
154 dpavlin 150 my $doc_num;
155     ok( $doc_num = $node->doc_num, "node->doc_num $doc_num");
156    
157 dpavlin 148 ok( $node->out_doc( $id ), "out_doc($id)");
158    
159 dpavlin 150 cmp_ok( $node->doc_num, '==', --$doc_num, "node->doc_num " . $doc_num);
160    
161 dpavlin 148 ok( ! $node->edit_doc( $doc ), "edit_doc of removed doc");
162    
163     my $delete_num = 5;
164    
165     for ( 1 .. $delete_num ) {
166 dpavlin 43 ok( $node->out_doc_by_uri( 'test' . $_ ), "out_doc_by_uri test$_");
167 dpavlin 150 cmp_ok( $node->doc_num, '==', $doc_num - $_, "node->doc_num " . ($doc_num - $_));
168 dpavlin 41 }
169 dpavlin 42
170 dpavlin 148 ok($msg = $node->master( action => 'sync' ), "sync: $msg");
171 dpavlin 43
172 dpavlin 148 my $doc_num2 = $doc_num - $delete_num;
173     cmp_ok($node->doc_num, '==', $doc_num2, "node->doc_num $doc_num2");
174 dpavlin 50
175 dpavlin 148 my $max = int($doc_num2 / 2);
176 dpavlin 50
177 dpavlin 51 ok(my $cond = new Search::Estraier::Condition, 'new cond');
178     ok($cond->set_phrase('girl'), 'cond set_phrase');
179 dpavlin 148 ok($cond->set_max($max), "cond set_max($max)");
180 dpavlin 51 ok($cond->set_order('@uri ASCD'), 'cond set_order');
181     ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');
182    
183 dpavlin 53 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');
184 dpavlin 51
185 dpavlin 91 ok( my $nres = $node->search( $cond, 0 ), 'search');
186 dpavlin 51
187 dpavlin 91 isa_ok( $nres, 'Search::Estraier::NodeResult' );
188 dpavlin 51
189 dpavlin 148 cmp_ok($nres->doc_num, '==', $max, "nres->doc_num $max");
190 dpavlin 53
191 dpavlin 148 cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
192 dpavlin 100
193 dpavlin 148 # upper limit is $nres->hits and not $nres->doc_num because we
194     # check all documents, not just results!
195 dpavlin 115 for my $i ( 0 .. ($nres->hits - 1) ) {
196 dpavlin 148 my $num = $i + $delete_num + 1;
197     my $uri = 'test' . $num;
198 dpavlin 115
199     if ($i < $nres->doc_num) {
200 dpavlin 148 ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
201 dpavlin 115
202     cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
203 dpavlin 148 cmp_ok( $node->uri_to_id( $uri ), '==', $num + 1, "uri_to_id($uri)");
204    
205 dpavlin 115 ok( my $k = $rdoc->keywords( $id ), "rdoc keywords");
206 dpavlin 148 } else {
207     ok( ! $nres->get_doc( $i ), "nres->get_doc doesn't exist");
208 dpavlin 115 }
209    
210 dpavlin 148 ok( my $id = $node->uri_to_id( $uri ), "uri_to_id($uri)");
211     ok( $node->get_doc( $id ), "get_doc($id)");
212     ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri($uri)");
213 dpavlin 49 cmp_ok( $node->get_doc_attr( $id, '@uri' ), 'eq', $uri, "get_doc_attr $id");
214     cmp_ok( $node->get_doc_attr_by_uri( $uri, '@uri' ), 'eq', $uri, "get_doc_attr $id");
215 dpavlin 115 ok( my $k1 = $node->etch_doc( $id ), "etch_doc_by_uri $uri");
216 dpavlin 49 ok( my $k2 = $node->etch_doc_by_uri( $uri ), "etch_doc_by_uri $uri");
217     #diag Dumper($k, $k2);
218 dpavlin 115 ok( eq_hash( $k1, $k2 ), "keywords");
219 dpavlin 43 }
220 dpavlin 48
221 dpavlin 91 ok(my $hints = $nres->hints, 'hints');
222     diag Dumper($hints);
223    
224 dpavlin 72 ok($node->_set_info, "refresh _set_info");
225    
226 dpavlin 48 my $v;
227     ok($v = $node->name, "name: $v");
228     ok($v = $node->label, "label: $v");
229     ok($v = $node->doc_num, "doc_num: $v");
230 dpavlin 110 ok(defined($v = $node->word_num), "word_num: $v");
231 dpavlin 48 ok($v = $node->size, "size: $v");
232    
233 dpavlin 55 ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");
234    
235 dpavlin 148 # test skip
236     my $skip = int($max / 2) || die "skip is zero, can't test";
237     ok($cond->set_skip( $skip ), "cond set_skip($skip)");
238    
239     ok( $nres = $node->search( $cond, 0 ), 'search');
240     isa_ok( $nres, 'Search::Estraier::NodeResult' );
241     cmp_ok($nres->doc_num, '==', $max, "nres->doc_num " . ($max - $skip));
242     cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
243    
244     for my $i ( 0 .. ($nres->doc_num - 1) ) {
245     my $uri = 'test' . ($i + $delete_num + 1);
246     ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
247     if ($rdoc) {
248     cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
249     } else {
250     fail('no rdoc');
251     }
252     }
253    
254    
255 dpavlin 56 # user doesn't exist
256     ok(! $node->set_user('foobar', 1), 'set_user');
257    
258 dpavlin 94 ok(my $node2 = new Search::Estraier::Node( "http://localhost:1978/node/$test2_node" ), "new $test2_node");
259     ok($node2->set_auth('admin','admin'), "set_auth $test2_node");
260 dpavlin 57
261 dpavlin 78 # croak_on_error
262    
263 dpavlin 94 ok($node = new Search::Estraier::Node( url => "http://localhost:1978/non-existant", croak_on_error => 1 ), "new non-existant");
264     throws_ok { $node->name } qr/404/, 'croak on error';
265 dpavlin 78
266 dpavlin 103 # croak_on_error
267 dpavlin 106 ok($node = new Search::Estraier::Node( url => "http://localhost:1978/node/$test1_node", croak_on_error => 1 ), "new $test1_node");
268 dpavlin 94
269 dpavlin 103 ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');
270    
271 dpavlin 137
272 dpavlin 107 # test users
273     ok(! $node->admins, 'no admins');
274     ok(! $node->guests, 'no guests');
275    
276 dpavlin 137
277 dpavlin 129 # test search without results
278     ok($cond = new Search::Estraier::Condition, 'new cond');
279     ok($cond->set_phrase('this_is_phrase_which_does_not_exits'), 'cond set_phrase');
280    
281     ok($nres = $node->search( $cond, 0 ), 'search');
282    
283 dpavlin 137 # now, test links
284     my $test2_label = "$test2_node label";
285     my $link_url = "http://localhost:1978/node/$test2_node";
286     ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");
287     ok(my $links = $node->links, 'links');
288     cmp_ok($#{$links}, '==', 0, 'one link');
289     like($links->[0], qr/^$link_url/, 'link correct');
290     ok($node->set_link("http://localhost:1978/node/$test2_node", $test2_label, 0), "set_link $test2_node ($test2_label) delete");
291 dpavlin 72
292 dpavlin 137 # cleanup test nodes
293     foreach my $node_name ( $test1_node , $test2_node ) {
294     ok($msg = $node->master(
295     action => 'nodedel',
296     name => $node_name,
297     ), "nodedel $node_name: $msg");
298     }
299 dpavlin 107
300 dpavlin 139 # test create
301     my $node_name = '_test_create_' . $$;
302     my $node_label = "test $$ label";
303    
304     ok($node = new Search::Estraier::Node(
305     url => "http://localhost:1978/node/$node_name",
306     create => 1,
307     label => $node_label,
308     croak_on_error => 1
309 dpavlin 140 ), "new create+croak");
310 dpavlin 139
311     cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
312     cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
313    
314 dpavlin 140 ok($node = new Search::Estraier::Node(
315     url => "http://localhost:1978/node/$node_name",
316     create => 1,
317     label => $node_label,
318     croak_on_error => 0
319     ), "new create existing");
320    
321     ok($node = new Search::Estraier::Node(
322     url => "http://localhost:1978/node/$node_name",
323     create => 1,
324     label => $node_label,
325     croak_on_error => 1
326     ), "new create+croak existing");
327    
328     # cleanup
329 dpavlin 139 ok($msg = $node->master(
330     action => 'nodedel',
331     name => $node_name,
332     ), "nodedel $node_name: $msg");
333    
334 dpavlin 140 # and again, this time without node
335     ok($node = new Search::Estraier::Node(
336     url => "http://localhost:1978/node/$node_name",
337     create => 1,
338     label => $node_label,
339     croak_on_error => 0
340     ), "new create non-existing");
341    
342     cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
343     cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
344    
345     # cleanup
346     ok($msg = $node->master(
347     action => 'nodedel',
348     name => $node_name,
349     ), "nodedel $node_name: $msg");
350    
351 dpavlin 55 diag "over";

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26