/[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 45 - (hide annotations)
Sat Sep 10 23:08:47 2005 UTC (18 years, 8 months ago) by dpavlin
File MIME type: application/x-troff
File size: 3755 byte(s)
test node API version of pgest

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

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26