/[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 138 - (hide annotations)
Wed May 10 13:34:17 2006 UTC (17 years, 10 months ago) by dpavlin
File MIME type: application/x-troff
File size: 7277 byte(s)
better explanation of 46 nodes limit (with just 1024 file descriptors) in
Hyper Estraier.
1 dpavlin 28 #!/usr/bin/perl -w
2    
3     use strict;
4     use blib;
5    
6 dpavlin 137 use Test::More tests => 132;
7 dpavlin 28 use Test::Exception;
8     use Data::Dumper;
9    
10     BEGIN { use_ok('Search::Estraier') };
11    
12 dpavlin 137 my $debug = 0;
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 ok($msg = $node->master( action => 'sync' ), "sync: $msg");
40 dpavlin 135
41 dpavlin 137 #diag "not testing backup\n";
42    
43 dpavlin 135 ok(my @users = $node->master( action => 'userlist' ), 'userlist');
44    
45 dpavlin 137 #diag "users: ", Dumper( \@users );
46     diag "found ", $#users + 1, " users";
47 dpavlin 135
48 dpavlin 137 my $user = {
49     name => '_test_' . $$,
50     flags => 'b',
51     fname => 'Search::Estraier',
52     misc => 'test user',
53     };
54 dpavlin 73
55 dpavlin 137 ok($msg = $node->master(
56     action => 'useradd',
57     %{ $user },
58     passwd => 'test1234',
59     ), "useradd: $msg");
60 dpavlin 73
61 dpavlin 137 ok(my @users2 = $node->master( action => 'userlist' ), 'userlist');
62     cmp_ok($#users2, '==', $#users + 1, 'added user');
63 dpavlin 38
64 dpavlin 137 while (my $row = shift @users2) {
65     next unless ($row->{name} eq $user);
66     map {
67     cmp_ok($user->{$_}, 'eq', $row->{$_}, "$_");
68     } keys %{ $user };
69 dpavlin 37 }
70 dpavlin 35
71 dpavlin 137 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 dpavlin 138 Since you have more than 43 modes, and Hyper Estraier needs more than
89     1024 file descriptors for more than 46 nodes, expect tests to fail.
90 dpavlin 137
91 dpavlin 138 If tests do fail, you can try to add
92    
93     ulimit -n 2048
94    
95     before staring estmaster, which will increase number of available nodes
96     to 96 before estmaster runs out of file descriptors.
97    
98 dpavlin 137 _END_OF_WARNING_
99     }
100    
101     my $temp_node = "_test_temp_$$";
102    
103     foreach my $node_name ( $test1_node , $test2_node, $temp_node ) {
104     ok($msg = $node->master(
105     action => 'nodeadd',
106     name => $node_name,
107     label => "$node_name label",
108     ), "nodeadd $node_name: $msg");
109     }
110    
111     ok($msg = $node->master(
112     action => 'nodeclr',
113     name => $temp_node,
114     ), "nodeclr $temp_node: $msg");
115    
116     ok($msg = $node->master(
117     action => 'nodedel',
118     name => $temp_node,
119     ), "nodedel $temp_node: $msg");
120    
121     #diag "not testing logrtt\n";
122    
123     # test document creation
124    
125 dpavlin 35 my $draft = <<'_END_OF_DRAFT_';
126     @uri=data001
127     @title=Material Girl
128    
129     Living in a material world
130     And I am a material girl
131     You know that we are living in a material world
132     And I am a material girl
133     _END_OF_DRAFT_
134    
135 dpavlin 40 #diag "draft:\n$draft";
136     ok(my $doc = new Search::Estraier::Document($draft), 'new doc from draft');
137    
138 dpavlin 46 ok( $node->put_doc($doc), "put_doc data001");
139    
140 dpavlin 41 for ( 1 .. 10 ) {
141     $doc->add_attr('@uri', 'test' . $_);
142     ok( $node->put_doc($doc), "put_doc test$_");
143     #diag $doc->dump_draft;
144     }
145    
146 dpavlin 50 my $id;
147     ok($id = $node->uri_to_id( 'data001' ), "uri_to_id = $id");
148 dpavlin 41
149 dpavlin 100 my $data_max = 5;
150    
151     for ( 1 .. $data_max ) {
152 dpavlin 43 ok( $node->out_doc_by_uri( 'test' . $_ ), "out_doc_by_uri test$_");
153 dpavlin 41 }
154 dpavlin 42
155 dpavlin 50 ok($doc = $node->get_doc( $id ), 'get_doc for edit');
156 dpavlin 42 $doc->add_attr('foo', 'bar');
157 dpavlin 50 #diag Dumper($doc);
158 dpavlin 42 ok( $node->edit_doc( $doc ), 'edit_doc');
159 dpavlin 43
160 dpavlin 50 ok( $node->out_doc( $id ), "out_doc $id");
161    
162     ok( ! $node->edit_doc( $doc ), "edit removed");
163    
164 dpavlin 53 my $max = 3;
165    
166 dpavlin 51 ok(my $cond = new Search::Estraier::Condition, 'new cond');
167     ok($cond->set_phrase('girl'), 'cond set_phrase');
168 dpavlin 53 ok($cond->set_max($max), "cond set_max $max");
169 dpavlin 51 ok($cond->set_order('@uri ASCD'), 'cond set_order');
170     ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');
171    
172 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');
173 dpavlin 51
174 dpavlin 91 ok( my $nres = $node->search( $cond, 0 ), 'search');
175 dpavlin 51
176 dpavlin 91 isa_ok( $nres, 'Search::Estraier::NodeResult' );
177 dpavlin 51
178 dpavlin 91 cmp_ok($nres->doc_num, '==', $max, "doc_num = $max");
179 dpavlin 53
180 dpavlin 100 cmp_ok($nres->hits, '==', $data_max, "hits");
181    
182 dpavlin 115 for my $i ( 0 .. ($nres->hits - 1) ) {
183     my $uri = 'test' . ($i + $data_max + 1);
184    
185     if ($i < $nres->doc_num) {
186     ok( my $rdoc = $nres->get_doc( $i ), "get_doc $i");
187    
188     cmp_ok( $rdoc->attr('@uri'), 'eq', $uri, "\@uri = $uri");
189     ok( my $k = $rdoc->keywords( $id ), "rdoc keywords");
190     }
191    
192 dpavlin 103 ok( my $id = $node->uri_to_id( $uri ), "uri_to_id($uri) = $id");
193 dpavlin 46 ok( $node->get_doc( $id ), "get_doc $id");
194 dpavlin 44 ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri $uri");
195 dpavlin 49 cmp_ok( $node->get_doc_attr( $id, '@uri' ), 'eq', $uri, "get_doc_attr $id");
196     cmp_ok( $node->get_doc_attr_by_uri( $uri, '@uri' ), 'eq', $uri, "get_doc_attr $id");
197 dpavlin 115 ok( my $k1 = $node->etch_doc( $id ), "etch_doc_by_uri $uri");
198 dpavlin 49 ok( my $k2 = $node->etch_doc_by_uri( $uri ), "etch_doc_by_uri $uri");
199     #diag Dumper($k, $k2);
200 dpavlin 115 ok( eq_hash( $k1, $k2 ), "keywords");
201 dpavlin 43 }
202 dpavlin 48
203 dpavlin 91 ok(my $hints = $nres->hints, 'hints');
204     diag Dumper($hints);
205    
206 dpavlin 72 ok($node->_set_info, "refresh _set_info");
207    
208 dpavlin 48 my $v;
209     ok($v = $node->name, "name: $v");
210     ok($v = $node->label, "label: $v");
211     ok($v = $node->doc_num, "doc_num: $v");
212 dpavlin 110 ok(defined($v = $node->word_num), "word_num: $v");
213 dpavlin 48 ok($v = $node->size, "size: $v");
214    
215 dpavlin 55 ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");
216    
217 dpavlin 56 # user doesn't exist
218     ok(! $node->set_user('foobar', 1), 'set_user');
219    
220 dpavlin 94 ok(my $node2 = new Search::Estraier::Node( "http://localhost:1978/node/$test2_node" ), "new $test2_node");
221     ok($node2->set_auth('admin','admin'), "set_auth $test2_node");
222 dpavlin 57
223 dpavlin 78 # croak_on_error
224    
225 dpavlin 94 ok($node = new Search::Estraier::Node( url => "http://localhost:1978/non-existant", croak_on_error => 1 ), "new non-existant");
226     throws_ok { $node->name } qr/404/, 'croak on error';
227 dpavlin 78
228 dpavlin 103 # croak_on_error
229 dpavlin 106 ok($node = new Search::Estraier::Node( url => "http://localhost:1978/node/$test1_node", croak_on_error => 1 ), "new $test1_node");
230 dpavlin 94
231 dpavlin 103 ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');
232    
233 dpavlin 137
234 dpavlin 107 # test users
235     ok(! $node->admins, 'no admins');
236     ok(! $node->guests, 'no guests');
237    
238 dpavlin 137
239 dpavlin 129 # test search without results
240     ok($cond = new Search::Estraier::Condition, 'new cond');
241     ok($cond->set_phrase('this_is_phrase_which_does_not_exits'), 'cond set_phrase');
242    
243     ok($nres = $node->search( $cond, 0 ), 'search');
244    
245 dpavlin 137 # now, test links
246     my $test2_label = "$test2_node label";
247     my $link_url = "http://localhost:1978/node/$test2_node";
248     ok($node->set_link( $link_url, $test2_label, 42), "set_link $test2_node ($test2_label) 42");
249     ok(my $links = $node->links, 'links');
250     cmp_ok($#{$links}, '==', 0, 'one link');
251     like($links->[0], qr/^$link_url/, 'link correct');
252     ok($node->set_link("http://localhost:1978/node/$test2_node", $test2_label, 0), "set_link $test2_node ($test2_label) delete");
253 dpavlin 72
254 dpavlin 137 # cleanup test nodes
255     foreach my $node_name ( $test1_node , $test2_node ) {
256     ok($msg = $node->master(
257     action => 'nodedel',
258     name => $node_name,
259     ), "nodedel $node_name: $msg");
260     }
261 dpavlin 107
262 dpavlin 55 diag "over";

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26