1eda14cbcSMatt Macy#!/bin/ksh -p
2eda14cbcSMatt Macy
3eda14cbcSMatt Macy#
4eda14cbcSMatt Macy# This file and its contents are supplied under the terms of the
5eda14cbcSMatt Macy# Common Development and Distribution License ("CDDL"), version 1.0.
6eda14cbcSMatt Macy# You may only use this file in accordance with the terms of version
7eda14cbcSMatt Macy# 1.0 of the CDDL.
8eda14cbcSMatt Macy#
9eda14cbcSMatt Macy# A full copy of the text of the CDDL should have accompanied this
10eda14cbcSMatt Macy# source.  A copy of the CDDL is also available via the Internet at
11eda14cbcSMatt Macy# http://www.illumos.org/license/CDDL.
12eda14cbcSMatt Macy#
13eda14cbcSMatt Macy
14eda14cbcSMatt Macy#
15eda14cbcSMatt Macy# Copyright (c) 2016 by Delphix. All rights reserved.
16eda14cbcSMatt Macy#
17eda14cbcSMatt Macy
18eda14cbcSMatt Macy. $STF_SUITE/tests/functional/cli_root/zpool_import/zpool_import.kshlib
19eda14cbcSMatt Macy
20eda14cbcSMatt Macy#
21eda14cbcSMatt Macy# DESCRIPTION:
22eda14cbcSMatt Macy#	A pool should be importable even if device paths have changed.
23eda14cbcSMatt Macy#
24eda14cbcSMatt Macy# STRATEGY:
25eda14cbcSMatt Macy#	1. Create a pool.
26eda14cbcSMatt Macy#	2. Export the pool.
27eda14cbcSMatt Macy#	3. Change the paths of some of the devices.
28eda14cbcSMatt Macy#	4. Verify that we can import the pool in a healthy state.
29eda14cbcSMatt Macy#
30eda14cbcSMatt Macy
31eda14cbcSMatt Macyverify_runnable "global"
32eda14cbcSMatt Macy
33eda14cbcSMatt Macylog_onexit cleanup
34eda14cbcSMatt Macy
35eda14cbcSMatt Macyfunction test_new_paths
36eda14cbcSMatt Macy{
37eda14cbcSMatt Macy	typeset poolcreate="$1"
38eda14cbcSMatt Macy	typeset pathstochange="$2"
39eda14cbcSMatt Macy
40eda14cbcSMatt Macy	log_note "$0: pool '$poolcreate', changing paths of $pathstochange."
41eda14cbcSMatt Macy
42eda14cbcSMatt Macy	log_must zpool create $TESTPOOL1 $poolcreate
43eda14cbcSMatt Macy
44eda14cbcSMatt Macy	log_must zpool export $TESTPOOL1
45eda14cbcSMatt Macy
46eda14cbcSMatt Macy	for dev in $pathstochange; do
47eda14cbcSMatt Macy		log_must mv $dev "${dev}_new"
48eda14cbcSMatt Macy	done
49eda14cbcSMatt Macy
50eda14cbcSMatt Macy	log_must zpool import -d $DEVICE_DIR $TESTPOOL1
51eda14cbcSMatt Macy	log_must check_pool_healthy $TESTPOOL1
52eda14cbcSMatt Macy
53eda14cbcSMatt Macy	# Cleanup
54eda14cbcSMatt Macy	log_must zpool destroy $TESTPOOL1
55eda14cbcSMatt Macy	for dev in $pathstochange; do
56eda14cbcSMatt Macy		log_must mv "${dev}_new" $dev
57eda14cbcSMatt Macy	done
58eda14cbcSMatt Macy
59eda14cbcSMatt Macy	log_note ""
60eda14cbcSMatt Macy}
61eda14cbcSMatt Macy
62eda14cbcSMatt Macyfunction test_swap_paths
63eda14cbcSMatt Macy{
64eda14cbcSMatt Macy	typeset poolcreate="$1"
65eda14cbcSMatt Macy	typeset pathtoswap1="$2"
66eda14cbcSMatt Macy	typeset pathtoswap2="$3"
67eda14cbcSMatt Macy
68eda14cbcSMatt Macy	log_note "$0: pool '$poolcreate', swapping paths of $pathtoswap1" \
69eda14cbcSMatt Macy	    "and $pathtoswap2."
70eda14cbcSMatt Macy
71eda14cbcSMatt Macy	log_must zpool create $TESTPOOL1 $poolcreate
72eda14cbcSMatt Macy
73eda14cbcSMatt Macy	log_must zpool export $TESTPOOL1
74eda14cbcSMatt Macy
75eda14cbcSMatt Macy	log_must mv $pathtoswap2 "$pathtoswap2.tmp"
76eda14cbcSMatt Macy	log_must mv $pathtoswap1 "$pathtoswap2"
77eda14cbcSMatt Macy	log_must mv "$pathtoswap2.tmp" $pathtoswap1
78eda14cbcSMatt Macy
79eda14cbcSMatt Macy	log_must zpool import -d $DEVICE_DIR $TESTPOOL1
80eda14cbcSMatt Macy	log_must check_pool_healthy $TESTPOOL1
81eda14cbcSMatt Macy
82eda14cbcSMatt Macy	# Cleanup
83eda14cbcSMatt Macy	log_must zpool destroy $TESTPOOL1
84eda14cbcSMatt Macy
85eda14cbcSMatt Macy	log_note ""
86eda14cbcSMatt Macy}
87eda14cbcSMatt Macy
88eda14cbcSMatt Macytest_new_paths "$VDEV0 $VDEV1" "$VDEV0 $VDEV1"
89eda14cbcSMatt Macytest_new_paths "mirror $VDEV0 $VDEV1" "$VDEV0 $VDEV1"
90eda14cbcSMatt Macytest_new_paths "$VDEV0 log $VDEV1" "$VDEV1"
91eda14cbcSMatt Macytest_new_paths "raidz $VDEV0 $VDEV1 $VDEV2" "$VDEV1"
927877fdebSMatt Macytest_new_paths "draid $VDEV0 $VDEV1 $VDEV2" "$VDEV1"
93eda14cbcSMatt Macy
94eda14cbcSMatt Macytest_swap_paths "$VDEV0 $VDEV1" "$VDEV0" "$VDEV1"
95eda14cbcSMatt Macytest_swap_paths "raidz $VDEV0 $VDEV1 $VDEV2" "$VDEV0" "$VDEV1"
967877fdebSMatt Macytest_swap_paths "draid $VDEV0 $VDEV1 $VDEV2" "$VDEV0" "$VDEV1"
97eda14cbcSMatt Macytest_swap_paths "mirror $VDEV0 $VDEV1 mirror $VDEV2 $VDEV3" \
98eda14cbcSMatt Macy    "$VDEV0" "$VDEV2"
99eda14cbcSMatt Macy
100eda14cbcSMatt Macylog_pass "zpool import succeeded after changing device paths."
101