#!/bin/sh
#
# Check -e inject= syntax.
#
# Copyright (c) 2016-2017 Dmitry V. Levin <ldv@altlinux.org>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
#    derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

. "${srcdir=.}/init.sh"

#
# F
# F+
# F+S

fail_with()
{
	dump_log_and_fail_with \
		"strace -e inject=$* failed to handle an argument error properly"
}

for arg in '' , ,, ,,, : :: ::: \! \!, \!: \
	   invalid_syscall_name \
	   invalid_syscall_name:when=3 \
	   -1 \!-1 \
	   -1:when=4 \
	   -2 \
	   -2:when=5 \
	   32767 \!32767 \
	   32767:when=6 \
	   42 \
	   chdir \
	   chdir:42 \!chdir:42 \
	   chdir:42:when=7 \
	   chdir:invalid \
	   chdir:invalid:when=8 \
	   chdir:error= \
	   chdir:error=:when=10 \
	   chdir:error=invalid_error_name \
	   chdir:error=invalid_error_name:when=11 \
	   chdir:error=-1 \
	   chdir:error=-1:when=12 \
	   chdir:error=-2 \
	   chdir:error=-2:when=13 \
	   chdir:error=3+ \
	   chdir:error=3+:when=14 \
	   chdir:error=4096 \
	   chdir:error=4096:when=15 \
	   chdir:when=7:error=invalid_error_name \
	   chdir:when= \
	   chdir:when=:error=19 \
	   chdir:when=0 \
	   chdir:when=0:error=20 \
	   chdir:when=-1 \
	   chdir:when=-1:error=21 \
	   chdir:when=-2+ \
	   chdir:when=-2+:error=22 \
	   chdir:when=-3+0 \
	   chdir:when=-3+0:error=23 \
	   chdir:when=4- \
	   chdir:when=4-:error=24 \
	   chdir:when=5+- \
	   chdir:when=5+-:error=25 \
	   chdir:when=6++ \
	   chdir:when=6++:error=26 \
	   chdir:when=7+0 \
	   chdir:when=7+0:error=27 \
	   chdir:when=8+-1 \
	   chdir:when=8+-1:error=28 \
	   chdir:when=9+1+ \
	   chdir:when=9+1+:error=29 \
	   chdir:when=65536 \
	   chdir:when=65536:error=30 \
	   chdir:when=1+65536 \
	   chdir:when=1+65536:error=31 \
	   file,nonsense \
	   \!desc,nonsense \
	   chdir,nonsense \
	   \!chdir,nonsense \
	   1,nonsense \
	   \!1,nonsense \
	   chdir:retval=-1 \
	   chdir:signal=0 \
	   chdir:signal=129 \
	   chdir:retval=0:retval=1 \
	   chdir:error=1:error=2 \
	   chdir:retval=0:error=1 \
	   chdir:error=1:retval=0 \
	   chdir:retval=0:signal=1:error=1 \
	   ; do
	$STRACE -e inject="$arg" true 2> "$LOG" &&
		fail_with "$arg"
	LC_ALL=C grep -F 'invalid inject argument' < "$LOG" > /dev/null ||
		fail_with "$arg"
done

exit 0
