Commit f6a0f36c authored by Michal Berger's avatar Michal Berger Committed by Tomasz Zawadzki
Browse files

test/dd: Add simple test for copying data between two bdevs



Change-Id: I43cb41a033aa5be669f73f7bcd8d8b645e078abc
Signed-off-by: default avatarMichal Berger <michalx.berger@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3125


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarPaul Luse <paul.e.luse@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
parent 62649a7d
Loading
Loading
Loading
Loading
+111 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash
testdir=$(readlink -f "$(dirname "$0")")
rootdir=$(readlink -f "$testdir/../../")
source "$testdir/common.sh"

nvmes=("$@")

offset_magic() {
	local magic_check
	local offsets offset

	offsets=(16 256 4096) # * bs

	for offset in "${offsets[@]}"; do
		"${DD_APP[@]}" \
			--ib="$bdev0" \
			--ob="$bdev1" \
			--count="$count" \
			--seek="$offset" \
			--bs="$bs" \
			--json <(gen_conf)

		"${DD_APP[@]}" \
			--ib="$bdev1" \
			--of="$test_file1" \
			--count=1 \
			--skip="$offset" \
			--bs="$bs" \
			--json <(gen_conf)

		read -rn${#magic} magic_check < "$test_file1"
		[[ $magic_check == "$magic" ]]
	done
}

cleanup() {
	# Zero up to 1G on input bdev, 4G on out bdev to consider offsetting
	clear_nvme "$bdev0" "" $((0x40000000 + ${#magic}))
	clear_nvme "$bdev1" "" $((0x100000000 + ${#magic}))
	rm -f "$test_file0" "$test_file1" "$aio1"
}

trap "cleanup" EXIT

bs=$((1024 << 10))

if ((${#nvmes[@]} > 1)); then
	nvme0=Nvme0 bdev0=Nvme0n1 nvme0_pci=${nvmes[0]} # input bdev
	nvme1=Nvme1 bdev1=Nvme1n1 nvme1_pci=${nvmes[1]} # output bdev

	declare -A method_bdev_nvme_attach_controller_0=(
		["name"]=$nvme0
		["traddr"]=$nvme0_pci
		["trtype"]=pcie
	)
	declare -A method_bdev_nvme_attach_controller_1=(
		["name"]=$nvme1
		["traddr"]=$nvme1_pci
		["trtype"]=pcie
	)
else
	# Use AIO to compensate lack of actual hardware
	nvme0=Nvme0 bdev0=Nvme0n1 nvme0_pci=${nvmes[0]} # input bdev
	aio1=$SPDK_TEST_STORAGE/aio1 bdev1=aio1         # output bdev

	declare -A method_bdev_nvme_attach_controller_1=(
		["name"]=$nvme0
		["traddr"]=$nvme0_pci
		["trtype"]=pcie
	)
	declare -A method_bdev_aio_create_0=(
		["name"]=$bdev1
		["filename"]=$aio1
		["block_size"]=4096
	)

	# 8G AIO file
	"${DD_APP[@]}" \
		--if=/dev/zero \
		--of="$aio1" \
		--bs="$bs" \
		--count=8192
fi

test_file0=$SPDK_TEST_STORAGE/dd.dump0
test_file1=$SPDK_TEST_STORAGE/dd.dump1

magic="This Is Our Magic, find it"
echo "$magic" > "$test_file0"

# Make the file a bit bigger (~1GB)
run_test "dd_inflate_file" \
	"${DD_APP[@]}" \
	--if=/dev/zero \
	--of="$test_file0" \
	--oflag=append \
	--bs="$bs" \
	--count=1024

test_file0_size=$(wc -c < "$test_file0")

# Now, copy it over to first nvme with default bs (4k)
run_test "dd_copy_to_out_bdev" \
	"${DD_APP[@]}" \
	--if="$test_file0" \
	--ob="$bdev0" \
	--json <(gen_conf)

count=$(((test_file0_size / bs) + 1))

run_test "dd_offset_magic" offset_magic
+1 −0
Original line number Diff line number Diff line
@@ -8,3 +8,4 @@ nvmes=($(nvme_in_userspace))

run_test "spdk_dd_basic_rw" "$testdir/basic_rw.sh" "${nvmes[@]}"
run_test "spdk_dd_posix" "$testdir/posix.sh"
run_test "spdk_dd_bdev_to_bdev" "$testdir/bdev_to_bdev.sh" "${nvmes[@]}"