|
|
- #!/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!"
|