start:xcat_inventory_option_h
description:This case is used to test xcat-inventory usage information
cmd:xcat-inventory -h
check:ouptut=~usage: xcat-inventory
check:ouptut!~usage: xcat-inventory export
check:ouptut!~usage: xcat-inventory import
check:rc==0
cmd:xcat-inventory help
check:ouptut=~usage: xcat-inventory
check:ouptut!~usage: xcat-inventory export
check:ouptut!~usage: xcat-inventory import
check:rc==0
cmd:xcat-inventory help export
check:ouptut=~usage: xcat-inventory export
check:rc==0
cmd:xcat-inventory help import
check:output=~usage: xcat-inventory import
check:rc==0
cmd:xcat-inventory help help
check:output=~usage: xcat-inventory help
check:rc==0
end


start:xcat_inventory_option_V
description:This case is used to test xcat-inventory option V which used to get version information
cmd:xcat-inventory -V
check:ouptut=~\d\.\d
check:rc==0
end

start:xcat_inventory_invalid_subcmd
description:This case is used to test xcat-inventory export subcommand to handle invalid subcommand. The vaild subcommand are export and import.
cmd:xcat-inventory aaa
check:output=~ Error: not a valid subcommand to run
check:output=~ usage:
check:rc!=0
end

start:xcat_inventory_export_option_t_invalid_type
description:This case is used to test xcat-inventory export subcommand to handle invalid type for option t
cmd:xcat-inventory export -t aaa
check:output=~Invalid object type
check:output!~Traceback (most recent call last):
check:rc!=0
end

start:xcat_inventory_export_option_format_invalid_type
description:This case is used to test xcat-inventory export subcommand to handle invalid type for option format
cmd:xcat-inventory export --format aaa
check:output=~Invalid exporting format: aaa
check:output!~Traceback (most recent call last):
check:rc!=0
end

start:xcat_inventory_export_option_f
description:This case is used to test xcat-inventory export subcommand to handle option f
cmd:dir="/tmp/xcat_inventory_export_option_f";echo ${dir}".old";if [ -d "${dir}" ];then mv ${dir} ${dir}".old"; fi; mkdir -p $dir
check:rc==0
cmd:lsdef bogusnode > /dev/null 2>&1;if [[ $? -eq 0 ]]; then lsdef bogusnode -z >/tmp/xcat_inventory_export_option_f/bogusnode.stanza ;rmdef bogusnode;fi
check:rc==0
cmd:mkdef -t node -o bogusnode groups=bogusgroup
check:rc==0
cmd:xcat-inventory export --format=yaml -t node -o bogusnode | tee /tmp/xcat_inventory_export_option_f/export_yaml_without_f
check:rc==0
cmd:xcat-inventory export --format=yaml -t node -o bogusnode -f /tmp/xcat_inventory_export_option_f/export_yaml_with_f
check:rc==0
check:output !~Traceback
cmd:#!/bin/bash
diff -y --ignore-blank-lines --ignore-matching-lines="^#"   /tmp/xcat_inventory_export_option_f/export_yaml_without_f /tmp/xcat_inventory_export_option_f/export_yaml_with_f
check:rc==0
cmd:xcat-inventory export -t node -o bogusnode | tee /tmp/xcat_inventory_export_option_f/export_json_without_f
check:rc==0
cmd:xcat-inventory export -t node -o bogusnode --path /tmp/xcat_inventory_export_option_f/export_json_with_f
check:rc==0
cmd:#!/bin/bash
diff -y --ignore-blank-lines --ignore-matching-lines="^#"  /tmp/xcat_inventory_export_option_f/export_json_without_f  /tmp/xcat_inventory_export_option_f/export_json_with_f
check:rc==0
cmd:xcat-inventory export -t node -o bogusnode -f
check:rc!=0
check:output ~=usage
check:output ~= error: argument -f/--path: expected one argument
cmd:xcat-inventory export -t node -o bogusnode --path
check:rc!=0
eck:output ~=usage
check:output ~= error: argument -f/--path: expected one argument
cmd:mkdir /tmp/xcat_inventory_export_option_f/testdir
check:rc==0
cmd:xcat-inventory export -t node -o bogusnode -f /tmp/xcat_inventory_export_option_f/testdir
check:rc!=0
check:output ~= Error: the specified file /tmp/xcat_inventory_export_option_f/testdir already exists, is not a file!
cmd:rmdef bogusnode
check:rc==0
cmd:if [[ -e /tmp/xcat_inventory_export_option_f/bogusnode.stanza ]]; then cat /tmp/xcat_inventory_export_option_f/bogusnode.stanza | mkdef -z;fi
check:rc==0
cmd:dir="/tmp/xcat_inventory_export_option_f"; rm -rf $dir; if [ -d ${dir}".old" ];then mv ${dir}".old" $dir; fi
check:rc==0
end

start:xcat_inventory_import_option_f_invalid_file
description:This case is used to test xcat-inventory import subcommand to handle invalid file for option f
cmd:mkdir -p /tmp/xcat_inventory_import_option_f_invalid_file
check:rc==0
#to handle a non-existed file
cmd:xcat-inventory import -f aaa
check:output=~the directory  does not exist or is not a directory
check:output !~Traceback
check:rc!=0
#To handle a invalid json file
cmd:#!/usr/bin/bash
echo "{
    "node": {
        "bogusnode": {
            "device_type": "server",
            "obj_info": {
                "groups": "test"
            },
            "obj_type": "node",
            "role": "compute"
        }
    }
" > /tmp/xcat_inventory_import_option_f_invalid_file/invaild_json
check:rc==0
cmd:cat /tmp/xcat_inventory_import_option_f_invalid_file/invaild_json
check:rc==0
cmd:xcat-inventory import -f /tmp/xcat_inventory_import_option_f_invalid_file/invaild_json
check:output =~ Error: failed to load file
check:output !~Traceback
check:rc!=0
#To handle a invalid yaml file
cmd:#!/usr/bin/bash
echo "node:
    device_type: server
    obj_info:
      groups: test
    obj_type: node
    role: compute
"  > /tmp/xcat_inventory_import_option_f_invalid_file/invaild_yaml
check:rc==0
cmd:cat /tmp/xcat_inventory_import_option_f_invalid_file/invaild_yaml
check:rc==0
cmd:xcat-inventory import -f /tmp/xcat_inventory_import_option_f_invalid_file/invaild_yaml
check:output =~ Error:
check:output !~Traceback
check:rc!=0
cmd:rm -rf /tmp/xcat_inventory_import_option_f_invalid_file
check:rc==0
end


start:xcat_inventory_import_option_t_invalid_type
description:This case is used to test xcat-inventory import subcommand to handle invalid type for option t
cmd:xcat-inventory import -t aaa
check:output=~Invalid object type
check:output!~Traceback (most recent call last):
check:rc!=0
end


start:xcat_inventory_import_miss_option
description:This case is used to test xcat-inventory import subcommand to handle missing -t or -o option
cmd:mkdir -p /tmp/export_import_nodes_delimited_with_comma_by_json
check:rc==0
cmd:#!/usr/bin/bash
echo "{
    "node": {
        "test": {
            "device_type": "server",
            "obj_info": {
                "groups": "testgroup"
            },
            "obj_type": "node",
            "role": "compute"
        }
    }
}" >  /tmp/export_import_nodes_delimited_with_comma_by_json/aaa
cmd:xcat-inventory import -f /tmp/export_import_nodes_delimited_with_comma_by_json/aaa -o aaa
check:output=~Missing object type for object
check:rc!=0
cmd:rm -rf  /tmp/export_import_nodes_delimited_with_comma_by_json
check:rc==0
end
