tests: enable testsuite during build
Version: 09.05.0200-1
This commit is contained in:
parent
90ebcbe4a4
commit
a73b169f4c
173
postgres-testing.sh
Normal file
173
postgres-testing.sh
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
# Do some "integration" testing against running PostgreSQL server.
|
||||||
|
|
||||||
|
# This file is to be sourced.
|
||||||
|
|
||||||
|
: ${PGTESTS_DATADIR=`pwd`/datadir}
|
||||||
|
: ${PGTESTS_ADMIN=`id -u -n`}
|
||||||
|
: ${PGTESTS_ADMINDB=$PGTESTS_ADMIN}
|
||||||
|
: ${PGTESTS_ADMINPASS=$PGTESTS_ADMIN}
|
||||||
|
: ${PGTESTS_PORT=54321}
|
||||||
|
: ${PGTESTS_SOCKETDIR=/tmp}
|
||||||
|
: ${PGTESTS_USERS=test:test}
|
||||||
|
: ${PGTESTS_DATABASES=test:test}
|
||||||
|
|
||||||
|
# Stop the old cluster and/or remove it's data.
|
||||||
|
: ${PGTESTS_STARTCLEANUP=:}
|
||||||
|
|
||||||
|
# Cleanup once we exit the script.
|
||||||
|
: ${PGTESTS_CLEANUP=:}
|
||||||
|
|
||||||
|
# Cleanup once we exit the script.
|
||||||
|
: ${PGTESTS_CLEANUP=:}
|
||||||
|
|
||||||
|
export PGPORT=$PGTESTS_PORT
|
||||||
|
export PGHOST=$PGTESTS_SOCKETDIR
|
||||||
|
|
||||||
|
warning ()
|
||||||
|
{
|
||||||
|
echo >&2 " ! $*"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
__trap_cb ()
|
||||||
|
{
|
||||||
|
IFS=' '
|
||||||
|
for __func in $__TRAP_ACTIONS
|
||||||
|
do
|
||||||
|
$__func
|
||||||
|
done
|
||||||
|
}
|
||||||
|
trap __trap_cb EXIT
|
||||||
|
|
||||||
|
|
||||||
|
__pgtests_initdb ()
|
||||||
|
{
|
||||||
|
initdb "$PGTESTS_DATADIR" -U "$PGTESTS_ADMIN" \
|
||||||
|
--auth-local=peer --auth-host=md5 \
|
||||||
|
${PGTESTS_LOCALE+--locale="$PGTESTS_LOCALE"}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
__pgtests_start ()
|
||||||
|
{
|
||||||
|
pg_ctl -D "$PGTESTS_DATADIR" -l "$PGTESTS_DATADIR"/start.log start -o "-k $PGTESTS_SOCKETDIR -p $PGTESTS_PORT" -w
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
__pgtests_create_admins_db ()
|
||||||
|
{
|
||||||
|
createdb -h "$PGTESTS_SOCKETDIR" "$PGTESTS_ADMINDB" --owner "$PGTESTS_ADMIN" -p "$PGTESTS_PORT"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
__pgtests_passwd()
|
||||||
|
{
|
||||||
|
psql -d postgres --set=user="$1" --set=pass="$2" -tA \
|
||||||
|
<<<"ALTER USER :\"user\" WITH ENCRYPTED PASSWORD :'pass';"
|
||||||
|
}
|
||||||
|
|
||||||
|
pgtests_start ()
|
||||||
|
{
|
||||||
|
unset __TRAP_ACTIONS
|
||||||
|
|
||||||
|
if $PGTESTS_STARTCLEANUP; then
|
||||||
|
# We don't plan to be serious here. This pgtests_* effort is just to
|
||||||
|
# ease _testing_ against running postgresql server without too much
|
||||||
|
# writing.
|
||||||
|
if test -f "$PGTESTS_DATADIR"/postmaster.pid; then
|
||||||
|
# Give it a try.
|
||||||
|
warning "Seems like server works, trying to stop."
|
||||||
|
pg_ctl stop -D "$PGTESTS_DATADIR" -w
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Cleanup testing directory
|
||||||
|
if test -e "$PGTESTS_DATADIR"; then
|
||||||
|
warning "Removing old data directory."
|
||||||
|
rm -r "$PGTESTS_DATADIR"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
__pgtests_initdb && __TRAP_ACTIONS="pgtests_cleanup $__TRAP_ACTIONS"
|
||||||
|
__pgtests_start && __TRAP_ACTIONS="pgtests_stop $__TRAP_ACTIONS"
|
||||||
|
__pgtests_create_admins_db
|
||||||
|
|
||||||
|
__pgtests_passwd "$PGTESTS_ADMIN" "$PGTESTS_ADMINPASS"
|
||||||
|
|
||||||
|
|
||||||
|
for _pgt_user in $PGTESTS_USERS
|
||||||
|
do
|
||||||
|
save_IFS=$IFS
|
||||||
|
IFS=:
|
||||||
|
_user=
|
||||||
|
_pass=
|
||||||
|
for _part in $_pgt_user
|
||||||
|
do
|
||||||
|
if test -z "$_user"; then
|
||||||
|
_user=$_part
|
||||||
|
else
|
||||||
|
_pass=$_part
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
createuser "$_user"
|
||||||
|
__pgtests_passwd "$_user" "$_pass"
|
||||||
|
IFS=$save_IFS
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
for _pgt_db in $PGTESTS_DATABASES
|
||||||
|
do
|
||||||
|
save_IFS=$IFS
|
||||||
|
IFS=:
|
||||||
|
_db=
|
||||||
|
_user=
|
||||||
|
for _part in $_pgt_db
|
||||||
|
do
|
||||||
|
if test -z "$_user"; then
|
||||||
|
_user=$_part
|
||||||
|
else
|
||||||
|
_db=$_part
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
createdb "$_db" --owner "$_part"
|
||||||
|
|
||||||
|
IFS=$save_IFS
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
__clean_trap_action ()
|
||||||
|
{
|
||||||
|
__new_actions=
|
||||||
|
for __action in $__TRAP_ACTIONS
|
||||||
|
do
|
||||||
|
if test "$__action" = "$1"; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
__new_actions="$__action $__new_actions"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
__TRAP_ACTIONS=$__new_actions
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pgtests_cleanup ()
|
||||||
|
{
|
||||||
|
if $PGTESTS_CLEANUP && $PGTESTS_AUTOSTOP; then
|
||||||
|
rm -r "$PGTESTS_DATADIR"
|
||||||
|
fi
|
||||||
|
__clean_trap_action pgtests_cleanup
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pgtests_stop ()
|
||||||
|
{
|
||||||
|
if $PGTESTS_AUTOSTOP; then
|
||||||
|
pg_ctl stop -D "$PGTESTS_DATADIR" -w
|
||||||
|
fi
|
||||||
|
__clean_trap_action pgtests_stop
|
||||||
|
}
|
166
postgresql-odbc-09.05.0200-add-missing-test.patch
Normal file
166
postgresql-odbc-09.05.0200-add-missing-test.patch
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
From c15f7cfea5c2974d4d66ebb8c63594283eca6c30 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hiroshi Inoue <h-inoue@dream.email.ne.jp>
|
||||||
|
Date: Sat, 26 Mar 2016 22:20:38 +0900
|
||||||
|
Subject: [PATCH] Add test declare-block-test. It contains 3 cases which
|
||||||
|
correspond to bugs introduced in 9.05.0100. They are all in declare/fetch
|
||||||
|
mode. 1. Using block cursors. 2. Scroll BOF -> EOF -> BOF ... 3. When
|
||||||
|
fetching a row "behind" the rowset by "fetch absolute", how many rows can be
|
||||||
|
fetched?
|
||||||
|
|
||||||
|
---
|
||||||
|
test/expected/declare-fetch-block.out | 10 +++
|
||||||
|
test/src/declare-fetch-block-test.c | 125 ++++++++++++++++++++++++++++++++++
|
||||||
|
2 files changed, 135 insertions(+)
|
||||||
|
create mode 100644 test/expected/declare-fetch-block.out
|
||||||
|
create mode 100644 test/src/declare-fetch-block-test.c
|
||||||
|
|
||||||
|
diff --git a/test/expected/declare-fetch-block.out b/test/expected/declare-fetch-block.out
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..2368b59
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/test/expected/declare-fetch-block.out
|
||||||
|
@@ -0,0 +1,10 @@
|
||||||
|
+connected
|
||||||
|
+fetchIdx=1, fetched rows=84, total rows=84
|
||||||
|
+fetchIdx=2, fetched rows=36, total rows=120
|
||||||
|
+next total rows=120
|
||||||
|
+prior total rows=120
|
||||||
|
+next total rows=120
|
||||||
|
+prior total rows=120
|
||||||
|
+FetchScroll beyond the end failed 100
|
||||||
|
+encountered EOF at 120
|
||||||
|
+disconnecting
|
||||||
|
diff --git a/test/src/declare-fetch-block-test.c b/test/src/declare-fetch-block-test.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..2ecd0c2
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/test/src/declare-fetch-block-test.c
|
||||||
|
@@ -0,0 +1,125 @@
|
||||||
|
+/*
|
||||||
|
+ * Test what happens when using block cursors, scrolling next and prior, or
|
||||||
|
+ * fetching a row "behind" the rowset by "fetch absolute".
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include <string.h>
|
||||||
|
+#include <stdio.h>
|
||||||
|
+#include <stdlib.h>
|
||||||
|
+
|
||||||
|
+#include "common.h"
|
||||||
|
+
|
||||||
|
+#define TOTAL 120
|
||||||
|
+#define BLOCK 84
|
||||||
|
+int main(int argc, char **argv)
|
||||||
|
+{
|
||||||
|
+ int rc;
|
||||||
|
+ HSTMT hstmt = SQL_NULL_HSTMT;
|
||||||
|
+ int i;
|
||||||
|
+ int count = TOTAL;
|
||||||
|
+ char query[100];
|
||||||
|
+ int totalRows = 0;
|
||||||
|
+ int fetchIdx = 0;
|
||||||
|
+ SQLLEN rowArraySize = BLOCK;
|
||||||
|
+ SQLULEN rowsFetched;
|
||||||
|
+ SQLINTEGER id[BLOCK];
|
||||||
|
+ SQLLEN cbLen[BLOCK];
|
||||||
|
+
|
||||||
|
+ /****
|
||||||
|
+ * Run this test with UseDeclareFetch = 1 and Fetch=100(default).
|
||||||
|
+ */
|
||||||
|
+ test_connect_ext("UseDeclareFetch=1");
|
||||||
|
+
|
||||||
|
+ rc = SQLAllocHandle(SQL_HANDLE_STMT, conn, &hstmt);
|
||||||
|
+ if (!SQL_SUCCEEDED(rc))
|
||||||
|
+ {
|
||||||
|
+ print_diag("failed to allocate stmt handle", SQL_HANDLE_DBC, conn);
|
||||||
|
+ exit(1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ rc = SQLExecDirect(hstmt, (SQLCHAR *) "create temporary table tmptable(id int4 primary key)", SQL_NTS);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "SQLExecDirect create table failed", hstmt);
|
||||||
|
+
|
||||||
|
+ /* insert into a table */
|
||||||
|
+ for (i = 0; i < count; i++)
|
||||||
|
+ {
|
||||||
|
+ snprintf(query, sizeof(query), "insert into tmptable values (%d)", i);
|
||||||
|
+ rc = SQLExecDirect(hstmt, (SQLCHAR *) query, SQL_NTS);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "insert into table failed", hstmt);
|
||||||
|
+ }
|
||||||
|
+ rc = SQLFreeStmt(hstmt, SQL_CLOSE);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Block cursor
|
||||||
|
+ */
|
||||||
|
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER) rowArraySize, 0);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "SQLSetStmtAttr ROW_ARRAY_SIZE failed", hstmt);
|
||||||
|
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, (SQLPOINTER) &rowsFetched, 0);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "SQLSetStmtAttr ROWS_FETCHED_PTR failed", hstmt);
|
||||||
|
+ rc = SQLBindCol(hstmt, 1, SQL_C_SLONG, &id, 0, cbLen);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "SQLBindCol failed", hstmt);
|
||||||
|
+ rc = SQLExecDirect(hstmt, (SQLCHAR *) "select * from tmptable", SQL_NTS);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "select failed", hstmt);
|
||||||
|
+ while (rc = SQLFetch(hstmt), SQL_SUCCEEDED(rc))
|
||||||
|
+ {
|
||||||
|
+ fetchIdx++;
|
||||||
|
+ totalRows += (int) rowsFetched;
|
||||||
|
+ printf("fetchIdx=%d, fetched rows=%d, total rows=%d\n", fetchIdx, (int) rowsFetched, totalRows);
|
||||||
|
+ }
|
||||||
|
+ rc = SQLFreeStmt(hstmt, SQL_CLOSE);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);
|
||||||
|
+ /*
|
||||||
|
+ * Scroll next -> EOF -> prior -> BOF -> next -> EOF -> prior -> BOF
|
||||||
|
+ */
|
||||||
|
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER) 1, SQL_IS_UINTEGER);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "SQLSetStmtAttr ROW_ARRAY_SIZE failed", hstmt);
|
||||||
|
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER) SQL_CURSOR_STATIC, 0);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "SQLSetStmtAttr CURSOR_TYPE failed", hstmt);
|
||||||
|
+ rc = SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_ROWVER, 0);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "SQLSetStmtAttr CONCURRENCY failed", hstmt);
|
||||||
|
+ rc = SQLExecDirect(hstmt, (SQLCHAR *) "select * from tmptable", SQL_NTS);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "select failed", hstmt);
|
||||||
|
+ for (i = 0; i < 2; i++)
|
||||||
|
+ {
|
||||||
|
+ totalRows = 0;
|
||||||
|
+ while (rc = SQLFetchScroll(hstmt, SQL_FETCH_NEXT, 0), SQL_SUCCEEDED(rc))
|
||||||
|
+ totalRows += (int) rowsFetched;
|
||||||
|
+ if (SQL_NO_DATA != rc)
|
||||||
|
+ CHECK_STMT_RESULT(rc, "fetch failed", hstmt);
|
||||||
|
+ printf("next total rows=%d\n", totalRows);
|
||||||
|
+ totalRows = 0;
|
||||||
|
+ while (rc = SQLFetchScroll(hstmt, SQL_FETCH_PRIOR, 0), SQL_SUCCEEDED(rc))
|
||||||
|
+ totalRows += (int) rowsFetched;
|
||||||
|
+ if (SQL_NO_DATA != rc)
|
||||||
|
+ CHECK_STMT_RESULT(rc, "fetch failed", hstmt);
|
||||||
|
+ printf("prior total rows=%d\n", totalRows);
|
||||||
|
+ }
|
||||||
|
+ rc = SQLFreeStmt(hstmt, SQL_CLOSE);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);
|
||||||
|
+ /*
|
||||||
|
+ * When fetching a row "behind" the rowset by "fetch absolute" only the first ones of the result set can be fetched?
|
||||||
|
+ */
|
||||||
|
+ rc = SQLExecDirect(hstmt, (SQLCHAR *) "select * from tmptable", SQL_NTS);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "select failed", hstmt);
|
||||||
|
+ if (rc = SQLFetchScroll(hstmt, SQL_FETCH_ABSOLUTE, count + 1), !SQL_SUCCEEDED(rc))
|
||||||
|
+ {
|
||||||
|
+ printf("FetchScroll beyond the end failed %d\n", rc);
|
||||||
|
+ }
|
||||||
|
+ rc = SQLFetchScroll(hstmt, SQL_FETCH_ABSOLUTE, 1);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "FetchScroll the 1st row failed", hstmt);
|
||||||
|
+ for (i = 1; i < count; i++)
|
||||||
|
+ {
|
||||||
|
+ if (!SQL_SUCCEEDED(rc = SQLFetchScroll(hstmt, SQL_FETCH_NEXT, 0)))
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ printf("encountered EOF at %d\n", i);
|
||||||
|
+
|
||||||
|
+ rc = SQLFreeStmt(hstmt, SQL_CLOSE);
|
||||||
|
+ CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);
|
||||||
|
+
|
||||||
|
+ /* Clean up */
|
||||||
|
+ test_disconnect();
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
--
|
||||||
|
2.5.5
|
||||||
|
|
@ -8,7 +8,12 @@ URL: http://psqlodbc.projects.postgresql.org/
|
|||||||
|
|
||||||
Source0: http://ftp.postgresql.org/pub/odbc/versions/src/psqlodbc-%{version}.tar.gz
|
Source0: http://ftp.postgresql.org/pub/odbc/versions/src/psqlodbc-%{version}.tar.gz
|
||||||
|
|
||||||
|
Source1: postgres-testing.sh
|
||||||
|
|
||||||
|
Patch0: postgresql-odbc-09.05.0200-add-missing-test.patch
|
||||||
|
|
||||||
BuildRequires: unixODBC-devel postgresql-devel
|
BuildRequires: unixODBC-devel postgresql-devel
|
||||||
|
BuildRequires: postgresql-server
|
||||||
|
|
||||||
# This spec file and ancillary files are licensed in accordance with
|
# This spec file and ancillary files are licensed in accordance with
|
||||||
# the psqlodbc license.
|
# the psqlodbc license.
|
||||||
@ -19,7 +24,7 @@ PostgreSQL system via ODBC (Open Database Connectivity).
|
|||||||
|
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n psqlodbc-%{version}
|
%autosetup -p1 -n psqlodbc-%{version}
|
||||||
cat <<EOF >README.rpmdist
|
cat <<EOF >README.rpmdist
|
||||||
The upstream psqlodbc testsuite is distributed in '%{name}-tests'
|
The upstream psqlodbc testsuite is distributed in '%{name}-tests'
|
||||||
(sub)package.
|
(sub)package.
|
||||||
@ -46,6 +51,21 @@ pushd ${RPM_BUILD_ROOT}%{_libdir}
|
|||||||
popd
|
popd
|
||||||
|
|
||||||
|
|
||||||
|
%check
|
||||||
|
. %{SOURCE1}
|
||||||
|
|
||||||
|
pgtests_start
|
||||||
|
|
||||||
|
cd test && make installcheck || {
|
||||||
|
echo "=== trying to find all regression.diffs files in build directory ==="
|
||||||
|
find -name 'regression.diffs' | while read line; do
|
||||||
|
cat "$line"
|
||||||
|
done
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
%post -p /sbin/ldconfig
|
%post -p /sbin/ldconfig
|
||||||
%postun -p /sbin/ldconfig
|
%postun -p /sbin/ldconfig
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user