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