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