/[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 35 by dpavlin, Thu Jan 5 21:51:29 2006 UTC revision 139 by dpavlin, Wed May 10 13:45:08 2006 UTC
# Line 3  Line 3 
3  use strict;  use strict;
4  use blib;  use blib;
5    
6  use Test::More tests => 11;  use Test::More tests => 136;
7  use Test::Exception;  use Test::Exception;
8  use Data::Dumper;  use Data::Dumper;
9    
10  BEGIN { use_ok('Search::Estraier') };  BEGIN { use_ok('Search::Estraier') };
11    
12    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, '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/'), 'set_url');  ok($node->set_url("http://localhost:1978/node/$test1_node"), "set_url $test1_node");
22    
23  ok($node->set_proxy('proxy.example.com', 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';
25    
26  ok($node->set_timeout(42), 'set_timeout');  ok($node->set_timeout(42), 'set_timeout');
27  throws_ok {$node->set_timeout('foo') } qr/timeout/, 'set_timeout NaN';  throws_ok {$node->set_timeout('foo') } qr/timeout/, 'set_timeout NaN';
28    
29  ok($node->set_auth('foo','bar'), 'set_auth');  ok($node->set_auth('admin','admin'), 'set_auth');
30    
31  cmp_ok($node->status, '==', -1, 'status');  cmp_ok($node->status, '==', -1, 'status');
32    
33  my $nodelist;  # test master functionality
34  cmp_ok($node->shuttle_url( '?action=nodelist', 'text/plain', undef, \$nodelist),  
35          '==', 200, 'nodelist');  #diag "not testing shutdown\n";
36    
37    my $msg;
38    
39    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 needs more than
89    1024 file descriptors for more than 46 nodes, expect tests to fail.
90    
91    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    _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  my $draft = <<'_END_OF_DRAFT_';  my $draft = <<'_END_OF_DRAFT_';
126  @uri=data001  @uri=data001
# Line 41  You know that we are living in a materia Line 132  You know that we are living in a materia
132  And I am a material girl  And I am a material girl
133  _END_OF_DRAFT_  _END_OF_DRAFT_
134    
135  diag "draft:\n$draft";  #diag "draft:\n$draft";
136    ok(my $doc = new Search::Estraier::Document($draft), 'new doc from draft');
137    
138    ok( $node->put_doc($doc), "put_doc data001");
139    
140    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    my $id;
147    ok($id = $node->uri_to_id( 'data001' ), "uri_to_id = $id");
148    
149    my $data_max = 5;
150    
151    for ( 1 .. $data_max ) {
152            ok( $node->out_doc_by_uri( 'test' . $_ ), "out_doc_by_uri test$_");
153    }
154    
155    ok($doc = $node->get_doc( $id ), 'get_doc for edit');
156    $doc->add_attr('foo', 'bar');
157    #diag Dumper($doc);
158    ok( $node->edit_doc( $doc ), 'edit_doc');
159    
160    ok( $node->out_doc( $id ), "out_doc $id");
161    
162    ok( ! $node->edit_doc( $doc ), "edit removed");
163    
164    my $max = 3;
165    
166    ok(my $cond = new Search::Estraier::Condition, 'new cond');
167    ok($cond->set_phrase('girl'), 'cond set_phrase');
168    ok($cond->set_max($max), "cond set_max $max");
169    ok($cond->set_order('@uri ASCD'), 'cond set_order');
170    ok($cond->add_attr('@title STRINC Material'), 'cond add_attr');
171    
172    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    
174    ok( my $nres = $node->search( $cond, 0 ), 'search');
175    
176    isa_ok( $nres, 'Search::Estraier::NodeResult' );
177    
178    cmp_ok($nres->doc_num, '==', $max, "doc_num = $max");
179    
180    cmp_ok($nres->hits, '==', $data_max, "hits");
181    
182    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            ok( my $id = $node->uri_to_id( $uri ), "uri_to_id($uri) = $id");
193            ok( $node->get_doc( $id ), "get_doc $id");
194            ok( $node->get_doc_by_uri( $uri ), "get_doc_by_uri $uri");
195            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            ok( my $k1 = $node->etch_doc( $id ), "etch_doc_by_uri $uri");
198            ok( my $k2 = $node->etch_doc_by_uri( $uri ), "etch_doc_by_uri $uri");
199            #diag Dumper($k, $k2);
200            ok( eq_hash( $k1, $k2 ), "keywords");
201    }
202    
203    ok(my $hints = $nres->hints, 'hints');
204    diag Dumper($hints);
205    
206    ok($node->_set_info, "refresh _set_info");
207    
208    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    ok(defined($v = $node->word_num), "word_num: $v");
213    ok($v = $node->size, "size: $v");
214    
215    ok($node->set_snippet_width( 100, 10, 10 ), "set_snippet_width");
216    
217    # user doesn't exist
218    ok(! $node->set_user('foobar', 1), 'set_user');
219    
220    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    
223    # croak_on_error
224    
225    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    
228    # croak_on_error
229    ok($node = new Search::Estraier::Node( url => "http://localhost:1978/node/$test1_node", croak_on_error => 1 ), "new $test1_node");
230    
231    ok(! $node->uri_to_id('foobar'), 'uri_to_id without croak');
232    
233    
234    # test users
235    ok(! $node->admins, 'no admins');
236    ok(! $node->guests, 'no guests');
237    
238    
239    # 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    # 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    
254    # 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    
262    # test create
263    my $node_name = '_test_create_' . $$;
264    my $node_label = "test $$ label";
265    
266    ok($node = new Search::Estraier::Node(
267            url => "http://localhost:1978/node/$node_name",
268            create => 1,
269            label => $node_label,
270            croak_on_error => 1
271    ), "new non-existant with create");
272    
273    cmp_ok($node->name, 'eq', $node_name, "node $node_name exists");
274    cmp_ok($node->label, 'eq', $node_label, "node label: $node_label");
275    
276    ok($msg = $node->master(
277            action => 'nodedel',
278            name => $node_name,
279    ), "nodedel $node_name: $msg");
280    
281    diag "over";

Legend:
Removed from v.35  
changed lines
  Added in v.139

  ViewVC Help
Powered by ViewVC 1.1.26