1*86714001SSerapheim Dimitropoulos#!/usr/bin/ksh -p 2*86714001SSerapheim Dimitropoulos 3*86714001SSerapheim Dimitropoulos# 4*86714001SSerapheim Dimitropoulos# This file and its contents are supplied under the terms of the 5*86714001SSerapheim Dimitropoulos# Common Development and Distribution License ("CDDL"), version 1.0. 6*86714001SSerapheim Dimitropoulos# You may only use this file in accordance with the terms of version 7*86714001SSerapheim Dimitropoulos# 1.0 of the CDDL. 8*86714001SSerapheim Dimitropoulos# 9*86714001SSerapheim Dimitropoulos# A full copy of the text of the CDDL should have accompanied this 10*86714001SSerapheim Dimitropoulos# source. A copy of the CDDL is also available via the Internet at 11*86714001SSerapheim Dimitropoulos# http://www.illumos.org/license/CDDL. 12*86714001SSerapheim Dimitropoulos# 13*86714001SSerapheim Dimitropoulos 14*86714001SSerapheim Dimitropoulos# 15*86714001SSerapheim Dimitropoulos# Copyright (c) 2017 by Delphix. All rights reserved. 16*86714001SSerapheim Dimitropoulos# 17*86714001SSerapheim Dimitropoulos 18*86714001SSerapheim Dimitropoulos. $STF_SUITE/tests/functional/pool_checkpoint/pool_checkpoint.kshlib 19*86714001SSerapheim Dimitropoulos 20*86714001SSerapheim Dimitropoulos# 21*86714001SSerapheim Dimitropoulos# DESCRIPTION: 22*86714001SSerapheim Dimitropoulos# Try each 'zpool checkpoint' and relevant 'zpool import' with 23*86714001SSerapheim Dimitropoulos# invalid inputs to ensure it returns an error. That includes: 24*86714001SSerapheim Dimitropoulos# * A non-existent pool name or no pool name at all is supplied 25*86714001SSerapheim Dimitropoulos# * Pool supplied for discarding or rewinding but the pool 26*86714001SSerapheim Dimitropoulos# does not have a checkpoint 27*86714001SSerapheim Dimitropoulos# * A dataset or a file/directory are supplied instead of a pool 28*86714001SSerapheim Dimitropoulos# 29*86714001SSerapheim Dimitropoulos# STRATEGY: 30*86714001SSerapheim Dimitropoulos# 1. Create an array of parameters for the different scenarios 31*86714001SSerapheim Dimitropoulos# 2. For each parameter, execute the scenarios sub-command 32*86714001SSerapheim Dimitropoulos# 3. Verify that an error was returned 33*86714001SSerapheim Dimitropoulos# 34*86714001SSerapheim Dimitropoulos 35*86714001SSerapheim Dimitropoulosverify_runnable "global" 36*86714001SSerapheim Dimitropoulos 37*86714001SSerapheim Dimitropoulossetup_test_pool 38*86714001SSerapheim Dimitropouloslog_onexit cleanup_test_pool 39*86714001SSerapheim Dimitropoulospopulate_test_pool 40*86714001SSerapheim Dimitropoulos 41*86714001SSerapheim Dimitropoulos# 42*86714001SSerapheim Dimitropoulos# Argument groups below. Note that all_args also includes 43*86714001SSerapheim Dimitropoulos# an empty string as "run command with no argument". 44*86714001SSerapheim Dimitropoulos# 45*86714001SSerapheim Dimitropoulosset -A all_args "" "-d" "--discard" 46*86714001SSerapheim Dimitropoulos 47*86714001SSerapheim Dimitropoulos# 48*86714001SSerapheim Dimitropoulos# Target groups below. Note that invalid_targets includes 49*86714001SSerapheim Dimitropoulos# an empty string as "do not supply a pool name". 50*86714001SSerapheim Dimitropoulos# 51*86714001SSerapheim Dimitropoulosset -A invalid_targets "" "iDontExist" "$FS0" "$FS0FILE" 52*86714001SSerapheim Dimitropoulosnon_checkpointed="$TESTPOOL" 53*86714001SSerapheim Dimitropoulos 54*86714001SSerapheim Dimitropoulos# 55*86714001SSerapheim Dimitropoulos# Scenario 1 56*86714001SSerapheim Dimitropoulos# Trying all checkpoint args with all invalid targets 57*86714001SSerapheim Dimitropoulos# 58*86714001SSerapheim Dimitropoulostypeset -i i=0 59*86714001SSerapheim Dimitropouloswhile (( i < ${#invalid_targets[*]} )); do 60*86714001SSerapheim Dimitropoulos typeset -i j=0 61*86714001SSerapheim Dimitropoulos while (( j < ${#all_args[*]} )); do 62*86714001SSerapheim Dimitropoulos log_mustnot zpool checkpoint ${all_args[j]} \ 63*86714001SSerapheim Dimitropoulos ${invalid_targets[i]} 64*86714001SSerapheim Dimitropoulos ((j = j + 1)) 65*86714001SSerapheim Dimitropoulos done 66*86714001SSerapheim Dimitropoulos ((i = i + 1)) 67*86714001SSerapheim Dimitropoulosdone 68*86714001SSerapheim Dimitropoulos 69*86714001SSerapheim Dimitropoulos# 70*86714001SSerapheim Dimitropoulos# Scenario 2 71*86714001SSerapheim Dimitropoulos# If the pool does not have a checkpoint, -d nor import rewind 72*86714001SSerapheim Dimitropoulos# should work with it. 73*86714001SSerapheim Dimitropoulos# 74*86714001SSerapheim Dimitropouloslog_mustnot zpool checkpoint -d $non_checkpointed 75*86714001SSerapheim Dimitropouloslog_must zpool export $non_checkpointed 76*86714001SSerapheim Dimitropouloslog_mustnot zpool import --rewind-to-checkpoint $non_checkpointed 77*86714001SSerapheim Dimitropouloslog_must zpool import $non_checkpointed 78*86714001SSerapheim Dimitropoulos 79*86714001SSerapheim Dimitropouloslog_pass "Badly formed checkpoint related commands with " \ 80*86714001SSerapheim Dimitropoulos "invalid inputs fail as expected." 81