[LTP] [PATCH] commands/passwd: Added new testcase to test passwd

Xiao Yang yangx.jy@cn.fujitsu.com
Mon Aug 15 03:27:40 CEST 2016


Hi !

Thanks for your review, i will rewrite it as what you suggested.

Regards,
Xiao Yang

On 2016/08/09 22:55, Cyril Hrubis wrote:
> Hi!
>> +top_srcdir		?= ../../..
>> +
>> +include $(top_srcdir)/include/mk/env_pre.mk
>> +
>> +INSTALL_TARGETS		:= passwd01.sh check_passwd
>                                                   ^
> 						 This should better be
> 						 passwd01_check so that
> 						 it's clear what test
> 						 uses this expect
> 						 script
>
> And maybe we can use .exp suffix for expect script (there does not seems
> to be any well defined suffix for expect though).
>
>> +include $(top_srcdir)/include/mk/generic_leaf_target.mk
>> diff --git a/testcases/commands/passwd/check_passwd b/testcases/commands/passwd/check_passwd
>> new file mode 100755
>> index 0000000..1d27c7e
>> --- /dev/null
>> +++ b/testcases/commands/passwd/check_passwd
>> @@ -0,0 +1,67 @@
>> +#!/usr/bin/expect -f
>> +#
>> +# Copyright (c) 2016 Fujitsu Ltd.
>> +# Author: Xiao Yang<yangx.jy@cn.fujitsu.com>
>> +#
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 2 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
>> +# the GNU General Public License for more details.
>> +#
>> +# Test passwd command with some basic options.
>> +#
>> +
>> +set test_res 0
>> +set user_init [ lindex $argv 0 ]
>> +set cmd [ lindex $argv 1 ]
>> +set user_test [ lindex $argv 2 ]
>> +set passwd_test [ lindex $argv 3 ]
>> +
>> +set who_bf [ exec whoami ]
>> +if { $who_bf!=$user_init } {
>> +	send_user "ERROR: You must be not a root user before testing\n"
> This message is misleading, the code tesets for whoami != $argv[0] and
> not for $whoami != root.
>
>> +	exit 1
>> +}
>> +
>> +if { $cmd==2 } {
>> +        spawn /bin/su $user_test
>> +        expect "Password:" {
>> +                send "$passwd_test\n"
>> +                expect {
>> +			"su: Authentication failure" { set test_res 1 }
>> +			"su: incorrect password" { set test_res 1 }
> This is very fragile approach. This test will pass for instance when
> LC_ALL is set to something else than english.
>
> Looking at su manual page it should return 1 on autentication failure.
>
> We can instead just do:
>
> spawn su $test_usr -c true
>
> And fail the test if return value was not 0.
>
> We can avoid the whole expect script that way...
>
>> +		}
>> +        }
>> +}
>> +
>> +if { $cmd==1 } {
>> +	spawn /bin/su $user_test
>> +	expect "Password:" {
>> +		send "$passwd_test\n"
>> +		expect "$user_test" { set test_res 1 }
> So we fail the test if we get shell user@hostname: ?
>
> That is quite fragile as well.
>
> We should rather do the -c true here as well and fail the test if exit
> value was not 1.
>
>> +	}
>> +}
>> +
>> +if { $cmd==0 } {
>> +	spawn /bin/su $user_test
>> +	expect "$user_test" { set test_res 1 }
> Here as well.
>
>> +}
> This is whole if { $cmd == foo} is messy.
>
> Why can't we just create separate script for each test scenario?
>
>> +set who_af [ exec whoami ]
>> +if { $who_af!=$user_init } {
>> +        send_user "ERROR: You must be not a root user after testing\n"
>> +        exit 1
>> +}
> This is rather FAILURE than ERROR, right?
>
>> +if { $test_res==1 } {
>> +	send_user "test passes as expected\n"
>> +	exit 0
>> +} else {
>> +	send_user "test fails unexpectedly\n"
>> +	exit 1
>> +}
> The FAIL/PASS should rather be printed in the shell script using the
> tst_res API.
>
>> diff --git a/testcases/commands/passwd/passwd01.sh b/testcases/commands/passwd/passwd01.sh
>> new file mode 100755
>> index 0000000..8a304ce
>> --- /dev/null
>> +++ b/testcases/commands/passwd/passwd01.sh
>> @@ -0,0 +1,107 @@
>> +#!/bin/sh
>> +#
>> +# Copyright (c) 2016 Fujitsu Ltd.
>> +# Author: Xiao Yang<yangx.jy@cn.fujitsu.com>
>> +#
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 2 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
>> +# the GNU General Public License for more details.
>> +#
>> +# Test passwd command with some basic options.
>> +#
>> +
>> +TCID=passwd01.sh
>> +TST_TOTAL=11
>> +. test.sh
>> +
>> +setup()
>> +{
>> +	tst_require_root
>> +
>> +	tst_check_cmds useradd userdel passwd su expect
>> +
>> +	tst_tmpdir
>> +
>> +	TST_CLEANUP="cleanup"
>> +
>> +	useradd ltp_init
>> +	if [ $? -ne 0 ]&&  [ ! -d /home/ltp_test ]; then
>> +		tst_brkm TBROK "useradd failed"
>> +	fi
>> +
>> +	useradd ltp_test
>> +	if [ $? -ne 0 ]&&  [ ! -d /home/ltp_test ]; then
>> +		tst_brkm TBROK "useradd failed"
>> +	fi
>> +}
>> +
>> +cleanup()
>> +{
>> +	userdel -r ltp_init
>> +	if [ $? -ne 0 ]&&  [ -d /home/ltp_test ]; then
>> +		tst_brkm TBROK "userdel -r failed"
>> +	fi
>> +
>> +	userdel -r ltp_test
>> +	if [ $? -ne 0 ]&&  [ -d /home/ltp_test ]; then
>> +		tst_brkm TBROK "userdel -r failed"
>> +	fi
>> +
>> +	tst_rmdir
>> +}
>> +
>> +passwd_test()
>> +{
>> +	local pw_cmd="$1 $2 $3"
>> +	local opt="$2"
>> +	local check_opt="$4 $3 $5"
>> +
>> +	eval $pw_cmd>  temp1 2>&1
>> +	if [ $? -ne 0 ]; then
>> +		grep -q -E "unrecognized option|invalid option|unknown option" temp1
>> +		if [ $? -eq 0 ]; then
>> +			tst_resm TCONF "$pw_cmd not supported"
>> +		else
>> +			tst_resm TFAIL "$pw_cmd failed"
>> +		fi
>> +		return
>> +	fi
>> +
>> +	if [ $# -ge 4 ]; then
>> +		su ltp_init -c "check_passwd ltp_init $check_opt">  temp2 2>&1
>> +
>> +		if [ $? -eq 0 ]; then
>> +			grep -q "test passes as expected" temp2
>> +			if [ $? -ne 0 ]; then
>> +				tst_resm TFAIL "passwd failed with $opt option."
>> +				return
>> +			fi
>> +		else
>> +			tst_resm TFAIL "passwd failed with $opt option."
>> +			return
>> +		fi
> Why can't we just trust the exit value here and fail the test when it
> was anything else than 0?
>
>> +	fi
>> +
>> +	tst_resm TPASS "passwd passed with $opt option."
>> +}
>> +
>> +setup
>> +
>> +passwd_test "passwd" "-d" "ltp_test" "0"
>> +passwd_test "echo test | passwd" "--stdin" "ltp_test" "1" "test"
>> +passwd_test "passwd" "-l" "ltp_test" "2" "test"
>> +passwd_test "passwd" "-u" "ltp_test" "1" "test"
>> +passwd_test "passwd" "--lock" "ltp_test" "2" "test"
>> +passwd_test "passwd" "--unlock" "ltp_test" "1" "test"
>> +passwd_test "passwd" "--delete" "ltp_test" "0"
>> +passwd_test "passwd" "-S" "ltp_test"
>> +passwd_test "passwd" "--status" "ltp_test"
>> +passwd_test "passwd" "--help"
>> +passwd_test "passwd" "--usage"
>> +
>> +tst_exit
>> -- 
>> 1.8.3.1
>>
>>
>>
>>
>> -- 
>> Mailing list info: https://lists.linux.it/listinfo/ltp





More information about the ltp mailing list