You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

247 lines
9.2 KiB

#!/bin/sh
####
# Plugin Test Cases
####
log_prefix="[Plugin Test]"
# Start a LizardFS cluster for the plugin to connect to
# Set the LizardFS master port
echo "MASTER_PORT=9421" > .env
echo "$log_prefix Starting up local LizardFS cluster"
docker-compose down -v
docker-compose up -d
echo "$log_prefix Creating volume directory on LizardFS filesystem"
docker-compose exec client mkdir -p /mnt/mfs/docker/volumes
# Configure and enable plugin
echo "$log_prefix Configurin plugin to connect to 127.0.0.1:9421"
docker plugin disable lizardfs 2> /dev/null
docker plugin set lizardfs HOST=127.0.0.1 && \
docker plugin set lizardfs PORT=9421 && \
docker plugin set lizardfs REMOTE_PATH=/docker/volumes && \
docker plugin set lizardfs ROOT_VOLUME_NAME="" && \
docker plugin set lizardfs MOUNT_OPTIONS="" && \
docker plugin set lizardfs CONNECT_TIMEOUT=10000 && \
docker plugin set lizardfs LOG_LEVEL=info && \
docker plugin enable lizardfs
if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
# Create volumes and make sure that they exist
echo "$log_prefix Create volume: lizardfs-volume-1" && \
docker volume create --driver lizardfs lizardfs-volume-1 && \
\
echo "$log_prefix Make sure lizardfs-volume-1 exists in volume list" && \
docker volume ls | grep "lizardfs.*lizardfs-volume-1" && \
\
echo "$log_prefix Make sure lizardfs-volume-1 exists on LizardFS filesystem" && \
docker-compose exec client ls /mnt/mfs/docker/volumes | grep lizardfs-volume-1 && \
\
echo "$log_prefix Create a second volume: lizardfs-volume-2" && \
docker volume create --driver lizardfs lizardfs-volume-2 && \
\
echo "$log_prefix Make sure lizardfs-volume-2 exists" && \
docker volume ls | grep "lizardfs.*lizardfs-volume-2" && \
\
echo "$log_prefix Make sure lizardfs-volume-1 still exists" && \
docker volume ls | grep "lizardfs.*lizardfs-volume-1"
if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
# Store data in a volume and make sure that the data is persisted
echo "$log_prefix Create test data on lizardfs-volume-1" && \
docker run -it --rm -v lizardfs-volume-1:/data --entrypoint=bash \
kadimasolutions/lizardfs -c 'echo "Hello World" > /data/test-data.txt' && \
\
echo "$log_prefix Make sure data exists in volume" && \
docker run -it --rm -v lizardfs-volume-1:/data --entrypoint=cat \
kadimasolutions/lizardfs /data/test-data.txt | grep "Hello World" && \
\
echo "$log_prefix Make sure data exists on LizardFS filesystem" && \
docker-compose exec client cat \
/mnt/mfs/docker/volumes/lizardfs-volume-1/test-data.txt | grep "Hello World"
if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
# Mount a volume into multiple containers, then remove the containers,
# and remount
echo "$log_prefix Mount lizardfs-volume-1 into container1 and container2" && \
docker run -d --name container1 -it --rm -v lizardfs-volume-1:/data --entrypoint=bash \
kadimasolutions/lizardfs && \
\
docker run -d --name container2 -it --rm -v lizardfs-volume-1:/data --entrypoint=bash \
kadimasolutions/lizardfs && \
\
echo "$log_prefix Make sure data exists in container1" && \
docker exec -it container1 cat /data/test-data.txt | grep "Hello World" && \
\
echo "$log_prefix Make sure data exists in container2" && \
docker exec -it container2 cat /data/test-data.txt | grep "Hello World" && \
\
echo "$log_prefix Remove container1" && \
docker stop container1 && \
\
echo "$log_prefix Make sure data still exists in container2" && \
docker exec -it container2 cat /data/test-data.txt | grep "Hello World" && \
\
echo "$log_prefix Remove container2" && \
docker stop container2 && \
\
echo "$log_prefix Make sure lizardfs-volume-1 can still be mounted into a new container" && \
docker run -it --rm -v lizardfs-volume-1:/data --entrypoint=cat \
kadimasolutions/lizardfs /data/test-data.txt | grep "Hello World"
if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
# Create a volume with a specified replication goal and check that it is set
# when the volume is created
echo "$log_prefix Create lizardfs-volume-3 with a replication goal of '3'" && \
docker volume create --driver lizardfs lizardfs-volume-3 -o ReplicationGoal=3 && \
\
echo "$log_prefix Make sure that the volume has a replication goal of '3'" && \
docker-compose exec \
client lizardfs getgoal /mnt/mfs/docker/volumes/lizardfs-volume-3 | \
grep ".*lizardfs-volume-3: 3"
if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
# Bring down the cluster
echo "$log_prefix Bringing down LizardFS cluster" && \
echo "$log_prefix Remove volumes" && \
docker volume rm lizardfs-volume-1 && \
docker volume rm lizardfs-volume-2 && \
docker volume rm lizardfs-volume-3 && \
echo "$log_prefix Remove LizardFS cluster" && \
docker-compose down -v && \
echo "$log_prefix Disable plugin" && \
docker plugin disable -f lizardfs
if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
# Test connecting to cluster on a different port, storage directory, with mount
# options, and with the root volume name set
echo "MASTER_PORT=9900" > .env
echo "$log_prefix Creating cluster with master port 9900" && \
docker-compose up -d && \
\
echo "$log_prefix Creating storage directory, /alternate-volumes, on LizardFS filesystem" && \
docker-compose exec client mkdir -p /mnt/mfs/alternate-volumes && \
\
echo "$log_prefix Enabling plugin with PORT=9900, REMOTE_PATH=/alternate-volumes," && \
echo "$log_prefix MOUNT_OPTIONS='-o allow_other', and ROOT_VOLUME_NAME=lizardfs" && \
docker plugin set lizardfs PORT=9900 REMOTE_PATH=/alternate-volumes \
MOUNT_OPTIONS='-o allow_other' ROOT_VOLUME_NAME=lizardfs && \
docker plugin enable lizardfs && \
\
echo "$log_prefix Create volume 'volume-on-different-port' to test connection" && \
docker volume create --driver lizardfs volume-on-different-port && \
\
echo "$log_prefix Make sure volume-on-different-port exists in volume list" && \
docker volume ls | grep "lizardfs.*volume-on-different-port" && \
\
echo "$log_prefix Make sure that the mount options are getting set" && \
ps -ef | grep "allow_other" | grep -v "grep" && \
\
echo "$log_prefix Remove volume: volume-on-different-port" && \
docker volume rm volume-on-different-port
if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
# Run tests for the Root Volume
echo "$log_prefix Create volumes: liz-1, liz-2" && \
docker volume create --driver lizardfs liz-1 && \
docker volume create --driver lizardfs liz-2 && \
\
echo "$log_prefix Add test-files liz-1, liz-2" && \
docker run -it --rm -v liz-1:/data --entrypoint=touch \
kadimasolutions/lizardfs /data/liz-1.txt && \
docker run -it --rm -v liz-2:/data --entrypoint=touch \
kadimasolutions/lizardfs /data/liz-2.txt && \
\
echo "$log_prefix Mount Root Volume and make sure liz-1, liz-2, and their files are in it" && \
docker run -it --rm -v lizardfs:/lizardfs --entrypoint=ls \
kadimasolutions/lizardfs /lizardfs/liz-1 | grep "liz-1.txt" && \
docker run -it --rm -v lizardfs:/lizardfs --entrypoint=ls \
kadimasolutions/lizardfs /lizardfs/liz-2 | grep "liz-2.txt" && \
\
echo "$log_prefix Create a new directory, liz-3, in the Root Volume" && \
docker run -it --rm -v lizardfs:/lizardfs --entrypoint=mkdir \
kadimasolutions/lizardfs /lizardfs/liz-3 && \
\
echo "$log_prefix Make sure the new directory registers in the volume list" && \
docker volume ls | grep "lizardfs.*liz-3" && \
\
echo "$log_prefix Create a volume with the same name as the Root Volume" && \
docker run -it --rm -v lizardfs:/lizardfs --entrypoint=mkdir \
kadimasolutions/lizardfs /lizardfs/lizardfs && \
\
echo "$log_prefix Make sure that the Root Volume takes precedence when mounting" && \
docker run -it --rm -v lizardfs:/lizardfs --entrypoint=ls \
kadimasolutions/lizardfs /lizardfs/liz-1 | grep "liz-1.txt"
if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
echo "$log_prefix Make sure you can't delete the Root Volume" &&
docker volume rm lizardfs
if [ $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
echo "$log_prefix Make sure all volumes still exist after attempting to delete the Root Volume"
docker volume ls | grep "lizardfs.*liz-1" && \
docker volume ls | grep "lizardfs.*liz-2" && \
docker volume ls | grep "lizardfs.*liz-3" && \
\
echo "$log_prefix Delete the volumes" && \
docker volume rm liz-1 && \
docker volume rm liz-2 && \
docker volume rm liz-3
if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
# Test setting the log level
plugin_id=$(docker plugin ls | grep lizardfs | awk '{print $1}')
echo "$log_prefix Test a 'docker volume ls'" && \
docker volume ls
if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
echo "$log_prefix Make sure plugin is not logging DEBUG messages"
cat /var/log/docker.log | grep $plugin_id | tail -n 1 | grep -i DEBUG
if [ $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
echo "$log_prefix Set log level to 'DEBUG'" && \
docker plugin disable -f lizardfs && \
docker plugin set lizardfs LOG_LEVEL=DEBUG && \
docker plugin enable lizardfs && \
\
echo "$log_prefix Test a 'docker volume ls'" && \
docker volume ls && \
\
echo "$log_prefix Make Sure that the plugin does log a DEBUG message" && \
cat /var/log/docker.log | grep $plugin_id | tail -n 1 | grep -i DEBUG
if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
# Bring down the cluster
echo "$log_prefix Remove LizardFS cluster" && \
docker-compose down -v
if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
echo "$log_prefix ALL DONE. SUCCESS!"