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.

107 lines
4.6 KiB

  1. #!/usr/bin/env bash
  2. #
  3. # Unit test for symlinks
  4. # Generate artificial rootfs for testing purpose
  5. #
  6. SYMLINKS_BIN=../symlinks
  7. ROOTFS_FOLDER=rootfs
  8. TEST_FOLDER=$(dirname $0)
  9. # create rootfs folder and cd into it
  10. mkdir -p $TEST_FOLDER/$ROOTFS_FOLDER
  11. cd $TEST_FOLDER/$ROOTFS_FOLDER
  12. echo "* Creating artificial rootfs in $TEST_FOLDER/$ROOTFS_FOLDER"
  13. ###################################################################################################
  14. # Create an example rootfs
  15. ###################################################################################################
  16. mkdir -p usr \
  17. lib \
  18. etc \
  19. opt \
  20. usr/bin \
  21. usr/sbin \
  22. usr/share \
  23. usr/lib \
  24. usr/lib/toolchain/bin \
  25. usr/lib/libsomething \
  26. usr/lib/jvm/java-1.5-jdk-1.5.2/bin \
  27. etc/alternatives \
  28. lib/toolchain1/bin \
  29. lib/toolchain2/bin
  30. touch usr/lib/libsomething/libsomething.so.1.1.1 \
  31. usr/lib/libsomething/libsomething.so.1.1.2 \
  32. usr/lib/libsomething/libsomething.so.1.2.1 \
  33. usr/lib/libsomething/libsomething.so.1.2.2 \
  34. usr/lib/libsomething/libsomething.so.1.2.3 \
  35. usr/lib/libsomething/libsomething.so.2.1.1 \
  36. usr/lib/libsomething/libsomething.so.2.1.2 \
  37. usr/lib/libsomething/libsomething.so.2.1.3 \
  38. lib/toolchain1/bin/tool1 \
  39. lib/toolchain1/bin/tool2 \
  40. lib/toolchain2/bin/tool1 \
  41. lib/toolchain2/bin/tool2 \
  42. usr/lib/jvm/java-1.5-jdk-1.5.2/jdk-config \
  43. usr/lib/jvm/java-1.5-jdk-1.5.2/bin/java
  44. ###################################################################################################
  45. # Test case #1: normal chained / cascaded symlinks in the case of software versioning
  46. #
  47. # Expected Result: do nothing, everything is fine here!
  48. ###################################################################################################
  49. ln -sf libsomething.so.1.1.2 \
  50. usr/lib/libsomething/libsomething.so.1.1
  51. ln -sf libsomething.so.1.2.3 \
  52. usr/lib/libsomething/libsomething.so.1.2
  53. ln -sf libsomething.so.1.2.3 \
  54. usr/lib/libsomething/libsomething.so.1
  55. ln -sf libsomething.so.2.1.3 \
  56. usr/lib/libsomething/libsomething.so.2.1
  57. ln -sf libsomething.so.2.1 \
  58. usr/lib/libsomething/libsomething.so.2
  59. ln -sf libsomething.so.2 \
  60. usr/lib/libsomething/libsomething.so
  61. ln -s java-1.5-jdk-1.5.2 \
  62. usr/lib/jvm/java-1.5-jdk
  63. ###################################################################################################
  64. # Test case #2: absolute symlinks
  65. #
  66. # Expected result: change absolute symlinks into relative ones
  67. ###################################################################################################
  68. ln -sf /lib/toolchain2/bin/tool1 \
  69. usr/lib/toolchain/bin/
  70. ln -sf /lib/toolchain2/bin/tool2 \
  71. usr/lib/toolchain/bin/
  72. ###################################################################################################
  73. # Test case #3: detect dangling symlinks as in the case of messed up library versioning
  74. #
  75. # Expected result: detect and delete all symlinks which are involved
  76. ###################################################################################################
  77. # now let's create a symlink to a target which doesn't exist
  78. ln -sf libsomething.so.2.1.4 \
  79. usr/lib/libsomething/libsomething.so.2.1
  80. ###################################################################################################
  81. # Test case #4: recursive mess of absolute symlinks
  82. #
  83. # Expected result: resolve all symlinks, at least after second run!
  84. ###################################################################################################
  85. ln -sf /usr/lib/toolchain/bin/tool1 \
  86. etc/alternatives/
  87. ln -sf /usr/lib/toolchain/bin/tool2 \
  88. etc/alternatives/
  89. ln -sf /usr/lib/jvm/java-1.5-jdk \
  90. etc/alternatives/java-sdk
  91. ln -sf /usr/lib/jvm/java-1.5-jdk/bin/java \
  92. etc/alternatives/java
  93. ln -sf /etc/alternatives/java \
  94. usr/bin/