From 38893aebe92b03bd0a12aa1b0d3b92c5946d3aeb Mon Sep 17 00:00:00 2001 From: immarvin Date: Wed, 21 Mar 2018 06:06:46 -0400 Subject: [PATCH] add testcase for osimage validation --- .../xcat-inventory/cases.osimage.validation | 52 +++++ .../xcat-inventory/templates/osimage.json | 27 +++ .../xcat-inventory/templates/osimage.yaml | 21 ++ .../testcase/xcat-inventory/validatehelper | 188 ++++++++++++++++++ 4 files changed, 288 insertions(+) create mode 100644 xCAT-test/autotest/testcase/xcat-inventory/cases.osimage.validation create mode 100644 xCAT-test/autotest/testcase/xcat-inventory/templates/osimage.json create mode 100644 xCAT-test/autotest/testcase/xcat-inventory/templates/osimage.yaml create mode 100755 xCAT-test/autotest/testcase/xcat-inventory/validatehelper diff --git a/xCAT-test/autotest/testcase/xcat-inventory/cases.osimage.validation b/xCAT-test/autotest/testcase/xcat-inventory/cases.osimage.validation new file mode 100644 index 000000000..917ee8a1d --- /dev/null +++ b/xCAT-test/autotest/testcase/xcat-inventory/cases.osimage.validation @@ -0,0 +1,52 @@ +start: xcat_inventory_import_validation_osimage +description: verify the validation mechanisom while importing osimage object + +cmd: rm -rf /tmp/xcat_inventory_import_validation_osimage +cmd: mkdir -p /tmp/xcat_inventory_import_validation_osimage +cmd: mkdir -p /tmp/xcat_inventory_import_validation_osimage/trash/ +cmd: mkdir -p /tmp/xcat_inventory_import_validation_osimage/backup/ +cmd: lsdef -t osimage -o testosimage1 -z 2>/dev/null >/tmp/xcat_inventory_import_validation_osimage/backup/testosimage1.stanza + +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "role" "compute" "/tmp/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc==0 +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "role" "service" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc==0 +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "role" "invalid" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc!=0 +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "role" "" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc!=0 + +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "imagetype" "windows" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc==0 +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "imagetype" "linux" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc==0 +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "imagetype" "invalid" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc!=0 +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "imagetype" "" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc!=0 + + +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "provision_mode" "statelite" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc==0 +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "provision_mode" "install" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc==0 +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "provision_mode" "netboot" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc==0 +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "provision_mode" "invalid" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc!=0 +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "provision_mode" "" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc!=0 + + +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "rootfstype" "nfs" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc==0 +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "rootfstype" "ramdisk" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc==0 +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "rootfstype" "invalid" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc!=0 +cmd: /opt/xcat/share/xcat/tools/autotest/testcase/xcat-inventory/validatehelper "osimage" "testosimage1" "rootfstype" "" "/tmp/xcat_inventory_import_validation_osimage/trash/" +check: rc==0 + +cmd: cat /tmp/xcat_inventory_import_validation_osimage/backup/testosimage1.stanza 2>/dev/null |mkdef -z +cmd: rm -rf /tmp/xcat_inventory_import_validation_osimage +end diff --git a/xCAT-test/autotest/testcase/xcat-inventory/templates/osimage.json b/xCAT-test/autotest/testcase/xcat-inventory/templates/osimage.json new file mode 100644 index 000000000..d35a00144 --- /dev/null +++ b/xCAT-test/autotest/testcase/xcat-inventory/templates/osimage.json @@ -0,0 +1,27 @@ +{ + "osimage": { + "testosimage1": { + "basic_attributes": { + "arch": "ppc64le", + "distribution": "sles12.2", + "osdistro": "sles12.2-ppc64le" + }, + "filestosync": "/install/custom/netboot/sles/compute.synclist", + "genimgoptions": { + "exlist": "/opt/xcat/share/xcat/netboot/sles/compute.sles12.ppc64le.exlist", + "postinstall": "/opt/xcat/share/xcat/netboot/sles/compute.sles12.ppc64le.postinstall", + "rootimgdir": "/install/netboot/sles12.2/ppc64le/compute", + "rootfstype": "nfs" + }, + "imagetype": "linux", + "package_selection": { + "otherpkgdir": "/install/post/otherpkgs/sles12.2/ppc64le", + "pkgdir": "/install/sles12.2/ppc64le", + "pkglist": "/opt/xcat/share/xcat/netboot/sles/compute.sles12.ppc64le.pkglist" + }, + "provision_mode": "statelite", + "role": "compute" + } + }, + "schema_version": "1.0" +} diff --git a/xCAT-test/autotest/testcase/xcat-inventory/templates/osimage.yaml b/xCAT-test/autotest/testcase/xcat-inventory/templates/osimage.yaml new file mode 100644 index 000000000..f837d42fb --- /dev/null +++ b/xCAT-test/autotest/testcase/xcat-inventory/templates/osimage.yaml @@ -0,0 +1,21 @@ +osimage: + testosimage1: + basic_attributes: + arch: ppc64le + distribution: sles12.2 + osdistro: sles12.2-ppc64le + filestosync: /install/custom/netboot/sles/compute.synclist + genimgoptions: + exlist: /opt/xcat/share/xcat/netboot/sles/compute.sles12.ppc64le.exlist + postinstall: /opt/xcat/share/xcat/netboot/sles/compute.sles12.ppc64le.postinstall + rootimgdir: /install/netboot/sles12.2/ppc64le/compute + rootfstype: nfs + imagetype: linux + package_selection: + otherpkgdir: /install/post/otherpkgs/sles12.2/ppc64le + pkgdir: /install/sles12.2/ppc64le + pkglist: /opt/xcat/share/xcat/netboot/sles/compute.sles12.ppc64le.pkglist + provision_mode: statelite + role: compute +schema_version: '1.0' + diff --git a/xCAT-test/autotest/testcase/xcat-inventory/validatehelper b/xCAT-test/autotest/testcase/xcat-inventory/validatehelper new file mode 100755 index 000000000..0345fea6a --- /dev/null +++ b/xCAT-test/autotest/testcase/xcat-inventory/validatehelper @@ -0,0 +1,188 @@ +#!/usr/bin/bash + +objtype=$1 +objname=$2 +attribute=$3 +attrvalue=$4 +tmpdir=$5 + + +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink + DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + SOURCE="$(readlink "$SOURCE")" + [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located +done +DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + + +function usage { + echo "Usage:" + echo "${BASH_SOURCE[0]} [ OBJTYPE OBJNAME ATTRIBUTE ATTRVALUE TMPDIR]" +} + +echo objtype=\"${objtype}\" +echo objname=\"${objname}\" +echo attribute=\"${attribute}\" +echo attrvalue=\"${attrvalue}\" +echo tmpdir=\"${tmpdir}\" + + +if [ -z "$objtype" ] || [ -z "$objname" ] || [ -z "$attribute" ] || [ -z "$tmpdir" ]; then + usage + exit 1 +fi + +RETCODE_YAML=0 +RETCODE_JSON=0 + +[ -e "$tmpdir" ] || rm -rf $tmpdir +mkdir -p $tmpdir +echo "Temporary directory to hold intermediate files: $tmpdir" + +cp ${DIR}/templates/${objtype}.json ${tmpdir}/ +cp ${DIR}/templates/${objtype}.yaml ${tmpdir}/ + +#the intermediate inventory files to import +yamldef="${tmpdir}/${objtype}.yaml" +jsondef="${tmpdir}/${objtype}.json" + +#the intermediate inventory files exported +yamldefout="${tmpdir}/${objtype}.out.yaml" +jsondefout="${tmpdir}/${objtype}.out.json" + +#substitute the attribute value in inventory files +if [ ${#attrvalue} -ne 0 ];then + sed -i -E -e "s/^(\s*["'"'"']?$attribute["'"'"']?:\s*["'"'"']?)[^'"'"'"]*(["'"'"']?[,]?\s*)$/\1$attrvalue\2/g" $yamldef +else + sed -i -e "/^\s*["'"'"']*$attribute["'"'"']*:/d" $yamldef +fi + +echo "=================the inventory file to import: ${yamldef}=====================" +cat $yamldef +echo "==============================================================================" + +echo "removing existing \"$objtype\" type object \"$objname\" from xCAT" +echo "osimage node network site route zone policy "|grep -q -w "$objtype" +if [ $? -eq 0 ];then + rmdef -t $objtype -o $objname +fi +if [ "$objtype" = "passwd" ];then + tabch -d key=$objname passwd +fi + + +echo "import the inventory file $yamldef " +xcat-inventory import -t $objtype -o $objname -f $yamldef +if [ $? -ne 0 ];then + echo "failed to import the inventory file $yamldef" + RETCODE_YAML=1 +else + echo "the inventory file $yamldef imported successfully" + echo "export the \"$objtype\" type object \"$objname\" just imported" + xcat-inventory export -t $objtype -o $objname --format=yaml 1>$yamldefout + if [ $? -ne 0 ];then + echo "failed to export the \"$objtype\" type object \"$objname\"" + RETCODE_YAML=1 + else + echo "the inventory data of the \"$objtype\" type object \"$objname\" exported to $yamldefout" + echo "==============the exported inventory file $yamldefout======================" + cat $yamldefout + echo "===========================================================================" + echo "make sure the attribute $attribute is imported and exported successfully" + if [ -n "$attrvalue" ]; then + cat $yamldefout|grep -w "$attribute"|grep -q -w "$attrvalue" + if [ $? -ne 0 ];then + RETCODE_YAML=1 + fi + else + cat $yamldefout|grep -q -w "$attribute" + if [ $? -eq 0 ];then + RETCODE_YAML=1 + fi + fi + + + fi +fi + +if [ $RETCODE_YAML -eq 0 ]; then + echo "yaml validation passed" +else + echo "yaml validation failed" +fi + +echo "removing existing \"$objtype\" type object \"$objname\" from xCAT" +echo "osimage node network site route zone policy "|grep -q -w "$objtype" +if [ $? -eq 0 ];then + rmdef -t $objtype -o $objname +fi + +if [ "$objtype" = "passwd" ];then + tabch -d key=$objname passwd +fi + + +if [ ${#attrvalue} -ne 0 ];then + sed -i -E -e "s/^(\s*["'"'"']?$attribute["'"'"']?:\s*["'"'"']?)[^'"'"'"]*(["'"'"']?[,]?\s*)$/\1$attrvalue\2/g" $jsondef +else + sed -i -e "/^\s*["'"'"']*$attribute["'"'"']*:/d" $jsondef +fi + +echo "=================the inventory file to import: ${jsondef}=====================" +cat $jsondef +echo "==============================================================================" + +echo "import the inventory file $jsondef " +xcat-inventory import -t $objtype -o $objname -f $jsondef +if [ $? -ne 0 ];then + echo "failed to import the inventory file $jsondef" + RETCODE_JSON=1 +else + xcat-inventory export -t $objtype -o $objname 1>$jsondefout + if [ $? -ne 0 ];then + echo "the inventory file $jsondef imported successfully" + echo "export the \"$objtype\" type object \"$objname\" just imported" + RETCODE_JSON=1 + else + echo "the inventory data of the \"$objtype\" type object \"$objname\" exported to $jsondefout" + echo "==============the exported inventory file $jsondefout======================" + cat $jsondefout + echo "===========================================================================" + echo "make sure the attribute $attribute is imported and exported successfully" + if [ -n "$attrvalue" ]; then + cat $jsondefout|grep -w "$attribute"|grep -q -w "$attrvalue" + if [ $? -ne 0 ];then + RETCODE_JSON=1 + fi + else + cat $jsondefout|grep -q -w "$attribute" + if [ $? -eq 0 ];then + RETCODE_JSON=1 + fi + fi + + fi +fi + +if [ $RETCODE_JSON -eq 0 ]; then + echo "json validation passed" +else + echo "json validation failed" +fi + + +echo "osimage node network site route zone policy "|grep -q -w "$objtype" +if [ $? -eq 0 ];then + rmdef -t $objtype -o $objname +fi + +if [ "$objtype" = "passwd" ];then + tabch -d key=$objname passwd +fi + +if [ $RETCODE_YAML -ne 0 ] || [ $RETCODE_JSON -ne 0 ]; then + exit 1 +fi + +exit 0