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

3 years ago
  1. #!/bin/sh
  2. ####
  3. # Plugin Test Cases
  4. ####
  5. log_prefix="[Plugin Test]"
  6. # Start a LizardFS cluster for the plugin to connect to
  7. # Set the LizardFS master port
  8. echo "MASTER_PORT=9421" > .env
  9. echo "$log_prefix Starting up local LizardFS cluster"
  10. docker-compose down -v
  11. docker-compose up -d
  12. echo "$log_prefix Creating volume directory on LizardFS filesystem"
  13. docker-compose exec client mkdir -p /mnt/mfs/docker/volumes
  14. # Configure and enable plugin
  15. echo "$log_prefix Configurin plugin to connect to 127.0.0.1:9421"
  16. docker plugin disable lizardfs 2> /dev/null
  17. docker plugin set lizardfs HOST=127.0.0.1 && \
  18. docker plugin set lizardfs PORT=9421 && \
  19. docker plugin set lizardfs REMOTE_PATH=/docker/volumes && \
  20. docker plugin set lizardfs ROOT_VOLUME_NAME="" && \
  21. docker plugin set lizardfs MOUNT_OPTIONS="" && \
  22. docker plugin set lizardfs CONNECT_TIMEOUT=10000 && \
  23. docker plugin set lizardfs LOG_LEVEL=info && \
  24. docker plugin enable lizardfs
  25. if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
  26. # Create volumes and make sure that they exist
  27. echo "$log_prefix Create volume: lizardfs-volume-1" && \
  28. docker volume create --driver lizardfs lizardfs-volume-1 && \
  29. \
  30. echo "$log_prefix Make sure lizardfs-volume-1 exists in volume list" && \
  31. docker volume ls | grep "lizardfs.*lizardfs-volume-1" && \
  32. \
  33. echo "$log_prefix Make sure lizardfs-volume-1 exists on LizardFS filesystem" && \
  34. docker-compose exec client ls /mnt/mfs/docker/volumes | grep lizardfs-volume-1 && \
  35. \
  36. echo "$log_prefix Create a second volume: lizardfs-volume-2" && \
  37. docker volume create --driver lizardfs lizardfs-volume-2 && \
  38. \
  39. echo "$log_prefix Make sure lizardfs-volume-2 exists" && \
  40. docker volume ls | grep "lizardfs.*lizardfs-volume-2" && \
  41. \
  42. echo "$log_prefix Make sure lizardfs-volume-1 still exists" && \
  43. docker volume ls | grep "lizardfs.*lizardfs-volume-1"
  44. if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
  45. # Store data in a volume and make sure that the data is persisted
  46. echo "$log_prefix Create test data on lizardfs-volume-1" && \
  47. docker run -it --rm -v lizardfs-volume-1:/data --entrypoint=bash \
  48. kadimasolutions/lizardfs -c 'echo "Hello World" > /data/test-data.txt' && \
  49. \
  50. echo "$log_prefix Make sure data exists in volume" && \
  51. docker run -it --rm -v lizardfs-volume-1:/data --entrypoint=cat \
  52. kadimasolutions/lizardfs /data/test-data.txt | grep "Hello World" && \
  53. \
  54. echo "$log_prefix Make sure data exists on LizardFS filesystem" && \
  55. docker-compose exec client cat \
  56. /mnt/mfs/docker/volumes/lizardfs-volume-1/test-data.txt | grep "Hello World"
  57. if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
  58. # Mount a volume into multiple containers, then remove the containers,
  59. # and remount
  60. echo "$log_prefix Mount lizardfs-volume-1 into container1 and container2" && \
  61. docker run -d --name container1 -it --rm -v lizardfs-volume-1:/data --entrypoint=bash \
  62. kadimasolutions/lizardfs && \
  63. \
  64. docker run -d --name container2 -it --rm -v lizardfs-volume-1:/data --entrypoint=bash \
  65. kadimasolutions/lizardfs && \
  66. \
  67. echo "$log_prefix Make sure data exists in container1" && \
  68. docker exec -it container1 cat /data/test-data.txt | grep "Hello World" && \
  69. \
  70. echo "$log_prefix Make sure data exists in container2" && \
  71. docker exec -it container2 cat /data/test-data.txt | grep "Hello World" && \
  72. \
  73. echo "$log_prefix Remove container1" && \
  74. docker stop container1 && \
  75. \
  76. echo "$log_prefix Make sure data still exists in container2" && \
  77. docker exec -it container2 cat /data/test-data.txt | grep "Hello World" && \
  78. \
  79. echo "$log_prefix Remove container2" && \
  80. docker stop container2 && \
  81. \
  82. echo "$log_prefix Make sure lizardfs-volume-1 can still be mounted into a new container" && \
  83. docker run -it --rm -v lizardfs-volume-1:/data --entrypoint=cat \
  84. kadimasolutions/lizardfs /data/test-data.txt | grep "Hello World"
  85. if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
  86. # Create a volume with a specified replication goal and check that it is set
  87. # when the volume is created
  88. echo "$log_prefix Create lizardfs-volume-3 with a replication goal of '3'" && \
  89. docker volume create --driver lizardfs lizardfs-volume-3 -o ReplicationGoal=3 && \
  90. \
  91. echo "$log_prefix Make sure that the volume has a replication goal of '3'" && \
  92. docker-compose exec \
  93. client lizardfs getgoal /mnt/mfs/docker/volumes/lizardfs-volume-3 | \
  94. grep ".*lizardfs-volume-3: 3"
  95. if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
  96. # Bring down the cluster
  97. echo "$log_prefix Bringing down LizardFS cluster" && \
  98. echo "$log_prefix Remove volumes" && \
  99. docker volume rm lizardfs-volume-1 && \
  100. docker volume rm lizardfs-volume-2 && \
  101. docker volume rm lizardfs-volume-3 && \
  102. echo "$log_prefix Remove LizardFS cluster" && \
  103. docker-compose down -v && \
  104. echo "$log_prefix Disable plugin" && \
  105. docker plugin disable -f lizardfs
  106. if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
  107. # Test connecting to cluster on a different port, storage directory, with mount
  108. # options, and with the root volume name set
  109. echo "MASTER_PORT=9900" > .env
  110. echo "$log_prefix Creating cluster with master port 9900" && \
  111. docker-compose up -d && \
  112. \
  113. echo "$log_prefix Creating storage directory, /alternate-volumes, on LizardFS filesystem" && \
  114. docker-compose exec client mkdir -p /mnt/mfs/alternate-volumes && \
  115. \
  116. echo "$log_prefix Enabling plugin with PORT=9900, REMOTE_PATH=/alternate-volumes," && \
  117. echo "$log_prefix MOUNT_OPTIONS='-o allow_other', and ROOT_VOLUME_NAME=lizardfs" && \
  118. docker plugin set lizardfs PORT=9900 REMOTE_PATH=/alternate-volumes \
  119. MOUNT_OPTIONS='-o allow_other' ROOT_VOLUME_NAME=lizardfs && \
  120. docker plugin enable lizardfs && \
  121. \
  122. echo "$log_prefix Create volume 'volume-on-different-port' to test connection" && \
  123. docker volume create --driver lizardfs volume-on-different-port && \
  124. \
  125. echo "$log_prefix Make sure volume-on-different-port exists in volume list" && \
  126. docker volume ls | grep "lizardfs.*volume-on-different-port" && \
  127. \
  128. echo "$log_prefix Make sure that the mount options are getting set" && \
  129. ps -ef | grep "allow_other" | grep -v "grep" && \
  130. \
  131. echo "$log_prefix Remove volume: volume-on-different-port" && \
  132. docker volume rm volume-on-different-port
  133. if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
  134. # Run tests for the Root Volume
  135. echo "$log_prefix Create volumes: liz-1, liz-2" && \
  136. docker volume create --driver lizardfs liz-1 && \
  137. docker volume create --driver lizardfs liz-2 && \
  138. \
  139. echo "$log_prefix Add test-files liz-1, liz-2" && \
  140. docker run -it --rm -v liz-1:/data --entrypoint=touch \
  141. kadimasolutions/lizardfs /data/liz-1.txt && \
  142. docker run -it --rm -v liz-2:/data --entrypoint=touch \
  143. kadimasolutions/lizardfs /data/liz-2.txt && \
  144. \
  145. echo "$log_prefix Mount Root Volume and make sure liz-1, liz-2, and their files are in it" && \
  146. docker run -it --rm -v lizardfs:/lizardfs --entrypoint=ls \
  147. kadimasolutions/lizardfs /lizardfs/liz-1 | grep "liz-1.txt" && \
  148. docker run -it --rm -v lizardfs:/lizardfs --entrypoint=ls \
  149. kadimasolutions/lizardfs /lizardfs/liz-2 | grep "liz-2.txt" && \
  150. \
  151. echo "$log_prefix Create a new directory, liz-3, in the Root Volume" && \
  152. docker run -it --rm -v lizardfs:/lizardfs --entrypoint=mkdir \
  153. kadimasolutions/lizardfs /lizardfs/liz-3 && \
  154. \
  155. echo "$log_prefix Make sure the new directory registers in the volume list" && \
  156. docker volume ls | grep "lizardfs.*liz-3" && \
  157. \
  158. echo "$log_prefix Create a volume with the same name as the Root Volume" && \
  159. docker run -it --rm -v lizardfs:/lizardfs --entrypoint=mkdir \
  160. kadimasolutions/lizardfs /lizardfs/lizardfs && \
  161. \
  162. echo "$log_prefix Make sure that the Root Volume takes precedence when mounting" && \
  163. docker run -it --rm -v lizardfs:/lizardfs --entrypoint=ls \
  164. kadimasolutions/lizardfs /lizardfs/liz-1 | grep "liz-1.txt"
  165. if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
  166. echo "$log_prefix Make sure you can't delete the Root Volume" &&
  167. docker volume rm lizardfs
  168. if [ $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
  169. echo "$log_prefix Make sure all volumes still exist after attempting to delete the Root Volume"
  170. docker volume ls | grep "lizardfs.*liz-1" && \
  171. docker volume ls | grep "lizardfs.*liz-2" && \
  172. docker volume ls | grep "lizardfs.*liz-3" && \
  173. \
  174. echo "$log_prefix Delete the volumes" && \
  175. docker volume rm liz-1 && \
  176. docker volume rm liz-2 && \
  177. docker volume rm liz-3
  178. if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
  179. # Test setting the log level
  180. plugin_id=$(docker plugin ls | grep lizardfs | awk '{print $1}')
  181. echo "$log_prefix Test a 'docker volume ls'" && \
  182. docker volume ls
  183. if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
  184. echo "$log_prefix Make sure plugin is not logging DEBUG messages"
  185. cat /var/log/docker.log | grep $plugin_id | tail -n 1 | grep -i DEBUG
  186. if [ $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
  187. echo "$log_prefix Set log level to 'DEBUG'" && \
  188. docker plugin disable -f lizardfs && \
  189. docker plugin set lizardfs LOG_LEVEL=DEBUG && \
  190. docker plugin enable lizardfs && \
  191. \
  192. echo "$log_prefix Test a 'docker volume ls'" && \
  193. docker volume ls && \
  194. \
  195. echo "$log_prefix Make Sure that the plugin does log a DEBUG message" && \
  196. cat /var/log/docker.log | grep $plugin_id | tail -n 1 | grep -i DEBUG
  197. if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
  198. # Bring down the cluster
  199. echo "$log_prefix Remove LizardFS cluster" && \
  200. docker-compose down -v
  201. if [ ! $? -eq 0 ]; then echo "TEST FAILED"; exit $?; fi
  202. echo "$log_prefix ALL DONE. SUCCESS!"