/tests/t5000-dshbak.sh

https://code.google.com/ · Shell · 207 lines · 191 code · 15 blank · 1 comment · 7 complexity · f7a27533dc295143672aba4b7d27d026 MD5 · raw file

  1. #!/bin/sh
  2. test_description='dshbak functionality'
  3. . ${srcdir:-.}/test-lib.sh
  4. dshbak_test() {
  5. printf "$1\n" | dshbak -c > output
  6. cat output \
  7. | while read line ; do
  8. test "$line" = "$2" && echo ok
  9. done | grep -q ok || (cat output >&2 && /bin/false)
  10. }
  11. dshbak_test_notok()
  12. {
  13. touch ok
  14. printf "$1\n" \
  15. | dshbak -c \
  16. | while read line ; do
  17. test "$line" = "$2" && rm ok
  18. done
  19. rm ok && :
  20. }
  21. test_expect_success 'dshbak functionality' '
  22. cat >input <<EOF
  23. foo0: bar
  24. foo1: bar
  25. EOF
  26. cat >output <<EOF
  27. ----------------
  28. foo0
  29. ----------------
  30. bar
  31. ----------------
  32. foo1
  33. ----------------
  34. bar
  35. EOF
  36. dshbak <input >output2 &&
  37. diff output output2 &&
  38. rm input output*
  39. '
  40. test_expect_success 'dshbak -c does not coalesce different length output' '
  41. dshbak_test_notok "
  42. foo1: bar
  43. foo2: bar
  44. foo1: baz" "foo[1-2]"
  45. '
  46. test_expect_success 'dshbak -c properly compresses multi-digit suffixes' '
  47. dshbak_test "
  48. foo8: bar
  49. foo9: bar
  50. foo10: bar
  51. foo11: bar" "foo[8-11]"
  52. '
  53. test_expect_success 'dshbak -c properly compresses prefix with embedded numerals' '
  54. dshbak_test "
  55. foo1x8: bar
  56. foo1x9: bar
  57. foo1x10: bar
  58. foo1x11: bar" "foo1x[8-11]"
  59. '
  60. test_expect_success 'dshbak -c does not strip leading zeros' '
  61. dshbak_test "
  62. foo01: bar
  63. foo03: bar
  64. foo02: bar
  65. foo00: bar" "foo[00-03]"
  66. '
  67. test_expect_success 'dshbak -c does not coalesce different zero padding' '
  68. dshbak_test "
  69. foo0: bar
  70. foo03: bar
  71. foo01: bar
  72. foo2: bar" "foo[0,01,2,03]"
  73. '
  74. test_expect_success 'dshbak -c properly coalesces zero padding of "00"' '
  75. dshbak_test "
  76. foo1: bar
  77. foo01: bar
  78. foo02: bar
  79. foo3: bar
  80. foo5: bar
  81. foo00: bar" "foo[00-02,1,3,5]"
  82. '
  83. test_expect_success 'dshbak -c can detect suffixes' '
  84. dshbak_test "
  85. foo1s: bar
  86. foo01s: bar
  87. foo02s: bar
  88. foo3s: bar
  89. foo5s: bar
  90. foo00s: bar" "foo[00-02,1,3,5]s"
  91. '
  92. test_expect_failure 'dshbak -c can detect suffix with numeral' '
  93. dshbak_test "
  94. foo1s0: bar
  95. foo01s0: bar
  96. foo02s0: bar
  97. foo3s0: bar
  98. foo5s0: bar
  99. foo00s0: bar" "foo[00-02,1,3,5]s0"
  100. '
  101. test_expect_success 'issue 19: missing commas in dshbak header output' '
  102. dshbak_test "
  103. foo1: bar
  104. foo2: bar
  105. foo5: bar
  106. bar0: bar
  107. bar1: bar" "bar[0-1],foo[1-2,5]"
  108. '
  109. test_expect_success 'dshbak properly joins 9,10' '
  110. dshbak_test "
  111. foo1: bar
  112. foo2: bar
  113. foo3: bar
  114. foo4: bar
  115. foo5: bar
  116. foo6: bar
  117. foo7: bar
  118. foo8: bar
  119. foo9: bar
  120. foo10: bar
  121. foo11: bar" "foo[1-11]"
  122. '
  123. test_expect_success 'issue 33: dshbak does not coalesce 09,10' '
  124. dshbak_test "
  125. foo01: bar
  126. foo02: bar
  127. foo03: bar
  128. foo04: bar
  129. foo05: bar
  130. foo06: bar
  131. foo07: bar
  132. foo08: bar
  133. foo09: bar
  134. foo10: bar
  135. foo11: bar" "foo[01-11]"
  136. '
  137. test_expect_success 'issue 33: dshbak does not coalesce 099,100' '
  138. dshbak_test "
  139. foo090: bar
  140. foo091: bar
  141. foo092: bar
  142. foo093: bar
  143. foo094: bar
  144. foo095: bar
  145. foo096: bar
  146. foo097: bar
  147. foo098: bar
  148. foo099: bar
  149. foo100: bar
  150. foo101: bar" "foo[090-101]"
  151. '
  152. cat >test_input <<EOF
  153. test
  154. input
  155. file
  156. foo
  157. bar
  158. EOF
  159. test_expect_success 'dshbak -d functionality' '
  160. success=t
  161. mkdir test_output &&
  162. pdsh -w foo[0-10] -Rexec cat test_input | dshbak -d test_output &&
  163. for i in `seq 0 10`; do
  164. diff -q test_input test_output/foo$i || success=f, break
  165. done &&
  166. test "$success" = "t" &&
  167. rm -rf test_output
  168. '
  169. test_expect_success 'dshbak -f functionality' '
  170. success=t
  171. pdsh -w foo[0-10] -Rexec cat test_input | dshbak -f -d test_output &&
  172. for i in `seq 0 10`; do
  173. diff -q test_input test_output/foo$i || success=f, break
  174. done &&
  175. test "$success" = "t" &&
  176. rm -rf test_output
  177. '
  178. test_expect_success 'dshbak -f without -d fails' '
  179. dshbak -f </dev/null 2>&1 | grep "Option -f may only be used with -d"
  180. '
  181. test_expect_success 'dshbak -d fails when output dir does not exist' '
  182. dshbak -d does_not_exist </dev/null 2>&1 | \
  183. grep "Output directory does_not_exist does not exist"
  184. '
  185. test_expect_success SANITY 'dshbak -d fails gracefully for non-writable dir' '
  186. mkdir test_output &&
  187. chmod 500 test_output &&
  188. printf "foo0: bar\n" | dshbak -d test_output 2>&1 | tee logfile | \
  189. grep "Failed to open output file" &&
  190. rm -rf test_output logfile || :
  191. '
  192. test_done