summaryrefslogtreecommitdiff
path: root/qa/517
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2014-10-26 12:33:50 +0400
committerIgor Pashev <pashev.igor@gmail.com>2014-10-26 12:33:50 +0400
commit47e6e7c84f008a53061e661f31ae96629bc694ef (patch)
tree648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /qa/517
downloadpcp-debian.tar.gz
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'qa/517')
-rwxr-xr-xqa/517156
1 files changed, 156 insertions, 0 deletions
diff --git a/qa/517 b/qa/517
new file mode 100755
index 0000000..43ee06d
--- /dev/null
+++ b/qa/517
@@ -0,0 +1,156 @@
+#!/bin/sh
+# PCP QA Test No. 517
+# Test logic for config file migration, harvesting, cleanup as
+# part of a packaged install.
+#
+# Copyright (c) 2012 Ken McDonell. All Rights Reserved.
+#
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+# get standard environment, filters and checks
+. ./common.product
+. ./common.filter
+. ./common.check
+
+status=1 # failure is the default!
+$sudo rm -rf $tmp.* $seq.full
+trap "rm -rf $tmp.*; exit \$status" 0 1 2 3 15
+
+# ... copied directly from ../debian/cleanconfigs
+#
+
+# Function to do all of the configuration file migration work
+#
+_clean_configs()
+{
+ #
+ # Usage: _clean_configs [-v] new_dir old_dir ...
+ #
+ # Across all the files in the new_dir and old_dir args, match
+ # names and pick the most recently modified version and leave
+ # this (same mode and modification date) in new_dir
+ #
+ # -v option is verbose mode for debugging
+ #
+
+ _verbose=false
+ if [ $# -gt 0 -a X"$1" = "X-v" ]
+ then
+ _verbose=true
+ shift
+ fi
+
+ if [ $# -lt 2 ]
+ then
+ echo >&2 "Usage: _clean_configs [-v] new_dir old_dir ..."
+ return
+ fi
+
+ _new="$1"
+ if [ ! -d "$_new" ]
+ then
+ $verbose && echo >&2 + mkdir -p "$_new"
+ mkdir -p "$_new"
+ fi
+
+ shift
+ for _dir
+ do
+ [ "$_dir" = "$_new" ] && continue
+ if [ -d "$_dir" ]
+ then
+ ( cd "$_dir" ; find . -type f -print ) \
+ | sed -e 's/^\.\///' \
+ | while read _file
+ do
+ _want=false
+ if [ -f "$_new/$_file" ]
+ then
+ # file exists in both directories, pick the more
+ # recently modified one
+ #
+ _try=`find "$_dir/$_file" -newer "$_new/$_file" -print`
+ [ -n "$_try" ] && _want=true
+ else
+ _want=true
+ fi
+ if $_want
+ then
+ _dest=`dirname $_new/$_file`
+ if [ ! -d "$_dest" ]
+ then
+ $verbose && >&2 echo + mkdir "$_dest"
+ mkdir "$_dest"
+ fi
+ $_verbose && echo >&2 + cp -p "$_dir/$_file" "$_new/$_file"
+ cp -p "$_dir/$_file" "$_new/$_file"
+ fi
+ done
+ fi
+ done
+}
+
+
+_filter()
+{
+ sed \
+ -e "s;$tmp;/TMP;g" \
+ | LC_COLLATE=POSIX sort
+}
+
+_show()
+{
+ cd $1
+ find * -type f \
+ | while read x
+ do
+ $PCP_ECHO_PROG $PCP_ECHO_N "$x: ""$PCP_ECHO_C"
+ cat $x
+ done
+ cd $here
+}
+
+# real QA test starts here
+echo "Usage cases ..."
+_clean_configs
+_clean_configs "one_arg"
+_clean_configs -v "-v+one_arg"
+
+echo; echo "No dirs exist"
+_clean_configs -v $tmp.new old1 old2 2>&1 | _filter
+
+echo; echo "Empty new dir, harvest all, no name matches"
+mkdir $tmp.old1
+mkdir $tmp.old2
+echo foo >$tmp.old1/foo
+echo bar >$tmp.old1/bar
+echo mumble >$tmp.old2/mumble
+echo fumble >$tmp.old2/fumble
+echo stumble >$tmp.old2/stumble
+_clean_configs -v $tmp.new $tmp.old1 $tmp.old2 2>&1 | _filter
+_show $tmp.new
+
+yesterday=`pmdate -1d %Y%m%d%H%M`
+echo; echo "All names match, some older files"
+touch -t $yesterday $tmp.new/mumble
+echo "newer mumble" >$tmp.old2/mumble
+touch -t $yesterday $tmp.old1/bar
+echo "newer bar" >$tmp.new/bar
+_clean_configs -v $tmp.new $tmp.old1 $tmp.old2 2>&1 | _filter
+_show $tmp.new
+
+echo; echo "Hybid cases"
+echo "older bar" >$tmp.old2/bar
+touch -t $yesterday $tmp.old2/bar
+rm $tmp.new/foo
+echo "older foo" >$tmp.old1/foo
+touch -t $yesterday $tmp.old1/foo
+echo foo >$tmp.old2/foo
+rm $tmp.new/fumble
+_clean_configs -v $tmp.new $tmp.old1 $tmp.old2 2>&1 | _filter
+_show $tmp.new
+
+status=0
+exit