1
0
mirror of https://github.com/lxc/incus.git synced 2026-02-05 09:46:19 +01:00
Files
incus/test/suites/storage_volume_filemanip.sh
2025-10-24 21:14:57 +02:00

81 lines
3.7 KiB
Bash

test_storage_volume_filemanip() {
# Workaround for shellcheck getting confused by "cd"
set -e
ensure_import_testimage
ensure_has_localhost_remote "${INCUS_ADDR}"
echo "test" > "${TEST_DIR}"/filemanip
incus project create test -c features.profiles=false -c features.images=false -c features.storage.volumes=false
incus project switch test
incus launch testimage filemanip
pool="incustest-$(basename "${INCUS_DIR}")"
incus storage volume create "${pool}" vol1
incus storage volume attach "${pool}" vol1 filemanip /v1
# missing files should return 404
err=$(my_curl -o /dev/null -w "%{http_code}" -X GET "https://${INCUS_ADDR}/1.0/instances/filemanip/files?path=/tmp/foo")
[ "${err}" -eq "404" ]
# Test storage volume {push|pull} -r
mkdir "${TEST_DIR}"/source
mkdir "${TEST_DIR}"/source/another_level
chown 1000:1000 "${TEST_DIR}"/source/another_level
echo "foo" > "${TEST_DIR}"/source/foo
echo "bar" > "${TEST_DIR}"/source/bar
ln -s bar "${TEST_DIR}"/source/baz
echo "pull" > "${TEST_DIR}"/pull_file
incus storage volume file push "${TEST_DIR}"/pull_file "${pool}" vol1/pull_file
incus storage volume file pull "${pool}" vol1/pull_file "${TEST_DIR}"/pull_test
[ "$(cat "${TEST_DIR}"/pull_test)" = "pull" ]
incus storage volume file push -p -r "${TEST_DIR}"/source "${pool}" vol1/tmp/ptest
[ "$(incus exec filemanip --project=test -- stat -c "%u" /v1/tmp/ptest/source)" = "$(id -u)" ]
[ "$(incus exec filemanip --project=test -- stat -c "%g" /v1/tmp/ptest/source)" = "$(id -g)" ]
[ "$(incus exec filemanip --project=test -- stat -c "%u" /v1/tmp/ptest/source/another_level)" = "1000" ]
[ "$(incus exec filemanip --project=test -- stat -c "%g" /v1/tmp/ptest/source/another_level)" = "1000" ]
[ "$(incus exec filemanip --project=test -- stat -c "%a" /v1/tmp/ptest/source)" = "755" ]
[ "$(incus exec filemanip --project=test -- readlink /v1/tmp/ptest/source/baz)" = "bar" ]
incus storage volume file delete -f "${pool}" vol1/tmp/ptest/source
# # This fails because the last command should have removed that directory.
! incus exec filemanip --project=test -- test -d /v1/tmp/ptest/source || false
# Test storage volume file create.
# Create a new empty file.
incus storage volume file create "${pool}" vol1/tmp/create-test
[ -z "$(incus exec filemanip --project=test -- cat /v1/tmp/create-test)" ]
# This fails because the parent directory doesn't exist.
! incus storage volume file create "${pool}" vol1/tmp/create-test-dir/foo || false
# Create foo along with the parent directory.
incus storage volume file create --create-dirs "${pool}" vol1/tmp/create-test-dir/foo
[ -z "$(incus exec filemanip --project=test -- cat /v1/tmp/create-test-dir/foo)" ]
# Create directory using --type flag.
incus storage volume file create --type=directory "${pool}" vol1/tmp/create-test-dir/sub-dir
incus exec filemanip --project=test -- test -d /v1/tmp/create-test-dir/sub-dir
# Create directory using trailing "/".
incus storage volume file create "${pool}" vol1/tmp/create-test-dir/sub-dir-1/
incus exec filemanip --project=test -- test -d /v1/tmp/create-test-dir/sub-dir-1
# Create symlink.
incus storage volume file create --type=symlink "${pool}" vol1/tmp/create-symlink foo
[ "$(incus exec filemanip --project=test -- readlink /v1/tmp/create-symlink)" = "foo" ]
incus storage volume detach "${pool}" vol1 filemanip
incus delete filemanip -f
rm -rf "${TEST_DIR}"/source
rm -rf "${TEST_DIR}/dest"
incus storage volume delete "${pool}" vol1
incus project switch default
incus project delete test
}