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

Contents of /trunk/t/5_Node.t

Parent Directory Parent Directory | Revision Log Revision Log


Revision 150 - (show 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 #!/usr/bin/perl -w
2
3 use strict;
4 use blib;
5
6 use Test::More tests => 252;
7 use Test::Exception;
8 use Data::Dumper;
9
10 BEGIN { use_ok('Search::Estraier') };
11
12 my $debug = shift @ARGV;
13
14 # name of node for test
15 my $test1_node = '_test1_' . $$;
16 my $test2_node = '_test2_' . $$;
17
18 ok(my $node = new Search::Estraier::Node( debug => $debug ), 'new');
19 isa_ok($node, 'Search::Estraier::Node');
20
21 ok($node->set_url("http://localhost:1978/node/$test1_node"), "set_url $test1_node");
22
23 ok($node->set_proxy('', 8080), 'set_proxy');
24 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
29 ok($node->set_auth('admin','admin'), 'set_auth');
30
31 cmp_ok($node->status, '==', -1, 'status');
32
33 # test master functionality
34
35 #diag "not testing shutdown\n";
36
37 my $msg;
38
39 #diag "not testing backup\n";
40
41 ok(my @users = $node->master( action => 'userlist' ), 'userlist');
42
43 #diag "users: ", Dumper( \@users );
44 diag "found ", $#users + 1, " users";
45
46 my $user = {
47 name => '_test_' . $$,
48 flags => 'b',
49 fname => 'Search::Estraier',
50 misc => 'test user',
51 };
52
53 ok($msg = $node->master(
54 action => 'useradd',
55 %{ $user },
56 passwd => 'test1234',
57 ), "useradd: $msg");
58
59 ok(my @users2 = $node->master( action => 'userlist' ), 'userlist');
60 cmp_ok($#users2, '==', $#users + 1, 'added user');
61
62 while (my $row = shift @users2) {
63 next unless ($row->{name} eq $user);
64 map {
65 cmp_ok($user->{$_}, 'eq', $row->{$_}, "$_");
66 } keys %{ $user };
67 }
68
69 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 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
89 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 _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 my $draft = <<'_END_OF_DRAFT_';
124 @uri=data0
125 @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 #diag "draft:\n$draft";
134 ok(my $doc = new Search::Estraier::Document($draft), 'new doc from draft');
135
136 ok( $node->put_doc($doc), "put_doc data001");
137
138 for ( 1 .. 17 ) {
139 $doc->add_attr('@uri', 'test' . $_);
140 ok( $node->put_doc($doc), "put_doc test$_");
141 #diag $doc->dump_draft;
142 }
143
144 ok(! $node->uri_to_id( 'does-not-exists' ), "non-existant uri_to_id");
145
146 my $id;
147 ok($id = $node->uri_to_id( 'data0' ), "uri_to_id(data0)");
148
149 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
154 my $doc_num;
155 ok( $doc_num = $node->doc_num, "node->doc_num $doc_num");
156
157 ok( $node->out_doc( $id ), "out_doc($id)");
158
159 cmp_ok( $node->doc_num, '==', --$doc_num, "node->doc_num " . $doc_num);
160
161 ok( ! $node->edit_doc( $doc ), "edit_doc of removed doc");
162
163 my $delete_num = 5;
164
165 for ( 1 .. $delete_num ) {
166 ok( $node->out_doc_by_uri( 'test' . $_ ), "out_doc_by_uri test$_");
167 cmp_ok( $node->doc_num, '==', $doc_num - $_, "node->doc_num " . ($doc_num - $_));
168 }
169
170 ok($msg = $node->master( action => 'sync' ), "sync: $msg");
171
172 my $doc_num2 = $doc_num - $delete_num;
173 cmp_ok($node->doc_num, '==', $doc_num2, "node->doc_num $doc_num2");
174
175 my $max = int($doc_num2 / 2);
176
177 ok(my $cond = new Search::Estraier::Condition, 'new cond');
178 ok($cond->set_phrase('girl'), 'cond set_phrase');
179 ok($cond->set_max($max), "cond set_max($max)");
180 ok($cond->set_order('@uri ASCD'), 'cond set_order');
181 ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');
182
183 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
185 ok( my $nres = $node->search( $cond, 0 ), 'search');
186
187 isa_ok( $nres, 'Search::Estraier::NodeResult' );
188
189 cmp_ok($nres->doc_num, '==', $max, "nres->doc_num $max");
190
191 cmp_ok($nres->hits, '==', $doc_num2, "nres->hits $doc_num2");
192
193 # upper limit is $nres->hits and not $nres->doc_num because we
194 # check all documents, not just results!
195 for my $i ( 0 .. ($nres->hits - 1) ) {
196 my $num = $i + $delete_num + 1;
197 my $uri = 'test' . $num;
198
199 if ($i < $nres->doc_num) {
200 ok( my $rdoc = $nres->get_doc( $i ), "nres->get_doc $i");
201
202 cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
203 cmp_ok( $node->uri_to_id( $uri ), '==', $num + 1, "uri_to_id($uri)");
204
205 ok( my $k = $rdoc->keywords( $id ), "rdoc keywords");
206 } else {
207 ok( ! $nres->get_doc( $i ), "nres->get_doc doesn't exist");
208 }
209
210 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 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 ok( my $k1 = $node->etch_doc( $id ), "etch_doc_by_uri $uri");
216 ok( my $k2 = $node->etch_doc_by_uri( $uri ), "etch_doc_by_uri $uri");
217 #diag Dumper($k, $k2);
218 ok( eq_hash( $k1, $k2 ), "keywords");
219 }
220
221 ok(my $hints = $nres->hints, 'hints');
222 diag Dumper($hints);
223
224 ok($node->_set_info, "refresh _set_info");
225
226 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 ok(defined($v = $node->word_num), "word_num: $v");
231 ok($v = $node->size, "size: $v");
232
233 ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");
234
235 # 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 # user doesn't exist
256 ok(! $node->set_user('foobar', 1), 'set_user');
257
258 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
261 # croak_on_error
262
263 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
266 # croak_on_error
267 ok($node = new Search::Estraier::Node( url => "http://localhost:1978/node/$test1_node", croak_on_error => 1 ), "new $test1_node");
268
269 ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');
270
271
272 # test users
273 ok(! $node->admins, 'no admins');
274 ok(! $node->guests, 'no guests');
275
276
277 # 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 # 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
292 # 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
300 # 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 ), "new create+croak");
310
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 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 ok($msg = $node->master(
330 action => 'nodedel',
331 name => $node_name,
332 ), "nodedel $node_name: $msg");
333
334 # 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 diag "over";

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26