PageRenderTime 38ms CodeModel.GetById 7ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/zfs-tests/tests/functional/cli_root/zfs_destroy/zfs_destroy_016_pos.ksh

http://github.com/zfsonlinux/zfs
Korn Shell | 186 lines | 143 code | 20 blank | 23 comment | 19 complexity | cdef2dbde655371092e893a0ba6978e9 MD5 | raw file
Possible License(s): Apache-2.0, MPL-2.0-no-copyleft-exception
  1. #!/bin/ksh
  2. #
  3. # This file and its contents are supplied under the terms of the
  4. # Common Development and Distribution License ("CDDL"), version 1.0.
  5. # You may only use this file in accordance with the terms of version
  6. # 1.0 of the CDDL.
  7. #
  8. # A full copy of the text of the CDDL should have accompanied this
  9. # source. A copy of the CDDL is also available via the Internet at
  10. # http://www.illumos.org/license/CDDL.
  11. #
  12. #
  13. # Copyright (c) 2012, 2016 by Delphix. All rights reserved.
  14. #
  15. # DESCRIPTION
  16. # Verify zfs destroy test for range of snapshots by giving a list
  17. # of valid and invalid arguments.
  18. # STRATEGY
  19. # 1. Create a list of valid and invalid arguments for range snapshot
  20. # destroy.
  21. # 2. Set up a filesystem and a volume with multiple snapshots
  22. # 3. Run zfs destroy for all the arguments and verify existence of snapshots
  23. # 4. Verify the destroy for snapshots with clones and hold
  24. . $STF_SUITE/include/libtest.shlib
  25. function cleanup
  26. {
  27. datasetexists $TESTPOOL/$TESTFS1 && \
  28. log_must zfs destroy -R $TESTPOOL/$TESTFS1
  29. datasetexists $TESTPOOL/$TESTVOL && \
  30. log_must zfs destroy -Rf $TESTPOOL/$TESTVOL
  31. }
  32. function setup_snapshots
  33. {
  34. for i in $snaps; do
  35. datasetexists $TESTPOOL/$TESTFS1@snap$i && \
  36. log_must zfs destroy $TESTPOOL/$TESTFS1@snap$i
  37. datasetexists $TESTPOOL/$TESTVOL@snap$i && \
  38. log_must zfs destroy $TESTPOOL/$TESTVOL@snap$i
  39. log_must zfs snapshot $TESTPOOL/$TESTFS1@snap$i
  40. log_must zfs snapshot $TESTPOOL/$TESTVOL@snap$i
  41. done
  42. }
  43. function verify_snapshots
  44. {
  45. typeset snap_exists=${1:-0}
  46. if [[ $snap_exists == 1 ]]; then
  47. for i in $range; do
  48. snapexists $TESTPOOL/$TESTFS1@snap$i || \
  49. log_fail "zfs destroy should not have destroyed" \
  50. "$TESTPOOL/$TESTFS1@snap$i"
  51. snapexists $TESTPOOL/$TESTVOL@snap$i || \
  52. log_fail "zfs destroy should not have destroyed" \
  53. "$TESTPOOL/$TESTVOL@snap$i"
  54. done
  55. else
  56. for i in $range; do
  57. snapexists $TESTPOOL/$TESTFS1@snap$i && \
  58. log_fail "zfs destroy should have destroyed" \
  59. "$TESTPOOL/$TESTFS1@snap$i"
  60. snapexists $TESTPOOL/$TESTVOL@snap$i && \
  61. log_fail "zfs destroy should have destroyed" \
  62. "$TESTPOOL/$TESTVOL@snap$i"
  63. done
  64. fi
  65. }
  66. invalid_args="@snap0%snap5 @snap1%snap6 @snap0%snap6 @snap5%snap1 \
  67. @snap1%$TESTPOOL/$TESTFS1@snap5 @snap1%%snap5 @snap1%@snap5 \
  68. @@snap1%snap5 snap1%snap5 snap1%snap3%snap5"
  69. valid_args="@snap1%snap5 @%"
  70. log_assert "zfs destroy deletes ranges of snapshots"
  71. log_onexit cleanup
  72. log_must zfs create $TESTPOOL/$TESTFS1
  73. log_must zfs create -V $VOLSIZE $TESTPOOL/$TESTVOL
  74. snaps="1 2 3 4 5"
  75. log_note "Verify the valid arguments"
  76. range="1 2 3 4 5"
  77. for args in $valid_args; do
  78. setup_snapshots
  79. log_must zfs destroy $TESTPOOL/$TESTFS1$args
  80. log_must zfs destroy $TESTPOOL/$TESTVOL$args
  81. verify_snapshots
  82. done
  83. log_note "Verify invalid arguments"
  84. setup_snapshots
  85. for args in $invalid_args; do
  86. log_mustnot zfs destroy $TESTPOOL/$TESTFS1$args
  87. log_mustnot zfs destroy $TESTPOOL/$TESTVOL$args
  88. log_must verify_snapshots 1
  89. done
  90. log_note "Destroy the beginning range"
  91. log_must zfs destroy $TESTPOOL/$TESTFS1@%snap3
  92. log_must zfs destroy $TESTPOOL/$TESTVOL@%snap3
  93. range="1 2 3"
  94. verify_snapshots
  95. range="4 5"
  96. verify_snapshots 1
  97. setup_snapshots
  98. log_note "Destroy the mid range"
  99. log_must zfs destroy $TESTPOOL/$TESTFS1@snap2%snap4
  100. log_must zfs destroy $TESTPOOL/$TESTVOL@snap2%snap4
  101. range="2 3 4"
  102. verify_snapshots
  103. log_must zfs destroy $TESTPOOL/$TESTFS1@snap1%snap5
  104. log_must zfs destroy $TESTPOOL/$TESTVOL@snap1%snap5
  105. range="1 5"
  106. verify_snapshots
  107. setup_snapshots
  108. log_note "Destroy the end range"
  109. log_must zfs destroy $TESTPOOL/$TESTFS1@snap3%
  110. log_must zfs destroy $TESTPOOL/$TESTVOL@snap3%
  111. range="1 2"
  112. verify_snapshots 1
  113. range="3 4 5"
  114. verify_snapshots
  115. setup_snapshots
  116. log_note "Destroy a simple list"
  117. log_must zfs destroy $TESTPOOL/$TESTFS1@snap2,snap4
  118. log_must zfs destroy $TESTPOOL/$TESTVOL@snap2,snap4
  119. range="2 4"
  120. verify_snapshots
  121. range="1 3 5"
  122. verify_snapshots 1
  123. setup_snapshots
  124. log_note "Destroy a list and range together"
  125. log_must zfs destroy $TESTPOOL/$TESTFS1@snap1%snap3,snap5
  126. log_must zfs destroy $TESTPOOL/$TESTVOL@snap1%snap3,snap5
  127. range="1 2 3 5"
  128. verify_snapshots
  129. range=4
  130. verify_snapshots 1
  131. snaps="1 2 3 5 6 7 8 9 10"
  132. setup_snapshots
  133. log_note "Destroy a list of ranges"
  134. log_must zfs destroy $TESTPOOL/$TESTFS1@snap1%snap3,snap5
  135. log_must zfs destroy $TESTPOOL/$TESTVOL@snap1%snap3,snap5
  136. range="1 2 3 5"
  137. verify_snapshots
  138. range=4
  139. verify_snapshots 1
  140. snaps="1 2 3 4 5"
  141. setup_snapshots
  142. log_note "Snapshot destroy with hold"
  143. range="1 2 3 4 5"
  144. for i in 1 2 3 4 5; do
  145. log_must zfs hold keep $TESTPOOL/$TESTFS1@snap$i
  146. log_must zfs hold keep $TESTPOOL/$TESTVOL@snap$i
  147. done
  148. log_mustnot zfs destroy $TESTPOOL/$TESTFS1@snap1%snap5
  149. log_mustnot zfs destroy $TESTPOOL/$TESTVOL@snap1%snap5
  150. verify_snapshots 1
  151. for i in 1 2 3 4 5; do
  152. log_must zfs release keep $TESTPOOL/$TESTFS1@snap$i
  153. log_must zfs release keep $TESTPOOL/$TESTVOL@snap$i
  154. done
  155. log_must zfs destroy $TESTPOOL/$TESTFS1@snap1%snap5
  156. log_must zfs destroy $TESTPOOL/$TESTVOL@snap1%snap5
  157. verify_snapshots
  158. log_note "Range destroy for snapshots having clones"
  159. setup_snapshots
  160. for i in 1 2 3 4 5; do
  161. log_must zfs clone $TESTPOOL/$TESTFS1@snap$i $TESTPOOL/$TESTFS1/clone$i
  162. done
  163. log_must zfs destroy -R $TESTPOOL/$TESTFS1@snap1%snap5
  164. log_must zfs destroy $TESTPOOL/$TESTVOL@snap1%snap5
  165. verify_snapshots
  166. log_pass "'zfs destroy' successfully destroys ranges of snapshots"