test-bootconfig.sh 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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 ($3)... "
  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 ($3)... "
  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. echo -n > $TEMPCONF
  70. for i in `seq 1 1024` ; do
  71. echo "node$i" >> $TEMPCONF
  72. done
  73. xpass $BOOTCONF -a $TEMPCONF $INITRD
  74. echo "badnode" >> $TEMPCONF
  75. xfail $BOOTCONF -a $TEMPCONF $INITRD
  76. echo "Max filesize check"
  77. # Max size is 32767 (including terminal byte)
  78. echo -n "data = \"" > $TEMPCONF
  79. dd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF
  80. echo "\"" >> $TEMPCONF
  81. xfail $BOOTCONF -a $TEMPCONF $INITRD
  82. truncate -s 32764 $TEMPCONF
  83. echo "\"" >> $TEMPCONF # add 2 bytes + terminal ('\"\n\0')
  84. xpass $BOOTCONF -a $TEMPCONF $INITRD
  85. echo "Adding same-key values"
  86. cat > $TEMPCONF << EOF
  87. key = bar, baz
  88. key += qux
  89. EOF
  90. echo > $INITRD
  91. xpass $BOOTCONF -a $TEMPCONF $INITRD
  92. $BOOTCONF $INITRD > $OUTFILE
  93. xpass grep -q "bar" $OUTFILE
  94. xpass grep -q "baz" $OUTFILE
  95. xpass grep -q "qux" $OUTFILE
  96. echo "Override same-key values"
  97. cat > $TEMPCONF << EOF
  98. key = bar, baz
  99. key := qux
  100. EOF
  101. echo > $INITRD
  102. xpass $BOOTCONF -a $TEMPCONF $INITRD
  103. $BOOTCONF $INITRD > $OUTFILE
  104. xfail grep -q "bar" $OUTFILE
  105. xfail grep -q "baz" $OUTFILE
  106. xpass grep -q "qux" $OUTFILE
  107. echo "Double/single quotes test"
  108. echo "key = '\"string\"';" > $TEMPCONF
  109. $BOOTCONF -a $TEMPCONF $INITRD
  110. $BOOTCONF $INITRD > $TEMPCONF
  111. cat $TEMPCONF
  112. xpass grep \'\"string\"\' $TEMPCONF
  113. echo "Repeat same-key tree"
  114. cat > $TEMPCONF << EOF
  115. foo
  116. bar
  117. foo { buz }
  118. EOF
  119. echo > $INITRD
  120. xpass $BOOTCONF -a $TEMPCONF $INITRD
  121. $BOOTCONF $INITRD > $OUTFILE
  122. xpass grep -q "bar" $OUTFILE
  123. echo "Remove/keep tailing spaces"
  124. cat > $TEMPCONF << EOF
  125. foo = val # comment
  126. bar = "val2 " # comment
  127. EOF
  128. echo > $INITRD
  129. xpass $BOOTCONF -a $TEMPCONF $INITRD
  130. $BOOTCONF $INITRD > $OUTFILE
  131. xfail grep -q val[[:space:]] $OUTFILE
  132. xpass grep -q val2[[:space:]] $OUTFILE
  133. echo "=== expected failure cases ==="
  134. for i in samples/bad-* ; do
  135. xfail $BOOTCONF -a $i $INITRD
  136. done
  137. echo "=== expected success cases ==="
  138. for i in samples/good-* ; do
  139. xpass $BOOTCONF -a $i $INITRD
  140. done
  141. echo
  142. echo "=== Summary ==="
  143. echo "# of Passed: $(expr $NO - $NG - 1)"
  144. echo "# of Failed: $NG"
  145. echo
  146. if [ $NG -eq 0 ]; then
  147. echo "All tests passed"
  148. else
  149. echo "$NG tests failed"
  150. exit 1
  151. fi