diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
commit | 47e6e7c84f008a53061e661f31ae96629bc694ef (patch) | |
tree | 648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /qa/517 | |
download | pcp-debian.tar.gz |
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'qa/517')
-rwxr-xr-x | qa/517 | 156 |
1 files changed, 156 insertions, 0 deletions
@@ -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 |