1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0-only
3
4echo "Boot config test script"
5
6BOOTCONF=./bootconfig
7INITRD=`mktemp initrd-XXXX`
8TEMPCONF=`mktemp temp-XXXX.bconf`
9NG=0
10
11cleanup() {
12  rm -f $INITRD $TEMPCONF $OUTFILE
13  exit $NG
14}
15
16trap cleanup EXIT TERM
17
18NO=1
19
20xpass() { # pass test command
21  echo "test case $NO ($3)... "
22  if ! ($@ && echo "\t\t[OK]"); then
23     echo "\t\t[NG]"; NG=$((NG + 1))
24  fi
25  NO=$((NO + 1))
26}
27
28xfail() { # 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
36echo "Basic command test"
37xpass $BOOTCONF $INITRD
38
39echo "Delete command should success without bootconfig"
40xpass $BOOTCONF -d $INITRD
41
42dd if=/dev/zero of=$INITRD bs=4096 count=1
43echo "key = value;" > $TEMPCONF
44bconf_size=$(stat -c %s $TEMPCONF)
45initrd_size=$(stat -c %s $INITRD)
46
47echo "Apply command test"
48xpass $BOOTCONF -a $TEMPCONF $INITRD
49new_size=$(stat -c %s $INITRD)
50
51echo "File size check"
52xpass test $new_size -eq $(expr $bconf_size + $initrd_size + 9 + 12)
53
54echo "Apply command repeat test"
55xpass $BOOTCONF -a $TEMPCONF $INITRD
56
57echo "File size check"
58xpass test $new_size -eq $(stat -c %s $INITRD)
59
60echo "Delete command check"
61xpass $BOOTCONF -d $INITRD
62
63echo "File size check"
64new_size=$(stat -c %s $INITRD)
65xpass test $new_size -eq $initrd_size
66
67echo "No error messge while applying"
68OUTFILE=`mktemp tempout-XXXX`
69dd if=/dev/zero of=$INITRD bs=4096 count=1
70printf " \0\0\0 \0\0\0" >> $INITRD
71$BOOTCONF -a $TEMPCONF $INITRD > $OUTFILE 2>&1
72xfail grep -i "failed" $OUTFILE
73xfail grep -i "error" $OUTFILE
74
75echo "Max node number check"
76
77echo -n > $TEMPCONF
78for i in `seq 1 1024` ; do
79   echo "node$i" >> $TEMPCONF
80done
81xpass $BOOTCONF -a $TEMPCONF $INITRD
82
83echo "badnode" >> $TEMPCONF
84xfail $BOOTCONF -a $TEMPCONF $INITRD
85
86echo "Max filesize check"
87
88# Max size is 32767 (including terminal byte)
89echo -n "data = \"" > $TEMPCONF
90dd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF
91echo "\"" >> $TEMPCONF
92xfail $BOOTCONF -a $TEMPCONF $INITRD
93
94truncate -s 32764 $TEMPCONF
95echo "\"" >> $TEMPCONF	# add 2 bytes + terminal ('\"\n\0')
96xpass $BOOTCONF -a $TEMPCONF $INITRD
97
98echo "Adding same-key values"
99cat > $TEMPCONF << EOF
100key = bar, baz
101key += qux
102EOF
103echo > $INITRD
104
105xpass $BOOTCONF -a $TEMPCONF $INITRD
106$BOOTCONF $INITRD > $OUTFILE
107xpass grep -q "bar" $OUTFILE
108xpass grep -q "baz" $OUTFILE
109xpass grep -q "qux" $OUTFILE
110
111echo "=== expected failure cases ==="
112for i in samples/bad-* ; do
113  xfail $BOOTCONF -a $i $INITRD
114done
115
116echo "=== expected success cases ==="
117for i in samples/good-* ; do
118  xpass $BOOTCONF -a $i $INITRD
119done
120
121echo
122if [ $NG -eq 0 ]; then
123	echo "All tests passed"
124else
125	echo "$NG tests failed"
126fi
127