mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	ZTS: test zfs.sync.clone() for filesystems and volumes
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Alexander Motin <mav@FreeBSD.org> Signed-off-by: Rob Norris <robn@despairlabs.com> Sponsored-by: https://despairlabs.com/sponsor/ Closes #17426
This commit is contained in:
		
							parent
							
								
									fbfda270d5
								
							
						
					
					
						commit
						1987498b66
					
				| @ -140,7 +140,7 @@ tests = ['tst.destroy_fs', 'tst.destroy_snap', 'tst.get_count_and_limit', | |||||||
|     'tst.promote_multiple', 'tst.promote_simple', 'tst.rollback_mult', |     'tst.promote_multiple', 'tst.promote_simple', 'tst.rollback_mult', | ||||||
|     'tst.rollback_one', 'tst.set_props', 'tst.snapshot_destroy', 'tst.snapshot_neg', |     'tst.rollback_one', 'tst.set_props', 'tst.snapshot_destroy', 'tst.snapshot_neg', | ||||||
|     'tst.snapshot_recursive', 'tst.snapshot_rename', 'tst.snapshot_simple', |     'tst.snapshot_recursive', 'tst.snapshot_rename', 'tst.snapshot_simple', | ||||||
|     'tst.bookmark.create', 'tst.bookmark.copy', |     'tst.bookmark.create', 'tst.bookmark.copy', 'tst.clone', | ||||||
|     'tst.terminate_by_signal' |     'tst.terminate_by_signal' | ||||||
|     ] |     ] | ||||||
| tags = ['functional', 'channel_program', 'synctask_core'] | tags = ['functional', 'channel_program', 'synctask_core'] | ||||||
|  | |||||||
| @ -84,7 +84,7 @@ tests = ['tst.destroy_fs', 'tst.destroy_snap', 'tst.get_count_and_limit', | |||||||
|     'tst.promote_multiple', 'tst.promote_simple', 'tst.rollback_mult', |     'tst.promote_multiple', 'tst.promote_simple', 'tst.rollback_mult', | ||||||
|     'tst.rollback_one', 'tst.set_props', 'tst.snapshot_destroy', |     'tst.rollback_one', 'tst.set_props', 'tst.snapshot_destroy', | ||||||
|     'tst.snapshot_neg', 'tst.snapshot_recursive', 'tst.snapshot_simple', |     'tst.snapshot_neg', 'tst.snapshot_recursive', 'tst.snapshot_simple', | ||||||
|     'tst.bookmark.create', 'tst.bookmark.copy'] |     'tst.bookmark.create', 'tst.bookmark.copy', 'tst.clone'] | ||||||
| tags = ['functional', 'channel_program', 'synctask_core'] | tags = ['functional', 'channel_program', 'synctask_core'] | ||||||
| 
 | 
 | ||||||
| [tests/functional/cli_root/zdb] | [tests/functional/cli_root/zdb] | ||||||
|  | |||||||
| @ -124,6 +124,7 @@ nobase_dist_datadir_zfs_tests_tests_DATA += \ | |||||||
| 	functional/channel_program/lua_core/tst.timeout.zcp \
 | 	functional/channel_program/lua_core/tst.timeout.zcp \
 | ||||||
| 	functional/channel_program/synctask_core/tst.bookmark.copy.zcp \
 | 	functional/channel_program/synctask_core/tst.bookmark.copy.zcp \
 | ||||||
| 	functional/channel_program/synctask_core/tst.bookmark.create.zcp \
 | 	functional/channel_program/synctask_core/tst.bookmark.create.zcp \
 | ||||||
|  | 	functional/channel_program/synctask_core/tst.clone.zcp \
 | ||||||
| 	functional/channel_program/synctask_core/tst.get_index_props.out \
 | 	functional/channel_program/synctask_core/tst.get_index_props.out \
 | ||||||
| 	functional/channel_program/synctask_core/tst.get_index_props.zcp \
 | 	functional/channel_program/synctask_core/tst.get_index_props.zcp \
 | ||||||
| 	functional/channel_program/synctask_core/tst.get_number_props.out \
 | 	functional/channel_program/synctask_core/tst.get_number_props.out \
 | ||||||
| @ -569,6 +570,7 @@ nobase_dist_datadir_zfs_tests_tests_SCRIPTS += \ | |||||||
| 	functional/channel_program/synctask_core/setup.ksh \
 | 	functional/channel_program/synctask_core/setup.ksh \
 | ||||||
| 	functional/channel_program/synctask_core/tst.bookmark.copy.ksh \
 | 	functional/channel_program/synctask_core/tst.bookmark.copy.ksh \
 | ||||||
| 	functional/channel_program/synctask_core/tst.bookmark.create.ksh \
 | 	functional/channel_program/synctask_core/tst.bookmark.create.ksh \
 | ||||||
|  | 	functional/channel_program/synctask_core/tst.clone.ksh \
 | ||||||
| 	functional/channel_program/synctask_core/tst.destroy_fs.ksh \
 | 	functional/channel_program/synctask_core/tst.destroy_fs.ksh \
 | ||||||
| 	functional/channel_program/synctask_core/tst.destroy_snap.ksh \
 | 	functional/channel_program/synctask_core/tst.destroy_snap.ksh \
 | ||||||
| 	functional/channel_program/synctask_core/tst.get_count_and_limit.ksh \
 | 	functional/channel_program/synctask_core/tst.get_count_and_limit.ksh \
 | ||||||
|  | |||||||
							
								
								
									
										55
									
								
								tests/zfs-tests/tests/functional/channel_program/synctask_core/tst.clone.ksh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										55
									
								
								tests/zfs-tests/tests/functional/channel_program/synctask_core/tst.clone.ksh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,55 @@ | |||||||
|  | #!/bin/ksh -p | ||||||
|  | # SPDX-License-Identifier: CDDL-1.0 | ||||||
|  | # | ||||||
|  | # This file and its contents are supplied under the terms of the | ||||||
|  | # Common Development and Distribution License ("CDDL"), version 1.0. | ||||||
|  | # You may only use this file in accordance with the terms of version | ||||||
|  | # 1.0 of the CDDL. | ||||||
|  | # | ||||||
|  | # A full copy of the text of the CDDL should have accompanied this | ||||||
|  | # source.  A copy of the CDDL is also available via the Internet at | ||||||
|  | # http://www.illumos.org/license/CDDL. | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | # | ||||||
|  | # Copyright (c) 2016, 2017 by Delphix. All rights reserved. | ||||||
|  | # Copyright (c) 2025, Rob Norris <robn@despairlabs.com> | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | . $STF_SUITE/tests/functional/channel_program/channel_common.kshlib | ||||||
|  | 
 | ||||||
|  | # | ||||||
|  | # DESCRIPTION: Make sure basic cloning functionality works in channel programs | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | verify_runnable "global" | ||||||
|  | 
 | ||||||
|  | base=$TESTPOOL/$TESTFS/base | ||||||
|  | 
 | ||||||
|  | function cleanup | ||||||
|  | { | ||||||
|  | 	destroy_dataset $base "-R" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | log_onexit cleanup | ||||||
|  | 
 | ||||||
|  | log_must zfs create $base | ||||||
|  | 
 | ||||||
|  | # test filesystem cloning | ||||||
|  | log_must zfs create $base/fs | ||||||
|  | log_must zfs snapshot $base/fs@snap | ||||||
|  | 
 | ||||||
|  | log_must_program_sync $TESTPOOL \ | ||||||
|  |     $ZCP_ROOT/synctask_core/tst.clone.zcp $base/fs@snap $base/newfs | ||||||
|  | 
 | ||||||
|  | # test zvol cloning | ||||||
|  | log_must zfs create -s -V 100G $base/vol | ||||||
|  | log_must zfs snapshot $base/vol@snap | ||||||
|  | 
 | ||||||
|  | log_must_program_sync $TESTPOOL \ | ||||||
|  |     $ZCP_ROOT/synctask_core/tst.clone.zcp $base/vol@snap $base/newvol | ||||||
|  | 
 | ||||||
|  | # make sure the dev node was created | ||||||
|  | block_device_wait $ZVOL_DEVDIR/$base/newvol | ||||||
|  | 
 | ||||||
|  | log_pass "Cloning works" | ||||||
| @ -0,0 +1,28 @@ | |||||||
|  | -- SPDX-License-Identifier: CDDL-1.0 | ||||||
|  | -- | ||||||
|  | -- This file and its contents are supplied under the terms of the | ||||||
|  | -- Common Development and Distribution License ("CDDL"), version 1.0. | ||||||
|  | -- You may only use this file in accordance with the terms of version | ||||||
|  | -- 1.0 of the CDDL. | ||||||
|  | -- | ||||||
|  | -- A full copy of the text of the CDDL should have accompanied this | ||||||
|  | -- source.  A copy of the CDDL is also available via the Internet at | ||||||
|  | -- http://www.illumos.org/license/CDDL. | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | -- | ||||||
|  | -- Copyright (c) 2016, 2017 by Delphix. All rights reserved. | ||||||
|  | -- Copyright (c) 2025, Rob Norris <robn@despairlabs.com> | ||||||
|  | -- | ||||||
|  | 
 | ||||||
|  | -- This program should be invoked as "zfs program <pool> <prog> <fs> <snap> <new>" | ||||||
|  | 
 | ||||||
|  | args = ... | ||||||
|  | argv = args["argv"] | ||||||
|  | assert(zfs.sync.clone(argv[1], argv[2]) == 0) | ||||||
|  | clones = {} | ||||||
|  | for c in zfs.list.clones(argv[1]) do | ||||||
|  | 	table.insert(clones, c) | ||||||
|  | end | ||||||
|  | assert(#clones == 1) | ||||||
|  | assert(clones[1] == argv[2]) | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Rob Norris
						Rob Norris