test-bootconfig.sh 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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 ! ($@ && echo "\t\t[OK]"); then
  24. echo "\t\t[NG]"; NG=$((NG + 1))
  25. fi
  26. NO=$((NO + 1))
  27. }
  28. xfail() { # fail test command
  29. echo "test case $NO ($*)... "
  30. if ! (! $@ && echo "\t\t[OK]"); then
  31. echo "\t\t[NG]"; 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. echo "key = value;" > $TEMPCONF
  41. bconf_size=$(stat -c %s $TEMPCONF)
  42. initrd_size=$(stat -c %s $INITRD)
  43. echo "Apply command test"
  44. xpass $BOOTCONF -a $TEMPCONF $INITRD
  45. new_size=$(stat -c %s $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 $(stat -c %s $INITRD)
  57. echo "Delete command check"
  58. xpass $BOOTCONF -d $INITRD
  59. echo "File size check"
  60. new_size=$(stat -c %s $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. echo "badnode" >> $TEMPCONF
  79. xfail $BOOTCONF -a $TEMPCONF $INITRD
  80. echo "Max filesize check"
  81. # Max size is 32767 (including terminal byte)
  82. echo -n "data = \"" > $TEMPCONF
  83. dd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF
  84. echo "\"" >> $TEMPCONF
  85. xfail $BOOTCONF -a $TEMPCONF $INITRD
  86. truncate -s 32764 $TEMPCONF
  87. echo "\"" >> $TEMPCONF # add 2 bytes + terminal ('\"\n\0')
  88. xpass $BOOTCONF -a $TEMPCONF $INITRD
  89. echo "Adding same-key values"
  90. cat > $TEMPCONF << EOF
  91. key = bar, baz
  92. key += qux
  93. EOF
  94. echo > $INITRD
  95. xpass $BOOTCONF -a $TEMPCONF $INITRD
  96. $BOOTCONF $INITRD > $OUTFILE
  97. xpass grep -q "bar" $OUTFILE
  98. xpass grep -q "baz" $OUTFILE
  99. xpass grep -q "qux" $OUTFILE
  100. echo "Override same-key values"
  101. cat > $TEMPCONF << EOF
  102. key = bar, baz
  103. key := qux
  104. EOF
  105. echo > $INITRD
  106. xpass $BOOTCONF -a $TEMPCONF $INITRD
  107. $BOOTCONF $INITRD > $OUTFILE
  108. xfail grep -q "bar" $OUTFILE
  109. xfail grep -q "baz" $OUTFILE
  110. xpass grep -q "qux" $OUTFILE
  111. echo "Double/single quotes test"
  112. echo "key = '\"string\"';" > $TEMPCONF
  113. $BOOTCONF -a $TEMPCONF $INITRD
  114. $BOOTCONF $INITRD > $TEMPCONF
  115. cat $TEMPCONF
  116. xpass grep \'\"string\"\' $TEMPCONF
  117. echo "Repeat same-key tree"
  118. cat > $TEMPCONF << EOF
  119. foo
  120. bar
  121. foo { buz }
  122. EOF
  123. echo > $INITRD
  124. xpass $BOOTCONF -a $TEMPCONF $INITRD
  125. $BOOTCONF $INITRD > $OUTFILE
  126. xpass grep -q "bar" $OUTFILE
  127. echo "Remove/keep tailing spaces"
  128. cat > $TEMPCONF << EOF
  129. foo = val # comment
  130. bar = "val2 " # comment
  131. EOF
  132. echo > $INITRD
  133. xpass $BOOTCONF -a $TEMPCONF $INITRD
  134. $BOOTCONF $INITRD > $OUTFILE
  135. xfail grep -q val[[:space:]] $OUTFILE
  136. xpass grep -q val2[[:space:]] $OUTFILE
  137. echo "=== expected failure cases ==="
  138. for i in samples/bad-* ; do
  139. xfail $BOOTCONF -a $i $INITRD
  140. done
  141. echo "=== expected success cases ==="
  142. for i in samples/good-* ; do
  143. xpass $BOOTCONF -a $i $INITRD
  144. done
  145. echo
  146. echo "=== Summary ==="
  147. echo "# of Passed: $(expr $NO - $NG - 1)"
  148. echo "# of Failed: $NG"
  149. echo
  150. if [ $NG -eq 0 ]; then
  151. echo "All tests passed"
  152. else
  153. echo "$NG tests failed"
  154. exit 1
  155. fi