#!/bin/sh

# Copyright 2008 by Denys Vlasenko <vda.linux@googlemail.com>
# Licensed under GPL v2, see file LICENSE for details.

. testing.sh

NO_REDUCE=65536
NO_TRIM=131072
GREEDY=262144

# testing "description" "command" "result" "infile" "stdin"

testing "mdev.conf" \
	"parse -n 4 -m 3 -f $GREEDY -" \
	"[sda][0:0][644][@echo @echo TEST]\n" \
	"-" \
	" sda 0:0 644 @echo @echo TEST # echo trap\n"

testing "notrim" \
	"parse -n 4 -m 3 -f $(($GREEDY+$NO_TRIM)) -" \
	"[][sda][0:0][644 @echo @echo TEST ]\n" \
	"-" \
	" sda 0:0 644 @echo @echo TEST \n"

FILE=__parse
cat >$FILE <<EOF
#
# Device         Point               System                       Options
#_______________________________________________________________
/dev/hdb3       /                       ext2                 defaults      1          0
   /dev/hdb1       /dosc               hpfs                 ro      1          0
 /dev/fd0          /dosa              vfat                  rw,user,noauto,nohide	 0		0
	/dev/fd1          /dosb              vfat                  rw,user,noauto,nohide	 0		0
#
 /dev/cdrom     /cdrom            iso9660          ro,user,noauto,nohide	 0		0
/dev/hdb5       /redhat            ext2                 rw,root,noauto,nohide	 0		0 #sssd
	/dev/hdb6       /win2home     ntfs                  rw,root,noauto,nohide	 0		0# ssdsd
/dev/hdb7       /win2skul        ntfs                  rw,root,noauto,nohide none	 0		0
none     /dev/pts           devpts             gid=5,mode=620                 0    0 
     none                /proc               proc                defaults     0          0
EOF

cat >$FILE.res <<EOF
[/dev/hdb3][/][ext2][defaults][1][0]
[/dev/hdb1][/dosc][hpfs][ro][1][0]
[/dev/fd0][/dosa][vfat][rw,user,noauto,nohide][0][0]
[/dev/fd1][/dosb][vfat][rw,user,noauto,nohide][0][0]
[/dev/cdrom][/cdrom][iso9660][ro,user,noauto,nohide][0][0]
[/dev/hdb5][/redhat][ext2][rw,root,noauto,nohide][0][0]
[/dev/hdb6][/win2home][ntfs][rw,root,noauto,nohide][0][0]
[/dev/hdb7][/win2skul][ntfs][rw,root,noauto,nohide][none][0]
[none][/dev/pts][devpts][gid=5,mode=620][0][0]
[none][/proc][proc][defaults][0][0]
EOF

testing "polluted fstab" \
	"parse -n 6 -m 6 $FILE" \
	"`cat $FILE.res`\n" \
	"" \
	""
cp ../examples/inittab $FILE
cat >$FILE.res <<EOF
[][][sysinit][/etc/init.d/rcS]
[][][askfirst][-/bin/sh]
[tty2][][askfirst][-/bin/sh]
[tty3][][askfirst][-/bin/sh]
[tty4][][askfirst][-/bin/sh]
[tty4][][respawn][/sbin/getty 38400 tty5]
[tty5][][respawn][/sbin/getty 38400 tty6]
[][][restart][/sbin/init]
[][][ctrlaltdel][/sbin/reboot]
[][][shutdown][/bin/umount -a -r]
[][][shutdown][/sbin/swapoff -a]
EOF

testing "inittab from examples" \
	"parse -n 4 -m 4 -f $(($GREEDY+$NO_TRIM)) -d'#:' $FILE" \
	"`cat $FILE.res`\n" \
	"" \
	""

cp ../examples/udhcp/udhcpd.conf $FILE
cat >$FILE.res <<EOF
[start][192.168.0.20]
[end][192.168.0.254]
[interface][eth0]
[opt][dns][192.168.10.2][192.168.10.10]
[option][subnet][255.255.255.0]
[opt][router][192.168.10.2]
[opt][wins][192.168.10.10]
[option][dns][129.219.13.81]
[option][domain][local]
[option][lease][864000]
EOF

testing "udhcpd.conf from examples" \
	"parse -n 127 $FILE" \
	"`cat $FILE.res`\n" \
	"" \
	""

rm -f $FILE $FILE.res

exit $FAILCOUNT
