| #!/bin/sh |
| |
| # Copyright (C) 2013 Red Hat, Inc. All rights reserved. |
| # |
| # This copyrighted material is made available to anyone wishing to use, |
| # modify, copy, or redistribute it subject to the terms and conditions |
| # of the GNU General Public License v.2. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program; if not, write to the Free Software Foundation, |
| # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| # |
| # test basic profile functionality |
| # |
| |
| SKIP_WITH_LVMLOCKD=1 |
| SKIP_WITH_LVMPOLLD=1 |
| |
| . lib/inittest |
| |
| MSG_FAILED_TO_APPLY_CMD_PROFILE="Failed to apply command profile" |
| MSG_IGNORING_INVALID_CMD_PROFILE="Ignoring invalid command profile" |
| MSG_FAILED_TO_APPLY_MDA_PROFILE="Failed to apply metadata profile" |
| MSG_IGNORING_INVALID_MDA_PROFILE="Ignoring invalid metadata profile" |
| MSG_NOT_PROFILABLE="not customizable by a profile" |
| MSG_CMD_PROFILABLE_ONLY="customizable by command profile only, not metadata profile" |
| MSG_MDA_PROFILABLE_ONLY="customizable by metadata profile only, not command profile" |
| |
| # fail if the profile requested by --profile cmdline option is not present |
| not pvs --profile nonexistent 2>&1 | grep "$MSG_FAILED_TO_APPLY_CMD_PROFILE" |
| |
| # config/checks=1: warning message about setting not being profilable + |
| # summary error message about invalid profile |
| # config/checks=0: just summary error message about invalid profile |
| aux profileconf invalid 'log/prefix=" "' |
| |
| aux lvmconf 'config/checks = 0' |
| not pvs --profile invalid 2>msg |
| not grep "$MSG_NOT_PROFILABLE" msg |
| grep "$MSG_IGNORING_INVALID_CMD_PROFILE" msg |
| grep "$MSG_FAILED_TO_APPLY_CMD_PROFILE" msg |
| |
| aux lvmconf 'config/checks = 1' |
| not pvs --profile invalid 2>msg |
| grep "$MSG_NOT_PROFILABLE" msg |
| grep "$MSG_IGNORING_INVALID_CMD_PROFILE" msg |
| grep "$MSG_FAILED_TO_APPLY_CMD_PROFILE" msg |
| |
| aux lvmconf 'allocation/thin_pool_zero = 1' |
| |
| # all profilable items listed here - should pass |
| aux profileconf valid_cmd_profile 'global/units = "h"' \ |
| 'global/si_unit_consistency = 1' \ |
| 'global/suffix = 1' \ |
| 'global/lvdisplay_shows_full_device_path = 0' \ |
| 'report/aligned = 1' \ |
| 'report/buffered = 1' \ |
| 'report/headings = 1' \ |
| 'report/separator = " "' \ |
| 'report/prefixes = 0' \ |
| 'report/quoted = 1' \ |
| 'report/colums_as_rows = 0' \ |
| 'report/devtypes_sort = "devtype_name"' \ |
| 'report/devtypes_cols = "devtype_name,devtype_max_partitions,devtype_description"' \ |
| 'report/devtypes_cols_verbose = "devtype_name,devtype_max_partitions,devtype_description"' \ |
| 'report/lvs_sort = "vg_name,lv_name"' \ |
| 'report/lvs_cols = "lv_name,vg_name,lv_attr,lv_size,pool_lv,origin,data_percent,move_pv,mirror_log,copy_percent,convert_lv"' \ |
| 'report/lvs_cols_verbose = "lv_name,vg_name,seg_count,lv_attr,lv_size,lv_major,lv_minor,lv_kernel_major,lv_kernel_minor,pool_lv,origin,data_percent,metadata_percent,move_pv,copy_percent,mirror_log,convert_lv,lv_uuid,lv_profile"' \ |
| 'report/vgs_sort = "vg_name"' \ |
| 'report/vgs_cols = "vg_name,pv_count,lv_count,snap_count,vg_attr,vg_size,vg_free"' \ |
| 'report/vgs_cols_verbose = "vg_name,vg_attr,vg_extent_size,pv_count,lv_count,snap_count,vg_size,vg_free,vg_uuid,vg_profile"' \ |
| 'report/pvs_sort = "pv_name"' \ |
| 'report/pvs_cols = "pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free"' \ |
| 'report/pvs_cols_verbose = "pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free,dev_size,pv_uuid"' \ |
| 'report/segs_sort = "vg_name,lv_name,seg_start"' \ |
| 'report/segs_cols = "lv_name,vg_name,lv_attr,stripes,segtype,seg_size"' \ |
| 'report/segs_cols_verbose = "lv_name,vg_name,lv_attr,seg_start,seg_size,stripes,segtype,stripesize,chunksize"' \ |
| 'report/pvsegs_sort = "pv_name,pvseg_start"' \ |
| 'report/pvsegs_cols = "pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free,pvseg_start,pvseg_size"' \ |
| 'report/pvsegs_cols_verbose = "pv_name,vg_name,pv_fmt,pv_attr,pv_size,pv_free,pvseg_start,pvseg_size,lv_name,seg_start_pe,segtype,seg_pe_ranges"' |
| |
| aux profileconf valid_mda_profile 'allocation/thin_pool_zero = 0' \ |
| 'allocation/thin_pool_discards = "passdown"' \ |
| 'allocation/thin_pool_chunk_size = 64'\ |
| 'activation/thin_pool_autoextend_threshold = 100' \ |
| 'activation/thin_pool_autoextend_percent = 20' \ |
| |
| |
| aux profileconf extra_mda_profile 'allocation/thin_pool_chunk_size = 128' |
| |
| pvs --profile valid_cmd_profile 2>msg |
| not grep "$MSG_NOT_PROFILABLE" msg |
| not grep "$MSG_IGNORING_INVALID_CMD_PROFILE" msg |
| not grep "$MSG_IGNORING_INVALID_MDA_PROFILE" msg |
| |
| not pvs --profile valid_mda_profile 2>msg |
| grep "$MSG_MDA_PROFILABLE_ONLY" msg |
| grep "$MSG_IGNORING_INVALID_CMD_PROFILE" msg |
| not grep "$MSG_IGNORING_INVALID_MDA_PROFILE" msg |
| |
| # attaching/detaching profiles to VG/LV |
| aux prepare_pvs 1 8 |
| pvcreate "$dev1" |
| vgcreate $vg1 "$dev1" |
| check vg_field $vg1 vg_profile "" |
| lvcreate -l 1 -n $lv1 $vg1 |
| check lv_field $vg1/$lv1 lv_profile "" |
| vgchange --profile valid_mda_profile $vg1 |
| check vg_field $vg1 vg_profile valid_mda_profile |
| check lv_field $vg1/$lv1 lv_profile "" |
| lvchange --profile extra_mda_profile $vg1/$lv1 |
| check vg_field $vg1 vg_profile valid_mda_profile |
| check lv_field $vg1/$lv1 lv_profile extra_mda_profile |
| vgchange --detachprofile $vg1 |
| check vg_field $vg1 vg_profile "" |
| check lv_field $vg1/$lv1 lv_profile extra_mda_profile |
| lvchange --detachprofile $vg1/$lv1 |
| check vg_field $vg1 vg_profile "" |
| check lv_field $vg1/$lv1 lv_profile "" |
| |
| # dumpconfig and merged lvm.conf + profile |
| aux lvmconf 'global/units="m"' |
| aux profileconf extra_cmd_profile 'global/units="h"' |
| lvm dumpconfig &>out |
| grep 'units="m"' out |
| lvm dumpconfig --profile extra_cmd_profile --mergedconfig >out |
| grep 'units="h"' out |
| |
| # dumpconfig --profilable output must be usable as a profile |
| lvm dumpconfig --type profilable-command --file etc/profile/generated.profile |
| pvs --profile generated &> msg |
| not grep "$MSG_NOT_PROFILABLE" msg |
| not grep "$MSG_IGNORING_INVALID_CMD_PROFILE" msg |