This patch adds a build-time test for the metadata replication feature.
Note that this is not a complete test, in particular it does not
verify that the database was synched correctly at the slave.
But it verifies quite a bit.

Signed-off-by: Pete Zaitcev <zait...@redhat.com>

---
 server/metarep.c |    2 +-
 test/Makefile.am          |    2 +
 test/metadata-rep         |   48 ++++++++++++++++++++++++++++++++++++
 test/prep-db              |    2 +
 test/stop-daemon          |   15 ++++++++---
 test/tabled-test-bis.conf |   21 +++++++++++++++
 test/wait-for-listen.c    |   11 +++++++-
 6 files changed, 94 insertions(+), 5 deletions(-)

commit 5a8b74d5541bbdf111f037246883182efaf637ba
Author: Pete Zaitcev <zait...@yahoo.com>
Date:   Thu Aug 12 12:44:30 2010 -0600

    Test for metadata replication (incomlete - does not verify
    key integrity, just that server thinks it went slave).

diff --git a/test/Makefile.am b/test/Makefile.am
index 9264cba..7799a79 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -7,6 +7,7 @@ EXTRA_DIST =                    \
        users.data              \
        chunkd-test.conf        \
        tabled-test.conf        \
+       tabled-test-bis.conf    \
        prep-db                 \
        start-daemon            \
        pid-exists              \
@@ -26,6 +27,7 @@ TESTS =                               \
        large-object            \
        hdr-content-type        \
        hdr-meta                \
+       metadata-rep            \
        stop-daemon             \
        clean-db
 
diff --git a/test/metadata-rep b/test/metadata-rep
new file mode 100644
index 0000000..b8b84f7
--- /dev/null
+++ b/test/metadata-rep
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+#
+# First, start the tabled-bis
+#
+# We use tee so that if things go pear-shaped in Fedora build system,
+# we get to see the error. In the same time we use the log to see
+# how far the test went.
+#
+# However, a pipeline with tee makes us to use a non-daemonized tabled
+# and then put it into background with normal shell means.
+#
+(../server/tabled -C $top_srcdir/test/tabled-test-bis.conf -E -F 2>&1 | tee 
tabled-bis.log) &
+
+# Why so much? Well... The time needed is gated by the time the master
+# needs to re-read the group in CLD. Until the re-read happens, the
+# would-be slave is rejected with "unknown slave". We could easily
+# pre-seed the group with the TDBRepName using cldcli, but that would
+# be cheating. So, that's 50s (cldu_rescan_delay). Then, we need to
+# give slave time to retry, done once in 35s (TABLED_MCWAIT_SEC).
+# That's 85s. And add a few seconds for databases to sync.
+echo "Sleeping 90s"
+sleep 90
+
+# Signal slave to dump the authoritative state
+kill -USR1 $(cat tabled-bis.pid)
+sleep 3
+
+grep -s "TDB: group default state Slave" tabled-bis.log
+if [ "$?" != 0 ]; then
+  echo "The slave state is not found in the log" >&2
+  exit 1
+fi
+
+kill $(cat tabled.pid)
+
+# This is pits. The wait-for-listen waits for 25s, but sometimes fails.
+# But when it succeeds, it's always "went up after 0 s". What the deuce.
+sleep 10
+
+echo "Running wait-for-listen"
+./wait-for-listen tabled-bis.acc
+if [ "$?" != 0 ]; then
+  # don't echo anything, wait-for-listen prints an error
+  exit 1
+fi
+
+exit 0
diff --git a/test/prep-db b/test/prep-db
index ef90e1c..a44c9be 100755
--- a/test/prep-db
+++ b/test/prep-db
@@ -2,10 +2,12 @@
 
 DATADIR=data
 TDBDIR=$DATADIR/tdb
+TDB2DIR=$DATADIR/tdb-bis
 CLDDIR=$DATADIR/cld
 CHUNKDIR=$DATADIR/chunk
 
 mkdir -p $TDBDIR
+mkdir -p $TDB2DIR
 mkdir -p $CLDDIR
 mkdir -p $CHUNKDIR
 
diff --git a/test/stop-daemon b/test/stop-daemon
index de5db0c..17a9b13 100755
--- a/test/stop-daemon
+++ b/test/stop-daemon
@@ -19,28 +19,35 @@ killpid () {
        return 1
 }
 
-rm -f cld.port tabled.acc
+rm -f cld.port tabled.acc tabled-bis.acc tabled-bis.log
 
 ret=0
 
 if [ ! -f tabled.pid ]
 then
        # Just a warning. Previous test somehow made the daemon to die.
-       echo "No tabled PID file found." >&2
+       echo "No tabled.pid file found." >&2
 else
        killpid tabled.pid || ret=1
 fi
 
+if [ ! -f tabled-bis.pid ]
+then
+       echo "No tabled-bis.pid file found." >&2
+else
+       killpid tabled-bis.pid || ret=1
+fi
+
 if [ ! -f chunkd.pid ]
 then
-       echo "No chunkd PID file found." >&2
+       echo "No chunkd.pid file found." >&2
 else
        killpid chunkd.pid || ret=1
 fi
 
 if [ ! -f cld.pid ]
 then
-       echo "No cld PID file found." >&2
+       echo "No cld.pid file found." >&2
 else
        killpid cld.pid || ret=1
 fi
diff --git a/test/tabled-test-bis.conf b/test/tabled-test-bis.conf
new file mode 100644
index 0000000..0130491
--- /dev/null
+++ b/test/tabled-test-bis.conf
@@ -0,0 +1,21 @@
+
+<PID>tabled-bis.pid</PID>
+<ForceHost>localhost.localdomain</ForceHost>
+<Listen>
+  <Port>auto</Port>
+  <PortFile>tabled-bis.acc</PortFile>
+</Listen>
+<TDB>data/tdb-bis</TDB>
+<TDBRepPort>auto</TDBRepPort>
+<TDBRepName>bis.localhost.localdomain</TDBRepName>
+
+<CLD>
+  <PortFile>cld.port</PortFile>
+  <Host>localhost</Host>
+</CLD>
+
+<ChunkUser>testuser</ChunkUser>
+<ChunkKey>testuser</ChunkKey>
+
+<!-- Setting "default" just to make sure tabled configures it correctly. -->
+<Group>default</Group>
diff --git a/test/wait-for-listen.c b/test/wait-for-listen.c
index fef5028..06bbaeb 100644
--- a/test/wait-for-listen.c
+++ b/test/wait-for-listen.c
@@ -86,13 +86,22 @@ int main(int argc, char **argv)
 {
        struct server_node snode, *sn = &snode;
        time_t start_time;
-       const static char accname[] = TEST_FILE_TB;
+       char *accname;
        char accbuf[80];
        char *s;
        int cnt;
        int sfd;
        int rc;
 
+       if (argc == 2) {
+               accname = argv[1];
+       } else if (argc == 1) {
+               accname = TEST_FILE_TB;
+       } else {
+               fprintf(stderr, "Usage: wait-for-listen [accessor.file]\n");
+               exit(1);
+       }
+
        cnt = 0;
        for (;;) {
                rc = tb_readport(accname, accbuf, sizeof(accbuf));
--
To unsubscribe from this list: send the line "unsubscribe hail-devel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to