/[pgestraier]/trunk/t/pgest.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/pgest.t

Parent Directory Parent Directory | Revision Log Revision Log


Revision 51 - (hide annotations)
Tue May 9 22:55:42 2006 UTC (18 years, 1 month ago) by dpavlin
File MIME type: application/x-troff
File size: 3498 byte(s)
depriciated usage of direct access to index. use node API and estmaster
instead.

1 dpavlin 8 #!/usr/bin/perl -w
2    
3     use strict;
4    
5 dpavlin 51 use Test::More tests => 53;
6 dpavlin 8
7     BEGIN {
8     use_ok('DBI');
9     use_ok('DBD::Pg');
10     };
11    
12     # hum?
13     my $connect = "DBI:Pg:dbname=test";
14    
15     my $dbh = DBI->connect($connect,"","") || die $DBI::errstr;
16     ok($dbh, "dbh");
17    
18     my $pwd = $0;
19     $pwd =~ s#/[^/]*$##;
20     if ($pwd !~ m#^/#) {
21     my $cwd = `pwd`;
22     chomp($cwd);
23     $pwd = $cwd . '/' . $pwd;
24     }
25     ok($pwd, "pwd: $pwd");
26     my $index = "$pwd/../data/casket/";
27 dpavlin 51 my $node = 'http://localhost:1978/node/trivia';
28 dpavlin 8
29 dpavlin 51 my $sql = "select id from pgest('$node','admin','admin',0,?,?,?,?,?,array['\@id']) as (id text)";
30     diag $sql;
31 dpavlin 8 my $sth = $dbh->prepare($sql) || die $dbh->errstr();
32     ok($sth, "sth");
33    
34     sub pgest {
35 dpavlin 49 $sth->execute(@_) || die "FATAL ERROR: direct " . $sth->errstr();
36 dpavlin 12 {
37     no warnings;
38     ok($sth, "execute(".join(",",@_).")");
39     }
40 dpavlin 8
41     my @arr;
42 dpavlin 32 while (my ($id) = $sth->fetchrow_array() ) {
43     push @arr, $id;
44 dpavlin 8 }
45    
46     return @arr;
47     }
48    
49     sub estcmd {
50 dpavlin 51 my ($q,$attr, $order, $limit, $offset) = @_;
51 dpavlin 8
52 dpavlin 51 my $cmd = "estcall search -vu -sf";
53     $cmd .= " -attr '$attr'" if ($attr);
54     $cmd .= " -ord '$order'" if ($order);
55     if ($limit) {
56     $cmd .= " -max $limit";
57     } else {
58     $cmd .= " -max 999999";
59     }
60     $cmd .= " -sk $offset" if ($offset);
61 dpavlin 9 $q ||= '';
62 dpavlin 51 $cmd .= " $node '$q'";
63 dpavlin 8 diag $cmd;
64    
65     open(my $fh, "$cmd |") || die "cmd: $!";
66 dpavlin 31 my $del = <$fh>;
67     chomp($del);
68 dpavlin 8 while(<$fh>) {
69 dpavlin 31 last if (/^\Q$del\E/);
70 dpavlin 8 }
71 dpavlin 31 my @arr;
72     while(<$fh>) {
73     chomp;
74     last if (/^\Q$del\E/);
75     push @arr, $_;
76     }
77    
78     return @arr;
79 dpavlin 8 }
80    
81 dpavlin 9 # test simple query
82     foreach my $q (qw(blade runner Philip k. dick)) {
83 dpavlin 8
84     ok(my $hits = estcmd($q), "estcmd: $q");
85    
86     diag "$hits hits";
87    
88 dpavlin 51 cmp_ok(scalar pgest($q, '', undef, 0, 0), '==', $hits, "pgest: $q");
89 dpavlin 8 }
90 dpavlin 9
91     # test attr query
92     foreach my $q (('@title STRINC Blade Runner', '@title ISTRBW blade runner')) {
93    
94     ok(my $hits = estcmd('',$q), "estcmd: $q");
95    
96     diag "$hits hits";
97    
98 dpavlin 51 cmp_ok($hits, '==', scalar pgest(undef, $q, undef, 0, 0), 'blade runner');
99 dpavlin 9 }
100    
101 dpavlin 12 diag "Error handling test follows, ignore messages...";
102     # test NULL handling
103 dpavlin 31 ok(! $dbh->do(qq`select * from pgest(null, '', '', null, 0, 0, array['\@id']) as (id text)`), "null index_path");
104     ok(my $hits = pgest('blade runner', '', undef, 0, 0), "test search");
105     cmp_ok($hits, '==', pgest('blade runner', undef, undef, 0, 0), "null attr");
106     cmp_ok($hits, '==', pgest('blade runner', '', undef, undef, 0), "null limit");
107     cmp_ok($hits, '==', pgest('blade runner', '', undef, 0, undef), "null offset");
108     cmp_ok($hits, '==', pgest('blade runner', undef, undef, undef, undef), "null optional");
109 dpavlin 12
110 dpavlin 14 # test limit, offset and global mess
111     my $d = int($hits / 3);
112 dpavlin 31 cmp_ok($d, '==', pgest('blade runner',undef, undef, $d, undef), "limit $d");
113     cmp_ok($hits, '==', pgest('blade runner', undef, undef, undef, undef), "check");
114 dpavlin 14
115 dpavlin 31 cmp_ok(($hits - $d), '==', pgest('blade runner',undef, undef, undef, $d), "offset $d");
116     cmp_ok($hits, '==', pgest('blade runner', undef, undef, undef, undef), "check");
117 dpavlin 14
118 dpavlin 31 cmp_ok(($hits - $d), '==', pgest('blade runner',undef, undef, ($hits - $d), $d), "limit ".($hits - $d)." offset $d");
119     cmp_ok($hits, '==', pgest('blade runner', undef, undef, undef, undef), "check");
120 dpavlin 32
121     # test sort
122     my @arr_asc = pgest('blade runner', undef, '@id NUMA', undef, undef);
123     my @arr_desc = pgest('blade runner', undef, '@id NUMD', undef, undef);
124    
125     cmp_ok(@arr_asc, '==', @arr_desc, "same number of results");
126     my $errors = 0;
127     foreach my $i (0 .. $#arr_asc) {
128     my ($a, $b) = ($arr_asc[$i], $arr_desc[$#arr_desc - $i]);
129     if ($a ne $b) {
130     $errors++;
131     diag "element $i: $a != $b";
132     }
133     }
134    
135     cmp_ok($errors, '==', 0, "errors in ordering");

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26