CVS User Account cvsuser
Tue Nov 15 18:08:12 PST 2005
Log Message:
-----------
Many revisions to automated test bed...

1.  Allow specifying ENCODING so that we can test UTF8 and potentially
other multibyte encodings

2.  When a slonik error is encountered, let's "cat" the log file
    rather than just leaving it to the user to do so

3.  Add various tables to test1 that check the following conditions:
     a) UTF8 / multibyte
        Note that we insert strings ending with UTF8 that are of sure-to
        -be varying size so that byte alignment doesn't help us.  Ought
        to add in the 2 other cases (UTF8 at the start, and in the middle)

     b) Table names containing spaces, StudlyCase

     c) Schema names containing spaces, ".", StudlyCase

     d) Sequence names in Evilly Named Schemas that are StudlyCased,
        and contain spaces/periods

     e) Index with StudlyCase, spaces, and a field called "user" as
        Primary Key

Modified Files:
--------------
    slony1-engine/tests:
        run_test.sh (r1.3 -> r1.4)
        settings.ik (r1.2 -> r1.3)
    slony1-engine/tests/test1:
        generate_dml.sh (r1.1 -> r1.2)
        init_add_tables.ik (r1.2 -> r1.3)
        init_schema.sql (r1.1 -> r1.2)
        schema.diff (r1.1 -> r1.2)
    slony1-engine/tests/test2:
        generate_dml.sh (r1.2 -> r1.3)
        init_dropnode.sh (r1.2 -> r1.3)
        init_failover.ik (r1.1 -> r1.2)
        init_subscribe_set.ik (r1.1 -> r1.2)

-------------- next part --------------
Index: init_add_tables.ik
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/tests/test1/init_add_tables.ik,v
retrieving revision 1.2
retrieving revision 1.3
diff -Ltests/test1/init_add_tables.ik -Ltests/test1/init_add_tables.ik -u -w -r1.2 -r1.3
--- tests/test1/init_add_tables.ik
+++ tests/test1/init_add_tables.ik
@@ -2,3 +2,19 @@
 set add table(id=2, set id=1, origin=1, fully qualified name = 'public.table2', key='table2_id_key');
 table add key (node id = 1, fully qualified name = 'public.table3');
 set add table(id=3, set id=1, origin=1, fully qualified name = 'public.table3', key = SERIAL);
+set add table (id=4, set id=1, origin=1, fully qualified name = 'public.utf8table', comment='Test table for multibyte/UTF8');
+
+set add table (set id = 1, origin = 1, id = 5, fully qualified name =
+'public.evil_index_table', key = 'user', comment = 'Table with evil index name');
+
+set add table (set id = 1, origin = 1, id = 6, fully qualified name =
+'"Schema.name".user', comment = 'Table with evil name - user, and a field called user');
+
+set add table (set id = 1, origin = 1, id = 7, fully qualified name =
+'"Schema.name"."Capital Idea"', comment = 'Table with spaces in its name, caps, and a user field as PK');
+
+set add sequence (set id = 1, origin = 1, id = 1, fully qualified name = 'public."Evil Spacey Sequence Name"');
+
+set add sequence (set id = 1, origin = 1, id = 2, fully qualified name = '"Studly Spacey Schema"."user"');
+
+set add sequence (set id = 1, origin = 1, id = 3, fully qualified name = '"Schema.name"."a.periodic.sequence"');
Index: generate_dml.sh
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/tests/test1/generate_dml.sh,v
retrieving revision 1.1
retrieving revision 1.2
diff -Ltests/test1/generate_dml.sh -Ltests/test1/generate_dml.sh -u -w -r1.1 -r1.2
--- tests/test1/generate_dml.sh
+++ tests/test1/generate_dml.sh
@@ -37,10 +37,15 @@
     txtblen=$(random_number 1 100)
     txtb=$(random_string ${txtblen})
     txtb=`echo ${txtb} | sed -e "s/\\\\\\\/\\\\\\\\\\\\\\/g" -e "s/'/''/g"`
-
-    echo "INSERT INTO table1(data) VALUES ('${txta}');" > $mktmp/generate.data
-    echo "INSERT INTO table2(table1_id,data) SELECT id, '${txtb}' FROM table1 WHERE data='${txta}';" > $mktmp/generate.data
-    echo "INSERT INTO table3(table2_id) SELECT id FROM table2 WHERE data ='${txtb}';" > $mktmp/generate.data
+    GENDATA="$mktmp/generate.data"
+    echo "INSERT INTO table1(data) VALUES ('${txta}');" > $GENDATA
+    echo "INSERT INTO table2(table1_id,data) SELECT id, '${txtb}' FROM table1 WHERE data='${txta}';" > $GENDATA
+    echo "INSERT INTO table3(table2_id) SELECT id FROM table2 WHERE data ='${txtb}';" > $GENDATA
+    echo "INSERT INTO utf8table (string) values ('${txtb} - \303\241');" >> $GENDATA
+    echo "INSERT INTO utf8table (string) values ('${txtb} -- \303\241');" >> $GENDATA
+    echo "INSERT INTO \"Schema.name\".\"Capital Idea\" (\"user\", description) values ('${txta}', '${txtb}');" >> $GENDATA
+    echo "INSERT INTO \"Schema.name\".\"user\" (\"user\", id) values ('${txtb}', $txtblen);" >> $GENDATA
+    echo "INSERT INTO public.evil_index_table (id, name, \"eViL StudlyCaps column\") values (${txtblen}, '${txta}', '${txtb}');" >> $GENDATA
     if [ ${i} -ge ${numrows} ]; then
       break;
     else
Index: schema.diff
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/tests/test1/schema.diff,v
retrieving revision 1.1
retrieving revision 1.2
diff -Ltests/test1/schema.diff -Ltests/test1/schema.diff -u -w -r1.1 -r1.2
--- tests/test1/schema.diff
+++ tests/test1/schema.diff
@@ -1,3 +1,7 @@
 SELECT id,data FROM table1 ORDER BY id
 SELECT id,table1_id,data FROM table2 ORDER BY id
 SELECT id,table2_id,mod_date, data FROM table3 ORDER BY id
+SELECT id, string from utf8table order by id
+SELECT id, "user" from "Schema.name"."user" order by id
+SELECT "user", description from "Schema.name"."Capital Idea" order by "user"
+SELECT id, name, "eViL StudlyCaps column" from public.evil_index_table order by id
\ No newline at end of file
Index: init_schema.sql
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/tests/test1/init_schema.sql,v
retrieving revision 1.1
retrieving revision 1.2
diff -Ltests/test1/init_schema.sql -Ltests/test1/init_schema.sql -u -w -r1.1 -r1.2
--- tests/test1/init_schema.sql
+++ tests/test1/init_schema.sql
@@ -18,3 +18,40 @@
   data		FLOAT		NOT NULL DEFAULT random()
   CONSTRAINT table3_date_check	CHECK (mod_date <= now())
 ); 
+
+-- Table to perform UTF8 tests (checks multibyte; should be helpful in
+-- preventing problems with Asian character sets too)
+create table utf8table (
+    id integer not null unique default nextval('utf8_id'),
+    string text,
+    primary key(id)
+);
+
+create sequence utf8_id;
+INSERT INTO utf8table (string) VALUES ('1b\303\241r') ;
+create sequence foo_id;
+
+-- Create some Evil names...
+create schema "Schema.name";
+create schema "Studly Spacey Schema";
+create table "Schema.name"."user" (
+  id integer,
+  "user" text not null unique,
+  primary key (id)
+);
+
+create table "Schema.name"."Capital Idea" (
+  "user" text,
+  description text,
+  primary key("user")
+);
+
+create table public.evil_index_table (
+  id integer not null,
+  name text not null,
+  "eViL StudlyCaps column" text
+);
+create unique index "user" on public.evil_index_table(id);
+create sequence public."Evil Spacey Sequence Name";
+create sequence "Studly Spacey Schema"."user";
+create sequence "Schema.name"."a.periodic.sequence";
Index: settings.ik
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/tests/settings.ik,v
retrieving revision 1.2
retrieving revision 1.3
diff -Ltests/settings.ik -Ltests/settings.ik -u -w -r1.2 -r1.3
--- tests/settings.ik
+++ tests/settings.ik
@@ -2,6 +2,8 @@
 CLUSTER2=${CLUSTER2:-"slony_regress2"}
 CLUSTER3=${CLUSTER3:-"slony_regress3"}
 
+ENCODING=${ENCODING:-"UNICODE"}
+
 DB1=${DB1:-"slonyregress1"}
 HOST1=${HOST1:-"localhost"}
 USER1=${USER1:-${PGUSER:-"postgres"}}
Index: run_test.sh
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/tests/run_test.sh,v
retrieving revision 1.3
retrieving revision 1.4
diff -Ltests/run_test.sh -Ltests/run_test.sh -u -w -r1.3 -r1.4
--- tests/run_test.sh
+++ tests/run_test.sh
@@ -233,9 +233,9 @@
 
 	if [ -n "${db}" -a "${host}" -a "${user}" ]; then
 	  status "creating origin DB: $user -h $host -U $user -p $port $db"
-  	  $pgbindir/createdb -O $user -h $host -U $user -p $port $db 1> ${mktmp}/createdb.${originnode} 2> ${mktmp}/createdb.${originnode}
+  	  $pgbindir/createdb -O $user -h $host -U $user -p $port --encoding $ENCODING $db 1> ${mktmp}/createdb.${originnode} 2> ${mktmp}/createdb.${originnode}
 	  if [ $? -ne 0 ]; then	   
-	    err 3 "An error occured trying to $pgbindir/createdb -O $user -h $host -U $user -p $port $db, ${mktmp}/createdb.${originnode} for details"
+	    err 3 "An error occured trying to $pgbindir/createdb -O $user -h $host -U $user -p $port --encoding $ENCODING $db, ${mktmp}/createdb.${originnode} for details"
 	  fi
 	else
 	  err 3 "No db '${db}' or host '${host}' or user '${user}' or port '${port}' specified"
@@ -266,7 +266,7 @@
             if [ -n "${db}" -a "${host}" -a "${user}" -a "${port}" ]; then
               if [ ${alias} -ne ${originnode} ]; then
 		status "creating subscriber ${alias} DB: $user -h $host -U $user -p $port $db"
-	        $pgbindir/createdb -O $user -h $host -U $user -p $port $db 1> ${mktmp}/createdb.${alias} 2> ${mktmp}/createdb.${alias}
+	        $pgbindir/createdb -O $user -h $host -U $user -p $port --encoding $ENCODING $db 1> ${mktmp}/createdb.${alias} 2> ${mktmp}/createdb.${alias}
 		status "loading subscriber ${alias} DB from $odb"
 	        $opgbindir/pg_dump -s  -h $ohost -U $ouser -p $oport $odb | $pgbindir/psql -h $host -p $port $db $user 1> ${mktmp}/init_schema.sql.${alias} 2> ${mktmp}/init_schema.sql.${alias}
 		status "done"
@@ -380,6 +380,7 @@
 	  $pgbindir/slonik < $mktmp/slonik.script > $mktmp/slonik.log 2>&1
 	  if [ $? -ne 0 ]; then
 	    err 3 "Slonik error see $mktmp/slonik.log for details"
+	    cat $mktmp/slonik.log
 	  fi
 	fi
 }
Index: init_subscribe_set.ik
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/tests/test2/init_subscribe_set.ik,v
retrieving revision 1.1
retrieving revision 1.2
diff -Ltests/test2/init_subscribe_set.ik -Ltests/test2/init_subscribe_set.ik -u -w -r1.1 -r1.2
--- tests/test2/init_subscribe_set.ik
+++ tests/test2/init_subscribe_set.ik
@@ -1,4 +1,4 @@
 	subscribe set ( id = 1, provider = 1, receiver = 2, forward = yes);
 wait for event (origin = 1, confirmed = 2);
-	subscribe set ( id = 1, provider = 2, receiver = 3, forward = no);
+subscribe set ( id = 1, provider = 2, receiver = 3, forward = yes);
 wait for event (origin = 1, confirmed = 3);
Index: generate_dml.sh
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/tests/test2/generate_dml.sh,v
retrieving revision 1.2
retrieving revision 1.3
diff -Ltests/test2/generate_dml.sh -Ltests/test2/generate_dml.sh -u -w -r1.2 -r1.3
--- tests/test2/generate_dml.sh
+++ tests/test2/generate_dml.sh
@@ -73,28 +73,35 @@
     if [ $? -ne 0 ]; then
       warn 3 "do_initdata failed, see $mktmp/initdata.log for details"
     fi
-echo "preamble"
+echo "move set from node 1 to node 2"
+    init_preamble
+    cat ${testname}/init_moveset.ik  >> $mktmp/slonik.script
+    do_ik
+echo "fail over from node 2 to node 3"    
+    init_preamble
+    cat ${testname}/init_failover.ik  >> $mktmp/slonik.script
+    do_ik
+echo "failover ik done"
+echo "destroy node 1"
+    $pgbindir/dropdb -h $host slonyregress1
+    sleep 1
+echo "stop polling/slons"
     stop_poll
     stop_slons
     sleep 3
-#    $pgbindir/dropdb -h $host $db
-    $pgbindir/dropdb -h $host slonyregress2
-    sleep 1
+echo "restart slons"
     launch_slon
-    
-    init_preamble
-    cat ${testname}/init_failover.ik  >> $mktmp/slonik.script
-    do_ik
-echo "ik done"
     launch_poll
     status "loading second set of ${splitsize} rows of data"
     $pgbindir/psql -h $host $db $user < $mktmp/generate.data.ab 1>> $mktmp/initdata.log 2> $mktmp/initdata.log
     if [ $? -ne 0 ]; then
       warn 3 "do_initdata failed, see $mktmp/initdata.log for details"
     fi
-    status "loading remaining rows of data"
-    ${testname}/init_dropnode.sh > $mktmp/slonik.script
+echo "drop node 2"    
+    . ${testname}/init_dropnode.sh > $mktmp/slonik.script
+    cp $mktmp/slonik.script $mktmp/dropnode.slonik
     do_ik
+    status "loading remaining rows of data"
     $pgbindir/psql -h $host $db $user < $mktmp/generate.data.ac 1>> $mktmp/initdata.log 2> $mktmp/initdata.log
     if [ $? -ne 0 ]; then
       warn 3 "do_initdata failed, see $mktmp/initdata.log for details"
Index: init_failover.ik
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/tests/test2/init_failover.ik,v
retrieving revision 1.1
retrieving revision 1.2
diff -Ltests/test2/init_failover.ik -Ltests/test2/init_failover.ik -u -w -r1.1 -r1.2
--- tests/test2/init_failover.ik
+++ tests/test2/init_failover.ik
@@ -1,3 +1,3 @@
 failover (id = 2, backup node = 3);
 wait for event (origin = 1, confirmed = 3);
-#drop node (id = 2);
+
Index: init_dropnode.sh
===================================================================
RCS file: /usr/local/cvsroot/slony1/slony1-engine/tests/test2/init_dropnode.sh,v
retrieving revision 1.2
retrieving revision 1.3
diff -Ltests/test2/init_dropnode.sh -Ltests/test2/init_dropnode.sh -u -w -r1.2 -r1.3
--- tests/test2/init_dropnode.sh
+++ tests/test2/init_dropnode.sh
@@ -1,8 +1,6 @@
-echo <<EOF
-CLUSTER NAME = $CLUSTER1
-NODE 1 ADMIN CONNINFO = 'dbname=$DB1 host=$HOST1 user=$USER1 port=$PORT1 ';
+echo "
+CLUSTER NAME = $CLUSTER1;
+NODE 2 ADMIN CONNINFO = 'dbname=$DB2 host=$HOST2 user=$USER2 port=$PORT2 ';
 NODE 3 ADMIN CONNINFO = 'dbname=$DB3 host=$HOST3 user=$USER3 port=$PORT3 ';
-drop node (id = 2);
-EOF
-
-
+drop node (id = 2, event node = 1);
+"
\ No newline at end of file


More information about the Slony1-commit mailing list