summaryrefslogtreecommitdiffstats
path: root/t/180_ecpg.t
diff options
context:
space:
mode:
Diffstat (limited to 't/180_ecpg.t')
-rw-r--r--t/180_ecpg.t55
1 files changed, 55 insertions, 0 deletions
diff --git a/t/180_ecpg.t b/t/180_ecpg.t
new file mode 100644
index 0000000..a1a0c5d
--- /dev/null
+++ b/t/180_ecpg.t
@@ -0,0 +1,55 @@
+# Check that ecpg works
+
+use strict;
+
+use lib 't';
+use TestLib;
+use PgCommon;
+use Test::More tests => 17;
+
+my $v = $MAJORS[-1];
+
+# prepare nobody-owned work dir
+my $workdir=`su -s /bin/sh -c 'mktemp -d' nobody`;
+chomp $workdir;
+chdir $workdir or die "could not chdir to $workdir: $!";
+
+# create test code
+open F, '>test.pgc' or die "Could not open $workdir/test.pgc: $!";
+print F <<EOF;
+#include <stdio.h>
+
+EXEC SQL BEGIN DECLARE SECTION;
+ char output[1024];
+EXEC SQL END DECLARE SECTION;
+
+int main() {
+ EXEC SQL CONNECT TO template1;
+ EXEC SQL SELECT current_database() INTO :output;
+ puts(output);
+ EXEC SQL DISCONNECT ALL;
+ return 0;
+}
+EOF
+close F;
+chmod 0644, 'test.pgc';
+
+is_program_out 'nobody', 'ecpg test.pgc', 0, '', 'ecpg processing';
+
+is_program_out 'nobody', 'cc -I$(pg_config --includedir) -L$(pg_config --libdir) -o test test.c -lecpg',
+ 0, '', 'compiling ecpg output';
+chdir '/' or die "could not chdir to /: $!";
+
+# create cluster
+is ((system "pg_createcluster $v main --start >/dev/null"), 0, "pg_createcluster $v main");
+is ((exec_as 'postgres', 'createuser nobody -D -R -S'), 0, 'createuser nobody');
+
+is_program_out 'nobody', "$workdir/test", 0, "template1\n",
+ 'runs and gives correct output';
+
+# clean up
+system "rm -rf $workdir";
+is ((system "pg_dropcluster $v main --stop"), 0, "pg_dropcluster $v main");
+check_clean;
+
+# vim: filetype=perl