test-bootconfig.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. #!/bin/sh
  2. # SPDX-License-Identifier: GPL-2.0-only
  3. echo "Boot config test script"
  4. if [ -d "$1" ]; then
  5. TESTDIR=$1
  6. else
  7. TESTDIR=.
  8. fi
  9. BOOTCONF=${TESTDIR}/bootconfig
  10. ALIGN=4
  11. INITRD=`mktemp ${TESTDIR}/initrd-XXXX`
  12. TEMPCONF=`mktemp ${TESTDIR}/temp-XXXX.bconf`
  13. OUTFILE=`mktemp ${TESTDIR}/tempout-XXXX`
  14. NG=0
  15. cleanup() {
  16. rm -f $INITRD $TEMPCONF $OUTFILE
  17. exit $NG
  18. }
  19. trap cleanup EXIT TERM
  20. NO=1
  21. xpass() { # pass test command
  22. echo "test case $NO ($*)... "
  23. if ! ($@ && printf "\t\t[OK]\n"); then
  24. printf "\t\t[NG]\n"; NG=$((NG + 1))
  25. fi
  26. NO=$((NO + 1))
  27. }
  28. xfail() { # fail test command
  29. echo "test case $NO ($*)... "
  30. if ! (! $@ && printf "\t\t[OK]\n"); then
  31. printf "\t\t[NG]\n"; NG=$((NG + 1))
  32. fi
  33. NO=$((NO + 1))
  34. }
  35. echo "Basic command test"
  36. xpass $BOOTCONF $INITRD
  37. echo "Delete command should success without bootconfig"
  38. xpass $BOOTCONF -d $INITRD
  39. dd if=/dev/zero of=$INITRD bs=4096 count=1
  40. printf "key = value;" > $TEMPCONF
  41. bconf_size=$(wc -c < $TEMPCONF)
  42. initrd_size=$(wc -c < $INITRD)
  43. echo "Apply command test"
  44. xpass $BOOTCONF -a $TEMPCONF $INITRD
  45. new_size=$(wc -c < $INITRD)
  46. echo "Show command test"
  47. xpass $BOOTCONF $INITRD
  48. echo "File size check"
  49. total_size=$(expr $bconf_size + $initrd_size + 9 + 12 + $ALIGN - 1 )
  50. total_size=$(expr $total_size / $ALIGN)
  51. total_size=$(expr $total_size \* $ALIGN)
  52. xpass test $new_size -eq $total_size
  53. echo "Apply command repeat test"
  54. xpass $BOOTCONF -a $TEMPCONF $INITRD
  55. echo "File size check"
  56. xpass test $new_size -eq $(wc -c < $INITRD)
  57. echo "Delete command check"
  58. xpass $BOOTCONF -d $INITRD
  59. echo "File size check"
  60. new_size=$(wc -c < $INITRD)
  61. xpass test $new_size -eq $initrd_size
  62. echo "No error messge while applying"
  63. dd if=/dev/zero of=$INITRD bs=4096 count=1
  64. printf " \0\0\0 \0\0\0" >> $INITRD
  65. $BOOTCONF -a $TEMPCONF $INITRD > $OUTFILE 2>&1
  66. xfail grep -i "failed" $OUTFILE
  67. xfail grep -i "error" $OUTFILE
  68. echo "Max node number check"
  69. awk '
  70. BEGIN {
  71. for (i = 0; i < 26; i += 1)
  72. printf("%c\n", 65 + i % 26)
  73. for (i = 26; i < 8192; i += 1)
  74. printf("%c%c%c\n", 65 + i % 26, 65 + (i / 26) % 26, 65 + (i / 26 / 26))
  75. }
  76. ' > $TEMPCONF
  77. xpass $BOOTCONF -a $TEMPCONF $INITRD
  78. printf "badnode\n" >> $TEMPCONF
  79. xfail $BOOTCONF -a $TEMPCONF $INITRD
  80. echo "Max filesize check"
  81. # Max size is 32767 (including terminal byte)
  82. printf "data = \"" > $TEMPCONF
  83. dd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF
  84. printf "\"\n" >> $TEMPCONF
  85. xfail $BOOTCONF -a $TEMPCONF $INITRD
  86. dd if=$TEMPCONF of=$OUTFILE bs=1 count=32764
  87. cp $OUTFILE $TEMPCONF
  88. printf "\"\n" >> $TEMPCONF # add 2 bytes + terminal ('\"\n\0')
  89. xpass $BOOTCONF -a $TEMPCONF $INITRD
  90. echo "Adding same-key values"
  91. cat > $TEMPCONF << EOF
  92. key = bar, baz
  93. key += qux
  94. EOF
  95. echo > $INITRD
  96. xpass $BOOTCONF -a $TEMPCONF $INITRD
  97. $BOOTCONF $INITRD > $OUTFILE
  98. xpass grep -q "bar" $OUTFILE
  99. xpass grep -q "baz" $OUTFILE
  100. xpass grep -q "qux" $OUTFILE
  101. echo "Override same-key values"
  102. cat > $TEMPCONF << EOF
  103. key = bar, baz
  104. key := qux
  105. EOF
  106. echo > $INITRD
  107. xpass $BOOTCONF -a $TEMPCONF $INITRD
  108. $BOOTCONF $INITRD > $OUTFILE
  109. xfail grep -q "bar" $OUTFILE
  110. xfail grep -q "baz" $OUTFILE
  111. xpass grep -q "qux" $OUTFILE
  112. echo "Double/single quotes test"
  113. printf "key = '\"string\"';" > $TEMPCONF
  114. $BOOTCONF -a $TEMPCONF $INITRD
  115. $BOOTCONF $INITRD > $TEMPCONF
  116. cat $TEMPCONF
  117. xpass grep \'\"string\"\' $TEMPCONF
  118. echo "Repeat same-key tree"
  119. cat > $TEMPCONF << EOF
  120. foo
  121. bar
  122. foo { buz }
  123. EOF
  124. echo > $INITRD
  125. xpass $BOOTCONF -a $TEMPCONF $INITRD
  126. $BOOTCONF $INITRD > $OUTFILE
  127. xpass grep -q "bar" $OUTFILE
  128. echo "Remove/keep tailing spaces"
  129. cat > $TEMPCONF << EOF
  130. foo = val # comment
  131. bar = "val2 " # comment
  132. EOF
  133. echo > $INITRD
  134. xpass $BOOTCONF -a $TEMPCONF $INITRD
  135. $BOOTCONF $INITRD > $OUTFILE
  136. xfail grep -q 'val[[:space:]]' $OUTFILE
  137. xpass grep -q 'val2[[:space:]]' $OUTFILE
  138. echo "Showing correct line:column of no closing brace"
  139. cat > $TEMPCONF << EOF
  140. foo {
  141. bar {
  142. }
  143. EOF
  144. $BOOTCONF -a $TEMPCONF $INITRD 2> $OUTFILE
  145. xpass grep -q "1:1" $OUTFILE
  146. echo "=== expected failure cases ==="
  147. for i in samples/bad-* ; do
  148. xfail $BOOTCONF -a $i $INITRD
  149. done
  150. echo "=== expected success cases ==="
  151. for i in samples/good-* ; do
  152. xpass $BOOTCONF -a $i $INITRD
  153. x="samples/exp-"`basename $i`
  154. $BOOTCONF $i > $TEMPCONF
  155. xpass diff $x $TEMPCONF
  156. done
  157. echo
  158. echo "=== Summary ==="
  159. echo "# of Passed: $(expr $NO - $NG - 1)"
  160. echo "# of Failed: $NG"
  161. echo
  162. if [ $NG -eq 0 ]; then
  163. echo "All tests passed"
  164. else
  165. echo "$NG tests failed"
  166. exit 1
  167. fi